mirror of https://gitee.com/openkylin/linux.git
ACPICA: Fix possible memory leak, error exit path
Fixed two possible memory leaks in the error exit paths of acpi_ut_update_objerct_reference() and acpi_ut_walk_package_tree() These functions are similar in that they use a stack of state objects in order to eliminate recursion. The stack must be fully deallocated if an error occurs. http://www.acpica.org/bugzilla/show_bug.cgi?id=383 Signed-off-by: Lin Ming <ming.m.lin@intel.com> Signed-off-by: Bob Moore <robert.moore@intel.com> Signed-off-by: Len Brown <len.brown@intel.com>
This commit is contained in:
parent
c35def2118
commit
cf058bd1c8
|
@ -585,6 +585,13 @@ acpi_ut_update_object_reference(union acpi_operand_object *object, u16 action)
|
||||||
ACPI_EXCEPTION((AE_INFO, status,
|
ACPI_EXCEPTION((AE_INFO, status,
|
||||||
"Could not update object reference count"));
|
"Could not update object reference count"));
|
||||||
|
|
||||||
|
/* Free any stacked Update State objects */
|
||||||
|
|
||||||
|
while (state_list) {
|
||||||
|
state = acpi_ut_pop_generic_state(&state_list);
|
||||||
|
acpi_ut_delete_generic_state(state);
|
||||||
|
}
|
||||||
|
|
||||||
return_ACPI_STATUS(status);
|
return_ACPI_STATUS(status);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -995,6 +995,15 @@ acpi_ut_walk_package_tree(union acpi_operand_object * source_object,
|
||||||
state->pkg.
|
state->pkg.
|
||||||
this_target_obj, 0);
|
this_target_obj, 0);
|
||||||
if (!state) {
|
if (!state) {
|
||||||
|
|
||||||
|
/* Free any stacked Update State objects */
|
||||||
|
|
||||||
|
while (state_list) {
|
||||||
|
state =
|
||||||
|
acpi_ut_pop_generic_state
|
||||||
|
(&state_list);
|
||||||
|
acpi_ut_delete_generic_state(state);
|
||||||
|
}
|
||||||
return_ACPI_STATUS(AE_NO_MEMORY);
|
return_ACPI_STATUS(AE_NO_MEMORY);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue