mirror of
https://github.com/edk2-porting/linux-next.git
synced 2024-12-21 19:53:59 +08:00
ACPICA: Disassembler: skip parsing of incorrect external declarations
ACPICA commit ed25461901d34120067b07ec280af30abc0458f1 Link: https://github.com/acpica/acpica/commit/ed254619 Signed-off-by: Erik Schmauss <erik.schmauss@intel.com> Signed-off-by: Bob Moore <robert.moore@intel.com> Signed-off-by: Lv Zheng <lv.zheng@intel.com> Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
This commit is contained in:
parent
4e6cbe5689
commit
3f20ea15f0
@ -359,6 +359,32 @@ acpi_ps_create_op(struct acpi_walk_state *walk_state,
|
|||||||
acpi_ps_build_named_op(walk_state, aml_op_start, op,
|
acpi_ps_build_named_op(walk_state, aml_op_start, op,
|
||||||
&named_op);
|
&named_op);
|
||||||
acpi_ps_free_op(op);
|
acpi_ps_free_op(op);
|
||||||
|
|
||||||
|
#ifdef ACPI_ASL_COMPILER
|
||||||
|
if (acpi_gbl_disasm_flag
|
||||||
|
&& walk_state->opcode == AML_EXTERNAL_OP
|
||||||
|
&& status == AE_NOT_FOUND) {
|
||||||
|
/*
|
||||||
|
* If parsing of AML_EXTERNAL_OP's name path fails, then skip
|
||||||
|
* past this opcode and keep parsing. This is a much better
|
||||||
|
* alternative than to abort the entire disassembler. At this
|
||||||
|
* point, the parser_state is at the end of the namepath of the
|
||||||
|
* external declaration opcode. Setting walk_state->Aml to
|
||||||
|
* walk_state->parser_state.Aml + 2 moves increments the
|
||||||
|
* walk_state->Aml past the object type and the paramcount of the
|
||||||
|
* external opcode. For the error message, only print the AML
|
||||||
|
* offset. We could attempt to print the name but this may cause
|
||||||
|
* a segmentation fault when printing the namepath because the
|
||||||
|
* AML may be incorrect.
|
||||||
|
*/
|
||||||
|
acpi_os_printf
|
||||||
|
("// Invalid external declaration at AML offset 0x%x.\n",
|
||||||
|
walk_state->aml -
|
||||||
|
walk_state->parser_state.aml_start);
|
||||||
|
walk_state->aml = walk_state->parser_state.aml + 2;
|
||||||
|
return_ACPI_STATUS(AE_CTRL_PARSE_CONTINUE);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
if (ACPI_FAILURE(status)) {
|
if (ACPI_FAILURE(status)) {
|
||||||
return_ACPI_STATUS(status);
|
return_ACPI_STATUS(status);
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user