ACPICA: Region deletion: Ensure region object is removed from handler list
Prevents a possible fault when a dynamic operation region is deleted. ACPICA BZ 507. http://acpica.org/bugzilla/show_bug.cgi?id=507 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
c446eed618
commit
3362a6badb
@ -75,6 +75,7 @@ static void acpi_ut_delete_internal_obj(union acpi_operand_object *object)
|
|||||||
union acpi_operand_object *handler_desc;
|
union acpi_operand_object *handler_desc;
|
||||||
union acpi_operand_object *second_desc;
|
union acpi_operand_object *second_desc;
|
||||||
union acpi_operand_object *next_desc;
|
union acpi_operand_object *next_desc;
|
||||||
|
union acpi_operand_object **last_obj_ptr;
|
||||||
|
|
||||||
ACPI_FUNCTION_TRACE_PTR(ut_delete_internal_obj, object);
|
ACPI_FUNCTION_TRACE_PTR(ut_delete_internal_obj, object);
|
||||||
|
|
||||||
@ -223,6 +224,26 @@ static void acpi_ut_delete_internal_obj(union acpi_operand_object *object)
|
|||||||
*/
|
*/
|
||||||
handler_desc = object->region.handler;
|
handler_desc = object->region.handler;
|
||||||
if (handler_desc) {
|
if (handler_desc) {
|
||||||
|
next_desc =
|
||||||
|
handler_desc->address_space.region_list;
|
||||||
|
last_obj_ptr =
|
||||||
|
&handler_desc->address_space.region_list;
|
||||||
|
|
||||||
|
/* Remove the region object from the handler's list */
|
||||||
|
|
||||||
|
while (next_desc) {
|
||||||
|
if (next_desc == object) {
|
||||||
|
*last_obj_ptr =
|
||||||
|
next_desc->region.next;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Walk the linked list of handler */
|
||||||
|
|
||||||
|
last_obj_ptr = &next_desc->region.next;
|
||||||
|
next_desc = next_desc->region.next;
|
||||||
|
}
|
||||||
|
|
||||||
if (handler_desc->address_space.handler_flags &
|
if (handler_desc->address_space.handler_flags &
|
||||||
ACPI_ADDR_HANDLER_DEFAULT_INSTALLED) {
|
ACPI_ADDR_HANDLER_DEFAULT_INSTALLED) {
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user