diff options
Diffstat (limited to 'source/components/executer/exfldio.c')
| -rw-r--r-- | source/components/executer/exfldio.c | 13 | 
1 files changed, 12 insertions, 1 deletions
diff --git a/source/components/executer/exfldio.c b/source/components/executer/exfldio.c index 24636ab3e0fc..85da123903da 100644 --- a/source/components/executer/exfldio.c +++ b/source/components/executer/exfldio.c @@ -766,7 +766,18 @@ AcpiExExtractFromField (      if ((ObjDesc->CommonField.StartFieldBitOffset == 0) &&          (ObjDesc->CommonField.BitLength == AccessBitWidth))      { -        Status = AcpiExFieldDatumIo (ObjDesc, 0, Buffer, ACPI_READ); +        if (BufferLength >= sizeof (UINT64)) +        { +            Status = AcpiExFieldDatumIo (ObjDesc, 0, Buffer, ACPI_READ); +        } +        else +        { +            /* Use RawDatum (UINT64) to handle buffers < 64 bits */ + +            Status = AcpiExFieldDatumIo (ObjDesc, 0, &RawDatum, ACPI_READ); +            ACPI_MEMCPY (Buffer, &RawDatum, BufferLength); +        } +          return_ACPI_STATUS (Status);      }  | 
