Recientemente, muchas placas base compatibles con skylake o kabylake obtuvieron una actualización de uefi descrita como actualización de seguridad de microcódigo de cpu para una errata de Intel específica, descrita por Intel como:
Los bucles cortos que utilizan los registros AH / BH / CH / DH pueden causar un comportamiento impredecible del sistema.
En condiciones de microarquitectura complejas, los bucles cortos de menos de 64 instrucciones que utilizan registros AH, BH, CH o DH, así como su registro más amplio correspondiente (por ejemplo, RAX, EAX o AX para AH) pueden causar un comportamiento impredecible del sistema. Esto solo puede suceder cuando ambos procesadores lógicos en el mismo procesador físico están activos.
Intel emite erratas frecuentes en la CPU que pueden causar la denegación de servicio, pero en este caso, el fabricante no creó una actualización específica de uefi para cada una de ellas.
Por supuesto, probé el siguiente código en varios núcleos lógicos que no bloquean nada (no entiendo si los 8 registros deben estar involucrados para desencadenar el error o solo uno de ellos es suficiente) :
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
Entonces, unpredictable system behavior
implica la ejecución remota de código (por ejemplo, porque tales bucles propagarían el cambio de registro al otro hilo que se ejecuta en el mismo núcleo) ?
Además, ¿qué tipo de bucles pueden desencadenar el error? ¿La simple modificación de algunos de los registros involucrados en menos de 64 instrucciones desencadena el error? ¿Los bucles deben ser diferentes (me refiero a que los subprocesos no deberían usar el mismo código) ?
Al menos puede ser posible tener un código Ocaml de ejemplo que pueda desencadenar el error ?
¿Cómo saber si se utiliza un microcódigo vulnerable al ejecutar qemu-kvm? (qemu -cpu host oculta el número de revisión del microcódigo)