acer-wmi: fix memory leaks in WMID_set_capabilities and get_wmid_devices
Subsystems (2)
PATCH 1/1 acer-wmi: fix memory leaks in WMID_set_capabilities and get_wmid_devices
When acpi_evaluate_object() is passed ACPI_ALLOCATE_BUFFER, the caller must kfree the returned buffer if AE_OK is returned.
The callers of wmi_query_block() pass ACPI_ALLOCATE_BUFFER, and thus must check its return value before accessing or kfree() on the buffer.
This patch adds a missing kfree(out.pointer) before exit WMID_set_capabilities() and get_wmid_devices().
--- drivers/platform/x86/acer-wmi.c | 10 +++++++--- 1 files changed, 7 insertions(+), 3 deletions(-)
drivers/platform/x86/acer-wmi.c +7 -3
@@ -772,6 +772,7 @@ static acpi_status WMID_set_capabilities(void) obj->buffer.length == sizeof(u32)) { devices = *((u32 *) obj->buffer.pointer); } else { +kfree (out.pointer);return AE_ERROR ; }
@@ -788,6 +789,7 @@ static acpi_status WMID_set_capabilities(void)if (!(devices &0x20 )) max_brightness =0x9 ; +kfree (out.pointer);return status; }
@@ -1095,6 +1097,7 @@ static u32 get_wmid_devices(void)struct acpi_buffer out = {ACPI_ALLOCATE_BUFFER ,NULL };union acpi_object *obj;acpi_status status; +u32 devices =0 ; status =wmi_query_block (WMID_GUID2 ,1 , &out);if (ACPI_FAILURE (status))
@@ -1103,10 +1106,11 @@ static u32 get_wmid_devices(void) obj = (union acpi_object *) out.pointer;if (obj && obj->type ==ACPI_TYPE_BUFFER && obj->buffer.length ==sizeof (u32)) { -return *((u32 *) obj->buffer.pointer); - }else { -return 0 ; + devices = *((u32 *) obj->buffer.pointer); } + +kfree (out.pointer); +return devices; }/*
Signature · 1 line
1.5.4.3
Quoted 11 lines · On Tuesday 06 July 2010 03:55:36 Axel Lin wrote:
When
acpi_evaluate_object()is passedACPI_ALLOCATE_BUFFER, the caller must kfree the returned buffer ifAE_OKis returned.The callers of
wmi_query_block()passACPI_ALLOCATE_BUFFER, and thus must check its return value before accessing orkfree()on the buffer.This patch adds a missing kfree(out.pointer) before exit
WMID_set_capabilities()andget_wmid_devices().Signed-off-by Axel Lin <[email protected]>
Quoted 47 lines
--- drivers/platform/x86/acer-wmi.c | 10 +++++++--- 1 files changed, 7 insertions(+), 3 deletions(-)(quoted diff) +0
-0
b/drivers/platform/x86/acer-wmi.cindex 1ea6c43..fe644c6 100644drivers/platform/x86/acer-wmi.c +7
-3@@ -772,6 +772,7 @@ static acpi_status WMID_set_capabilities(void) obj->buffer.length == sizeof(u32)) { devices = *((u32 *) obj->buffer.pointer); } else { +kfree (out.pointer);return AE_ERROR ; }@@ -788,6 +789,7 @@ static acpi_status WMID_set_capabilities(void)if (!(devices &0x20 )) max_brightness =0x9 ; +kfree (out.pointer);return status; }@@ -1095,6 +1097,7 @@ static u32 get_wmid_devices(void)struct acpi_buffer out = {ACPI_ALLOCATE_BUFFER ,NULL };union acpi_object *obj;acpi_status status; +u32 devices =0 ; status =wmi_query_block (WMID_GUID2 ,1 , &out);if (ACPI_FAILURE (status))@@ -1103,10 +1106,11 @@ static u32 get_wmid_devices(void) obj = (union acpi_object *) out.pointer;if (obj && obj->type ==ACPI_TYPE_BUFFER && obj->buffer.length ==sizeof (u32)) { -return *((u32 *) obj->buffer.pointer); - }else { -return 0 ; + devices = *((u32 *) obj->buffer.pointer); } + +kfree (out.pointer); +return devices; }/*
Signature · 3 lines
E-Mail: [email protected] Web: strangeworlds.co.uk GPG Key ID: 0x23EE722D