svn commit: r320764 - head/sys/amd64/vmm/amd
Ryan Libby
rlibby at FreeBSD.org
Fri Jul 7 06:37:20 UTC 2017
Author: rlibby
Date: Fri Jul 7 06:37:19 2017
New Revision: 320764
URL: https://svnweb.freebsd.org/changeset/base/320764
Log:
amd-vi: gcc build errors
amdvi_cmp_wait: gcc complained about a malformed string behind an ifdef.
struct amdvi_dte: widen the type of the first reserved bitfield so that
the packed representation would not cross an alignment boundary for that
type. Apparently that causes in-tree gcc (4.2) to insert padding
(despite packed, resulting in a wrong structure definition), and causes
more modern gcc to emit a warning.
ivrs_hdr_iterate_tbl: delete a misleading check about header length
being less than 0 (the type is unsigned) and replace it with a check
that the length doesn't exceed the table size.
Reviewed by: anish, grehan
Approved by: markj (mentor)
Sponsored by: Dell EMC Isilon
Differential Revision: https://reviews.freebsd.org/D11485
Modified:
head/sys/amd64/vmm/amd/amdvi_hw.c
head/sys/amd64/vmm/amd/amdvi_priv.h
head/sys/amd64/vmm/amd/ivrs_drv.c
Modified: head/sys/amd64/vmm/amd/amdvi_hw.c
==============================================================================
--- head/sys/amd64/vmm/amd/amdvi_hw.c Fri Jul 7 06:29:18 2017 (r320763)
+++ head/sys/amd64/vmm/amd/amdvi_hw.c Fri Jul 7 06:37:19 2017 (r320764)
@@ -496,7 +496,7 @@ amdvi_cmp_wait(struct amdvi_softc *softc)
#ifdef AMDVI_DEBUG_CMD
if (status)
- device_printf(softc->dev, "CMD completion DONE Tail:0x%x,
+ device_printf(softc->dev, "CMD completion DONE Tail:0x%x, "
"Head:0x%x, loop:%d.\n", ctrl->cmd_tail,
ctrl->cmd_head, loop);
#endif
Modified: head/sys/amd64/vmm/amd/amdvi_priv.h
==============================================================================
--- head/sys/amd64/vmm/amd/amdvi_priv.h Fri Jul 7 06:29:18 2017 (r320763)
+++ head/sys/amd64/vmm/amd/amdvi_priv.h Fri Jul 7 06:37:19 2017 (r320764)
@@ -65,7 +65,7 @@
struct amdvi_dte {
uint32_t dt_valid:1; /* Device Table valid. */
uint32_t pt_valid:1; /* Page translation valid. */
- uint8_t :7; /* Reserved[8:2] */
+ uint16_t :7; /* Reserved[8:2] */
uint8_t pt_level:3; /* Paging level, 0 to disable. */
uint64_t pt_base:40; /* Page table root pointer. */
uint8_t :3; /* Reserved[54:52] */
Modified: head/sys/amd64/vmm/amd/ivrs_drv.c
==============================================================================
--- head/sys/amd64/vmm/amd/ivrs_drv.c Fri Jul 7 06:29:18 2017 (r320763)
+++ head/sys/amd64/vmm/amd/ivrs_drv.c Fri Jul 7 06:37:19 2017 (r320764)
@@ -75,6 +75,12 @@ ivrs_hdr_iterate_tbl(ivhd_iter_t iter, void *arg)
end = (ACPI_IVRS_HEADER *)((char *)ivrs + ivrs->Header.Length);
while (ivrs_hdr < end) {
+ if ((uint8_t *)ivrs_hdr + ivrs_hdr->Length > (uint8_t *)end) {
+ printf("AMD-Vi:IVHD/IVMD is corrupted, length : %d\n",
+ ivrs_hdr->Length);
+ break;
+ }
+
switch (ivrs_hdr->Type) {
case ACPI_IVRS_TYPE_HARDWARE: /* Legacy */
case 0x11:
@@ -98,10 +104,6 @@ ivrs_hdr_iterate_tbl(ivhd_iter_t iter, void *arg)
ivrs_hdr = (ACPI_IVRS_HEADER *)((uint8_t *)ivrs_hdr +
ivrs_hdr->Length);
- if (ivrs_hdr->Length < 0) {
- printf("AMD-Vi:IVHD/IVMD is corrupted, length : %d\n", ivrs_hdr->Length);
- break;
- }
}
}
More information about the svn-src-all
mailing list