Comment 4 for bug 1942215

Revision history for this message
Colin Ian King (colin-king) wrote :

Original source ./drivers/acpi/acpica/dswexec.c in acpi_ds_exec_end_op

                if (ACPI_SUCCESS(status)) {
                        /*
                         * Dispatch the request to the appropriate interpreter handler
                         * routine. There is one routine per opcode "type" based upon the
                         * number of opcode arguments and return type.
                         */
                        status =
                            acpi_gbl_op_type_dispatch[op_type] (walk_state);
                } else {

.. disassembled:

                if (!(walk_state->op_info->flags & AML_NO_OPERAND_RESOLVE)) {
 683: 48 8b 83 10 04 00 00 mov 0x410(%rbx),%rax
 68a: f6 40 11 40 testb $0x40,0x11(%rax)
 68e: 74 21 je 6b1 <acpi_ds_exec_end_op+0x177>
                         * Dispatch the request to the appropriate interpreter handler
                         * routine. There is one routine per opcode "type" based upon the
                         * number of opcode arguments and return type.
                         */
                        status =
                            acpi_gbl_op_type_dispatch[op_type] (walk_state);
 690: 44 89 f0 mov %r14d,%eax
 693: 41 80 fe 0b cmp $0xb,%r14b
 697: 77 28 ja 6c1 <acpi_ds_exec_end_op+0x187>
 699: 48 8b 04 c5 00 00 00 mov 0x0(,%rax,8),%rax
 6a0: 00
 6a1: 48 89 df mov %rbx,%rdi
 6a4: e8 00 00 00 00 call 6a9 <acpi_ds_exec_end_op+0x16f>
 6a9: 41 89 c4 mov %eax,%r12d
 6ac: e9 8f 00 00 00 jmp 740 <acpi_ds_exec_end_op+0x206>
                                                            [walk_state->
 6b1: 0f b6 43 0d movzbl 0xd(%rbx),%eax
                                                             num_operands - 1]),
 6b5: 8d 50 ff lea -0x1(%rax),%edx
                                                            [walk_state->
 6b8: 48 63 d2 movslq %edx,%rdx
 6bb: 48 83 fa 09 cmp $0x9,%rdx
 6bf: 76 02 jbe 6c3 <acpi_ds_exec_end_op+0x189>
 6c1: 0f 0b ud2

^^ crash on 0f 0b ud2 instruction

From https://mudongliang.github.io/x86/html/file_module_x86_id_318.html ud2 does:

"Generates an invalid opcode. This instruction is provided for software testing to explicitly generate an invalid opcode. The opcode for this instruction is reserved for this purpose.

Other than raising the invalid opcode exception, this instruction is the same as the NOP instruction."