diff options
author | Bob Moore <robert.moore@intel.com> | 2008-04-10 11:06:39 -0400 |
---|---|---|
committer | Len Brown <len.brown@intel.com> | 2008-04-22 14:29:26 -0400 |
commit | d8841647de7c4aa3f3ff5b8b8c4a3f042e848ff0 (patch) | |
tree | c13984a05b5e742e86f07a762162d634404ec8ef | |
parent | 98af37fba9b3e601ca4bded51ef51a2be4e8c97b (diff) |
ACPICA: Add error checks to prevent faults
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>
-rw-r--r-- | drivers/acpi/executer/exstore.c | 12 | ||||
-rw-r--r-- | drivers/acpi/namespace/nsnames.c | 6 |
2 files changed, 16 insertions, 2 deletions
diff --git a/drivers/acpi/executer/exstore.c b/drivers/acpi/executer/exstore.c index 912889ed45ed..d860f9c6172c 100644 --- a/drivers/acpi/executer/exstore.c +++ b/drivers/acpi/executer/exstore.c | |||
@@ -209,8 +209,16 @@ acpi_ex_do_debug_object(union acpi_operand_object *source_desc, | |||
209 | object, level + 4, 0); | 209 | object, level + 4, 0); |
210 | } | 210 | } |
211 | } else if (source_desc->reference.node) { | 211 | } else if (source_desc->reference.node) { |
212 | acpi_ex_do_debug_object((source_desc->reference.node)-> | 212 | if (ACPI_GET_DESCRIPTOR_TYPE |
213 | object, level + 4, 0); | 213 | (source_desc->reference.node) != |
214 | ACPI_DESC_TYPE_NAMED) { | ||
215 | ACPI_DEBUG_PRINT_RAW((ACPI_DB_DEBUG_OBJECT, | ||
216 | " %p - Not a valid namespace node\n")); | ||
217 | } else { | ||
218 | acpi_ex_do_debug_object((source_desc->reference. | ||
219 | node)->object, | ||
220 | level + 4, 0); | ||
221 | } | ||
214 | } | 222 | } |
215 | break; | 223 | break; |
216 | 224 | ||
diff --git a/drivers/acpi/namespace/nsnames.c b/drivers/acpi/namespace/nsnames.c index cbd94af08cc5..e14a1412656b 100644 --- a/drivers/acpi/namespace/nsnames.c +++ b/drivers/acpi/namespace/nsnames.c | |||
@@ -180,6 +180,12 @@ acpi_size acpi_ns_get_pathname_length(struct acpi_namespace_node *node) | |||
180 | next_node = node; | 180 | next_node = node; |
181 | 181 | ||
182 | while (next_node && (next_node != acpi_gbl_root_node)) { | 182 | while (next_node && (next_node != acpi_gbl_root_node)) { |
183 | if (ACPI_GET_DESCRIPTOR_TYPE(next_node) != ACPI_DESC_TYPE_NAMED) { | ||
184 | ACPI_ERROR((AE_INFO, | ||
185 | "Invalid NS Node (%X) while traversing path", | ||
186 | next_node)); | ||
187 | return 0; | ||
188 | } | ||
183 | size += ACPI_PATH_SEGMENT_LENGTH; | 189 | size += ACPI_PATH_SEGMENT_LENGTH; |
184 | next_node = acpi_ns_get_parent_node(next_node); | 190 | next_node = acpi_ns_get_parent_node(next_node); |
185 | } | 191 | } |