ACPICA: Add error checks to prevent faults
Bob Moore [Thu, 10 Apr 2008 15:06:39 +0000 (19:06 +0400)]
Added additional error checking to prevent run-time faults.

Signed-off-by: Bob Moore <robert.moore@intel.com>
Signed-off-by: Alexey Starikovskiy <astarikovskiy@suse.de>
Signed-off-by: Len Brown <len.brown@intel.com>

drivers/acpi/executer/exstore.c
drivers/acpi/namespace/nsnames.c

index 912889e..d860f9c 100644 (file)
@@ -209,8 +209,16 @@ acpi_ex_do_debug_object(union acpi_operand_object *source_desc,
                                                        object, level + 4, 0);
                        }
                } else if (source_desc->reference.node) {
-                       acpi_ex_do_debug_object((source_desc->reference.node)->
-                                               object, level + 4, 0);
+                       if (ACPI_GET_DESCRIPTOR_TYPE
+                           (source_desc->reference.node) !=
+                           ACPI_DESC_TYPE_NAMED) {
+                               ACPI_DEBUG_PRINT_RAW((ACPI_DB_DEBUG_OBJECT,
+                                                     " %p - Not a valid namespace node\n"));
+                       } else {
+                               acpi_ex_do_debug_object((source_desc->reference.
+                                                        node)->object,
+                                                       level + 4, 0);
+                       }
                }
                break;
 
index cbd94af..e14a141 100644 (file)
@@ -180,6 +180,12 @@ acpi_size acpi_ns_get_pathname_length(struct acpi_namespace_node *node)
        next_node = node;
 
        while (next_node && (next_node != acpi_gbl_root_node)) {
+               if (ACPI_GET_DESCRIPTOR_TYPE(next_node) != ACPI_DESC_TYPE_NAMED) {
+                       ACPI_ERROR((AE_INFO,
+                                   "Invalid NS Node (%X) while traversing path",
+                                   next_node));
+                       return 0;
+               }
                size += ACPI_PATH_SEGMENT_LENGTH;
                next_node = acpi_ns_get_parent_node(next_node);
        }