Recentemente, molte schede madri che supportano skylake o kabylake, hanno ricevuto un aggiornamento uefi descritto come aggiornamento per la sicurezza del microcodice cpu per un errore specifico di Intel, descritto da Intel come:
Short Loops Which Use AH/BH/CH/DH Registers May Cause Unpredictable System Behavior.
Under complex micro-architectural conditions, short loops of less than 64 instructions that use AH, BH, CH or DH registers as well as their corresponding wider register (e.g. RAX, EAX or AX for AH) may cause unpredictable system behavior. This can only happen when both logical processors on the same physical processor are active.
Intel emette errate frequenti della cpu che possono causare denial of service, ma in questo caso, il produttore non ha creato un aggiornamento uefi specifico per ognuna di esse.
Certo, ho provato il seguente codice su diversi core logici che non bloccano nulla (non capisco se tutti e 8 i registri devono essere coinvolti per far scattare il bug o solo uno di essi è sufficiente) :
48 ba ff 00 00 00 04 movabs $0x4000000ff,%rdx
00 00 00
.L5:
48 89 d0 movq %rdx,%rax
48 2d fe 00 00 00 subq $0xfe,%rax
08 f4 orb %dh,%ah
48 89 c3 movq %rax,%rbx
48 81 eb fe 00 00 00 subq $0xfe,%rbx
08 e7 orb %ah,%bh
48 89 d9 movq %rbx,%rcx
48 81 e9 fe 00 00 00 subb $0xfe,%rcx
08 fd orb %bh,%ch
48 89 ca movq %rcx,%rdx
48 81 ea fe 00 00 00 subq $0xfe,%rdx
08 ee orb %ch,%dh
48 85 cb test %rcx,%rbx
75 cc jne .L5
movq %rcx, %rdx
movq %rbx, %rax
movq %rax, %rsi
leaq .LC0(%rip), %rdi
movl $0, %eax
call printf@PLT
Quindi unpredictable system behavior
implica l'esecuzione di codice remoto (ad esempio perché tali loop propagano la modifica del registro all'altro thread in esecuzione sullo stesso core) ?
Inoltre, che tipo di loop può attivare il bug? La semplice modifica di alcuni dei registri coinvolti in meno di 64 istruzioni attiva l'errore? I loop devono essere diversi (voglio dire che i thread non dovrebbero usare lo stesso codice) ?
Almeno può essere possibile avere un codice Ocaml di esempio che può attivare il bug ?
Come sapere se un microcode vulnerabile viene utilizzato durante l'esecuzione di qemu-kvm? (qemu -cpu host nasconde il numero di revisione del microcode)