mirror of
https://github.com/torvalds/linux.git
synced 2026-11-06 21:58:01 +01:00
ACPICA: Initialize parser_state.aml_end in acpi_install_method()
In AcpiInstallMethod(), the local ParserState is stack-allocated and
only ParserState.Aml was initialized. Parser helpers called by this path
read ParserState.AmlEnd for bounds checking: AcpiPsPeekOpcode() reads it
before validating the first AML opcode, and AcpiPsGetNextPackageEnd()
reads it indirectly via AcpiPsGetNextPackageLength(). The subsequent
package-limit check also compares against ParserState.AmlEnd. Because
AmlEnd was never set, these checks operated on an uninitialized value,
which Coverity flagged as an uninitialized read (CID 1684785) and which
could lead to incorrect parser bounds decisions.
Coverity report:
*** CID 1684785: Memory - illegal accesses (UNINIT)
/src/acpica/source/components/namespace/nsxfname.c: 712 in AcpiInstallMethod()
ParserState.Aml += AcpiPsGetOpcodeSize (Opcode);
>>> CID 1684785: Memory - illegal accesses (UNINIT)
>>> Using uninitialized value "ParserState.AmlEnd" when calling
"AcpiPsGetNextPackageEnd".
ParserState.PkgEnd = AcpiPsGetNextPackageEnd (&ParserState);
Initialize ParserState.AmlEnd to the end of the table
(Buffer + Table->Length) so the parser bounds checks operate on a valid
limit.
Link: 19429ef91e
Fixes: bdc3575401 ("ACPICA: add boundary checks in two places")
Signed-off-by: Ivan Hu <ivan.hu@canonical.com>
Signed-off-by: Maciej Wieczor-Retman <maciej.wieczor-retman@intel.com>
Signed-off-by: Leonard Lausen <leonard@lausen.nl>
[ rjw: Subject tweaks ]
Link: https://patch.msgid.link/20261019145421.47181-2-leonard@lausen.nl
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
This commit is contained in:
parent
7be4bc52fd
commit
ec696f3477
|
|
@ -503,6 +503,7 @@ acpi_status acpi_install_method(u8 *buffer)
|
|||
/* First AML opcode in the table must be a control method */
|
||||
|
||||
parser_state.aml = buffer + sizeof(struct acpi_table_header);
|
||||
parser_state.aml_end = buffer + table->length;
|
||||
opcode = acpi_ps_peek_opcode(&parser_state);
|
||||
if (opcode != AML_METHOD_OP) {
|
||||
return (AE_BAD_PARAMETER);
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user