Re: [PATCH v13 09/19] x86: Secure Launch kernel early boot stub

From: Andrew Cooper
Date: Tue Apr 15 2025 - 18:13:09 EST


On 11/04/2025 10:40 pm, Sean Christopherson wrote:
> On Thu, Apr 10, 2025, Ross Philipson wrote:
>> + * instruction can return for a number of reasons. Test to see if it returned
>> + * because the monitor was written to.
>> + */
>> + monitor
>> +
>> +1:
>> + mfence
>> + mwait
>> + movl (%eax), %edx
> Why load the value into EDX? At a glance, the value is never consumed.
>
>> + testl %edx, %edx
>> + jz 1b
> This usage of MONITOR/MWAIT is flawed. The monitor needs to be re-armed in each
> loop, otherwise mwait will be a glorified nop.
>
> More importantly, the exit condition needs to be checked before monitor,

after monitor and before mwait.

But yes, the prior logic was definitely wonky.

> even on
> the first iteration. In the (probably extremely unlikely) scenario that the write
> to wake the CPU arrives before MONITOR is executed, this CPU may get stuck waiting
> indefinitely.
>
> E.g. something like:
>
>
> 1:
> monitor
> cmpl (%eax), 0

$0

Luckily, this will fail to assemble, rather than dereferencing 0.

~Andrew

> jnz 2f
> mwait
> jmp 1b
> 2: