Page MenuHomeFreeBSD

D59566.id186375.diff
No OneTemporary

D59566.id186375.diff

diff --git a/sys/dev/acpica/acpi_spmc.c b/sys/dev/acpica/acpi_spmc.c
--- a/sys/dev/acpica/acpi_spmc.c
+++ b/sys/dev/acpica/acpi_spmc.c
@@ -634,15 +634,32 @@
*/
for (size_t i = 0, j = 0; i < object->Package.Count; i++) {
constraint_obj = &object->Package.Elements[i];
- constraint = &sc->constraints[j];
-
- constraint->enabled =
- constraint_obj->Package.Elements[1].Integer.Value;
- name_obj = &constraint_obj->Package.Elements[0];
- constraint->name = strdup(name_obj->String.Pointer, M_TEMP);
+ if (constraint_obj->Type != ACPI_TYPE_PACKAGE) {
+ device_printf(sc->dev, "Intel: Wrong element type for "
+ "constraint %zu.\n", i);
+ goto skip;
+ }
+ if (constraint_obj->Package.Count != 3) {
+ device_printf(sc->dev, "Intel: Wrong package length "
+ "for constraint %zu's package.\n", i);
+ goto skip;
+ }
+ constraint = &sc->constraints[j];
detail = &constraint_obj->Package.Elements[2];
+
+ if (detail->Type != ACPI_TYPE_PACKAGE) {
+ device_printf(sc->dev, "Intel: Wrong element type for "
+ "constraint %zu's detail package.\n", i);
+ goto skip;
+ }
+ if (detail->Package.Count != 2) {
+ device_printf(sc->dev, "Intel: Wrong package length "
+ "for constraint %zu's detail package.\n", i);
+ goto skip;
+ }
+
/*
* The first element in the device constraint detail package is
* the revision, and should always be zero.
@@ -656,12 +673,27 @@
"Intel: Unknown revision %d for "
"constraint %zu's detail package\n",
revision, i);
- sc->constraint_count--;
- continue;
+ goto skip;
}
constraint_package = &detail->Package.Elements[1];
+ if (constraint_package->Type != ACPI_TYPE_PACKAGE) {
+ device_printf(sc->dev, "Intel: Wrong element type for "
+ "constraint %zu's constraint package.\n", i);
+ goto skip;
+ }
+ if (constraint_package->Package.Count != 3) {
+ device_printf(sc->dev, "Intel: Wrong package length "
+ "for constraint %zu's constraint package.\n", i);
+ goto skip;
+ }
+
+ constraint->enabled =
+ constraint_obj->Package.Elements[1].Integer.Value;
+ name_obj = &constraint_obj->Package.Elements[0];
+ constraint->name = strdup(name_obj->String.Pointer, M_TEMP);
+
constraint->lpi_uid =
constraint_package->Package.Elements[0].Integer.Value;
constraint->min_d_state =
@@ -670,6 +702,9 @@
constraint_package->Package.Elements[2].Integer.Value;
j++;
+ continue;
+skip:
+ sc->constraint_count--;
}
return (0);

File Metadata

Mime Type
text/plain
Expires
Sat, Sep 12, 10:35 AM (57 m, 22 s)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
38704235
Default Alt Text
D59566.id186375.diff (2 KB)

Event Timeline