ACPICA: fix leak of acpi_os_validate_address
authorLin Ming <ming.m.lin@intel.com>
Thu, 13 Aug 2009 02:43:27 +0000 (10:43 +0800)
committerLen Brown <len.brown@intel.com>
Thu, 27 Aug 2009 17:10:35 +0000 (13:10 -0400)
commita5fe1a03f7720b8da8364a1737e1e5a357904e99
tree2b84668217bc55d8a3bb98d053e92ff93b34dd36
parent422bef879e84104fee6dc68ded0e371dbeb5f88e
ACPICA: fix leak of acpi_os_validate_address

http://bugzilla.kernel.org/show_bug.cgi?id=13620

If the dynamic region is created and added to resource list over and over again,
it has the potential to be a memory leak by growing the list every time.

This patch fixes the memory leak, as below

1) add a new field "count" to struct acpi_res_list.

   When inserting, if the region(addr, len) is already in the resource
   list, we just increase "count", otherwise, the region is inserted
   with count=1.

   When deleting, the "count" is decreased, if it's decreased to 0,
   the region is deleted from the resource list.

   With "count", the region with same address and length can only be
   inserted to the resource list once, so prevent potential memory leak.

2) add a new function acpi_os_invalidate_address, which is called when
   region is deleted.

Signed-off-by: Lin Ming <ming.m.lin@intel.com>
Signed-off-by: Len Brown <len.brown@intel.com>
drivers/acpi/acpica/utdelete.c
drivers/acpi/osl.c
include/acpi/acpiosxf.h