ACPICA: Harden _PRT repair code; check for minimum package length.
authorBob Moore <robert.moore@intel.com>
Wed, 26 Feb 2014 02:30:25 +0000 (10:30 +0800)
committerRafael J. Wysocki <rafael.j.wysocki@intel.com>
Wed, 26 Feb 2014 23:46:00 +0000 (00:46 +0100)
This change prevents a fault during the repair by checking up
front if the _PRT subpackage contains the minimum number of
elements (4).

Signed-off-by: Bob Moore <robert.moore@intel.com>
Signed-off-by: Lv Zheng <lv.zheng@intel.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
drivers/acpi/acpica/nsrepair2.c

index 53b4b42a13f2931f2275dc26143ff74d1d9b5c84..c57cd4aa357db7d54814493cf6f59aa38b66bd70 100644 (file)
@@ -611,6 +611,7 @@ acpi_ns_repair_PRT(struct acpi_evaluate_info *info,
        union acpi_operand_object **top_object_list;
        union acpi_operand_object **sub_object_list;
        union acpi_operand_object *obj_desc;
+       union acpi_operand_object *sub_package;
        u32 element_count;
        u32 index;
 
@@ -620,7 +621,12 @@ acpi_ns_repair_PRT(struct acpi_evaluate_info *info,
        element_count = package_object->package.count;
 
        for (index = 0; index < element_count; index++) {
-               sub_object_list = (*top_object_list)->package.elements;
+               sub_package = *top_object_list;
+               sub_object_list = sub_package->package.elements;
+
+               if (sub_package->package.count < 4) {   /* Minimum required element count */
+                       return (AE_OK);
+               }
 
                /*
                 * If the BIOS has erroneously reversed the _PRT source_name (index 2)