mirror of
https://github.com/tianocore/edk2
synced 2026-08-27 00:23:19 -04:00
The original implementation of AcpiAmlObjectUpdateInteger had a critical
bug when updating integer objects that were encoded with AML_ZERO_OP(0x00)
or AML_ONE_OP(0x01), which are 1-byte optimized encodings.
When the caller tried to update such an object to a value other than 0
or 1, the code would:
1. Overwrite the opcode byte with the new value's LSB
2. This changed the opcode itself, e.g. 0x0B becomes AML_WORD_PREFIX
3. Subsequent AML bytes (name segments of following objects) get
misinterpreted as integer data
4. Result: silent AML structure is silently corrupted, causing the OS to
fail parsing ACPI tables and eventually crash.
The fix:
1. Only allow 0 -> 0 or 1 updates using the original 1-byte encoding
2. For any other value, explicitly fail with a diagnostic
3. Provide clear debug instructions on how to fix the ASL source
Reviewed-by: jie.fu <jie.fu@cixtech.com>
Signed-off-by: Johnny.Fan <Johnny.Fan@cixtech.com>
|
||
|---|---|---|
| .. | ||
| AcpiLib | ||
| AndroidBootImgLib | ||
| CoherentDmaLib | ||
| DebugAgentTimerLibNull | ||
| DxeDtPlatformDtbLoaderLibDefault | ||
| GdbSerialDebugPortLib | ||
| GdbSerialLib | ||
| NonCoherentDmaLib | ||
| NorFlashInfoLib | ||
| NvVarStoreFormattedLib | ||
| PlatformHasAcpiLib | ||
| PrePiExtractGuidedSectionLib | ||
| PrePiHobLib | ||
| PrePiLib | ||
| PrePiMemoryAllocationLib | ||
| TemplateRealTimeClockLib | ||
| TimeBaseLib | ||
| VirtualRealTimeClockLib | ||