1 Index: acpica-unix2-20170303/source/common/acfileio.c
2 ===================================================================
3 --- acpica-unix2-20170303.orig/source/common/acfileio.c
4 +++ acpica-unix2-20170303/source/common/acfileio.c
5 @@ -250,6 +250,7 @@ AcGetOneTableFromFile (
6 ACPI_TABLE_HEADER *Table;
13 @@ -289,7 +290,8 @@ AcGetOneTableFromFile (
15 /* Allocate a buffer for the entire table */
17 - Table = AcpiOsAllocate ((ACPI_SIZE) TableHeader.Length);
18 + ACPI_MOVE_32_TO_32(&TableLen, &TableHeader.Length);
19 + Table = AcpiOsAllocate ((ACPI_SIZE) TableLen);
22 return (AE_NO_MEMORY);
23 @@ -299,8 +301,8 @@ AcGetOneTableFromFile (
25 fseek (File, TableOffset, SEEK_SET);
27 - Count = fread (Table, 1, TableHeader.Length, File);
28 - if (Count != (INT32) TableHeader.Length)
29 + Count = fread (Table, 1, TableLen, File);
30 + if (Count != (INT32) TableLen)
34 @@ -308,7 +310,7 @@ AcGetOneTableFromFile (
36 /* Validate the checksum (just issue a warning) */
38 - Status = AcpiTbVerifyChecksum (Table, TableHeader.Length);
39 + Status = AcpiTbVerifyChecksum (Table, TableLen);
40 if (ACPI_FAILURE (Status))
42 Status = AcCheckTextModeCorruption (Table);
43 @@ -400,6 +402,7 @@ AcValidateTableHeader (
51 @@ -431,11 +434,12 @@ AcValidateTableHeader (
52 /* Validate table length against bytes remaining in the file */
54 FileSize = CmGetFileSize (File);
55 - if (TableHeader.Length > (UINT32) (FileSize - TableOffset))
56 + ACPI_MOVE_32_TO_32(&TableLength, &TableHeader.Length);
57 + if (TableLength > (UINT32) (FileSize - TableOffset))
59 fprintf (stderr, "Table [%4.4s] is too long for file - "
60 "needs: 0x%.2X, remaining in file: 0x%.2X\n",
61 - TableHeader.Signature, TableHeader.Length,
62 + TableHeader.Signature, TableLength,
63 (UINT32) (FileSize - TableOffset));
64 return (AE_BAD_HEADER);
66 Index: acpica-unix2-20170303/source/common/dmtable.c
67 ===================================================================
68 --- acpica-unix2-20170303.orig/source/common/dmtable.c
69 +++ acpica-unix2-20170303/source/common/dmtable.c
70 @@ -499,7 +499,7 @@ AcpiDmDumpDataTable (
72 if (ACPI_COMPARE_NAME (Table->Signature, ACPI_SIG_FACS))
74 - Length = Table->Length;
75 + ACPI_MOVE_32_TO_32(&Length, &Table->Length);
76 Status = AcpiDmDumpTable (Length, 0, Table, 0, AcpiDmTableInfoFacs);
77 if (ACPI_FAILURE (Status))
79 @@ -513,13 +513,14 @@ AcpiDmDumpDataTable (
80 else if (ACPI_COMPARE_NAME (Table->Signature, ACPI_SIG_S3PT))
82 Length = AcpiDmDumpS3pt (Table);
83 + ACPI_MOVE_32_TO_32(&Length, &Table->Length);
88 * All other tables must use the common ACPI table header, dump it now
90 - Length = Table->Length;
91 + ACPI_MOVE_32_TO_32(&Length, &Table->Length);
92 Status = AcpiDmDumpTable (Length, 0, Table, 0, AcpiDmTableInfoHeader);
93 if (ACPI_FAILURE (Status))
95 @@ -730,6 +731,7 @@ AcpiDmDumpTable (
96 BOOLEAN LastOutputBlankLine = FALSE;
103 @@ -1097,8 +1099,9 @@ AcpiDmDumpTable (
104 /* Checksum, display and validate */
106 AcpiOsPrintf ("%2.2X", *Target);
107 - Temp8 = AcpiDmGenerateChecksum (Table,
108 - ACPI_CAST_PTR (ACPI_TABLE_HEADER, Table)->Length,
109 + ACPI_MOVE_32_TO_32(&Temp32,
110 + &ACPI_CAST_PTR (ACPI_TABLE_HEADER, Table)->Length);
111 + Temp8 = AcpiDmGenerateChecksum (Table, Temp32,
112 ACPI_CAST_PTR (ACPI_TABLE_HEADER, Table)->Checksum);
114 if (Temp8 != ACPI_CAST_PTR (ACPI_TABLE_HEADER, Table)->Checksum)
115 @@ -1163,14 +1166,14 @@ AcpiDmDumpTable (
117 /* DMAR subtable types */
119 - Temp16 = ACPI_GET16 (Target);
120 + Val16 = ACPI_GET16 (Target);
121 + ACPI_MOVE_16_TO_16(&Temp16, &Val16);
122 if (Temp16 > ACPI_DMAR_TYPE_RESERVED)
124 Temp16 = ACPI_DMAR_TYPE_RESERVED;
127 - AcpiOsPrintf (UINT16_FORMAT, ACPI_GET16 (Target),
128 - AcpiDmDmarSubnames[Temp16]);
129 + AcpiOsPrintf (UINT16_FORMAT, Temp16, AcpiDmDmarSubnames[Temp16]);
132 case ACPI_DMT_DMAR_SCOPE:
133 @@ -1261,14 +1264,14 @@ AcpiDmDumpTable (
135 /* HEST subtable types */
137 - Temp16 = ACPI_GET16 (Target);
138 + Val16 = ACPI_GET16 (Target);
139 + ACPI_MOVE_16_TO_16(&Temp16, &Val16);
140 if (Temp16 > ACPI_HEST_TYPE_RESERVED)
142 Temp16 = ACPI_HEST_TYPE_RESERVED;
145 - AcpiOsPrintf (UINT16_FORMAT, ACPI_GET16 (Target),
146 - AcpiDmHestSubnames[Temp16]);
147 + AcpiOsPrintf (UINT16_FORMAT, Temp16, AcpiDmHestSubnames[Temp16]);
150 case ACPI_DMT_HESTNTFY:
151 @@ -1334,13 +1337,14 @@ AcpiDmDumpTable (
153 /* NFIT subtable types */
155 - Temp16 = ACPI_GET16 (Target);
156 + Val16 = ACPI_GET16 (Target);
157 + ACPI_MOVE_16_TO_16(&Temp16, &Val16);
158 if (Temp16 > ACPI_NFIT_TYPE_RESERVED)
160 Temp16 = ACPI_NFIT_TYPE_RESERVED;
163 - AcpiOsPrintf (UINT16_FORMAT, ACPI_GET16 (Target),
164 + AcpiOsPrintf (UINT16_FORMAT, Temp16,
165 AcpiDmNfitSubnames[Temp16]);
168 Index: acpica-unix2-20170303/source/common/dmtables.c
169 ===================================================================
170 --- acpica-unix2-20170303.orig/source/common/dmtables.c
171 +++ acpica-unix2-20170303/source/common/dmtables.c
172 @@ -142,7 +142,9 @@ AdCreateTableHeader (
173 ACPI_TABLE_HEADER *Table)
179 + UINT32 CompilerRev;
181 /* Reset globals for External statements */
183 @@ -154,9 +156,10 @@ AdCreateTableHeader (
185 AdDisassemblerHeader (Filename, ACPI_IS_AML_TABLE);
187 + ACPI_MOVE_32_TO_32(&TableLen, &Table->Length);
188 AcpiOsPrintf (" * Original Table Header:\n");
189 AcpiOsPrintf (" * Signature \"%4.4s\"\n", Table->Signature);
190 - AcpiOsPrintf (" * Length 0x%8.8X (%u)\n", Table->Length, Table->Length);
191 + AcpiOsPrintf (" * Length 0x%8.8X (%u)\n", TableLen, TableLen);
193 /* Print and validate the revision */
195 @@ -188,7 +191,7 @@ AdCreateTableHeader (
197 AcpiOsPrintf ("\n * Checksum 0x%2.2X", Table->Checksum);
199 - Checksum = AcpiTbChecksum (ACPI_CAST_PTR (UINT8, Table), Table->Length);
200 + Checksum = AcpiTbChecksum (ACPI_CAST_PTR (UINT8, Table), TableLen);
203 AcpiOsPrintf (" **** Incorrect checksum, should be 0x%2.2X",
204 @@ -198,9 +201,11 @@ AdCreateTableHeader (
206 AcpiOsPrintf (" * OEM ID \"%.6s\"\n", Table->OemId);
207 AcpiOsPrintf (" * OEM Table ID \"%.8s\"\n", Table->OemTableId);
208 - AcpiOsPrintf (" * OEM Revision 0x%8.8X (%u)\n", Table->OemRevision, Table->OemRevision);
209 + ACPI_MOVE_32_TO_32(&OemRev, &Table->OemRevision);
210 + AcpiOsPrintf (" * OEM Revision 0x%8.8X (%u)\n", OemRev, OemRev);
211 AcpiOsPrintf (" * Compiler ID \"%.4s\"\n", Table->AslCompilerId);
212 - AcpiOsPrintf (" * Compiler Version 0x%8.8X (%u)\n", Table->AslCompilerRevision, Table->AslCompilerRevision);
213 + ACPI_MOVE_32_TO_32(&CompilerRev, &Table->AslCompilerRevision);
214 + AcpiOsPrintf (" * Compiler Version 0x%8.8X (%u)\n", CompilerRev, CompilerRev);
215 AcpiOsPrintf (" */\n");
218 @@ -221,7 +226,7 @@ AdCreateTableHeader (
220 "DefinitionBlock (\"\", \"%4.4s\", %hu, \"%.6s\", \"%.8s\", 0x%8.8X)\n",
221 Table->Signature, Table->Revision,
222 - Table->OemId, Table->OemTableId, Table->OemRevision);
223 + Table->OemId, Table->OemTableId, OemRev);
227 @@ -396,7 +401,8 @@ AdParseTable (
229 fprintf (stderr, "Pass 1 parse of [%4.4s]\n", (char *) Table->Signature);
231 - AmlLength = Table->Length - sizeof (ACPI_TABLE_HEADER);
232 + ACPI_MOVE_32_TO_32(&AmlLength, &Table->Length);
233 + AmlLength -= sizeof (ACPI_TABLE_HEADER);
234 AmlStart = ((UINT8 *) Table + sizeof (ACPI_TABLE_HEADER));
235 ASL_CV_INIT_FILETREE(Table, AmlStart, AmlLength);
237 Index: acpica-unix2-20170303/source/common/dmtbdump.c
238 ===================================================================
239 --- acpica-unix2-20170303.orig/source/common/dmtbdump.c
240 +++ acpica-unix2-20170303/source/common/dmtbdump.c
241 @@ -277,6 +277,8 @@ AcpiDmDumpRsdt (
249 /* Point to start of table pointer array */
250 @@ -286,12 +288,14 @@ AcpiDmDumpRsdt (
252 /* RSDT uses 32-bit pointers */
254 - Entries = (Table->Length - sizeof (ACPI_TABLE_HEADER)) / sizeof (UINT32);
255 + ACPI_MOVE_32_TO_32(&Length, &Table->Length);
256 + Entries = (Length - sizeof (ACPI_TABLE_HEADER)) / sizeof (UINT32);
258 for (i = 0; i < Entries; i++)
260 AcpiDmLineHeader2 (Offset, sizeof (UINT32), "ACPI Table Address", i);
261 - AcpiOsPrintf ("%8.8X\n", Array[i]);
262 + ACPI_MOVE_32_TO_32(&Address, &Array[i]);
263 + AcpiOsPrintf ("%8.8X\n", Address);
264 Offset += sizeof (UINT32);
267 @@ -317,6 +321,8 @@ AcpiDmDumpXsdt (
275 /* Point to start of table pointer array */
276 @@ -326,12 +332,14 @@ AcpiDmDumpXsdt (
278 /* XSDT uses 64-bit pointers */
280 - Entries = (Table->Length - sizeof (ACPI_TABLE_HEADER)) / sizeof (UINT64);
281 + ACPI_MOVE_32_TO_32(&Length, &Table->Length);
282 + Entries = (Length - sizeof (ACPI_TABLE_HEADER)) / sizeof (UINT64);
284 for (i = 0; i < Entries; i++)
286 AcpiDmLineHeader2 (Offset, sizeof (UINT64), "ACPI Table Address", i);
287 - AcpiOsPrintf ("%8.8X%8.8X\n", ACPI_FORMAT_UINT64 (Array[i]));
288 + ACPI_MOVE_64_TO_64(&Address, &Array[i]);
289 + AcpiOsPrintf ("%8.8X%8.8X\n", ACPI_FORMAT_UINT64 (Address));
290 Offset += sizeof (UINT64);
293 @@ -524,17 +532,21 @@ AcpiDmDumpAsf (
294 UINT32 DataOffset = 0;
301 /* No main table, only subtables */
303 + ACPI_MOVE_32_TO_32(&Len, &Table->Length);
304 SubTable = ACPI_ADD_PTR (ACPI_ASF_INFO, Table, Offset);
305 - while (Offset < Table->Length)
306 + while (Offset < Len)
308 /* Common subtable header */
310 - Status = AcpiDmDumpTable (Table->Length, Offset, SubTable,
311 - SubTable->Header.Length, AcpiDmTableInfoAsfHdr);
312 + ACPI_MOVE_16_TO_16(&SubLen, &SubTable->Header.Length);
313 + Status = AcpiDmDumpTable (Len, Offset, SubTable,
314 + SubLen, AcpiDmTableInfoAsfHdr);
315 if (ACPI_FAILURE (Status))
318 @@ -591,8 +603,7 @@ AcpiDmDumpAsf (
322 - Status = AcpiDmDumpTable (Table->Length, Offset, SubTable,
323 - SubTable->Header.Length, InfoTable);
324 + Status = AcpiDmDumpTable (Len, Offset, SubTable, SubLen, InfoTable);
325 if (ACPI_FAILURE (Status))
328 @@ -608,7 +619,7 @@ AcpiDmDumpAsf (
329 for (i = 0; i < DataCount; i++)
332 - Status = AcpiDmDumpTable (Table->Length, DataOffset,
333 + Status = AcpiDmDumpTable (Len, DataOffset,
334 DataTable, DataLength, DataInfoTable);
335 if (ACPI_FAILURE (Status))
337 @@ -654,15 +665,14 @@ AcpiDmDumpAsf (
339 /* Point to next subtable */
341 - if (!SubTable->Header.Length)
344 AcpiOsPrintf ("Invalid zero subtable header length\n");
348 - Offset += SubTable->Header.Length;
349 - SubTable = ACPI_ADD_PTR (ACPI_ASF_INFO, SubTable,
350 - SubTable->Header.Length);
352 + SubTable = ACPI_ADD_PTR (ACPI_ASF_INFO, SubTable, SubLen);
356 @@ -686,12 +696,13 @@ AcpiDmDumpCpep (
359 ACPI_CPEP_POLLING *SubTable;
360 - UINT32 Length = Table->Length;
362 UINT32 Offset = sizeof (ACPI_TABLE_CPEP);
367 + ACPI_MOVE_32_TO_32(&Length, &Table->Length);
368 Status = AcpiDmDumpTable (Length, 0, Table, 0, AcpiDmTableInfoCpep);
369 if (ACPI_FAILURE (Status))
371 @@ -701,7 +712,7 @@ AcpiDmDumpCpep (
374 SubTable = ACPI_ADD_PTR (ACPI_CPEP_POLLING, Table, Offset);
375 - while (Offset < Table->Length)
376 + while (Offset < Length)
379 Status = AcpiDmDumpTable (Length, Offset, SubTable,
380 @@ -741,7 +752,10 @@ AcpiDmDumpCsrt (
381 ACPI_CSRT_GROUP *SubTable;
382 ACPI_CSRT_SHARED_INFO *SharedInfoTable;
383 ACPI_CSRT_DESCRIPTOR *SubSubTable;
384 - UINT32 Length = Table->Length;
387 + UINT32 SubSubLength;
388 + UINT32 SharedInfoLength;
389 UINT32 Offset = sizeof (ACPI_TABLE_CSRT);
392 @@ -752,14 +766,16 @@ AcpiDmDumpCsrt (
394 /* Subtables (Resource Groups) */
396 + ACPI_MOVE_32_TO_32(&Length, &Table->Length);
397 SubTable = ACPI_ADD_PTR (ACPI_CSRT_GROUP, Table, Offset);
398 - while (Offset < Table->Length)
399 + while (Offset < Length)
401 /* Resource group subtable */
404 + ACPI_MOVE_32_TO_32(&SubLength, &SubTable->Length);
405 Status = AcpiDmDumpTable (Length, Offset, SubTable,
406 - SubTable->Length, AcpiDmTableInfoCsrt0);
407 + SubLength, AcpiDmTableInfoCsrt0);
408 if (ACPI_FAILURE (Status))
411 @@ -779,19 +795,20 @@ AcpiDmDumpCsrt (
415 - SubOffset += SubTable->SharedInfoLength;
416 + ACPI_MOVE_32_TO_32(&SharedInfoLength, &SubTable->SharedInfoLength);
417 + SubOffset += SharedInfoLength;
419 /* Sub-Subtables (Resource Descriptors) */
421 SubSubTable = ACPI_ADD_PTR (ACPI_CSRT_DESCRIPTOR, Table,
424 - while ((SubOffset < SubTable->Length) &&
425 - ((Offset + SubOffset) < Table->Length))
426 + while ((SubOffset < SubLength) && ((Offset + SubOffset) < Length))
429 + ACPI_MOVE_32_TO_32(&SubSubLength, &SubSubTable->Length);
430 Status = AcpiDmDumpTable (Length, Offset + SubOffset, SubSubTable,
431 - SubSubTable->Length, AcpiDmTableInfoCsrt2);
432 + SubSubLength, AcpiDmTableInfoCsrt2);
433 if (ACPI_FAILURE (Status))
436 @@ -801,7 +818,7 @@ AcpiDmDumpCsrt (
438 /* Resource-specific info buffer */
440 - InfoLength = SubSubTable->Length - SubSubOffset;
441 + InfoLength = SubSubLength - SubSubOffset;
444 Status = AcpiDmDumpTable (Length,
445 @@ -816,16 +833,15 @@ AcpiDmDumpCsrt (
447 /* Point to next sub-subtable */
449 - SubOffset += SubSubTable->Length;
450 + SubOffset += SubSubLength;
451 SubSubTable = ACPI_ADD_PTR (ACPI_CSRT_DESCRIPTOR, SubSubTable,
452 - SubSubTable->Length);
456 /* Point to next subtable */
458 - Offset += SubTable->Length;
459 - SubTable = ACPI_ADD_PTR (ACPI_CSRT_GROUP, SubTable,
461 + Offset += SubLength;
462 + SubTable = ACPI_ADD_PTR (ACPI_CSRT_GROUP, SubTable, SubLength);
466 @@ -849,16 +865,20 @@ AcpiDmDumpDbg2 (
469 ACPI_DBG2_DEVICE *SubTable;
470 - UINT32 Length = Table->Length;
473 UINT32 Offset = sizeof (ACPI_TABLE_DBG2);
476 UINT32 AbsoluteOffset;
484 + ACPI_MOVE_32_TO_32(&Length, &Table->Length);
485 Status = AcpiDmDumpTable (Length, 0, Table, 0, AcpiDmTableInfoDbg2);
486 if (ACPI_FAILURE (Status))
488 @@ -868,11 +888,12 @@ AcpiDmDumpDbg2 (
491 SubTable = ACPI_ADD_PTR (ACPI_DBG2_DEVICE, Table, Offset);
492 - while (Offset < Table->Length)
493 + while (Offset < Length)
496 + ACPI_MOVE_16_TO_16(&SubLength, &SubTable->Length);
497 Status = AcpiDmDumpTable (Length, Offset, SubTable,
498 - SubTable->Length, AcpiDmTableInfoDbg2Device);
499 + SubLength, AcpiDmTableInfoDbg2Device);
500 if (ACPI_FAILURE (Status))
503 @@ -882,13 +903,13 @@ AcpiDmDumpDbg2 (
505 for (i = 0; i < SubTable->RegisterCount; i++)
507 - ArrayOffset = SubTable->BaseAddressOffset +
508 - (sizeof (ACPI_GENERIC_ADDRESS) * i);
509 + ACPI_MOVE_16_TO_16(&Tmp16, &SubTable->BaseAddressOffset);
510 + ArrayOffset = Tmp16 + (sizeof (ACPI_GENERIC_ADDRESS) * i);
511 AbsoluteOffset = Offset + ArrayOffset;
512 Array = (UINT8 *) SubTable + ArrayOffset;
514 Status = AcpiDmDumpTable (Length, AbsoluteOffset, Array,
515 - SubTable->Length, AcpiDmTableInfoDbg2Addr);
516 + SubLength, AcpiDmTableInfoDbg2Addr);
517 if (ACPI_FAILURE (Status))
520 @@ -899,13 +920,13 @@ AcpiDmDumpDbg2 (
522 for (i = 0; i < SubTable->RegisterCount; i++)
524 - ArrayOffset = SubTable->AddressSizeOffset +
525 - (sizeof (UINT32) * i);
526 + ACPI_MOVE_16_TO_16(&Tmp16, &SubTable->AddressSizeOffset);
527 + ArrayOffset = Tmp16 + (sizeof (UINT32) * i);
528 AbsoluteOffset = Offset + ArrayOffset;
529 Array = (UINT8 *) SubTable + ArrayOffset;
531 Status = AcpiDmDumpTable (Length, AbsoluteOffset, Array,
532 - SubTable->Length, AcpiDmTableInfoDbg2Size);
533 + SubLength, AcpiDmTableInfoDbg2Size);
534 if (ACPI_FAILURE (Status))
537 @@ -915,12 +936,13 @@ AcpiDmDumpDbg2 (
538 /* Dump the Namestring (required) */
541 - ArrayOffset = SubTable->NamepathOffset;
542 + ACPI_MOVE_16_TO_16(&Tmp16, &SubTable->NamepathOffset);
543 + ArrayOffset = Tmp16;
544 AbsoluteOffset = Offset + ArrayOffset;
545 Array = (UINT8 *) SubTable + ArrayOffset;
547 Status = AcpiDmDumpTable (Length, AbsoluteOffset, Array,
548 - SubTable->Length, AcpiDmTableInfoDbg2Name);
549 + SubLength, AcpiDmTableInfoDbg2Name);
550 if (ACPI_FAILURE (Status))
553 @@ -930,9 +952,10 @@ AcpiDmDumpDbg2 (
555 if (SubTable->OemDataOffset)
557 - Status = AcpiDmDumpTable (Length, Offset + SubTable->OemDataOffset,
558 - Table, SubTable->OemDataLength,
559 - AcpiDmTableInfoDbg2OemData);
560 + ACPI_MOVE_16_TO_16(&Tmp16, &SubTable->OemDataOffset);
561 + ACPI_MOVE_16_TO_16(&AlsoTmp16, &SubTable->OemDataLength);
562 + Status = AcpiDmDumpTable (Length, Offset + Tmp16,
563 + Table, AlsoTmp16, AcpiDmTableInfoDbg2OemData);
564 if (ACPI_FAILURE (Status))
567 @@ -941,9 +964,9 @@ AcpiDmDumpDbg2 (
569 /* Point to next subtable */
571 - Offset += SubTable->Length;
572 + Offset += SubLength;
573 SubTable = ACPI_ADD_PTR (ACPI_DBG2_DEVICE, SubTable,
579 @@ -967,17 +990,20 @@ AcpiDmDumpDmar (
582 ACPI_DMAR_HEADER *SubTable;
583 - UINT32 Length = Table->Length;
586 UINT32 Offset = sizeof (ACPI_TABLE_DMAR);
587 ACPI_DMTABLE_INFO *InfoTable;
588 ACPI_DMAR_DEVICE_SCOPE *ScopeTable;
597 + ACPI_MOVE_32_TO_32(&Length, &Table->Length);
598 Status = AcpiDmDumpTable (Length, 0, Table, 0, AcpiDmTableInfoDmar);
599 if (ACPI_FAILURE (Status))
601 @@ -987,13 +1013,14 @@ AcpiDmDumpDmar (
604 SubTable = ACPI_ADD_PTR (ACPI_DMAR_HEADER, Table, Offset);
605 - while (Offset < Table->Length)
606 + while (Offset < Length)
608 /* Common subtable header */
611 + ACPI_MOVE_16_TO_16(&SubLength, &SubTable->Length);
612 Status = AcpiDmDumpTable (Length, Offset, SubTable,
613 - SubTable->Length, AcpiDmTableInfoDmarHdr);
614 + SubLength, AcpiDmTableInfoDmarHdr);
615 if (ACPI_FAILURE (Status))
618 @@ -1001,7 +1028,8 @@ AcpiDmDumpDmar (
622 - switch (SubTable->Type)
623 + ACPI_MOVE_16_TO_16(&SubType, &SubTable->Type);
626 case ACPI_DMAR_TYPE_HARDWARE_UNIT:
628 @@ -1036,12 +1064,12 @@ AcpiDmDumpDmar (
631 AcpiOsPrintf ("\n**** Unknown DMAR subtable type 0x%X\n\n",
637 Status = AcpiDmDumpTable (Length, Offset, SubTable,
638 - SubTable->Length, InfoTable);
639 + SubLength, InfoTable);
640 if (ACPI_FAILURE (Status))
643 @@ -1050,8 +1078,8 @@ AcpiDmDumpDmar (
645 * Dump the optional device scope entries
647 - if ((SubTable->Type == ACPI_DMAR_TYPE_HARDWARE_AFFINITY) ||
648 - (SubTable->Type == ACPI_DMAR_TYPE_NAMESPACE))
649 + if ((SubType == ACPI_DMAR_TYPE_HARDWARE_AFFINITY) ||
650 + (SubType == ACPI_DMAR_TYPE_NAMESPACE))
652 /* These types do not support device scopes */
654 @@ -1059,7 +1087,7 @@ AcpiDmDumpDmar (
657 ScopeTable = ACPI_ADD_PTR (ACPI_DMAR_DEVICE_SCOPE, SubTable, ScopeOffset);
658 - while (ScopeOffset < SubTable->Length)
659 + while (ScopeOffset < SubLength)
662 Status = AcpiDmDumpTable (Length, Offset + ScopeOffset, ScopeTable,
663 @@ -1100,9 +1128,8 @@ AcpiDmDumpDmar (
665 /* Point to next subtable */
667 - Offset += SubTable->Length;
668 - SubTable = ACPI_ADD_PTR (ACPI_DMAR_HEADER, SubTable,
670 + Offset += SubLength;
671 + SubTable = ACPI_ADD_PTR (ACPI_DMAR_HEADER, SubTable, SubLength);
675 @@ -1129,12 +1156,15 @@ AcpiDmDumpDrtm (
676 ACPI_DRTM_RESOURCE_LIST *DrtmRl;
677 ACPI_DRTM_DPS_ID *DrtmDps;
679 + UINT32 ValidatedCount;
680 + UINT32 ResourceCount;
686 - Status = AcpiDmDumpTable (Table->Length, 0, Table, 0,
687 - AcpiDmTableInfoDrtm);
688 + ACPI_MOVE_32_TO_32(&Length, &Table->Length);
689 + Status = AcpiDmDumpTable (Length, 0, Table, 0, AcpiDmTableInfoDrtm);
690 if (ACPI_FAILURE (Status))
693 @@ -1148,7 +1178,7 @@ AcpiDmDumpDrtm (
695 DrtmVtl = ACPI_ADD_PTR (ACPI_DRTM_VTABLE_LIST, Table, Offset);
697 - Status = AcpiDmDumpTable (Table->Length, Offset,
698 + Status = AcpiDmDumpTable (Length, Offset,
699 DrtmVtl, ACPI_OFFSET (ACPI_DRTM_VTABLE_LIST, ValidatedTables),
700 AcpiDmTableInfoDrtm0);
701 if (ACPI_FAILURE (Status))
702 @@ -1161,10 +1191,11 @@ AcpiDmDumpDrtm (
703 /* Dump Validated table addresses */
706 - while ((Offset < Table->Length) &&
707 - (DrtmVtl->ValidatedTableCount > Count))
708 + ACPI_MOVE_32_TO_32(&ValidatedCount, &DrtmVtl->ValidatedTableCount);
709 + while ((Offset < Length) &&
710 + (ValidatedCount > Count))
712 - Status = AcpiDmDumpTable (Table->Length, Offset,
713 + Status = AcpiDmDumpTable (Length, Offset,
714 ACPI_ADD_PTR (void, Table, Offset), sizeof (UINT64),
715 AcpiDmTableInfoDrtm0a);
716 if (ACPI_FAILURE (Status))
717 @@ -1180,7 +1211,7 @@ AcpiDmDumpDrtm (
719 DrtmRl = ACPI_ADD_PTR (ACPI_DRTM_RESOURCE_LIST, Table, Offset);
721 - Status = AcpiDmDumpTable (Table->Length, Offset,
722 + Status = AcpiDmDumpTable (Length, Offset,
723 DrtmRl, ACPI_OFFSET (ACPI_DRTM_RESOURCE_LIST, Resources),
724 AcpiDmTableInfoDrtm1);
725 if (ACPI_FAILURE (Status))
726 @@ -1193,10 +1224,11 @@ AcpiDmDumpDrtm (
727 /* Dump the Resource List */
730 - while ((Offset < Table->Length) &&
731 - (DrtmRl->ResourceCount > Count))
732 + ACPI_MOVE_32_TO_32(&ResourceCount, &DrtmRl->ResourceCount);
733 + while ((Offset < Length) &&
734 + (ResourceCount > Count))
736 - Status = AcpiDmDumpTable (Table->Length, Offset,
737 + Status = AcpiDmDumpTable (Length, Offset,
738 ACPI_ADD_PTR (void, Table, Offset),
739 sizeof (ACPI_DRTM_RESOURCE), AcpiDmTableInfoDrtm1a);
740 if (ACPI_FAILURE (Status))
741 @@ -1212,7 +1244,7 @@ AcpiDmDumpDrtm (
743 DrtmDps = ACPI_ADD_PTR (ACPI_DRTM_DPS_ID, Table, Offset);
745 - (void) AcpiDmDumpTable (Table->Length, Offset,
746 + (void) AcpiDmDumpTable (Length, Offset,
747 DrtmDps, sizeof (ACPI_DRTM_DPS_ID), AcpiDmTableInfoDrtm2);
750 @@ -1236,12 +1268,13 @@ AcpiDmDumpEinj (
753 ACPI_WHEA_HEADER *SubTable;
754 - UINT32 Length = Table->Length;
756 UINT32 Offset = sizeof (ACPI_TABLE_EINJ);
761 + ACPI_MOVE_32_TO_32(&Length, &Table->Length);
762 Status = AcpiDmDumpTable (Length, 0, Table, 0, AcpiDmTableInfoEinj);
763 if (ACPI_FAILURE (Status))
765 @@ -1251,7 +1284,7 @@ AcpiDmDumpEinj (
768 SubTable = ACPI_ADD_PTR (ACPI_WHEA_HEADER, Table, Offset);
769 - while (Offset < Table->Length)
770 + while (Offset < Length)
773 Status = AcpiDmDumpTable (Length, Offset, SubTable,
774 @@ -1289,12 +1322,13 @@ AcpiDmDumpErst (
777 ACPI_WHEA_HEADER *SubTable;
778 - UINT32 Length = Table->Length;
780 UINT32 Offset = sizeof (ACPI_TABLE_ERST);
785 + ACPI_MOVE_32_TO_32(&Length, &Table->Length);
786 Status = AcpiDmDumpTable (Length, 0, Table, 0, AcpiDmTableInfoErst);
787 if (ACPI_FAILURE (Status))
789 @@ -1304,7 +1338,7 @@ AcpiDmDumpErst (
792 SubTable = ACPI_ADD_PTR (ACPI_WHEA_HEADER, Table, Offset);
793 - while (Offset < Table->Length)
794 + while (Offset < Length)
797 Status = AcpiDmDumpTable (Length, Offset, SubTable,
798 @@ -1342,17 +1376,19 @@ AcpiDmDumpFpdt (
801 ACPI_FPDT_HEADER *SubTable;
802 - UINT32 Length = Table->Length;
804 UINT32 Offset = sizeof (ACPI_TABLE_FPDT);
805 ACPI_DMTABLE_INFO *InfoTable;
809 /* There is no main table (other than the standard ACPI header) */
813 + ACPI_MOVE_32_TO_32(&Length, &Table->Length);
814 SubTable = ACPI_ADD_PTR (ACPI_FPDT_HEADER, Table, Offset);
815 - while (Offset < Table->Length)
816 + while (Offset < Length)
818 /* Common subtable header */
820 @@ -1364,7 +1400,8 @@ AcpiDmDumpFpdt (
824 - switch (SubTable->Type)
825 + ACPI_MOVE_16_TO_16(&Type, &SubTable->Type);
828 case ACPI_FPDT_TYPE_BOOT:
830 @@ -1378,8 +1415,7 @@ AcpiDmDumpFpdt (
834 - AcpiOsPrintf ("\n**** Unknown FPDT subtable type 0x%X\n\n",
836 + AcpiOsPrintf ("\n**** Unknown FPDT subtable type 0x%X\n\n", Type);
838 /* Attempt to continue */
840 @@ -1427,16 +1463,19 @@ AcpiDmDumpGtdt (
843 ACPI_GTDT_HEADER *SubTable;
844 - UINT32 Length = Table->Length;
847 UINT32 Offset = sizeof (ACPI_TABLE_GTDT);
848 ACPI_DMTABLE_INFO *InfoTable;
849 UINT32 SubTableLength;
852 ACPI_GTDT_TIMER_ENTRY *GtxTable;
857 + ACPI_MOVE_32_TO_32(&Length, &Table->Length);
858 Status = AcpiDmDumpTable (Length, 0, Table, 0, AcpiDmTableInfoGtdt);
859 if (ACPI_FAILURE (Status))
861 @@ -1446,7 +1485,7 @@ AcpiDmDumpGtdt (
864 SubTable = ACPI_ADD_PTR (ACPI_GTDT_HEADER, Table, Offset);
865 - while (Offset < Table->Length)
866 + while (Offset < Length)
868 /* Common subtable header */
870 @@ -1464,8 +1503,9 @@ AcpiDmDumpGtdt (
871 case ACPI_GTDT_TYPE_TIMER_BLOCK:
873 SubTableLength = sizeof (ACPI_GTDT_TIMER_BLOCK);
874 - GtCount = (ACPI_CAST_PTR (ACPI_GTDT_TIMER_BLOCK,
875 + Tmp32 = (ACPI_CAST_PTR (ACPI_GTDT_TIMER_BLOCK,
876 SubTable))->TimerCount;
877 + ACPI_MOVE_32_TO_32(&GtCount, &Tmp32);
879 InfoTable = AcpiDmTableInfoGtdt0;
881 @@ -1486,8 +1526,9 @@ AcpiDmDumpGtdt (
885 + ACPI_MOVE_16_TO_16(&SubLength, &SubTable->Length);
886 Status = AcpiDmDumpTable (Length, Offset, SubTable,
887 - SubTable->Length, InfoTable);
888 + SubLength, InfoTable);
889 if (ACPI_FAILURE (Status))
892 @@ -1546,16 +1587,18 @@ AcpiDmDumpHest (
895 ACPI_HEST_HEADER *SubTable;
896 - UINT32 Length = Table->Length;
898 UINT32 Offset = sizeof (ACPI_TABLE_HEST);
899 ACPI_DMTABLE_INFO *InfoTable;
900 UINT32 SubTableLength;
902 ACPI_HEST_IA_ERROR_BANK *BankTable;
908 + ACPI_MOVE_32_TO_32(&Length, &Table->Length);
909 Status = AcpiDmDumpTable (Length, 0, Table, 0, AcpiDmTableInfoHest);
910 if (ACPI_FAILURE (Status))
912 @@ -1565,10 +1608,11 @@ AcpiDmDumpHest (
915 SubTable = ACPI_ADD_PTR (ACPI_HEST_HEADER, Table, Offset);
916 - while (Offset < Table->Length)
917 + while (Offset < Length)
920 - switch (SubTable->Type)
921 + ACPI_MOVE_16_TO_16(&SubType, &SubTable->Type);
924 case ACPI_HEST_TYPE_IA32_CHECK:
926 @@ -1697,15 +1741,21 @@ AcpiDmDumpIort (
927 ACPI_IORT_SMMU *IortSmmu = NULL;
932 ACPI_DMTABLE_INFO *InfoTable;
938 + UINT32 MappingCount;
939 + UINT32 CtxIntCount;
940 + UINT32 PmuIntCount;
944 - Status = AcpiDmDumpTable (Table->Length, 0, Table, 0, AcpiDmTableInfoIort);
945 + ACPI_MOVE_32_TO_32(&TableLen, &Table->Length);
946 + Status = AcpiDmDumpTable (TableLen, 0, Table, 0, AcpiDmTableInfoIort);
947 if (ACPI_FAILURE (Status))
950 @@ -1716,18 +1766,19 @@ AcpiDmDumpIort (
952 /* Dump the OptionalPadding (optional) */
954 - if (Iort->NodeOffset > Offset)
955 + ACPI_MOVE_32_TO_32(&NodeOffset, &Iort->NodeOffset);
956 + if (NodeOffset > Offset)
958 - Status = AcpiDmDumpTable (Table->Length, Offset, Table,
959 - Iort->NodeOffset - Offset, AcpiDmTableInfoIortPad);
960 + Status = AcpiDmDumpTable (TableLen, Offset, Table,
961 + NodeOffset - Offset, AcpiDmTableInfoIortPad);
962 if (ACPI_FAILURE (Status))
968 - Offset = Iort->NodeOffset;
969 - while (Offset < Table->Length)
970 + ACPI_MOVE_32_TO_32(&Offset, &Iort->NodeOffset);
971 + while (Offset < TableLen)
973 /* Common subtable header */
975 @@ -1763,7 +1814,8 @@ AcpiDmDumpIort (
976 case ACPI_IORT_NODE_PCI_ROOT_COMPLEX:
978 InfoTable = AcpiDmTableInfoIort2;
979 - Length = IortNode->Length - NodeOffset;
980 + ACPI_MOVE_16_TO_16(&NodeLength, &IortNode->Length);
981 + Length = NodeLength - NodeOffset;
984 case ACPI_IORT_NODE_SMMU:
985 @@ -1776,7 +1828,8 @@ AcpiDmDumpIort (
986 case ACPI_IORT_NODE_SMMU_V3:
988 InfoTable = AcpiDmTableInfoIort4;
989 - Length = IortNode->Length - NodeOffset;
990 + ACPI_MOVE_16_TO_16(&NodeLength, &IortNode->Length);
991 + Length = NodeLength - NodeOffset;
995 @@ -1786,7 +1839,8 @@ AcpiDmDumpIort (
997 /* Attempt to continue */
999 - if (!IortNode->Length)
1000 + ACPI_MOVE_16_TO_16(&NodeLength, &IortNode->Length);
1003 AcpiOsPrintf ("Invalid zero length IORT node\n");
1005 @@ -1797,7 +1851,7 @@ AcpiDmDumpIort (
1006 /* Dump the node subtable header */
1008 AcpiOsPrintf ("\n");
1009 - Status = AcpiDmDumpTable (Table->Length, Offset + NodeOffset,
1010 + Status = AcpiDmDumpTable (TableLen, Offset + NodeOffset,
1011 ACPI_ADD_PTR (ACPI_IORT_NODE, IortNode, NodeOffset),
1013 if (ACPI_FAILURE (Status))
1014 @@ -1817,9 +1871,10 @@ AcpiDmDumpIort (
1018 - for (i = 0; i < IortItsGroup->ItsCount; i++)
1019 + ACPI_MOVE_32_TO_32(&ItsCount, &IortItsGroup->ItsCount);
1020 + for (i = 0; i < ItsCount; i++)
1022 - Status = AcpiDmDumpTable (Table->Length, Offset + NodeOffset,
1023 + Status = AcpiDmDumpTable (TableLen, Offset + NodeOffset,
1024 ACPI_ADD_PTR (ACPI_IORT_NODE, IortNode, NodeOffset),
1025 4, AcpiDmTableInfoIort0a);
1027 @@ -1831,11 +1886,11 @@ AcpiDmDumpIort (
1029 /* Dump the Padding (optional) */
1031 - if (IortNode->Length > NodeOffset)
1032 + ACPI_MOVE_16_TO_16(&NodeLength, &IortNode->Length);
1033 + if (NodeLength > NodeOffset)
1035 - Status = AcpiDmDumpTable (Table->Length, Offset + NodeOffset,
1036 - Table, IortNode->Length - NodeOffset,
1037 - AcpiDmTableInfoIort1a);
1038 + Status = AcpiDmDumpTable (TableLen, Offset + NodeOffset,
1039 + Table, NodeLength - NodeOffset, AcpiDmTableInfoIort1a);
1040 if (ACPI_FAILURE (Status))
1043 @@ -1852,8 +1907,8 @@ AcpiDmDumpIort (
1046 Length = 2 * sizeof (UINT64);
1047 - NodeOffset = IortSmmu->GlobalInterruptOffset;
1048 - Status = AcpiDmDumpTable (Table->Length, Offset + NodeOffset,
1049 + ACPI_MOVE_32_TO_32(&NodeOffset, &IortSmmu->GlobalInterruptOffset);
1050 + Status = AcpiDmDumpTable (TableLen, Offset + NodeOffset,
1051 ACPI_ADD_PTR (ACPI_IORT_NODE, IortNode, NodeOffset),
1052 Length, AcpiDmTableInfoIort3a);
1053 if (ACPI_FAILURE (Status))
1054 @@ -1861,10 +1916,11 @@ AcpiDmDumpIort (
1058 - NodeOffset = IortSmmu->ContextInterruptOffset;
1059 - for (i = 0; i < IortSmmu->ContextInterruptCount; i++)
1060 + ACPI_MOVE_32_TO_32(&NodeOffset, &IortSmmu->ContextInterruptOffset);
1061 + ACPI_MOVE_32_TO_32(&CtxIntCount, &IortSmmu->ContextInterruptCount);
1062 + for (i = 0; i < CtxIntCount; i++)
1064 - Status = AcpiDmDumpTable (Table->Length, Offset + NodeOffset,
1065 + Status = AcpiDmDumpTable (TableLen, Offset + NodeOffset,
1066 ACPI_ADD_PTR (ACPI_IORT_NODE, IortNode, NodeOffset),
1067 8, AcpiDmTableInfoIort3b);
1068 if (ACPI_FAILURE (Status))
1069 @@ -1875,10 +1931,11 @@ AcpiDmDumpIort (
1073 - NodeOffset = IortSmmu->PmuInterruptOffset;
1074 - for (i = 0; i < IortSmmu->PmuInterruptCount; i++)
1075 + ACPI_MOVE_32_TO_32(&NodeOffset, &IortSmmu->PmuInterruptOffset);
1076 + ACPI_MOVE_32_TO_32(&PmuIntCount, &IortSmmu->PmuInterruptCount);
1077 + for (i = 0; i < PmuIntCount; i++)
1079 - Status = AcpiDmDumpTable (Table->Length, Offset + NodeOffset,
1080 + Status = AcpiDmDumpTable (TableLen, Offset + NodeOffset,
1081 ACPI_ADD_PTR (ACPI_IORT_NODE, IortNode, NodeOffset),
1082 8, AcpiDmTableInfoIort3c);
1083 if (ACPI_FAILURE (Status))
1084 @@ -1898,12 +1955,13 @@ AcpiDmDumpIort (
1086 /* Dump the ID mappings */
1088 - NodeOffset = IortNode->MappingOffset;
1089 - for (i = 0; i < IortNode->MappingCount; i++)
1090 + ACPI_MOVE_32_TO_32(&NodeOffset, &IortNode->MappingOffset);
1091 + ACPI_MOVE_32_TO_32(&MappingCount, &IortNode->MappingCount);
1092 + for (i = 0; i < MappingCount; i++)
1094 AcpiOsPrintf ("\n");
1095 Length = sizeof (ACPI_IORT_ID_MAPPING);
1096 - Status = AcpiDmDumpTable (Table->Length, Offset + NodeOffset,
1097 + Status = AcpiDmDumpTable (TableLen, Offset + NodeOffset,
1098 ACPI_ADD_PTR (ACPI_IORT_NODE, IortNode, NodeOffset),
1099 Length, AcpiDmTableInfoIortMap);
1100 if (ACPI_FAILURE (Status))
1101 @@ -1917,8 +1975,9 @@ AcpiDmDumpIort (
1103 /* Point to next node subtable */
1105 - Offset += IortNode->Length;
1106 - IortNode = ACPI_ADD_PTR (ACPI_IORT_NODE, IortNode, IortNode->Length);
1107 + ACPI_MOVE_16_TO_16(&NodeLength, &IortNode->Length);
1108 + Offset += NodeLength;
1109 + IortNode = ACPI_ADD_PTR (ACPI_IORT_NODE, IortNode, NodeLength);
1113 @@ -1949,11 +2008,14 @@ AcpiDmDumpIvrs (
1114 ACPI_IVRS_DE_HEADER *DeviceEntry;
1115 ACPI_IVRS_HEADER *SubTable;
1116 ACPI_DMTABLE_INFO *InfoTable;
1123 - Status = AcpiDmDumpTable (Table->Length, 0, Table, 0, AcpiDmTableInfoIvrs);
1124 + ACPI_MOVE_32_TO_32(&Length, &Table->Length);
1125 + Status = AcpiDmDumpTable (Length, 0, Table, 0, AcpiDmTableInfoIvrs);
1126 if (ACPI_FAILURE (Status))
1129 @@ -1962,13 +2024,14 @@ AcpiDmDumpIvrs (
1132 SubTable = ACPI_ADD_PTR (ACPI_IVRS_HEADER, Table, Offset);
1133 - while (Offset < Table->Length)
1134 + while (Offset < Length)
1136 /* Common subtable header */
1138 AcpiOsPrintf ("\n");
1139 - Status = AcpiDmDumpTable (Table->Length, Offset, SubTable,
1140 - SubTable->Length, AcpiDmTableInfoIvrsHdr);
1141 + ACPI_MOVE_16_TO_16(&SubLength, &SubTable->Length);
1142 + Status = AcpiDmDumpTable (Length, Offset, SubTable,
1143 + SubLength, AcpiDmTableInfoIvrsHdr);
1144 if (ACPI_FAILURE (Status))
1147 @@ -1995,7 +2058,7 @@ AcpiDmDumpIvrs (
1149 /* Attempt to continue */
1151 - if (!SubTable->Length)
1154 AcpiOsPrintf ("Invalid zero length subtable\n");
1156 @@ -2006,8 +2069,8 @@ AcpiDmDumpIvrs (
1157 /* Dump the subtable */
1159 AcpiOsPrintf ("\n");
1160 - Status = AcpiDmDumpTable (Table->Length, Offset, SubTable,
1161 - SubTable->Length, InfoTable);
1162 + Status = AcpiDmDumpTable (Length, Offset, SubTable,
1163 + SubLength, InfoTable);
1164 if (ACPI_FAILURE (Status))
1167 @@ -2021,7 +2084,7 @@ AcpiDmDumpIvrs (
1168 DeviceEntry = ACPI_ADD_PTR (ACPI_IVRS_DE_HEADER, SubTable,
1169 sizeof (ACPI_IVRS_HARDWARE));
1171 - while (EntryOffset < (Offset + SubTable->Length))
1172 + while (EntryOffset < (Offset + SubLength))
1174 AcpiOsPrintf ("\n");
1176 @@ -2083,7 +2146,7 @@ AcpiDmDumpIvrs (
1178 /* Dump the Device Entry */
1180 - Status = AcpiDmDumpTable (Table->Length, EntryOffset,
1181 + Status = AcpiDmDumpTable (Length, EntryOffset,
1182 DeviceEntry, EntryLength, InfoTable);
1183 if (ACPI_FAILURE (Status))
1185 @@ -2099,8 +2162,8 @@ AcpiDmDumpIvrs (
1187 /* Point to next subtable */
1189 - Offset += SubTable->Length;
1190 - SubTable = ACPI_ADD_PTR (ACPI_IVRS_HEADER, SubTable, SubTable->Length);
1191 + Offset += SubLength;
1192 + SubTable = ACPI_ADD_PTR (ACPI_IVRS_HEADER, SubTable, SubLength);
1196 @@ -2126,7 +2189,7 @@ AcpiDmDumpLpit (
1199 ACPI_LPIT_HEADER *SubTable;
1200 - UINT32 Length = Table->Length;
1202 UINT32 Offset = sizeof (ACPI_TABLE_LPIT);
1203 ACPI_DMTABLE_INFO *InfoTable;
1204 UINT32 SubTableLength;
1205 @@ -2134,8 +2197,9 @@ AcpiDmDumpLpit (
1209 + ACPI_MOVE_32_TO_32(&Length, &Table->Length);
1210 SubTable = ACPI_ADD_PTR (ACPI_LPIT_HEADER, Table, Offset);
1211 - while (Offset < Table->Length)
1212 + while (Offset < Length)
1214 /* Common subtable header */
1216 @@ -2199,13 +2263,14 @@ AcpiDmDumpMadt (
1219 ACPI_SUBTABLE_HEADER *SubTable;
1220 - UINT32 Length = Table->Length;
1222 UINT32 Offset = sizeof (ACPI_TABLE_MADT);
1223 ACPI_DMTABLE_INFO *InfoTable;
1228 + ACPI_MOVE_32_TO_32(&Length, &Table->Length);
1229 Status = AcpiDmDumpTable (Length, 0, Table, 0, AcpiDmTableInfoMadt);
1230 if (ACPI_FAILURE (Status))
1232 @@ -2215,7 +2280,7 @@ AcpiDmDumpMadt (
1235 SubTable = ACPI_ADD_PTR (ACPI_SUBTABLE_HEADER, Table, Offset);
1236 - while (Offset < Table->Length)
1237 + while (Offset < Length)
1239 /* Common subtable header */
1241 @@ -2361,11 +2426,13 @@ AcpiDmDumpMcfg (
1243 UINT32 Offset = sizeof (ACPI_TABLE_MCFG);
1244 ACPI_MCFG_ALLOCATION *SubTable;
1250 - Status = AcpiDmDumpTable (Table->Length, 0, Table, 0, AcpiDmTableInfoMcfg);
1251 + ACPI_MOVE_32_TO_32(&Len, &Table->Length);
1252 + Status = AcpiDmDumpTable (Len, 0, Table, 0, AcpiDmTableInfoMcfg);
1253 if (ACPI_FAILURE (Status))
1256 @@ -2374,17 +2441,17 @@ AcpiDmDumpMcfg (
1259 SubTable = ACPI_ADD_PTR (ACPI_MCFG_ALLOCATION, Table, Offset);
1260 - while (Offset < Table->Length)
1261 + while (Offset < Len)
1263 - if (Offset + sizeof (ACPI_MCFG_ALLOCATION) > Table->Length)
1264 + if (Offset + sizeof (ACPI_MCFG_ALLOCATION) > Len)
1266 AcpiOsPrintf ("Warning: there are %u invalid trailing bytes\n",
1267 - sizeof (ACPI_MCFG_ALLOCATION) - (Offset - Table->Length));
1268 + sizeof (ACPI_MCFG_ALLOCATION) - (Offset - Len));
1272 AcpiOsPrintf ("\n");
1273 - Status = AcpiDmDumpTable (Table->Length, Offset, SubTable,
1274 + Status = AcpiDmDumpTable (Len, Offset, SubTable,
1275 sizeof (ACPI_MCFG_ALLOCATION), AcpiDmTableInfoMcfg0);
1276 if (ACPI_FAILURE (Status))
1278 @@ -2418,6 +2485,7 @@ AcpiDmDumpMpst (
1281 UINT32 Offset = sizeof (ACPI_TABLE_MPST);
1282 + ACPI_TABLE_MPST *Mpst;
1283 ACPI_MPST_POWER_NODE *SubTable0;
1284 ACPI_MPST_POWER_STATE *SubTable0A;
1285 ACPI_MPST_COMPONENT *SubTable0B;
1286 @@ -2426,11 +2494,13 @@ AcpiDmDumpMpst (
1287 UINT16 SubtableCount;
1288 UINT32 PowerStateCount;
1289 UINT32 ComponentCount;
1295 - Status = AcpiDmDumpTable (Table->Length, 0, Table, 0, AcpiDmTableInfoMpst);
1296 + ACPI_MOVE_32_TO_32(&Length, &Table->Length);
1297 + Status = AcpiDmDumpTable (Length, 0, Table, 0, AcpiDmTableInfoMpst);
1298 if (ACPI_FAILURE (Status))
1301 @@ -2438,13 +2508,14 @@ AcpiDmDumpMpst (
1303 /* Subtable: Memory Power Node(s) */
1305 - SubtableCount = (ACPI_CAST_PTR (ACPI_TABLE_MPST, Table))->PowerNodeCount;
1306 + Mpst = ACPI_CAST_PTR (ACPI_TABLE_MPST, Table);
1307 + ACPI_MOVE_16_TO_16(&SubtableCount, &Mpst->PowerNodeCount);
1308 SubTable0 = ACPI_ADD_PTR (ACPI_MPST_POWER_NODE, Table, Offset);
1310 - while ((Offset < Table->Length) && SubtableCount)
1311 + while ((Offset < Length) && SubtableCount)
1313 AcpiOsPrintf ("\n");
1314 - Status = AcpiDmDumpTable (Table->Length, Offset, SubTable0,
1315 + Status = AcpiDmDumpTable (Length, Offset, SubTable0,
1316 sizeof (ACPI_MPST_POWER_NODE), AcpiDmTableInfoMpst0);
1317 if (ACPI_FAILURE (Status))
1319 @@ -2453,8 +2524,8 @@ AcpiDmDumpMpst (
1321 /* Extract the sub-subtable counts */
1323 - PowerStateCount = SubTable0->NumPowerStates;
1324 - ComponentCount = SubTable0->NumPhysicalComponents;
1325 + ACPI_MOVE_32_TO_32(&PowerStateCount, &SubTable0->NumPowerStates);
1326 + ACPI_MOVE_32_TO_32(&ComponentCount, &SubTable0->NumPhysicalComponents);
1327 Offset += sizeof (ACPI_MPST_POWER_NODE);
1329 /* Sub-subtables - Memory Power State Structure(s) */
1330 @@ -2465,7 +2536,7 @@ AcpiDmDumpMpst (
1331 while (PowerStateCount)
1333 AcpiOsPrintf ("\n");
1334 - Status = AcpiDmDumpTable (Table->Length, Offset, SubTable0A,
1335 + Status = AcpiDmDumpTable (Length, Offset, SubTable0A,
1336 sizeof (ACPI_MPST_POWER_STATE), AcpiDmTableInfoMpst0A);
1337 if (ACPI_FAILURE (Status))
1339 @@ -2475,7 +2546,7 @@ AcpiDmDumpMpst (
1342 Offset += sizeof (ACPI_MPST_POWER_STATE);
1346 /* Sub-subtables - Physical Component ID Structure(s) */
1348 @@ -2488,7 +2559,7 @@ AcpiDmDumpMpst (
1350 while (ComponentCount)
1352 - Status = AcpiDmDumpTable (Table->Length, Offset, SubTable0B,
1353 + Status = AcpiDmDumpTable (Length, Offset, SubTable0B,
1354 sizeof (ACPI_MPST_COMPONENT), AcpiDmTableInfoMpst0B);
1355 if (ACPI_FAILURE (Status))
1357 @@ -2503,17 +2574,19 @@ AcpiDmDumpMpst (
1358 /* Point to next Memory Power Node subtable */
1361 + ACPI_MOVE_32_TO_32(&PowerStateCount, &SubTable0->NumPowerStates);
1362 + ACPI_MOVE_32_TO_32(&ComponentCount, &SubTable0->NumPhysicalComponents);
1363 SubTable0 = ACPI_ADD_PTR (ACPI_MPST_POWER_NODE, SubTable0,
1364 sizeof (ACPI_MPST_POWER_NODE) +
1365 - (sizeof (ACPI_MPST_POWER_STATE) * SubTable0->NumPowerStates) +
1366 - (sizeof (ACPI_MPST_COMPONENT) * SubTable0->NumPhysicalComponents));
1367 + (sizeof (ACPI_MPST_POWER_STATE) * PowerStateCount) +
1368 + (sizeof (ACPI_MPST_COMPONENT) * ComponentCount));
1371 /* Subtable: Count of Memory Power State Characteristic structures */
1373 AcpiOsPrintf ("\n");
1374 SubTable1 = ACPI_CAST_PTR (ACPI_MPST_DATA_HDR, SubTable0);
1375 - Status = AcpiDmDumpTable (Table->Length, Offset, SubTable1,
1376 + Status = AcpiDmDumpTable (Length, Offset, SubTable1,
1377 sizeof (ACPI_MPST_DATA_HDR), AcpiDmTableInfoMpst1);
1378 if (ACPI_FAILURE (Status))
1380 @@ -2528,10 +2601,10 @@ AcpiDmDumpMpst (
1381 SubTable2 = ACPI_ADD_PTR (ACPI_MPST_POWER_DATA, SubTable1,
1382 sizeof (ACPI_MPST_DATA_HDR));
1384 - while ((Offset < Table->Length) && SubtableCount)
1385 + while ((Offset < Length) && SubtableCount)
1387 AcpiOsPrintf ("\n");
1388 - Status = AcpiDmDumpTable (Table->Length, Offset, SubTable2,
1389 + Status = AcpiDmDumpTable (Length, Offset, SubTable2,
1390 sizeof (ACPI_MPST_POWER_DATA), AcpiDmTableInfoMpst2);
1391 if (ACPI_FAILURE (Status))
1393 @@ -2564,11 +2637,13 @@ AcpiDmDumpMsct (
1395 UINT32 Offset = sizeof (ACPI_TABLE_MSCT);
1396 ACPI_MSCT_PROXIMITY *SubTable;
1402 - Status = AcpiDmDumpTable (Table->Length, 0, Table, 0, AcpiDmTableInfoMsct);
1403 + ACPI_MOVE_32_TO_32(&Length, &Table->Length);
1404 + Status = AcpiDmDumpTable (Length, 0, Table, 0, AcpiDmTableInfoMsct);
1405 if (ACPI_FAILURE (Status))
1408 @@ -2577,12 +2652,12 @@ AcpiDmDumpMsct (
1411 SubTable = ACPI_ADD_PTR (ACPI_MSCT_PROXIMITY, Table, Offset);
1412 - while (Offset < Table->Length)
1413 + while (Offset < Length)
1415 /* Common subtable header */
1417 AcpiOsPrintf ("\n");
1418 - Status = AcpiDmDumpTable (Table->Length, Offset, SubTable,
1419 + Status = AcpiDmDumpTable (Length, Offset, SubTable,
1420 sizeof (ACPI_MSCT_PROXIMITY), AcpiDmTableInfoMsct0);
1421 if (ACPI_FAILURE (Status))
1423 @@ -2617,11 +2692,13 @@ AcpiDmDumpMtmr (
1425 UINT32 Offset = sizeof (ACPI_TABLE_MTMR);
1426 ACPI_MTMR_ENTRY *SubTable;
1432 - Status = AcpiDmDumpTable (Table->Length, 0, Table, 0, AcpiDmTableInfoMtmr);
1433 + ACPI_MOVE_32_TO_32(&Length, &Table->Length);
1434 + Status = AcpiDmDumpTable (Length, 0, Table, 0, AcpiDmTableInfoMtmr);
1435 if (ACPI_FAILURE (Status))
1438 @@ -2630,12 +2707,12 @@ AcpiDmDumpMtmr (
1441 SubTable = ACPI_ADD_PTR (ACPI_MTMR_ENTRY, Table, Offset);
1442 - while (Offset < Table->Length)
1443 + while (Offset < Length)
1445 /* Common subtable header */
1447 AcpiOsPrintf ("\n");
1448 - Status = AcpiDmDumpTable (Table->Length, Offset, SubTable,
1449 + Status = AcpiDmDumpTable (Length, Offset, SubTable,
1450 sizeof (ACPI_MTMR_ENTRY), AcpiDmTableInfoMtmr0);
1451 if (ACPI_FAILURE (Status))
1453 @@ -2677,11 +2754,17 @@ AcpiDmDumpNfit (
1454 ACPI_NFIT_SMBIOS *SmbiosInfo = NULL;
1455 ACPI_NFIT_FLUSH_ADDRESS *Hint = NULL;
1457 + UINT32 TableLength;
1466 - Status = AcpiDmDumpTable (Table->Length, 0, Table, 0, AcpiDmTableInfoNfit);
1467 + ACPI_MOVE_32_TO_32(&TableLength, &Table->Length);
1468 + Status = AcpiDmDumpTable (TableLength, 0, Table, 0, AcpiDmTableInfoNfit);
1469 if (ACPI_FAILURE (Status))
1472 @@ -2690,19 +2773,21 @@ AcpiDmDumpNfit (
1475 SubTable = ACPI_ADD_PTR (ACPI_NFIT_HEADER, Table, Offset);
1476 - while (Offset < Table->Length)
1477 + while (Offset < TableLength)
1479 /* NFIT subtable header */
1481 AcpiOsPrintf ("\n");
1482 - Status = AcpiDmDumpTable (Table->Length, Offset, SubTable,
1483 - SubTable->Length, AcpiDmTableInfoNfitHdr);
1484 + ACPI_MOVE_16_TO_16(&SubLength, &SubTable->Length);
1485 + Status = AcpiDmDumpTable (TableLength, Offset, SubTable,
1486 + SubLength, AcpiDmTableInfoNfitHdr);
1487 if (ACPI_FAILURE (Status))
1492 - switch (SubTable->Type)
1493 + ACPI_MOVE_16_TO_16(&SubType, &SubTable->Type);
1496 case ACPI_NFIT_TYPE_SYSTEM_ADDRESS:
1498 @@ -2754,7 +2839,7 @@ AcpiDmDumpNfit (
1500 /* Attempt to continue */
1502 - if (!SubTable->Length)
1505 AcpiOsPrintf ("Invalid zero length subtable\n");
1507 @@ -2763,8 +2848,8 @@ AcpiDmDumpNfit (
1510 AcpiOsPrintf ("\n");
1511 - Status = AcpiDmDumpTable (Table->Length, Offset, SubTable,
1512 - SubTable->Length, InfoTable);
1513 + Status = AcpiDmDumpTable (TableLength, Offset, SubTable,
1514 + SubLength, InfoTable);
1515 if (ACPI_FAILURE (Status))
1518 @@ -2772,13 +2857,14 @@ AcpiDmDumpNfit (
1520 /* Per-subtable variable-length fields */
1522 - switch (SubTable->Type)
1525 case ACPI_NFIT_TYPE_INTERLEAVE:
1527 - for (i = 0; i < Interleave->LineCount; i++)
1528 + ACPI_MOVE_32_TO_32(&Count, &Interleave->LineCount);
1529 + for (i = 0; i < Count; i++)
1531 - Status = AcpiDmDumpTable (Table->Length, Offset + FieldOffset,
1532 + Status = AcpiDmDumpTable (TableLength, Offset + FieldOffset,
1533 &Interleave->LineOffset[i],
1534 sizeof (UINT32), AcpiDmTableInfoNfit2a);
1535 if (ACPI_FAILURE (Status))
1536 @@ -2792,12 +2878,11 @@ AcpiDmDumpNfit (
1538 case ACPI_NFIT_TYPE_SMBIOS:
1540 - Length = SubTable->Length -
1541 - sizeof (ACPI_NFIT_SMBIOS) + sizeof (UINT8);
1542 + Length = SubLength - sizeof (ACPI_NFIT_SMBIOS) + sizeof (UINT8);
1546 - Status = AcpiDmDumpTable (Table->Length,
1547 + Status = AcpiDmDumpTable (TableLength,
1548 sizeof (ACPI_NFIT_SMBIOS) - sizeof (UINT8),
1550 Length, AcpiDmTableInfoNfit3a);
1551 @@ -2811,9 +2896,10 @@ AcpiDmDumpNfit (
1553 case ACPI_NFIT_TYPE_FLUSH_ADDRESS:
1555 - for (i = 0; i < Hint->HintCount; i++)
1556 + ACPI_MOVE_16_TO_16(&Count16, &Hint->HintCount);
1557 + for (i = 0; i < Count16; i++)
1559 - Status = AcpiDmDumpTable (Table->Length, Offset + FieldOffset,
1560 + Status = AcpiDmDumpTable (TableLength, Offset + FieldOffset,
1561 &Hint->HintAddress[i],
1562 sizeof (UINT64), AcpiDmTableInfoNfit6a);
1563 if (ACPI_FAILURE (Status))
1564 @@ -2832,8 +2918,8 @@ AcpiDmDumpNfit (
1566 /* Point to next subtable */
1568 - Offset += SubTable->Length;
1569 - SubTable = ACPI_ADD_PTR (ACPI_NFIT_HEADER, SubTable, SubTable->Length);
1570 + Offset += SubLength;
1571 + SubTable = ACPI_ADD_PTR (ACPI_NFIT_HEADER, SubTable, SubLength);
1575 @@ -2858,12 +2944,13 @@ AcpiDmDumpPcct (
1577 ACPI_PCCT_SUBSPACE *SubTable;
1578 ACPI_DMTABLE_INFO *InfoTable;
1579 - UINT32 Length = Table->Length;
1581 UINT32 Offset = sizeof (ACPI_TABLE_PCCT);
1586 + ACPI_MOVE_32_TO_32(&Length, &Table->Length);
1587 Status = AcpiDmDumpTable (Length, 0, Table, 0, AcpiDmTableInfoPcct);
1588 if (ACPI_FAILURE (Status))
1590 @@ -2873,7 +2960,7 @@ AcpiDmDumpPcct (
1593 SubTable = ACPI_ADD_PTR (ACPI_PCCT_SUBSPACE, Table, Offset);
1594 - while (Offset < Table->Length)
1595 + while (Offset < Length)
1597 /* Common subtable header */
1599 @@ -2949,16 +3036,21 @@ AcpiDmDumpPmtt (
1600 ACPI_PMTT_HEADER *MemSubTable;
1601 ACPI_PMTT_HEADER *DimmSubTable;
1602 ACPI_PMTT_DOMAIN *DomainArray;
1603 - UINT32 Length = Table->Length;
1605 UINT32 Offset = sizeof (ACPI_TABLE_PMTT);
1608 UINT32 DomainOffset;
1609 - UINT32 DomainCount;
1610 + UINT16 DomainCount;
1614 + UINT16 DimmLength;
1619 + ACPI_MOVE_32_TO_32(&Length, &Table->Length);
1620 Status = AcpiDmDumpTable (Length, 0, Table, 0, AcpiDmTableInfoPmtt);
1621 if (ACPI_FAILURE (Status))
1623 @@ -2968,13 +3060,14 @@ AcpiDmDumpPmtt (
1626 SubTable = ACPI_ADD_PTR (ACPI_PMTT_HEADER, Table, Offset);
1627 - while (Offset < Table->Length)
1628 + while (Offset < Length)
1630 /* Common subtable header */
1632 AcpiOsPrintf ("\n");
1633 + ACPI_MOVE_16_TO_16(&SubLength, &SubTable->Length);
1634 Status = AcpiDmDumpTable (Length, Offset, SubTable,
1635 - SubTable->Length, AcpiDmTableInfoPmttHdr);
1636 + SubLength, AcpiDmTableInfoPmttHdr);
1637 if (ACPI_FAILURE (Status))
1640 @@ -2993,7 +3086,7 @@ AcpiDmDumpPmtt (
1641 /* Dump the fixed-length portion of the subtable */
1643 Status = AcpiDmDumpTable (Length, Offset, SubTable,
1644 - SubTable->Length, AcpiDmTableInfoPmtt0);
1645 + SubLength, AcpiDmTableInfoPmtt0);
1646 if (ACPI_FAILURE (Status))
1649 @@ -3005,15 +3098,16 @@ AcpiDmDumpPmtt (
1650 MemSubTable = ACPI_ADD_PTR (ACPI_PMTT_HEADER, SubTable,
1651 sizeof (ACPI_PMTT_SOCKET));
1653 - while (((Offset + MemOffset) < Table->Length) &&
1654 - (MemOffset < SubTable->Length))
1655 + while (((Offset + MemOffset) < Length) &&
1656 + (MemOffset < SubLength))
1658 /* Common subtable header */
1660 AcpiOsPrintf ("\n");
1661 + ACPI_MOVE_16_TO_16(&MemLength, &MemSubTable->Length);
1662 Status = AcpiDmDumpTable (Length,
1663 Offset + MemOffset, MemSubTable,
1664 - MemSubTable->Length, AcpiDmTableInfoPmttHdr);
1665 + MemLength, AcpiDmTableInfoPmttHdr);
1666 if (ACPI_FAILURE (Status))
1669 @@ -3033,7 +3127,7 @@ AcpiDmDumpPmtt (
1671 Status = AcpiDmDumpTable (Length,
1672 Offset + MemOffset, MemSubTable,
1673 - MemSubTable->Length, AcpiDmTableInfoPmtt1);
1674 + MemLength, AcpiDmTableInfoPmtt1);
1675 if (ACPI_FAILURE (Status))
1678 @@ -3041,13 +3135,14 @@ AcpiDmDumpPmtt (
1680 /* Walk the variable count of proximity domains */
1682 - DomainCount = ((ACPI_PMTT_CONTROLLER *) MemSubTable)->DomainCount;
1683 + Tmp16 = ((ACPI_PMTT_CONTROLLER *) MemSubTable)->DomainCount;
1684 + ACPI_MOVE_16_TO_16(&DomainCount, &Tmp16);
1685 DomainOffset = sizeof (ACPI_PMTT_CONTROLLER);
1686 DomainArray = ACPI_ADD_PTR (ACPI_PMTT_DOMAIN, MemSubTable,
1687 sizeof (ACPI_PMTT_CONTROLLER));
1689 - while (((Offset + MemOffset + DomainOffset) < Table->Length) &&
1690 - ((MemOffset + DomainOffset) < SubTable->Length) &&
1691 + while (((Offset + MemOffset + DomainOffset) < Length) &&
1692 + ((MemOffset + DomainOffset) < SubLength) &&
1695 Status = AcpiDmDumpTable (Length,
1696 @@ -3075,15 +3170,16 @@ AcpiDmDumpPmtt (
1697 DimmSubTable = ACPI_ADD_PTR (ACPI_PMTT_HEADER, MemSubTable,
1700 - while (((Offset + MemOffset + DimmOffset) < Table->Length) &&
1701 - (DimmOffset < MemSubTable->Length))
1702 + while (((Offset + MemOffset + DimmOffset) < Length) &&
1703 + (DimmOffset < MemLength))
1705 /* Common subtable header */
1707 AcpiOsPrintf ("\n");
1708 + ACPI_MOVE_16_TO_16(&DimmLength, &DimmSubTable->Length);
1709 Status = AcpiDmDumpTable (Length,
1710 Offset + MemOffset + DimmOffset, DimmSubTable,
1711 - DimmSubTable->Length, AcpiDmTableInfoPmttHdr);
1712 + DimmLength, AcpiDmTableInfoPmttHdr);
1713 if (ACPI_FAILURE (Status))
1716 @@ -3103,7 +3199,7 @@ AcpiDmDumpPmtt (
1718 Status = AcpiDmDumpTable (Length,
1719 Offset + MemOffset + DimmOffset, DimmSubTable,
1720 - DimmSubTable->Length, AcpiDmTableInfoPmtt2);
1721 + DimmLength, AcpiDmTableInfoPmtt2);
1722 if (ACPI_FAILURE (Status))
1725 @@ -3111,23 +3207,22 @@ AcpiDmDumpPmtt (
1727 /* Point to next DIMM subtable */
1729 - DimmOffset += DimmSubTable->Length;
1730 + DimmOffset += DimmLength;
1731 DimmSubTable = ACPI_ADD_PTR (ACPI_PMTT_HEADER,
1732 - DimmSubTable, DimmSubTable->Length);
1733 + DimmSubTable, DimmLength);
1736 /* Point to next Controller subtable */
1738 - MemOffset += MemSubTable->Length;
1739 + MemOffset += MemLength;
1740 MemSubTable = ACPI_ADD_PTR (ACPI_PMTT_HEADER,
1741 - MemSubTable, MemSubTable->Length);
1742 + MemSubTable, MemLength);
1745 /* Point to next Socket subtable */
1747 - Offset += SubTable->Length;
1748 - SubTable = ACPI_ADD_PTR (ACPI_PMTT_HEADER,
1749 - SubTable, SubTable->Length);
1750 + Offset += SubLength;
1751 + SubTable = ACPI_ADD_PTR (ACPI_PMTT_HEADER, SubTable, SubLength);
1755 @@ -3153,6 +3248,8 @@ AcpiDmDumpS3pt (
1756 ACPI_FPDT_HEADER *SubTable;
1757 ACPI_DMTABLE_INFO *InfoTable;
1758 ACPI_TABLE_S3PT *S3ptTable = ACPI_CAST_PTR (ACPI_TABLE_S3PT, Tables);
1764 @@ -3163,20 +3260,22 @@ AcpiDmDumpS3pt (
1768 + ACPI_MOVE_32_TO_32(&Length, &S3ptTable->Length);
1769 SubTable = ACPI_ADD_PTR (ACPI_FPDT_HEADER, S3ptTable, Offset);
1770 - while (Offset < S3ptTable->Length)
1771 + while (Offset < Length)
1773 /* Common subtable header */
1775 AcpiOsPrintf ("\n");
1776 - Status = AcpiDmDumpTable (S3ptTable->Length, Offset, SubTable,
1777 + Status = AcpiDmDumpTable (Length, Offset, SubTable,
1778 SubTable->Length, AcpiDmTableInfoS3ptHdr);
1779 if (ACPI_FAILURE (Status))
1784 - switch (SubTable->Type)
1785 + ACPI_MOVE_16_TO_16(&SubType, &SubTable->Type);
1788 case ACPI_S3PT_TYPE_RESUME:
1790 @@ -3191,7 +3290,7 @@ AcpiDmDumpS3pt (
1793 AcpiOsPrintf ("\n**** Unknown S3PT subtable type 0x%X\n",
1797 /* Attempt to continue */
1799 @@ -3204,7 +3303,7 @@ AcpiDmDumpS3pt (
1802 AcpiOsPrintf ("\n");
1803 - Status = AcpiDmDumpTable (S3ptTable->Length, Offset, SubTable,
1804 + Status = AcpiDmDumpTable (Length, Offset, SubTable,
1805 SubTable->Length, InfoTable);
1806 if (ACPI_FAILURE (Status))
1808 @@ -3238,9 +3337,11 @@ void
1810 ACPI_TABLE_HEADER *Table)
1814 - (void) AcpiDmDumpTable (Table->Length, sizeof (ACPI_TABLE_HEADER), Table,
1815 - Table->Length - sizeof (*Table), AcpiDmTableInfoSlic);
1816 + ACPI_MOVE_32_TO_32(&Length, &Table->Length);
1817 + (void) AcpiDmDumpTable (Length, sizeof (ACPI_TABLE_HEADER), Table,
1818 + Length - sizeof (*Table), AcpiDmTableInfoSlic);
1822 @@ -3263,14 +3364,17 @@ AcpiDmDumpSlit (
1826 - UINT32 Localities;
1827 + UINT64 Localities;
1836 - Status = AcpiDmDumpTable (Table->Length, 0, Table, 0, AcpiDmTableInfoSlit);
1837 + ACPI_MOVE_32_TO_32(&Length, &Table->Length);
1838 + Status = AcpiDmDumpTable (Length, 0, Table, 0, AcpiDmTableInfoSlit);
1839 if (ACPI_FAILURE (Status))
1842 @@ -3278,7 +3382,8 @@ AcpiDmDumpSlit (
1844 /* Display the Locality NxN Matrix */
1846 - Localities = (UINT32) ACPI_CAST_PTR (ACPI_TABLE_SLIT, Table)->LocalityCount;
1847 + Tmp64 = (UINT64) ACPI_CAST_PTR (ACPI_TABLE_SLIT, Table)->LocalityCount;
1848 + ACPI_MOVE_64_TO_64(&Localities, &Tmp64);
1849 Offset = ACPI_OFFSET (ACPI_TABLE_SLIT, Entry[0]);
1850 Row = (UINT8 *) ACPI_CAST_PTR (ACPI_TABLE_SLIT, Table)->Entry;
1852 @@ -3291,7 +3396,7 @@ AcpiDmDumpSlit (
1854 /* Check for beyond EOT */
1856 - if (Offset >= Table->Length)
1857 + if (Offset >= Length)
1860 "\n**** Not enough room in table for all localities\n");
1861 @@ -3343,11 +3448,13 @@ AcpiDmDumpSrat (
1862 UINT32 Offset = sizeof (ACPI_TABLE_SRAT);
1863 ACPI_SUBTABLE_HEADER *SubTable;
1864 ACPI_DMTABLE_INFO *InfoTable;
1870 - Status = AcpiDmDumpTable (Table->Length, 0, Table, 0, AcpiDmTableInfoSrat);
1871 + ACPI_MOVE_32_TO_32(&Length, &Table->Length);
1872 + Status = AcpiDmDumpTable (Length, 0, Table, 0, AcpiDmTableInfoSrat);
1873 if (ACPI_FAILURE (Status))
1876 @@ -3356,12 +3463,12 @@ AcpiDmDumpSrat (
1879 SubTable = ACPI_ADD_PTR (ACPI_SUBTABLE_HEADER, Table, Offset);
1880 - while (Offset < Table->Length)
1881 + while (Offset < Length)
1883 /* Common subtable header */
1885 AcpiOsPrintf ("\n");
1886 - Status = AcpiDmDumpTable (Table->Length, Offset, SubTable,
1887 + Status = AcpiDmDumpTable (Length, Offset, SubTable,
1888 SubTable->Length, AcpiDmTableInfoSratHdr);
1889 if (ACPI_FAILURE (Status))
1891 @@ -3405,7 +3512,7 @@ AcpiDmDumpSrat (
1894 AcpiOsPrintf ("\n");
1895 - Status = AcpiDmDumpTable (Table->Length, Offset, SubTable,
1896 + Status = AcpiDmDumpTable (Length, Offset, SubTable,
1897 SubTable->Length, InfoTable);
1898 if (ACPI_FAILURE (Status))
1900 @@ -3442,13 +3549,14 @@ AcpiDmDumpStao (
1904 - UINT32 Length = Table->Length;
1906 UINT32 StringLength;
1907 UINT32 Offset = sizeof (ACPI_TABLE_STAO);
1912 + ACPI_MOVE_32_TO_32(&Length, &Table->Length);
1913 Status = AcpiDmDumpTable (Length, 0, Table, 0, AcpiDmTableInfoStao);
1914 if (ACPI_FAILURE (Status))
1916 @@ -3457,7 +3565,7 @@ AcpiDmDumpStao (
1918 /* The rest of the table consists of Namepath strings */
1920 - while (Offset < Table->Length)
1921 + while (Offset < Length)
1923 Namepath = ACPI_ADD_PTR (char, Table, Offset);
1924 StringLength = strlen (Namepath) + 1;
1925 @@ -3499,11 +3607,14 @@ AcpiDmDumpTcpa (
1926 ACPI_TABLE_TCPA_HDR *SubTable = ACPI_ADD_PTR (
1927 ACPI_TABLE_TCPA_HDR, Table, Offset);
1930 + UINT16 PlatformClass;
1935 - Status = AcpiDmDumpTable (Table->Length, 0, Table,
1936 + ACPI_MOVE_32_TO_32(&Length, &Table->Length);
1937 + Status = AcpiDmDumpTable (Length, 0, Table,
1938 0, AcpiDmTableInfoTcpaHdr);
1939 if (ACPI_FAILURE (Status))
1941 @@ -3514,18 +3625,19 @@ AcpiDmDumpTcpa (
1942 * Examine the PlatformClass field to determine the table type.
1943 * Either a client or server table. Only one.
1945 - switch (CommonHeader->PlatformClass)
1946 + ACPI_MOVE_16_TO_16(&PlatformClass, &CommonHeader->PlatformClass);
1947 + switch (PlatformClass)
1949 case ACPI_TCPA_CLIENT_TABLE:
1951 - Status = AcpiDmDumpTable (Table->Length, Offset, SubTable,
1952 - Table->Length - Offset, AcpiDmTableInfoTcpaClient);
1953 + Status = AcpiDmDumpTable (Length, Offset, SubTable,
1954 + Length - Offset, AcpiDmTableInfoTcpaClient);
1957 case ACPI_TCPA_SERVER_TABLE:
1959 - Status = AcpiDmDumpTable (Table->Length, Offset, SubTable,
1960 - Table->Length - Offset, AcpiDmTableInfoTcpaServer);
1961 + Status = AcpiDmDumpTable (Length, Offset, SubTable,
1962 + Length - Offset, AcpiDmTableInfoTcpaServer);
1966 @@ -3562,11 +3674,13 @@ AcpiDmDumpVrtc (
1968 UINT32 Offset = sizeof (ACPI_TABLE_VRTC);
1969 ACPI_VRTC_ENTRY *SubTable;
1975 - Status = AcpiDmDumpTable (Table->Length, 0, Table, 0, AcpiDmTableInfoVrtc);
1976 + ACPI_MOVE_32_TO_32(&Length, &Table->Length);
1977 + Status = AcpiDmDumpTable (Length, 0, Table, 0, AcpiDmTableInfoVrtc);
1978 if (ACPI_FAILURE (Status))
1981 @@ -3575,12 +3689,12 @@ AcpiDmDumpVrtc (
1984 SubTable = ACPI_ADD_PTR (ACPI_VRTC_ENTRY, Table, Offset);
1985 - while (Offset < Table->Length)
1986 + while (Offset < Length)
1988 /* Common subtable header */
1990 AcpiOsPrintf ("\n");
1991 - Status = AcpiDmDumpTable (Table->Length, Offset, SubTable,
1992 + Status = AcpiDmDumpTable (Length, Offset, SubTable,
1993 sizeof (ACPI_VRTC_ENTRY), AcpiDmTableInfoVrtc0);
1994 if (ACPI_FAILURE (Status))
1996 @@ -3615,11 +3729,13 @@ AcpiDmDumpWdat (
1998 UINT32 Offset = sizeof (ACPI_TABLE_WDAT);
1999 ACPI_WDAT_ENTRY *SubTable;
2005 - Status = AcpiDmDumpTable (Table->Length, 0, Table, 0, AcpiDmTableInfoWdat);
2006 + ACPI_MOVE_32_TO_32(&Length, &Table->Length);
2007 + Status = AcpiDmDumpTable (Length, 0, Table, 0, AcpiDmTableInfoWdat);
2008 if (ACPI_FAILURE (Status))
2011 @@ -3628,12 +3744,12 @@ AcpiDmDumpWdat (
2014 SubTable = ACPI_ADD_PTR (ACPI_WDAT_ENTRY, Table, Offset);
2015 - while (Offset < Table->Length)
2016 + while (Offset < Length)
2018 /* Common subtable header */
2020 AcpiOsPrintf ("\n");
2021 - Status = AcpiDmDumpTable (Table->Length, Offset, SubTable,
2022 + Status = AcpiDmDumpTable (Length, Offset, SubTable,
2023 sizeof (ACPI_WDAT_ENTRY), AcpiDmTableInfoWdat0);
2024 if (ACPI_FAILURE (Status))
2026 @@ -3668,12 +3784,13 @@ AcpiDmDumpWpbt (
2029 ACPI_TABLE_WPBT *SubTable;
2030 - UINT32 Length = Table->Length;
2032 UINT16 ArgumentsLength;
2035 /* Dump the main table */
2037 + ACPI_MOVE_32_TO_32(&Length, &Table->Length);
2038 Status = AcpiDmDumpTable (Length, 0, Table, 0, AcpiDmTableInfoWpbt);
2039 if (ACPI_FAILURE (Status))
2041 @@ -3683,10 +3800,10 @@ AcpiDmDumpWpbt (
2042 /* Extract the arguments buffer length from the main table */
2044 SubTable = ACPI_CAST_PTR (ACPI_TABLE_WPBT, Table);
2045 - ArgumentsLength = SubTable->ArgumentsLength;
2046 + ACPI_MOVE_16_TO_16(&ArgumentsLength, &SubTable->ArgumentsLength);
2048 /* Dump the arguments buffer */
2050 - (void) AcpiDmDumpTable (Table->Length, 0, Table, ArgumentsLength,
2051 + (void) AcpiDmDumpTable (Length, 0, Table, ArgumentsLength,
2052 AcpiDmTableInfoWpbt0);
2054 Index: acpica-unix2-20170303/source/compiler/aslrestype2.c
2055 ===================================================================
2056 --- acpica-unix2-20170303.orig/source/compiler/aslrestype2.c
2057 +++ acpica-unix2-20170303/source/compiler/aslrestype2.c
2058 @@ -98,21 +98,33 @@ RsDoGeneralRegisterDescriptor (
2060 case 0: /* Address space */
2063 Descriptor->GenericReg.AddressSpaceId = (UINT8) InitializerOp->Asl.Value.Integer;
2065 + ACPI_MOVE_64_TO_8(&Descriptor->GenericReg.AddressSpaceId,
2066 + &InitializerOp->Asl.Value.Integer);
2067 RsCreateByteField (InitializerOp, ACPI_RESTAG_ADDRESSSPACE,
2068 CurrentByteOffset + ASL_RESDESC_OFFSET (GenericReg.AddressSpaceId));
2071 case 1: /* Register Bit Width */
2074 Descriptor->GenericReg.BitWidth = (UINT8) InitializerOp->Asl.Value.Integer;
2076 + ACPI_MOVE_64_TO_8(&Descriptor->GenericReg.BitWidth,
2077 + &InitializerOp->Asl.Value.Integer);
2078 RsCreateByteField (InitializerOp, ACPI_RESTAG_REGISTERBITWIDTH,
2079 CurrentByteOffset + ASL_RESDESC_OFFSET (GenericReg.BitWidth));
2082 case 2: /* Register Bit Offset */
2085 Descriptor->GenericReg.BitOffset = (UINT8) InitializerOp->Asl.Value.Integer;
2087 + ACPI_MOVE_64_TO_8(&Descriptor->GenericReg.BitOffset,
2088 + &InitializerOp->Asl.Value.Integer);
2089 RsCreateByteField (InitializerOp, ACPI_RESTAG_REGISTERBITOFFSET,
2090 CurrentByteOffset + ASL_RESDESC_OFFSET (GenericReg.BitOffset));
2092 @@ -127,7 +139,11 @@ RsDoGeneralRegisterDescriptor (
2094 case 4: /* Access Size (ACPI 3.0) */
2097 Descriptor->GenericReg.AccessSize = (UINT8) InitializerOp->Asl.Value.Integer;
2099 + ACPI_MOVE_64_TO_8(&Descriptor->GenericReg.AccessSize,
2100 + &InitializerOp->Asl.Value.Integer);
2101 RsCreateByteField (InitializerOp, ACPI_RESTAG_ACCESSSIZE,
2102 CurrentByteOffset + ASL_RESDESC_OFFSET (GenericReg.AccessSize));
2104 Index: acpica-unix2-20170303/source/compiler/dtfield.c
2105 ===================================================================
2106 --- acpica-unix2-20170303.orig/source/compiler/dtfield.c
2107 +++ acpica-unix2-20170303/source/compiler/dtfield.c
2108 @@ -360,7 +360,27 @@ DtCompileInteger (
2109 DtError (ASL_ERROR, ASL_MSG_INTEGER_SIZE, Field, MsgBuffer);
2112 - memcpy (Buffer, &Value, ByteLength);
2113 + switch (ByteLength) {
2115 + ACPI_MOVE_64_TO_8(Buffer, &Value);
2119 + ACPI_MOVE_64_TO_16(Buffer, &Value);
2123 + ACPI_MOVE_64_TO_32(Buffer, &Value);
2127 + ACPI_MOVE_64_TO_64(Buffer, &Value);
2131 + memcpy (Buffer, &Value, ByteLength);
2137 Index: acpica-unix2-20170303/source/compiler/dtsubtable.c
2138 ===================================================================
2139 --- acpica-unix2-20170303.orig/source/compiler/dtsubtable.c
2140 +++ acpica-unix2-20170303/source/compiler/dtsubtable.c
2141 @@ -379,6 +379,21 @@ DtSetSubtableLength (
2145 - memcpy (Subtable->LengthField, &Subtable->TotalLength,
2146 - Subtable->SizeOfLengthField);
2147 + switch(Subtable->SizeOfLengthField) {
2149 + ACPI_MOVE_32_TO_8(Subtable->LengthField, &Subtable->TotalLength);
2153 + ACPI_MOVE_32_TO_16(Subtable->LengthField, &Subtable->TotalLength);
2157 + ACPI_MOVE_32_TO_32(Subtable->LengthField, &Subtable->TotalLength);
2161 + memcpy (Subtable->LengthField, &Subtable->TotalLength,
2162 + Subtable->SizeOfLengthField);
2165 Index: acpica-unix2-20170303/source/compiler/dttable1.c
2166 ===================================================================
2167 --- acpica-unix2-20170303.orig/source/compiler/dttable1.c
2168 +++ acpica-unix2-20170303/source/compiler/dttable1.c
2169 @@ -282,6 +282,8 @@ DtCompileCsrt (
2170 DT_FIELD **PFieldList = (DT_FIELD **) List;
2171 UINT32 DescriptorCount;
2173 + ACPI_CSRT_GROUP *Pgrp;
2177 /* Subtables (Resource Groups) */
2178 @@ -300,12 +302,20 @@ DtCompileCsrt (
2180 /* Compute the number of resource descriptors */
2184 (ACPI_CAST_PTR (ACPI_CSRT_GROUP,
2185 Subtable->Buffer))->Length -
2186 (ACPI_CAST_PTR (ACPI_CSRT_GROUP,
2187 Subtable->Buffer))->SharedInfoLength -
2188 sizeof (ACPI_CSRT_GROUP);
2190 + Pgrp = ACPI_CAST_PTR(ACPI_CSRT_GROUP, Subtable->Buffer);
2191 + ACPI_MOVE_32_TO_32(&Tmp32, &Pgrp->Length);
2192 + GroupLength = Tmp32;
2193 + ACPI_MOVE_32_TO_32(&Tmp32, &Pgrp->SharedInfoLength);
2194 + GroupLength -= Tmp32;
2195 + GroupLength -= sizeof (ACPI_CSRT_GROUP);
2197 DescriptorCount = (GroupLength /
2198 sizeof (ACPI_CSRT_DESCRIPTOR));
2199 @@ -393,6 +403,8 @@ DtCompileDbg2 (
2200 ACPI_DBG2_DEVICE *DeviceInfo;
2201 UINT16 CurrentOffset;
2208 @@ -409,10 +421,11 @@ DtCompileDbg2 (
2209 /* Main table fields */
2211 Dbg2Header = ACPI_CAST_PTR (ACPI_DBG2_HEADER, Subtable->Buffer);
2212 - Dbg2Header->InfoOffset = sizeof (ACPI_TABLE_HEADER) + ACPI_PTR_DIFF (
2213 + Tmp32 = sizeof (ACPI_TABLE_HEADER) + ACPI_PTR_DIFF (
2214 ACPI_ADD_PTR (UINT8, Dbg2Header, sizeof (ACPI_DBG2_HEADER)), Dbg2Header);
2215 + ACPI_MOVE_32_TO_32(&Dbg2Header->InfoOffset, &Tmp32);
2217 - SubtableCount = Dbg2Header->InfoCount;
2218 + ACPI_MOVE_32_TO_32(&SubtableCount, &Dbg2Header->InfoCount);
2219 DtPushSubtable (Subtable);
2221 /* Process all Device Information subtables (Count = InfoCount) */
2222 @@ -439,7 +452,7 @@ DtCompileDbg2 (
2224 /* BaseAddressRegister GAS array (Required, size is RegisterCount) */
2226 - DeviceInfo->BaseAddressOffset = CurrentOffset;
2227 + ACPI_MOVE_16_TO_16(&DeviceInfo->BaseAddressOffset, &CurrentOffset);
2228 for (i = 0; *PFieldList && (i < DeviceInfo->RegisterCount); i++)
2230 Status = DtCompileTable (PFieldList, AcpiDmTableInfoDbg2Addr,
2231 @@ -455,7 +468,7 @@ DtCompileDbg2 (
2233 /* AddressSize array (Required, size = RegisterCount) */
2235 - DeviceInfo->AddressSizeOffset = CurrentOffset;
2236 + ACPI_MOVE_16_TO_16(&DeviceInfo->AddressSizeOffset, &CurrentOffset);
2237 for (i = 0; *PFieldList && (i < DeviceInfo->RegisterCount); i++)
2239 Status = DtCompileTable (PFieldList, AcpiDmTableInfoDbg2Size,
2240 @@ -471,7 +484,7 @@ DtCompileDbg2 (
2242 /* NamespaceString device identifier (Required, size = NamePathLength) */
2244 - DeviceInfo->NamepathOffset = CurrentOffset;
2245 + ACPI_MOVE_16_TO_16(&DeviceInfo->NamepathOffset, &CurrentOffset);
2246 Status = DtCompileTable (PFieldList, AcpiDmTableInfoDbg2Name,
2248 if (ACPI_FAILURE (Status))
2249 @@ -481,8 +494,9 @@ DtCompileDbg2 (
2251 /* Update the device info header */
2253 - DeviceInfo->NamepathLength = (UINT16) Subtable->Length;
2254 - CurrentOffset += (UINT16) DeviceInfo->NamepathLength;
2255 + ACPI_MOVE_32_TO_16(&DeviceInfo->NamepathLength, &Subtable->Length);
2256 + ACPI_MOVE_16_TO_16(&Tmp16, &DeviceInfo->NamepathLength);
2257 + CurrentOffset += Tmp16;
2258 DtInsertSubtable (ParentTable, Subtable);
2260 /* OemData - Variable-length data (Optional, size = OemDataLength) */
2261 @@ -503,8 +517,8 @@ DtCompileDbg2 (
2263 if (Subtable && Subtable->Length)
2265 - DeviceInfo->OemDataOffset = CurrentOffset;
2266 - DeviceInfo->OemDataLength = (UINT16) Subtable->Length;
2267 + ACPI_MOVE_16_TO_16(&DeviceInfo->OemDataOffset, &CurrentOffset);
2268 + ACPI_MOVE_32_TO_16(&DeviceInfo->OemDataLength, &Subtable->Length);
2270 DtInsertSubtable (ParentTable, Subtable);
2272 @@ -544,6 +558,8 @@ DtCompileDmar (
2273 ACPI_DMAR_DEVICE_SCOPE *DmarDeviceScope;
2274 UINT32 DeviceScopeLength;
2275 UINT32 PciPathLength;
2280 Status = DtCompileTable (PFieldList, AcpiDmTableInfoDmar, &Subtable, TRUE);
2281 @@ -573,8 +589,11 @@ DtCompileDmar (
2282 DtPushSubtable (Subtable);
2284 DmarHeader = ACPI_CAST_PTR (ACPI_DMAR_HEADER, Subtable->Buffer);
2285 + ACPI_MOVE_16_TO_16(&Tmp16, &DmarHeader->Length);
2286 + DmarHeader->Length = Tmp16;
2288 - switch (DmarHeader->Type)
2289 + ACPI_MOVE_16_TO_16(&HdrType, &DmarHeader->Type);
2292 case ACPI_DMAR_TYPE_HARDWARE_UNIT:
2294 @@ -621,8 +640,8 @@ DtCompileDmar (
2296 * Optional Device Scope subtables
2298 - if ((DmarHeader->Type == ACPI_DMAR_TYPE_HARDWARE_AFFINITY) ||
2299 - (DmarHeader->Type == ACPI_DMAR_TYPE_NAMESPACE))
2300 + if ((HdrType == ACPI_DMAR_TYPE_HARDWARE_AFFINITY) ||
2301 + (HdrType == ACPI_DMAR_TYPE_NAMESPACE))
2303 /* These types do not support device scopes */
2305 @@ -631,8 +650,8 @@ DtCompileDmar (
2308 DtPushSubtable (Subtable);
2309 - DeviceScopeLength = DmarHeader->Length - Subtable->Length -
2310 - ParentTable->Length;
2311 + DeviceScopeLength = DmarHeader->Length - Subtable->Length -
2312 + ParentTable->Length;
2313 while (DeviceScopeLength)
2315 Status = DtCompileTable (PFieldList, AcpiDmTableInfoDmarScope,
2316 @@ -757,7 +776,7 @@ DtCompileDrtm (
2320 - DrtmVtl->ValidatedTableCount = Count;
2321 + ACPI_MOVE_32_TO_32(&DrtmVtl->ValidatedTableCount, &Count);
2323 ParentTable = DtPeekSubtable ();
2325 @@ -795,7 +814,7 @@ DtCompileDrtm (
2329 - DrtmRl->ResourceCount = Count;
2330 + ACPI_MOVE_32_TO_32(&DrtmRl->ResourceCount, &Count);
2332 ParentTable = DtPeekSubtable ();
2334 @@ -889,6 +908,7 @@ DtCompileGtdt (
2335 ACPI_SUBTABLE_HEADER *GtdtHeader;
2336 ACPI_DMTABLE_INFO *InfoTable;
2338 + ACPI_GTDT_TIMER_BLOCK *TimerBlock;
2341 Status = DtCompileTable (PFieldList, AcpiDmTableInfoGtdt,
2342 @@ -955,8 +975,9 @@ DtCompileGtdt (
2343 DtPushSubtable (Subtable);
2344 ParentTable = DtPeekSubtable ();
2346 - GtCount = (ACPI_CAST_PTR (ACPI_GTDT_TIMER_BLOCK,
2347 - Subtable->Buffer - sizeof(ACPI_GTDT_HEADER)))->TimerCount;
2348 + TimerBlock = ACPI_CAST_PTR (ACPI_GTDT_TIMER_BLOCK,
2349 + Subtable->Buffer - sizeof(ACPI_GTDT_HEADER));
2350 + ACPI_MOVE_32_TO_32(&GtCount, &TimerBlock->TimerCount);
2354 @@ -1009,6 +1030,7 @@ DtCompileFpdt (
2355 ACPI_DMTABLE_INFO *InfoTable;
2356 DT_FIELD **PFieldList = (DT_FIELD **) List;
2357 DT_FIELD *SubtableStart;
2362 @@ -1027,7 +1049,8 @@ DtCompileFpdt (
2364 FpdtHeader = ACPI_CAST_PTR (ACPI_FPDT_HEADER, Subtable->Buffer);
2366 - switch (FpdtHeader->Type)
2367 + ACPI_MOVE_16_TO_16(&HdrType, &FpdtHeader->Type);
2370 case ACPI_FPDT_TYPE_BOOT:
2372 @@ -1085,6 +1108,7 @@ DtCompileHest (
2373 ACPI_DMTABLE_INFO *InfoTable;
2379 Status = DtCompileTable (PFieldList, AcpiDmTableInfoHest,
2380 @@ -1102,8 +1126,9 @@ DtCompileHest (
2381 /* Get subtable type */
2383 SubtableStart = *PFieldList;
2384 - DtCompileInteger ((UINT8 *) &Type, *PFieldList, 2, 0);
2385 + DtCompileInteger ((UINT8 *) &Tmp16, *PFieldList, 2, 0);
2387 + ACPI_MOVE_16_TO_16(&Type, &Tmp16);
2390 case ACPI_HEST_TYPE_IA32_CHECK:
2391 @@ -1225,11 +1250,13 @@ DtCompileIort (
2392 ACPI_IORT_SMMU *IortSmmu;
2395 + UINT32 NodeOffset;
2396 UINT32 IdMappingNumber;
2398 UINT32 ContextIrptNumber;
2399 UINT32 PmuIrptNumber;
2400 UINT32 PaddingLength;
2401 + UINT32 MappingOffset;
2404 ParentTable = DtPeekSubtable ();
2405 @@ -1255,7 +1282,7 @@ DtCompileIort (
2406 * Optionally allows the generic data types to be used for filling
2409 - Iort->NodeOffset = sizeof (ACPI_TABLE_IORT);
2410 + NodeOffset = sizeof (ACPI_TABLE_IORT);
2411 Status = DtCompileTable (PFieldList, AcpiDmTableInfoIortPad,
2413 if (ACPI_FAILURE (Status))
2414 @@ -1265,7 +1292,7 @@ DtCompileIort (
2417 DtInsertSubtable (ParentTable, Subtable);
2418 - Iort->NodeOffset += Subtable->Length;
2419 + NodeOffset += Subtable->Length;
2423 @@ -1275,8 +1302,9 @@ DtCompileIort (
2427 - Iort->NodeOffset += PaddingLength;
2428 + NodeOffset += PaddingLength;
2430 + ACPI_MOVE_32_TO_32(&Iort->NodeOffset, &NodeOffset);
2434 @@ -1330,7 +1358,7 @@ DtCompileIort (
2438 - IortItsGroup->ItsCount = ItsNumber;
2439 + ACPI_MOVE_32_TO_32(&IortItsGroup->ItsCount, &ItsNumber);
2442 case ACPI_IORT_NODE_NAMED_COMPONENT:
2443 @@ -1364,15 +1392,16 @@ DtCompileIort (
2447 - if (NodeLength > IortNode->MappingOffset)
2448 + ACPI_MOVE_32_TO_32(&MappingOffset, &IortNode->MappingOffset);
2449 + if (NodeLength > MappingOffset)
2451 return (AE_BAD_DATA);
2454 - if (NodeLength < IortNode->MappingOffset)
2455 + if (NodeLength < MappingOffset)
2457 Status = DtCompilePadding (
2458 - IortNode->MappingOffset - NodeLength,
2459 + MappingOffset - NodeLength,
2461 if (ACPI_FAILURE (Status))
2463 @@ -1380,7 +1409,8 @@ DtCompileIort (
2466 DtInsertSubtable (ParentTable, Subtable);
2467 - NodeLength = IortNode->MappingOffset;
2468 + ACPI_MOVE_32_TO_32(&MappingOffset, &IortNode->MappingOffset);
2469 + NodeLength = MappingOffset;
2473 @@ -1413,7 +1443,7 @@ DtCompileIort (
2475 /* Compile global interrupt array */
2477 - IortSmmu->GlobalInterruptOffset = NodeLength;
2478 + ACPI_MOVE_32_TO_32(&IortSmmu->GlobalInterruptOffset, &NodeLength);
2479 Status = DtCompileTable (PFieldList, AcpiDmTableInfoIort3a,
2481 if (ACPI_FAILURE (Status))
2482 @@ -1427,7 +1457,7 @@ DtCompileIort (
2483 /* Compile context interrupt array */
2485 ContextIrptNumber = 0;
2486 - IortSmmu->ContextInterruptOffset = NodeLength;
2487 + ACPI_MOVE_32_TO_32(&IortSmmu->ContextInterruptOffset, &NodeLength);
2490 Status = DtCompileTable (PFieldList, AcpiDmTableInfoIort3b,
2491 @@ -1447,12 +1477,12 @@ DtCompileIort (
2492 ContextIrptNumber++;
2495 - IortSmmu->ContextInterruptCount = ContextIrptNumber;
2496 + ACPI_MOVE_32_TO_32(&IortSmmu->ContextInterruptCount, &ContextIrptNumber);
2498 /* Compile PMU interrupt array */
2501 - IortSmmu->PmuInterruptOffset = NodeLength;
2502 + ACPI_MOVE_32_TO_32(&IortSmmu->PmuInterruptOffset, &NodeLength);
2505 Status = DtCompileTable (PFieldList, AcpiDmTableInfoIort3c,
2506 @@ -1472,7 +1502,7 @@ DtCompileIort (
2510 - IortSmmu->PmuInterruptCount = PmuIrptNumber;
2511 + ACPI_MOVE_32_TO_32(&IortSmmu->PmuInterruptCount, &PmuIrptNumber);
2514 case ACPI_IORT_NODE_SMMU_V3:
2515 @@ -1496,7 +1526,7 @@ DtCompileIort (
2517 /* Compile Array of ID mappings */
2519 - IortNode->MappingOffset = NodeLength;
2520 + ACPI_MOVE_32_TO_32(&IortNode->MappingOffset, &NodeLength);
2521 IdMappingNumber = 0;
2524 @@ -1517,7 +1547,7 @@ DtCompileIort (
2528 - IortNode->MappingCount = IdMappingNumber;
2529 + ACPI_MOVE_32_TO_32(&IortNode->MappingCount, &IdMappingNumber);
2530 if (!IdMappingNumber)
2532 IortNode->MappingOffset = 0;
2533 @@ -1532,7 +1562,7 @@ DtCompileIort (
2537 - Iort->NodeCount = NodeNumber;
2538 + ACPI_MOVE_32_TO_32(&Iort->NodeCount, &NodeNumber);
2542 Index: acpica-unix2-20170303/source/compiler/dttable2.c
2543 ===================================================================
2544 --- acpica-unix2-20170303.orig/source/compiler/dttable2.c
2545 +++ acpica-unix2-20170303/source/compiler/dttable2.c
2546 @@ -346,7 +346,7 @@ DtCompileMpst (
2547 DtPushSubtable (Subtable);
2549 MpstChannelInfo = ACPI_CAST_PTR (ACPI_MPST_CHANNEL, Subtable->Buffer);
2550 - SubtableCount = MpstChannelInfo->PowerNodeCount;
2551 + ACPI_MOVE_16_TO_16(&SubtableCount, &MpstChannelInfo->PowerNodeCount);
2553 while (*PFieldList && SubtableCount)
2555 @@ -364,8 +364,8 @@ DtCompileMpst (
2556 DtPushSubtable (Subtable);
2558 MpstPowerNode = ACPI_CAST_PTR (ACPI_MPST_POWER_NODE, Subtable->Buffer);
2559 - PowerStateCount = MpstPowerNode->NumPowerStates;
2560 - ComponentCount = MpstPowerNode->NumPhysicalComponents;
2561 + ACPI_MOVE_32_TO_32(&PowerStateCount, &MpstPowerNode->NumPowerStates);
2562 + ACPI_MOVE_32_TO_32(&ComponentCount, &MpstPowerNode->NumPhysicalComponents);
2564 ParentTable = DtPeekSubtable ();
2566 @@ -518,6 +518,7 @@ DtCompileNfit (
2568 ACPI_NFIT_INTERLEAVE *Interleave = NULL;
2569 ACPI_NFIT_FLUSH_ADDRESS *Hint = NULL;
2574 @@ -551,7 +552,8 @@ DtCompileNfit (
2576 NfitHeader = ACPI_CAST_PTR (ACPI_NFIT_HEADER, Subtable->Buffer);
2578 - switch (NfitHeader->Type)
2579 + ACPI_MOVE_16_TO_16(&SubType, &NfitHeader->Type);
2582 case ACPI_NFIT_TYPE_SYSTEM_ADDRESS:
2584 @@ -606,7 +608,7 @@ DtCompileNfit (
2585 DtInsertSubtable (ParentTable, Subtable);
2588 - switch (NfitHeader->Type)
2591 case ACPI_NFIT_TYPE_INTERLEAVE:
2593 @@ -632,7 +634,7 @@ DtCompileNfit (
2597 - Interleave->LineCount = Count;
2598 + ACPI_MOVE_32_TO_32(&Interleave->LineCount, &Count);
2602 @@ -678,7 +680,7 @@ DtCompileNfit (
2606 - Hint->HintCount = (UINT16) Count;
2607 + ACPI_MOVE_32_TO_16(&Hint->HintCount, &Count);
2611 @@ -885,7 +887,7 @@ DtCompilePmtt (
2613 PmttController = ACPI_CAST_PTR (ACPI_PMTT_CONTROLLER,
2614 (Subtable->Buffer - sizeof (ACPI_PMTT_HEADER)));
2615 - DomainCount = PmttController->DomainCount;
2616 + ACPI_MOVE_16_TO_16(&DomainCount, &PmttController->DomainCount);
2620 @@ -986,6 +988,7 @@ DtCompileS3pt (
2621 DT_SUBTABLE *ParentTable;
2622 ACPI_DMTABLE_INFO *InfoTable;
2623 DT_FIELD *SubtableStart;
2627 Status = DtCompileTable (PFieldList, AcpiDmTableInfoS3pt,
2628 @@ -1013,7 +1016,8 @@ DtCompileS3pt (
2630 S3ptHeader = ACPI_CAST_PTR (ACPI_FPDT_HEADER, Subtable->Buffer);
2632 - switch (S3ptHeader->Type)
2633 + ACPI_MOVE_16_TO_16(&HdrType, &S3ptHeader->Type);
2636 case ACPI_S3PT_TYPE_RESUME:
2638 @@ -1110,6 +1114,7 @@ DtCompileSlit (
2639 DT_FIELD *FieldList;
2641 UINT8 *LocalityBuffer;
2645 Status = DtCompileTable (PFieldList, AcpiDmTableInfoSlit,
2646 @@ -1122,7 +1127,8 @@ DtCompileSlit (
2647 ParentTable = DtPeekSubtable ();
2648 DtInsertSubtable (ParentTable, Subtable);
2650 - Localities = *ACPI_CAST_PTR (UINT32, Subtable->Buffer);
2651 + Tmp = *ACPI_CAST_PTR (UINT32, Subtable->Buffer);
2652 + ACPI_MOVE_32_TO_32(&Localities, &Tmp);
2653 LocalityBuffer = UtLocalCalloc (Localities);
2655 /* Compile each locality buffer */
2656 @@ -1311,6 +1317,7 @@ DtCompileTcpa (
2657 ACPI_TABLE_TCPA_HDR *TcpaHeader;
2658 DT_SUBTABLE *ParentTable;
2663 /* Compile the main table */
2664 @@ -1331,7 +1338,8 @@ DtCompileTcpa (
2666 TcpaHeader = ACPI_CAST_PTR (ACPI_TABLE_TCPA_HDR, ParentTable->Buffer);
2668 - switch (TcpaHeader->PlatformClass)
2669 + ACPI_MOVE_16_TO_16(&PlatClass, &TcpaHeader->PlatformClass);
2670 + switch (PlatClass)
2672 case ACPI_TCPA_CLIENT_TABLE:
2674 @@ -1527,6 +1535,9 @@ DtCompileWpbt (
2675 ACPI_TABLE_WPBT *Table;
2683 /* Compile the main table */
2684 @@ -1554,7 +1565,16 @@ DtCompileWpbt (
2686 Length = (UINT16) Subtable->TotalLength;
2687 Table = ACPI_CAST_PTR (ACPI_TABLE_WPBT, ParentTable->Buffer);
2688 - Table->ArgumentsLength = Length;
2689 + ACPI_MOVE_16_TO_16(&Table->ArgumentsLength, &Length);
2691 + /* The arguments are in Unicode, so make sure the byte order is correct */
2692 + Ptr16 = (UINT16 *)Subtable->Buffer;
2693 + for (ii = 0; ii < Length; ii++)
2695 + ACPI_MOVE_16_TO_16(&Tmp16, Ptr16);
2700 ParentTable = DtPeekSubtable ();
2701 DtInsertSubtable (ParentTable, Subtable);
2702 Index: acpica-unix2-20170303/source/components/disassembler/dmbuffer.c
2703 ===================================================================
2704 --- acpica-unix2-20170303.orig/source/components/disassembler/dmbuffer.c
2705 +++ acpica-unix2-20170303/source/components/disassembler/dmbuffer.c
2706 @@ -204,7 +204,7 @@ AcpiDmByteList (
2709 ByteData = Op->Named.Data;
2710 - ByteCount = (UINT32) Op->Common.Value.Integer;
2711 + ByteCount = (UINT32) Op->Common.Value.Size;
2714 * The byte list belongs to a buffer, and can be produced by either
2715 @@ -304,7 +304,8 @@ AcpiDmIsUuidBuffer (
2716 /* Extract the byte list info */
2718 ByteData = NextOp->Named.Data;
2719 - ByteCount = (UINT32) NextOp->Common.Value.Integer;
2720 + /* ByteCount = (UINT32) NextOp->Common.Value.Integer; */
2721 + ByteCount = (UINT32) NextOp->Common.Value.Size;
2723 /* Byte count must be exactly 16 */
2725 @@ -424,7 +425,8 @@ AcpiDmIsUnicodeBuffer (
2726 /* Extract the byte list info */
2728 ByteData = NextOp->Named.Data;
2729 - ByteCount = (UINT32) NextOp->Common.Value.Integer;
2730 + /* ByteCount = (UINT32) NextOp->Common.Value.Integer; */
2731 + ByteCount = (UINT32) NextOp->Common.Value.Size;
2732 WordCount = ACPI_DIV_2 (ByteCount);
2735 @@ -852,19 +854,22 @@ AcpiDmUnicode (
2742 /* Extract the buffer info as a WORD buffer */
2744 WordData = ACPI_CAST_PTR (UINT16, Op->Named.Data);
2745 - WordCount = ACPI_DIV_2 (((UINT32) Op->Common.Value.Integer));
2746 + WordCount = ACPI_DIV_2 (((UINT32) Op->Common.Value.Size));
2748 /* Write every other byte as an ASCII character */
2750 AcpiOsPrintf ("\"");
2751 for (i = 0; i < (WordCount - 1); i++)
2753 - OutputValue = (int) WordData[i];
2754 + /* OutputValue = (int) WordData[i]; */
2755 + ACPI_MOVE_16_TO_16(&Tmp16, &WordData[i]);
2756 + OutputValue = (int) Tmp16;
2758 /* Handle values that must be escaped */
2760 @@ -973,16 +978,18 @@ AcpiDmCheckForHardwareId (
2761 ACPI_PARSE_OBJECT *Op)
2765 ACPI_PARSE_OBJECT *NextOp;
2768 /* Get the NameSegment */
2770 - Name = AcpiPsGetName (Op);
2772 + TmpName = AcpiPsGetName (Op);
2777 + ACPI_MOVE_32_TO_32(&Name, &TmpName);
2779 NextOp = AcpiPsGetDepthNext (NULL, Op);
2781 Index: acpica-unix2-20170303/source/components/disassembler/dmopcode.c
2782 ===================================================================
2783 --- acpica-unix2-20170303.orig/source/components/disassembler/dmopcode.c
2784 +++ acpica-unix2-20170303/source/components/disassembler/dmopcode.c
2785 @@ -253,6 +253,7 @@ AcpiDmPredefinedDescription (
2787 int LastCharIsDigit;
2788 int LastCharsAreHex;
2789 + char TmpName[ACPI_NAME_SIZE + 1];
2793 @@ -270,7 +271,9 @@ AcpiDmPredefinedDescription (
2795 /* Predefined name must start with an underscore */
2797 - NameString = ACPI_CAST_PTR (char, &Op->Named.Name);
2798 + memset(TmpName, 0, ACPI_NAME_SIZE + 1);
2799 + ACPI_MOVE_32_TO_32(TmpName, &Op->Named.Name);
2800 + NameString = TmpName;
2801 if (NameString[0] != '_')
2804 @@ -884,25 +887,29 @@ AcpiDmDisassembleOneOp (
2805 AcpiDmNamestring (Op->Common.Value.Name);
2808 - case AML_INT_NAMEDFIELD_OP:
2809 + case AML_INT_NAMEDFIELD_OP: {
2811 - Length = AcpiDmDumpName (Op->Named.Name);
2814 + ACPI_MOVE_32_TO_32(&TmpName, &Op->Named.Name);
2815 + Length = AcpiDmDumpName (TmpName);
2818 ASL_CV_PRINT_ONE_COMMENT (Op, AML_NAMECOMMENT, NULL, 0);
2819 AcpiOsPrintf ("%*.s %u", (unsigned) (5 - Length), " ",
2820 - (UINT32) Op->Common.Value.Integer);
2821 + (UINT32) Op->Common.Value.Size);
2823 AcpiDmCommaIfFieldMember (Op);
2825 - Info->BitOffset += (UINT32) Op->Common.Value.Integer;
2826 + Info->BitOffset += (UINT32) Op->Common.Value.Size;
2830 case AML_INT_RESERVEDFIELD_OP:
2832 /* Offset() -- Must account for previous offsets */
2834 - Offset = (UINT32) Op->Common.Value.Integer;
2835 + Offset = Op->Common.Value.Size;
2836 Info->BitOffset += Offset;
2838 if (Info->BitOffset % 8 == 0)
2839 Index: acpica-unix2-20170303/source/components/disassembler/dmresrcl2.c
2840 ===================================================================
2841 --- acpica-unix2-20170303.orig/source/components/disassembler/dmresrcl2.c
2842 +++ acpica-unix2-20170303/source/components/disassembler/dmresrcl2.c
2843 @@ -191,22 +191,24 @@ AcpiDmGpioCommon (
2844 char *DeviceName = NULL;
2850 /* ResourceSource, ResourceSourceIndex, ResourceType */
2852 AcpiDmIndent (Level + 1);
2853 - if (Resource->Gpio.ResSourceOffset)
2854 + ACPI_MOVE_16_TO_16(&Tmp16, &Resource->Gpio.ResSourceOffset);
2857 - DeviceName = ACPI_ADD_PTR (char,
2858 - Resource, Resource->Gpio.ResSourceOffset),
2859 + DeviceName = ACPI_ADD_PTR (char, Resource, Tmp16),
2860 AcpiUtPrintString (DeviceName, ACPI_UINT16_MAX);
2863 AcpiOsPrintf (", ");
2864 AcpiOsPrintf ("0x%2.2X, ", Resource->Gpio.ResSourceIndex);
2865 + ACPI_MOVE_16_TO_16(&Tmp16, &Resource->Gpio.Flags);
2866 AcpiOsPrintf ("%s, ",
2867 - AcpiGbl_ConsumeDecode [ACPI_GET_1BIT_FLAG (Resource->Gpio.Flags)]);
2868 + AcpiGbl_ConsumeDecode [ACPI_GET_1BIT_FLAG (Tmp16)]);
2870 /* Insert a descriptor name */
2872 @@ -215,15 +217,16 @@ AcpiDmGpioCommon (
2874 /* Dump the vendor data */
2876 - if (Resource->Gpio.VendorOffset)
2877 + ACPI_MOVE_16_TO_16(&Tmp16, &Resource->Gpio.VendorOffset);
2880 AcpiOsPrintf ("\n");
2881 AcpiDmIndent (Level + 1);
2882 - VendorData = ACPI_ADD_PTR (UINT8, Resource,
2883 - Resource->Gpio.VendorOffset);
2884 + ACPI_MOVE_16_TO_16(&Tmp16, &Resource->Gpio.VendorOffset);
2885 + VendorData = ACPI_ADD_PTR (UINT8, Resource, Tmp16);
2887 - AcpiDmDumpRawDataBuffer (VendorData,
2888 - Resource->Gpio.VendorLength, Level);
2889 + ACPI_MOVE_16_TO_16(&Tmp16, &Resource->Gpio.VendorLength);
2890 + AcpiDmDumpRawDataBuffer (VendorData, Tmp16, Level);
2893 AcpiOsPrintf (")\n");
2894 @@ -233,17 +236,25 @@ AcpiDmGpioCommon (
2895 AcpiDmIndent (Level + 1);
2896 AcpiOsPrintf ("{ // Pin list\n");
2899 PinCount = ((UINT32) (Resource->Gpio.ResSourceOffset -
2900 Resource->Gpio.PinTableOffset)) /
2903 + ACPI_MOVE_16_TO_16(&Tmp16, &Resource->Gpio.ResSourceOffset);
2904 + PinCount = (UINT32) Tmp16;
2905 + ACPI_MOVE_16_TO_16(&Tmp16, &Resource->Gpio.PinTableOffset);
2906 + PinCount -= (UINT32) Tmp16;
2907 + PinCount /= sizeof (UINT16);
2909 - PinList = (UINT16 *) ACPI_ADD_PTR (char, Resource,
2910 - Resource->Gpio.PinTableOffset);
2911 + ACPI_MOVE_16_TO_16(&Tmp16, &Resource->Gpio.PinTableOffset);
2912 + PinList = (UINT16 *) ACPI_ADD_PTR (char, Resource, Tmp16);
2914 for (i = 0; i < PinCount; i++)
2916 AcpiDmIndent (Level + 2);
2917 - AcpiOsPrintf ("0x%4.4X%s\n", PinList[i],
2918 + ACPI_MOVE_16_TO_16(&Tmp16, &PinList[i]);
2919 + AcpiOsPrintf ("0x%4.4X%s\n", Tmp16,
2920 ((i + 1) < PinCount) ? "," : "");
2923 @@ -277,16 +288,18 @@ AcpiDmGpioIntDescriptor (
2929 /* Dump the GpioInt-specific portion of the descriptor */
2931 /* EdgeLevel, ActiveLevel, Shared */
2933 AcpiDmIndent (Level);
2934 + ACPI_MOVE_16_TO_16(&Tmp16, &Resource->Gpio.IntFlags);
2935 AcpiOsPrintf ("GpioInt (%s, %s, %s, ",
2936 - AcpiGbl_HeDecode [ACPI_GET_1BIT_FLAG (Resource->Gpio.IntFlags)],
2937 - AcpiGbl_LlDecode [ACPI_EXTRACT_2BIT_FLAG (Resource->Gpio.IntFlags, 1)],
2938 - AcpiGbl_ShrDecode [ACPI_EXTRACT_2BIT_FLAG (Resource->Gpio.IntFlags, 3)]);
2939 + AcpiGbl_HeDecode [ACPI_GET_1BIT_FLAG (Tmp16)],
2940 + AcpiGbl_LlDecode [ACPI_EXTRACT_2BIT_FLAG (Tmp16, 1)],
2941 + AcpiGbl_ShrDecode [ACPI_EXTRACT_2BIT_FLAG (Tmp16, 3)]);
2943 /* PinConfig, DebounceTimeout */
2945 @@ -299,7 +312,8 @@ AcpiDmGpioIntDescriptor (
2947 AcpiOsPrintf ("0x%2.2X, ", Resource->Gpio.PinConfig);
2949 - AcpiOsPrintf ("0x%4.4X,\n", Resource->Gpio.DebounceTimeout);
2950 + ACPI_MOVE_16_TO_16(&Tmp16, &Resource->Gpio.DebounceTimeout);
2951 + AcpiOsPrintf ("0x%4.4X,\n", Tmp16);
2953 /* Dump the GpioInt/GpioIo common portion of the descriptor */
2955 @@ -329,14 +343,16 @@ AcpiDmGpioIoDescriptor (
2961 /* Dump the GpioIo-specific portion of the descriptor */
2963 /* Shared, PinConfig */
2965 AcpiDmIndent (Level);
2966 + ACPI_MOVE_16_TO_16(&Tmp16, &Resource->Gpio.IntFlags);
2967 AcpiOsPrintf ("GpioIo (%s, ",
2968 - AcpiGbl_ShrDecode [ACPI_EXTRACT_2BIT_FLAG (Resource->Gpio.IntFlags, 3)]);
2969 + AcpiGbl_ShrDecode [ACPI_EXTRACT_2BIT_FLAG (Tmp16, 3)]);
2971 if (Resource->Gpio.PinConfig <= 3)
2973 @@ -350,10 +366,13 @@ AcpiDmGpioIoDescriptor (
2975 /* DebounceTimeout, DriveStrength, IoRestriction */
2977 - AcpiOsPrintf ("0x%4.4X, ", Resource->Gpio.DebounceTimeout);
2978 - AcpiOsPrintf ("0x%4.4X, ", Resource->Gpio.DriveStrength);
2979 + ACPI_MOVE_16_TO_16(&Tmp16, &Resource->Gpio.DebounceTimeout);
2980 + AcpiOsPrintf ("0x%4.4X, ", Tmp16);
2981 + ACPI_MOVE_16_TO_16(&Tmp16, &Resource->Gpio.DriveStrength);
2982 + AcpiOsPrintf ("0x%4.4X, ", Tmp16);
2983 + ACPI_MOVE_16_TO_16(&Tmp16, &Resource->Gpio.IntFlags);
2984 AcpiOsPrintf ("%s,\n",
2985 - AcpiGbl_IorDecode [ACPI_GET_2BIT_FLAG (Resource->Gpio.IntFlags)]);
2986 + AcpiGbl_IorDecode [ACPI_GET_2BIT_FLAG (Tmp16)]);
2988 /* Dump the GpioInt/GpioIo common portion of the descriptor */
2990 @@ -427,6 +446,7 @@ AcpiDmDumpSerialBusVendorData (
2993 UINT32 VendorLength;
2997 /* Get the (optional) vendor data and length */
2998 @@ -435,8 +455,8 @@ AcpiDmDumpSerialBusVendorData (
3000 case AML_RESOURCE_I2C_SERIALBUSTYPE:
3002 - VendorLength = Resource->CommonSerialBus.TypeDataLength -
3003 - AML_RESOURCE_I2C_MIN_DATA_LEN;
3004 + ACPI_MOVE_16_TO_16(&Tmp16, &Resource->CommonSerialBus.TypeDataLength);
3005 + VendorLength = Tmp16 - AML_RESOURCE_I2C_MIN_DATA_LEN;
3007 VendorData = ACPI_ADD_PTR (UINT8, Resource,
3008 sizeof (AML_RESOURCE_I2C_SERIALBUS));
3009 @@ -444,8 +464,8 @@ AcpiDmDumpSerialBusVendorData (
3011 case AML_RESOURCE_SPI_SERIALBUSTYPE:
3013 - VendorLength = Resource->CommonSerialBus.TypeDataLength -
3014 - AML_RESOURCE_SPI_MIN_DATA_LEN;
3015 + ACPI_MOVE_16_TO_16(&Tmp16, &Resource->CommonSerialBus.TypeDataLength);
3016 + VendorLength = Tmp16 - AML_RESOURCE_SPI_MIN_DATA_LEN;
3018 VendorData = ACPI_ADD_PTR (UINT8, Resource,
3019 sizeof (AML_RESOURCE_SPI_SERIALBUS));
3020 @@ -453,8 +473,8 @@ AcpiDmDumpSerialBusVendorData (
3022 case AML_RESOURCE_UART_SERIALBUSTYPE:
3024 - VendorLength = Resource->CommonSerialBus.TypeDataLength -
3025 - AML_RESOURCE_UART_MIN_DATA_LEN;
3026 + ACPI_MOVE_16_TO_16(&Tmp16, &Resource->CommonSerialBus.TypeDataLength);
3027 + VendorLength = Tmp16 - AML_RESOURCE_UART_MIN_DATA_LEN;
3029 VendorData = ACPI_ADD_PTR (UINT8, Resource,
3030 sizeof (AML_RESOURCE_UART_SERIALBUS));
3031 @@ -495,15 +515,19 @@ AcpiDmI2cSerialBusDescriptor (
3033 UINT32 ResourceSourceOffset;
3039 /* SlaveAddress, SlaveMode, ConnectionSpeed, AddressingMode */
3041 + ACPI_MOVE_16_TO_16(&Tmp16, &Resource->I2cSerialBus.SlaveAddress);
3042 + ACPI_MOVE_32_TO_32(&Tmp32, &Resource->I2cSerialBus.ConnectionSpeed);
3043 AcpiDmIndent (Level);
3044 AcpiOsPrintf ("I2cSerialBusV2 (0x%4.4X, %s, 0x%8.8X,\n",
3045 - Resource->I2cSerialBus.SlaveAddress,
3047 AcpiGbl_SmDecode [ACPI_GET_1BIT_FLAG (Resource->I2cSerialBus.Flags)],
3048 - Resource->I2cSerialBus.ConnectionSpeed);
3051 AcpiDmIndent (Level + 1);
3052 AcpiOsPrintf ("%s, ",
3053 @@ -511,8 +535,8 @@ AcpiDmI2cSerialBusDescriptor (
3055 /* ResourceSource is a required field */
3057 - ResourceSourceOffset = sizeof (AML_RESOURCE_COMMON_SERIALBUS) +
3058 - Resource->CommonSerialBus.TypeDataLength;
3059 + ACPI_MOVE_16_TO_16(&Tmp16, &Resource->CommonSerialBus.TypeDataLength);
3060 + ResourceSourceOffset = sizeof (AML_RESOURCE_COMMON_SERIALBUS) + Tmp16;
3062 DeviceName = ACPI_ADD_PTR (char, Resource, ResourceSourceOffset);
3063 AcpiUtPrintString (DeviceName, ACPI_UINT16_MAX);
3064 Index: acpica-unix2-20170303/source/components/disassembler/dmresrcl.c
3065 ===================================================================
3066 --- acpica-unix2-20170303.orig/source/components/disassembler/dmresrcl.c
3067 +++ acpica-unix2-20170303/source/components/disassembler/dmresrcl.c
3068 @@ -141,7 +141,8 @@ AcpiDmMemoryFields (
3076 for (i = 0; i < 4; i++)
3078 @@ -151,14 +152,14 @@ AcpiDmMemoryFields (
3082 - AcpiDmDumpInteger16 (ACPI_CAST_PTR (UINT16, Source)[i],
3083 - AcpiDmMemoryNames[i]);
3084 + ACPI_MOVE_16_TO_16(&Tmp16, &(ACPI_CAST_PTR (UINT16, Source)[i]));
3085 + AcpiDmDumpInteger16 (Tmp16, AcpiDmMemoryNames[i]);
3090 - AcpiDmDumpInteger32 (ACPI_CAST_PTR (UINT32, Source)[i],
3091 - AcpiDmMemoryNames[i]);
3092 + ACPI_MOVE_32_TO_32(&Tmp32, &(ACPI_CAST_PTR (UINT32, Source)[i]));
3093 + AcpiDmDumpInteger32 (Tmp32, AcpiDmMemoryNames[i]);
3097 @@ -190,7 +191,9 @@ AcpiDmAddressFields (
3106 AcpiOsPrintf ("\n");
3108 @@ -202,20 +205,20 @@ AcpiDmAddressFields (
3112 - AcpiDmDumpInteger16 (ACPI_CAST_PTR (UINT16, Source)[i],
3113 - AcpiDmAddressNames[i]);
3114 + ACPI_MOVE_16_TO_16(&Tmp16, &(ACPI_CAST_PTR (UINT16, Source)[i]));
3115 + AcpiDmDumpInteger16 (Tmp16, AcpiDmAddressNames[i]);
3120 - AcpiDmDumpInteger32 (ACPI_CAST_PTR (UINT32, Source)[i],
3121 - AcpiDmAddressNames[i]);
3122 + ACPI_MOVE_32_TO_32(&Tmp32, &(ACPI_CAST_PTR (UINT32, Source)[i]));
3123 + AcpiDmDumpInteger32 (Tmp32, AcpiDmAddressNames[i]);
3128 - AcpiDmDumpInteger64 (ACPI_CAST_PTR (UINT64, Source)[i],
3129 - AcpiDmAddressNames[i]);
3130 + ACPI_MOVE_64_TO_64(&Tmp64, &(ACPI_CAST_PTR (UINT64, Source)[i]));
3131 + AcpiDmDumpInteger64 (Tmp64, AcpiDmAddressNames[i]);
3135 @@ -868,6 +871,7 @@ AcpiDmFixedMemory32Descriptor (
3141 /* Dump name and read/write flag */
3143 @@ -876,12 +880,12 @@ AcpiDmFixedMemory32Descriptor (
3144 AcpiGbl_RwDecode [ACPI_GET_1BIT_FLAG (Resource->FixedMemory32.Flags)]);
3146 AcpiDmIndent (Level + 1);
3147 - AcpiDmDumpInteger32 (Resource->FixedMemory32.Address,
3149 + ACPI_MOVE_32_TO_32(&Tmp, &Resource->FixedMemory32.Address);
3150 + AcpiDmDumpInteger32 (Tmp, "Address Base");
3152 AcpiDmIndent (Level + 1);
3153 - AcpiDmDumpInteger32 (Resource->FixedMemory32.AddressLength,
3154 - "Address Length");
3155 + ACPI_MOVE_32_TO_32(&Tmp, &Resource->FixedMemory32.AddressLength);
3156 + AcpiDmDumpInteger32 (Tmp, "Address Length");
3158 /* Insert a descriptor name */
3160 @@ -913,6 +917,7 @@ AcpiDmGenericRegisterDescriptor (
3166 AcpiDmIndent (Level);
3167 AcpiOsPrintf ("Register (");
3168 @@ -926,7 +931,9 @@ AcpiDmGenericRegisterDescriptor (
3169 AcpiDmDumpInteger8 (Resource->GenericReg.BitOffset, "Bit Offset");
3171 AcpiDmIndent (Level + 1);
3172 - AcpiDmDumpInteger64 (Resource->GenericReg.Address, "Address");
3173 + /* AcpiDmDumpInteger64 (Resource->GenericReg.Address, "Address"); */
3174 + ACPI_MOVE_64_TO_64(&Tmp64, &Resource->GenericReg.Address);
3175 + AcpiDmDumpInteger64 (Tmp64, "Address");
3177 /* Optional field for ACPI 3.0 */
3179 @@ -972,7 +979,7 @@ AcpiDmInterruptDescriptor (
3186 AcpiDmIndent (Level);
3187 AcpiOsPrintf ("Interrupt (%s, %s, %s, %s, ",
3188 @@ -986,10 +993,11 @@ AcpiDmInterruptDescriptor (
3189 * list. Must compute length based on length of the list. First xrupt
3190 * is included in the struct (reason for -1 below)
3192 + ACPI_MOVE_16_TO_16(&Tmp16, &Resource->ExtendedIrq.ResourceLength);
3193 AcpiDmResourceSource (Resource,
3194 sizeof (AML_RESOURCE_EXTENDED_IRQ) +
3195 ((UINT32) Resource->ExtendedIrq.InterruptCount - 1) * sizeof (UINT32),
3196 - Resource->ExtendedIrq.ResourceLength);
3199 /* Insert a descriptor name */
3201 @@ -1002,9 +1010,12 @@ AcpiDmInterruptDescriptor (
3202 AcpiOsPrintf ("{\n");
3203 for (i = 0; i < Resource->ExtendedIrq.InterruptCount; i++)
3205 + UINT32 Tmp32, Val32;
3207 AcpiDmIndent (Level + 1);
3208 - AcpiOsPrintf ("0x%8.8X,\n",
3209 - (UINT32) Resource->ExtendedIrq.Interrupts[i]);
3210 + Val32 = (UINT32) Resource->ExtendedIrq.Interrupts[i];
3211 + ACPI_MOVE_32_TO_32(&Tmp32, &Val32);
3212 + AcpiOsPrintf ("0x%8.8X,\n", Tmp32);
3215 AcpiDmIndent (Level);
3216 Index: acpica-unix2-20170303/source/components/disassembler/dmresrcs.c
3217 ===================================================================
3218 --- acpica-unix2-20170303.orig/source/components/disassembler/dmresrcs.c
3219 +++ acpica-unix2-20170303/source/components/disassembler/dmresrcs.c
3220 @@ -72,6 +72,7 @@ AcpiDmIrqDescriptor (
3226 AcpiDmIndent (Level);
3227 AcpiOsPrintf ("%s (",
3228 @@ -93,7 +94,8 @@ AcpiDmIrqDescriptor (
3229 AcpiOsPrintf (")\n");
3231 AcpiDmIndent (Level + 1);
3232 - AcpiDmBitList (Resource->Irq.IrqMask);
3233 + ACPI_MOVE_16_TO_16(&Tmp, &Resource->Irq.IrqMask);
3234 + AcpiDmBitList (Tmp);
3238 @@ -204,16 +206,19 @@ AcpiDmIoDescriptor (
3244 AcpiDmIndent (Level);
3245 AcpiOsPrintf ("IO (%s,\n",
3246 AcpiGbl_IoDecode [ACPI_GET_1BIT_FLAG (Resource->Io.Flags)]);
3248 AcpiDmIndent (Level + 1);
3249 - AcpiDmDumpInteger16 (Resource->Io.Minimum, "Range Minimum");
3250 + ACPI_MOVE_16_TO_16(&Tmp16, &Resource->Io.Minimum);
3251 + AcpiDmDumpInteger16 (Tmp16, "Range Minimum");
3253 AcpiDmIndent (Level + 1);
3254 - AcpiDmDumpInteger16 (Resource->Io.Maximum, "Range Maximum");
3255 + ACPI_MOVE_16_TO_16(&Tmp16, &Resource->Io.Maximum);
3256 + AcpiDmDumpInteger16 (Tmp16, "Range Maximum");
3258 AcpiDmIndent (Level + 1);
3259 AcpiDmDumpInteger8 (Resource->Io.Alignment, "Alignment");
3260 @@ -251,12 +256,14 @@ AcpiDmFixedIoDescriptor (
3266 AcpiDmIndent (Level);
3267 AcpiOsPrintf ("FixedIO (\n");
3269 AcpiDmIndent (Level + 1);
3270 - AcpiDmDumpInteger16 (Resource->FixedIo.Address, "Address");
3271 + ACPI_MOVE_16_TO_16(&Tmp16, &Resource->FixedIo.Address);
3272 + AcpiDmDumpInteger16 (Tmp16, "Address");
3274 AcpiDmIndent (Level + 1);
3275 AcpiDmDumpInteger8 (Resource->FixedIo.AddressLength, "Length");
3276 Index: acpica-unix2-20170303/source/components/dispatcher/dsfield.c
3277 ===================================================================
3278 --- acpica-unix2-20170303.orig/source/components/dispatcher/dsfield.c
3279 +++ acpica-unix2-20170303/source/components/dispatcher/dsfield.c
3280 @@ -318,6 +318,7 @@ AcpiDsGetFieldNames (
3283 ACPI_PARSE_OBJECT *Child;
3287 ACPI_FUNCTION_TRACE_PTR (DsGetFieldNames, Info);
3288 @@ -424,10 +425,17 @@ AcpiDsGetFieldNames (
3290 /* Lookup the name, it should already exist */
3292 + ACPI_MOVE_32_TO_32(&TmpName, &Arg->Named.Name);
3293 + Status = AcpiNsLookup (WalkState->ScopeInfo,
3294 + (char *) &TmpName, Info->FieldType,
3295 + ACPI_IMODE_EXECUTE, ACPI_NS_DONT_OPEN_SCOPE,
3296 + WalkState, &Info->FieldNode);
3298 Status = AcpiNsLookup (WalkState->ScopeInfo,
3299 (char *) &Arg->Named.Name, Info->FieldType,
3300 ACPI_IMODE_EXECUTE, ACPI_NS_DONT_OPEN_SCOPE,
3301 WalkState, &Info->FieldNode);
3303 if (ACPI_FAILURE (Status))
3305 ACPI_ERROR_NAMESPACE ((char *) &Arg->Named.Name, Status);
3306 @@ -652,9 +660,17 @@ AcpiDsInitFieldObjects (
3308 if (Arg->Common.AmlOpcode == AML_INT_NAMEDFIELD_OP)
3312 + ACPI_MOVE_32_TO_32(&TmpName, &Arg->Named.Name);
3313 + Status = AcpiNsLookup (WalkState->ScopeInfo,
3314 + (char *) &TmpName, Type, ACPI_IMODE_LOAD_PASS1,
3315 + Flags, WalkState, &Node);
3317 Status = AcpiNsLookup (WalkState->ScopeInfo,
3318 (char *) &Arg->Named.Name, Type, ACPI_IMODE_LOAD_PASS1,
3319 Flags, WalkState, &Node);
3321 if (ACPI_FAILURE (Status))
3323 ACPI_ERROR_NAMESPACE ((char *) &Arg->Named.Name, Status);
3324 Index: acpica-unix2-20170303/source/components/events/evgpeblk.c
3325 ===================================================================
3326 --- acpica-unix2-20170303.orig/source/components/events/evgpeblk.c
3327 +++ acpica-unix2-20170303/source/components/events/evgpeblk.c
3328 @@ -376,6 +376,7 @@ AcpiEvCreateGpeBlock (
3330 ACPI_GPE_BLOCK_INFO *GpeBlock;
3331 ACPI_GPE_WALK_INFO WalkInfo;
3332 + char Name[ACPI_NAME_SIZE + 1];
3335 ACPI_FUNCTION_TRACE (EvCreateGpeBlock);
3336 @@ -396,7 +397,7 @@ AcpiEvCreateGpeBlock (
3338 /* Initialize the new GPE block */
3340 - GpeBlock->Address = Address;
3341 + ACPI_MOVE_64_TO_64(&GpeBlock->Address, &Address);
3342 GpeBlock->SpaceId = SpaceId;
3343 GpeBlock->Node = GpeDevice;
3344 GpeBlock->GpeCount = (UINT16) (RegisterCount * ACPI_GPE_REGISTER_WIDTH);
3345 @@ -445,11 +446,13 @@ AcpiEvCreateGpeBlock (
3346 (*ReturnGpeBlock) = GpeBlock;
3349 + memset(&Name, 0, ACPI_NAME_SIZE + 1);
3350 + ACPI_MOVE_32_TO_32(&Name, &GpeDevice->Name.Ascii);
3351 ACPI_DEBUG_PRINT_RAW ((ACPI_DB_INIT,
3352 " Initialized GPE %02X to %02X [%4.4s] %u regs on interrupt 0x%X%s\n",
3353 (UINT32) GpeBlock->BlockBaseNumber,
3354 (UINT32) (GpeBlock->BlockBaseNumber + (GpeBlock->GpeCount - 1)),
3355 - GpeDevice->Name.Ascii, GpeBlock->RegisterCount, InterruptNumber,
3356 + Name, GpeBlock->RegisterCount, InterruptNumber,
3357 InterruptNumber == AcpiGbl_FADT.SciInterrupt ? " (SCI)" : ""));
3359 /* Update global count of currently available GPEs */
3360 Index: acpica-unix2-20170303/source/components/hardware/hwregs.c
3361 ===================================================================
3362 --- acpica-unix2-20170303.orig/source/components/hardware/hwregs.c
3363 +++ acpica-unix2-20170303/source/components/hardware/hwregs.c
3364 @@ -197,7 +197,7 @@ AcpiHwValidateRegister (
3365 * Address must not be null. A null address also indicates an optional
3366 * ACPI register that is not supported, so no error message.
3368 - ACPI_MOVE_64_TO_64 (Address, &Reg->Address);
3369 + *Address = Reg->Address;
3372 return (AE_BAD_ADDRESS);
3373 Index: acpica-unix2-20170303/source/components/hardware/hwvalid.c
3374 ===================================================================
3375 --- acpica-unix2-20170303.orig/source/components/hardware/hwvalid.c
3376 +++ acpica-unix2-20170303/source/components/hardware/hwvalid.c
3377 @@ -135,6 +135,8 @@ AcpiHwValidateIoRequest (
3379 ACPI_IO_ADDRESS LastAddress;
3380 const ACPI_PORT_INFO *PortInfo;
3385 ACPI_FUNCTION_NAME (HwValidateIoRequest);
3386 @@ -161,7 +163,10 @@ AcpiHwValidateIoRequest (
3388 /* Maximum 16-bit address in I/O space */
3390 - if (LastAddress > ACPI_UINT16_MAX)
3391 + Max16 = (UINT64) ACPI_UINT16_MAX;
3392 + ACPI_MOVE_64_TO_64(&Tmp64, &Max16);
3394 + if ((UINT64)LastAddress > Tmp64)
3396 ACPI_ERROR ((AE_INFO,
3397 "Illegal I/O port address/length above 64K: %8.8X%8.8X/0x%X",
3398 Index: acpica-unix2-20170303/source/components/namespace/nsaccess.c
3399 ===================================================================
3400 --- acpica-unix2-20170303.orig/source/components/namespace/nsaccess.c
3401 +++ acpica-unix2-20170303/source/components/namespace/nsaccess.c
3402 @@ -309,6 +309,7 @@ AcpiNsLookup (
3403 ACPI_OBJECT_TYPE ThisSearchType;
3404 UINT32 SearchParentFlag = ACPI_NS_SEARCH_PARENT;
3409 ACPI_FUNCTION_TRACE (NsLookup);
3410 @@ -657,9 +658,10 @@ AcpiNsLookup (
3412 /* Complain about a type mismatch */
3414 + ACPI_MOVE_32_TO_32(&Tmp32, &SimpleName);
3415 ACPI_WARNING ((AE_INFO,
3416 "NsLookup: Type mismatch on %4.4s (%s), searching for (%s)",
3417 - ACPI_CAST_PTR (char, &SimpleName),
3418 + ACPI_CAST_PTR (char, &Tmp32),
3419 AcpiUtGetTypeName (ThisNode->Type),
3420 AcpiUtGetTypeName (TypeToCheckFor)));
3422 Index: acpica-unix2-20170303/source/components/namespace/nsparse.c
3423 ===================================================================
3424 --- acpica-unix2-20170303.orig/source/components/namespace/nsparse.c
3425 +++ acpica-unix2-20170303/source/components/namespace/nsparse.c
3426 @@ -196,13 +196,14 @@ AcpiNsOneCompleteParse (
3428 /* Table must consist of at least a complete header */
3430 - if (Table->Length < sizeof (ACPI_TABLE_HEADER))
3431 + ACPI_MOVE_32_TO_32(&AmlLength, &Table->Length);
3432 + if (AmlLength < sizeof (ACPI_TABLE_HEADER))
3434 return_ACPI_STATUS (AE_BAD_HEADER);
3437 AmlStart = (UINT8 *) Table + sizeof (ACPI_TABLE_HEADER);
3438 - AmlLength = Table->Length - sizeof (ACPI_TABLE_HEADER);
3439 + AmlLength -= sizeof (ACPI_TABLE_HEADER);
3441 Status = AcpiTbGetOwnerId (TableIndex, &OwnerId);
3442 if (ACPI_FAILURE (Status))
3443 Index: acpica-unix2-20170303/source/components/tables/tbdata.c
3444 ===================================================================
3445 --- acpica-unix2-20170303.orig/source/components/tables/tbdata.c
3446 +++ acpica-unix2-20170303/source/components/tables/tbdata.c
3447 @@ -407,6 +407,7 @@ AcpiTbVerifyTempTable (
3450 ACPI_STATUS Status = AE_OK;
3454 ACPI_FUNCTION_TRACE (TbVerifyTempTable);
3455 @@ -436,7 +437,8 @@ AcpiTbVerifyTempTable (
3457 if (AcpiGbl_VerifyTableChecksum)
3459 - Status = AcpiTbVerifyChecksum (TableDesc->Pointer, TableDesc->Length);
3460 + ACPI_MOVE_32_TO_32(&Length, &TableDesc->Length);
3461 + Status = AcpiTbVerifyChecksum (TableDesc->Pointer, Length);
3462 if (ACPI_FAILURE (Status))
3464 ACPI_EXCEPTION ((AE_INFO, AE_NO_MEMORY,
3465 Index: acpica-unix2-20170303/source/components/tables/tbfadt.c
3466 ===================================================================
3467 --- acpica-unix2-20170303.orig/source/components/tables/tbfadt.c
3468 +++ acpica-unix2-20170303/source/components/tables/tbfadt.c
3469 @@ -520,6 +520,8 @@ AcpiTbConvertFadt (
3478 @@ -533,7 +535,8 @@ AcpiTbConvertFadt (
3479 * Note: The FADT revision value is unreliable. Only the length can be
3482 - if (AcpiGbl_FADT.Header.Length <= ACPI_FADT_V2_SIZE)
3483 + ACPI_MOVE_32_TO_32(&Tmp32, &AcpiGbl_FADT.Header.Length);
3484 + if (Tmp32 <= ACPI_FADT_V2_SIZE)
3486 AcpiGbl_FADT.PreferredProfile = 0;
3487 AcpiGbl_FADT.PstateControl = 0;
3488 @@ -546,14 +549,15 @@ AcpiTbConvertFadt (
3489 * current FADT version as defined by the ACPI specification.
3490 * Thus, we will have a common FADT internally.
3492 - AcpiGbl_FADT.Header.Length = sizeof (ACPI_TABLE_FADT);
3493 + Tmp32 = sizeof (ACPI_TABLE_FADT);
3494 + ACPI_MOVE_32_TO_32(&AcpiGbl_FADT.Header.Length, &Tmp32);
3497 * Expand the 32-bit DSDT addresses to 64-bit as necessary.
3498 * Later ACPICA code will always use the X 64-bit field.
3500 - AcpiGbl_FADT.XDsdt = AcpiTbSelectAddress ("DSDT",
3501 - AcpiGbl_FADT.Dsdt, AcpiGbl_FADT.XDsdt);
3502 + Tmp64 = AcpiTbSelectAddress ("DSDT", AcpiGbl_FADT.Dsdt, AcpiGbl_FADT.XDsdt);
3503 + ACPI_MOVE_64_TO_64(&AcpiGbl_FADT.XDsdt, &Tmp64);
3505 /* If Hardware Reduced flag is set, we are all done */
3507 @@ -614,7 +618,9 @@ AcpiTbConvertFadt (
3509 if (Address64->Address)
3511 - if (Address64->Address != (UINT64) Address32)
3512 + ACPI_MOVE_32_TO_32(&Tmp32, &Address32);
3513 + ACPI_MOVE_64_TO_64(&Tmp64, &Address64->Address);
3514 + if (Tmp64 != (UINT64) Tmp32)
3516 /* Address mismatch */
3518 @@ -655,9 +661,11 @@ AcpiTbConvertFadt (
3520 if (!Address64->Address || AcpiGbl_Use32BitFadtAddresses)
3522 + ACPI_MOVE_32_TO_32(&Tmp32, &Address32); /* back to host order */
3523 + Tmp64 = (UINT64) Tmp32; /* promote only */
3524 AcpiTbInitGenericAddress (Address64,
3525 ACPI_ADR_SPACE_SYSTEM_IO, Length,
3526 - (UINT64) Address32, Name, Flags);
3527 + Tmp64, Name, Flags);
3531 @@ -780,10 +788,14 @@ AcpiTbSetupFadtRegisters (
3533 if (Source64->Address)
3535 + UINT64 Tmp64, Addr64;
3537 + ACPI_MOVE_64_TO_64(&Tmp64, &Source64->Address);
3538 + Tmp64 += (FadtPmInfoTable[i].RegisterNum * Pm1RegisterByteWidth);
3539 + ACPI_MOVE_64_TO_64(&Addr64, &Tmp64);
3540 AcpiTbInitGenericAddress (FadtPmInfoTable[i].Target,
3541 Source64->SpaceId, Pm1RegisterByteWidth,
3542 - Source64->Address +
3543 - (FadtPmInfoTable[i].RegisterNum * Pm1RegisterByteWidth),
3548 Index: acpica-unix2-20170303/source/components/tables/tbfind.c
3549 ===================================================================
3550 --- acpica-unix2-20170303.orig/source/components/tables/tbfind.c
3551 +++ acpica-unix2-20170303/source/components/tables/tbfind.c
3552 @@ -108,8 +108,11 @@ AcpiTbFindTable (
3553 (void) AcpiUtAcquireMutex (ACPI_MTX_TABLES);
3554 for (i = 0; i < AcpiGbl_RootTableList.CurrentTableCount; ++i)
3558 + ACPI_MOVE_32_TO_32(&Tmp32, &Header.Signature);
3559 if (memcmp (&(AcpiGbl_RootTableList.Tables[i].Signature),
3560 - Header.Signature, ACPI_NAME_SIZE))
3561 + &Tmp32, ACPI_NAME_SIZE))
3563 /* Not the requested table */
3565 Index: acpica-unix2-20170303/source/components/tables/tbprint.c
3566 ===================================================================
3567 --- acpica-unix2-20170303.orig/source/components/tables/tbprint.c
3568 +++ acpica-unix2-20170303/source/components/tables/tbprint.c
3569 @@ -143,15 +143,18 @@ AcpiTbPrintTableHeader (
3570 ACPI_TABLE_HEADER *Header)
3572 ACPI_TABLE_HEADER LocalHeader;
3575 + UINT32 CompilerRev;
3578 if (ACPI_COMPARE_NAME (Header->Signature, ACPI_SIG_FACS))
3580 /* FACS only has signature and length fields */
3582 + ACPI_MOVE_32_TO_32(&Len, &Header->Length);
3583 ACPI_INFO (("%-4.4s 0x%8.8X%8.8X %06X",
3584 - Header->Signature, ACPI_FORMAT_UINT64 (Address),
3586 + Header->Signature, ACPI_FORMAT_UINT64 (Address), Len));
3588 else if (ACPI_VALIDATE_RSDP_SIG (Header->Signature))
3590 @@ -174,13 +177,16 @@ AcpiTbPrintTableHeader (
3592 AcpiTbCleanupTableHeader (&LocalHeader, Header);
3594 + ACPI_MOVE_32_TO_32(&Len, &LocalHeader.Length);
3595 + ACPI_MOVE_32_TO_32(&OemRev, &LocalHeader.OemRevision);
3596 + ACPI_MOVE_32_TO_32(&CompilerRev, &LocalHeader.AslCompilerRevision);
3598 "%-4.4s 0x%8.8X%8.8X"
3599 " %06X (v%.2d %-6.6s %-8.8s %08X %-4.4s %08X)",
3600 LocalHeader.Signature, ACPI_FORMAT_UINT64 (Address),
3601 - LocalHeader.Length, LocalHeader.Revision, LocalHeader.OemId,
3602 - LocalHeader.OemTableId, LocalHeader.OemRevision,
3603 - LocalHeader.AslCompilerId, LocalHeader.AslCompilerRevision));
3604 + Len, LocalHeader.Revision, LocalHeader.OemId,
3605 + LocalHeader.OemTableId, OemRev,
3606 + LocalHeader.AslCompilerId, CompilerRev));
3610 Index: acpica-unix2-20170303/source/components/tables/tbutils.c
3611 ===================================================================
3612 --- acpica-unix2-20170303.orig/source/components/tables/tbutils.c
3613 +++ acpica-unix2-20170303/source/components/tables/tbutils.c
3614 @@ -238,7 +238,7 @@ AcpiTbGetRootTableEntry (
3615 * 64-bit platform, XSDT: Move (unaligned) 64-bit to local,
3618 - ACPI_MOVE_64_TO_64 (&Address64, TableEntry);
3619 + Address64 = (UINT64) TableEntry;
3621 #if ACPI_MACHINE_WIDTH == 32
3622 if (Address64 > ACPI_UINT32_MAX)
3623 @@ -251,7 +251,8 @@ AcpiTbGetRootTableEntry (
3624 ACPI_FORMAT_UINT64 (Address64)));
3627 - return ((ACPI_PHYSICAL_ADDRESS) (Address64));
3628 + return ((ACPI_PHYSICAL_ADDRESS) (*ACPI_CAST_PTR (
3629 + UINT64, Address64)));
3633 @@ -287,6 +288,7 @@ AcpiTbParseRootTable (
3640 ACPI_FUNCTION_TRACE (TbParseRootTable);
3641 @@ -345,7 +347,7 @@ AcpiTbParseRootTable (
3642 * Validate length of the table, and map entire table.
3643 * Minimum length table must contain at least one entry.
3645 - Length = Table->Length;
3646 + ACPI_MOVE_32_TO_32(&Length, &Table->Length);
3647 AcpiOsUnmapMemory (Table, sizeof (ACPI_TABLE_HEADER));
3649 if (Length < (sizeof (ACPI_TABLE_HEADER) + TableEntrySize))
3650 @@ -372,7 +374,7 @@ AcpiTbParseRootTable (
3652 /* Get the number of entries and pointer to first entry */
3654 - TableCount = (UINT32) ((Table->Length - sizeof (ACPI_TABLE_HEADER)) /
3655 + TableCount = (UINT32) ((Length - sizeof (ACPI_TABLE_HEADER)) /
3657 TableEntry = ACPI_ADD_PTR (UINT8, Table, sizeof (ACPI_TABLE_HEADER));
3659 @@ -394,10 +396,10 @@ AcpiTbParseRootTable (
3660 Status = AcpiTbInstallStandardTable (Address,
3661 ACPI_TABLE_ORIGIN_INTERNAL_PHYSICAL, FALSE, TRUE, &TableIndex);
3663 + ACPI_MOVE_32_TO_32(&Tmp32,
3664 + &AcpiGbl_RootTableList.Tables[TableIndex].Signature);
3665 if (ACPI_SUCCESS (Status) &&
3666 - ACPI_COMPARE_NAME (
3667 - &AcpiGbl_RootTableList.Tables[TableIndex].Signature,
3669 + ACPI_COMPARE_NAME (&Tmp32, ACPI_SIG_FADT))
3671 AcpiGbl_FadtIndex = TableIndex;
3673 Index: acpica-unix2-20170303/source/components/tables/tbxface.c
3674 ===================================================================
3675 --- acpica-unix2-20170303.orig/source/components/tables/tbxface.c
3676 +++ acpica-unix2-20170303/source/components/tables/tbxface.c
3677 @@ -263,8 +263,11 @@ AcpiGetTableHeader (
3679 for (i = 0, j = 0; i < AcpiGbl_RootTableList.CurrentTableCount; i++)
3683 + ACPI_MOVE_32_TO_32(&Tmp32, (UINT32 *)Signature);
3684 if (!ACPI_COMPARE_NAME (
3685 - &(AcpiGbl_RootTableList.Tables[i].Signature), Signature))
3686 + &(AcpiGbl_RootTableList.Tables[i].Signature), &Tmp32))
3690 Index: acpica-unix2-20170303/source/components/tables/tbxfload.c
3691 ===================================================================
3692 --- acpica-unix2-20170303.orig/source/components/tables/tbxfload.c
3693 +++ acpica-unix2-20170303/source/components/tables/tbxfload.c
3694 @@ -156,6 +156,7 @@ AcpiTbLoadNamespace (
3695 ACPI_TABLE_DESC *Table;
3696 UINT32 TablesLoaded = 0;
3697 UINT32 TablesFailed = 0;
3701 ACPI_FUNCTION_TRACE (TbLoadNamespace);
3702 @@ -169,8 +170,9 @@ AcpiTbLoadNamespace (
3704 Table = &AcpiGbl_RootTableList.Tables[AcpiGbl_DsdtIndex];
3706 + ACPI_MOVE_32_TO_32(&Tmp32, &Table->Signature.Ascii);
3707 if (!AcpiGbl_RootTableList.CurrentTableCount ||
3708 - !ACPI_COMPARE_NAME (Table->Signature.Ascii, ACPI_SIG_DSDT) ||
3709 + !ACPI_COMPARE_NAME (&Tmp32, ACPI_SIG_DSDT) ||
3710 ACPI_FAILURE (AcpiTbValidateTable (Table)))
3712 Status = AE_NO_ACPI_TABLES;
3713 Index: acpica-unix2-20170303/source/include/acmacros.h
3714 ===================================================================
3715 --- acpica-unix2-20170303.orig/source/include/acmacros.h
3716 +++ acpica-unix2-20170303/source/include/acmacros.h
3718 ((UINT8 *)(void *)(d))[6] = ((UINT8 *)(void *)(s))[1];\
3719 ((UINT8 *)(void *)(d))[7] = ((UINT8 *)(void *)(s))[0];}
3721 -/* 32-bit source, 16/32/64 destination */
3722 +/* 32-bit source, 8/16/32/64 destination */
3724 +#define ACPI_MOVE_32_TO_8(d, s) {(( UINT8 *)(void *)(d))[0] = ((UINT8 *)(void *)(s))[3];}
3726 #define ACPI_MOVE_32_TO_16(d, s) {(( UINT8 *)(void *)(d))[0] = ((UINT8 *)(void *)(s))[3];\
3727 (( UINT8 *)(void *)(d))[1] = ((UINT8 *)(void *)(s))[2];}
3729 ((UINT8 *)(void *)(d))[6] = ((UINT8 *)(void *)(s))[1];\
3730 ((UINT8 *)(void *)(d))[7] = ((UINT8 *)(void *)(s))[0];}
3732 -/* 64-bit source, 16/32/64 destination */
3733 +/* 64-bit source, 8/16/32/64 destination */
3735 +#define ACPI_MOVE_64_TO_8(d, s) {(( UINT8 *)(void *)(d))[0] = ((UINT8 *)(void *)(s))[7];}
3737 #define ACPI_MOVE_64_TO_16(d, s) {(( UINT8 *)(void *)(d))[0] = ((UINT8 *)(void *)(s))[7];\
3738 (( UINT8 *)(void *)(d))[1] = ((UINT8 *)(void *)(s))[6];}
3739 @@ -141,13 +145,16 @@
3741 /* The hardware supports unaligned transfers, just do the little-endian move */
3743 -/* 16-bit source, 16/32/64 destination */
3744 +/* 16-bit source, 8/16/32/64 destination */
3746 +#define ACPI_MOVE_16_TO_8(d, s) *(UINT8 *)(void *)(d) = *(UINT16 *)(void *)(s)
3747 #define ACPI_MOVE_16_TO_16(d, s) *(UINT16 *)(void *)(d) = *(UINT16 *)(void *)(s)
3748 #define ACPI_MOVE_16_TO_32(d, s) *(UINT32 *)(void *)(d) = *(UINT16 *)(void *)(s)
3749 #define ACPI_MOVE_16_TO_64(d, s) *(UINT64 *)(void *)(d) = *(UINT16 *)(void *)(s)
3751 -/* 32-bit source, 16/32/64 destination */
3752 +/* 32-bit source, 8/16/32/64 destination */
3754 +#define ACPI_MOVE_32_TO_8(d, s) {(( UINT8 *)(void *)(d))[0] = ((UINT8 *)(void *)(s))[0];}
3756 #define ACPI_MOVE_32_TO_16(d, s) {(( UINT8 *)(void *)(d))[0] = ((UINT8 *)(void *)(s))[0];\
3757 (( UINT8 *)(void *)(d))[1] = ((UINT8 *)(void *)(s))[1];}
3759 #define ACPI_MOVE_32_TO_32(d, s) *(UINT32 *)(void *)(d) = *(UINT32 *)(void *)(s)
3760 #define ACPI_MOVE_32_TO_64(d, s) *(UINT64 *)(void *)(d) = *(UINT32 *)(void *)(s)
3762 -/* 64-bit source, 16/32/64 destination */
3763 +/* 64-bit source, 8/16/32/64 destination */
3765 +#define ACPI_MOVE_64_TO_8(d, s) ACPI_MOVE_16_TO_8(d, s) /* Truncate to 8 */
3766 #define ACPI_MOVE_64_TO_16(d, s) ACPI_MOVE_16_TO_16(d, s) /* Truncate to 16 */
3767 #define ACPI_MOVE_64_TO_32(d, s) ACPI_MOVE_32_TO_32(d, s) /* Truncate to 32 */
3768 #define ACPI_MOVE_64_TO_64(d, s) *(UINT64 *)(void *)(d) = *(UINT64 *)(void *)(s)
3770 #define ACPI_MOVE_16_TO_32(d, s) {(*(UINT32 *)(void *)(d)) = 0; ACPI_MOVE_16_TO_16(d, s);}
3771 #define ACPI_MOVE_16_TO_64(d, s) {(*(UINT64 *)(void *)(d)) = 0; ACPI_MOVE_16_TO_16(d, s);}
3773 -/* 32-bit source, 16/32/64 destination */
3774 +/* 32-bit source, 8/16/32/64 destination */
3776 +#define ACPI_MOVE_32_TO_8(d, s) ACPI_MOVE_16_TO_8(d, s) /* Truncate to 8 */
3778 #define ACPI_MOVE_32_TO_16(d, s) ACPI_MOVE_16_TO_16(d, s) /* Truncate to 16 */
3780 Index: acpica-unix2-20170303/source/include/platform/aclinux.h
3781 ===================================================================
3782 --- acpica-unix2-20170303.orig/source/include/platform/aclinux.h
3783 +++ acpica-unix2-20170303/source/include/platform/aclinux.h
3784 @@ -219,6 +219,10 @@
3788 +#if defined(__PPC64__) || defined(__s390x__)
3789 +#define ACPI_BIG_ENDIAN
3792 #endif /* __KERNEL__ */
3794 #endif /* __ACLINUX_H__ */
3795 Index: acpica-unix2-20170303/source/tools/acpiexec/aetables.c
3796 ===================================================================
3797 --- acpica-unix2-20170303.orig/source/tools/acpiexec/aetables.c
3798 +++ acpica-unix2-20170303/source/tools/acpiexec/aetables.c
3799 @@ -146,21 +146,25 @@ AeInitializeTableHeader (
3806 ACPI_MOVE_NAME (Header->Signature, Signature);
3807 - Header->Length = Length;
3808 + ACPI_MOVE_32_TO_32(&Header->Length, &Length);
3810 - Header->OemRevision = 0x1001;
3812 + ACPI_MOVE_16_TO_16(&Header->OemRevision, &Tmp16);
3813 strncpy (Header->OemId, "Intel", ACPI_OEM_ID_SIZE);
3814 strncpy (Header->OemTableId, "AcpiExec", ACPI_OEM_TABLE_ID_SIZE);
3815 strncpy (Header->AslCompilerId, "INTL", ACPI_NAME_SIZE);
3816 - Header->AslCompilerRevision = ACPI_CA_VERSION;
3817 + Tmp32 = ACPI_CA_VERSION;
3818 + ACPI_MOVE_32_TO_32(&Header->AslCompilerRevision, &Tmp32);
3820 /* Set the checksum, must set to zero first */
3822 Header->Checksum = 0;
3823 Header->Checksum = (UINT8) -AcpiTbChecksum (
3824 - (void *) Header, Header->Length);
3825 + (void *) Header, Length);
3829 @@ -188,6 +192,7 @@ AeBuildLocalTables (
3830 ACPI_NEW_TABLE_DESC *NextTable;
3832 ACPI_TABLE_FADT *ExternalFadt = NULL;
3837 @@ -374,6 +379,8 @@ AeBuildLocalTables (
3844 * Build a local FADT so we can test the hardware/event init
3846 @@ -385,34 +392,44 @@ AeBuildLocalTables (
3849 LocalFADT.XDsdt = DsdtAddress;
3850 - LocalFADT.XFacs = ACPI_PTR_TO_PHYSADDR (&LocalFACS);
3851 + Tmp64 = ACPI_PTR_TO_PHYSADDR (&LocalFACS);
3852 + ACPI_MOVE_64_TO_64(&LocalFADT.XFacs, &Tmp64);
3854 /* Miscellaneous FADT fields */
3856 LocalFADT.Gpe0BlockLength = 0x08;
3857 - LocalFADT.Gpe0Block = 0x00001234;
3858 + Tmp32 = 0x00001234;
3859 + ACPI_MOVE_32_TO_32(&LocalFADT.Gpe0Block, &Tmp32);
3861 LocalFADT.Gpe1BlockLength = 0x80;
3862 - LocalFADT.Gpe1Block = 0x00005678;
3863 + Tmp32 = 0x00005678;
3864 + ACPI_MOVE_32_TO_32(&LocalFADT.Gpe1Block, &Tmp32);
3865 LocalFADT.Gpe1Base = 100;
3867 LocalFADT.Pm1EventLength = 4;
3868 - LocalFADT.Pm1aEventBlock = 0x00001aaa;
3869 - LocalFADT.Pm1bEventBlock = 0x00001bbb;
3870 + Tmp32 = 0x00001aaa;
3871 + ACPI_MOVE_32_TO_32(&LocalFADT.Pm1aEventBlock, &Tmp32);
3872 + Tmp32 = 0x00001bbb;
3873 + ACPI_MOVE_32_TO_32(&LocalFADT.Pm1bEventBlock, &Tmp32);
3875 LocalFADT.Pm1ControlLength = 2;
3876 - LocalFADT.Pm1aControlBlock = 0xB0;
3878 + ACPI_MOVE_32_TO_32(&LocalFADT.Pm1aControlBlock, &Tmp32);
3880 LocalFADT.PmTimerLength = 4;
3881 - LocalFADT.PmTimerBlock = 0xA0;
3883 + ACPI_MOVE_32_TO_32(&LocalFADT.PmTimerBlock, &Tmp32);
3885 - LocalFADT.Pm2ControlBlock = 0xC0;
3887 + ACPI_MOVE_32_TO_32(&LocalFADT.Pm2ControlBlock, &Tmp32);
3888 LocalFADT.Pm2ControlLength = 1;
3890 /* Setup one example X-64 GAS field */
3892 LocalFADT.XPm1bEventBlock.SpaceId = ACPI_ADR_SPACE_SYSTEM_IO;
3893 - LocalFADT.XPm1bEventBlock.Address = LocalFADT.Pm1bEventBlock;
3894 + ACPI_MOVE_32_TO_32(&Tmp32, &LocalFADT.Pm1bEventBlock);
3895 + Tmp64 = (UINT64)Tmp32;
3896 + ACPI_MOVE_64_TO_64(&LocalFADT.XPm1bEventBlock.Address, &Tmp64);
3897 LocalFADT.XPm1bEventBlock.BitWidth = (UINT8)
3898 ACPI_MUL_8 (LocalFADT.Pm1EventLength);
3900 @@ -425,13 +442,17 @@ AeBuildLocalTables (
3901 memset (&LocalFACS, 0, sizeof (ACPI_TABLE_FACS));
3902 ACPI_MOVE_NAME (LocalFACS.Signature, ACPI_SIG_FACS);
3904 - LocalFACS.Length = sizeof (ACPI_TABLE_FACS);
3905 - LocalFACS.GlobalLock = 0x11AA0011;
3906 + Tmp32 = sizeof (ACPI_TABLE_FACS);
3907 + ACPI_MOVE_32_TO_32(&LocalFACS.Length, &Tmp32);
3908 + Tmp32 = 0x11AA0011;
3909 + ACPI_MOVE_32_TO_32(&LocalFACS.GlobalLock, &Tmp32);
3911 /* Build the optional local tables */
3913 if (AcpiGbl_LoadTestTables)
3918 * Build a fake table [TEST] so that we make sure that the
3919 * ACPICA core ignores it
3920 @@ -440,11 +461,12 @@ AeBuildLocalTables (
3921 ACPI_MOVE_NAME (LocalTEST.Signature, "TEST");
3923 LocalTEST.Revision = 1;
3924 - LocalTEST.Length = sizeof (ACPI_TABLE_HEADER);
3925 + Tmp32 = sizeof (ACPI_TABLE_HEADER);
3926 + ACPI_MOVE_32_TO_32(&LocalTEST.Length, &Tmp32);
3928 LocalTEST.Checksum = 0;
3929 LocalTEST.Checksum = (UINT8) -AcpiTbChecksum (
3930 - (void *) &LocalTEST, LocalTEST.Length);
3931 + (void *) &LocalTEST, Tmp32);
3934 * Build a fake table with a bad signature [BAD!] so that we make
3935 @@ -454,11 +476,12 @@ AeBuildLocalTables (
3936 ACPI_MOVE_NAME (LocalBADTABLE.Signature, "BAD!");
3938 LocalBADTABLE.Revision = 1;
3939 - LocalBADTABLE.Length = sizeof (ACPI_TABLE_HEADER);
3940 + Tmp32 = sizeof (ACPI_TABLE_HEADER);
3941 + ACPI_MOVE_32_TO_32(&LocalBADTABLE.Length, &Tmp32);
3943 LocalBADTABLE.Checksum = 0;
3944 LocalBADTABLE.Checksum = (UINT8) -AcpiTbChecksum (
3945 - (void *) &LocalBADTABLE, LocalBADTABLE.Length);
3946 + (void *) &LocalBADTABLE, Tmp32);