wmi: fix a memory leak in wmi_notify_debug
PATCH 1/1 wmi: fix a memory leak in wmi_notify_debug
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_get_event_data() pass ACPI_ALLOCATE_BUFFER, and thus must check its return value before accessing or kfree() on the buffer.
This patch adds return value checking for wmi_get_event_data() and adds a missing kfree(obj) in the end of wmi_notify_debug
--- drivers/platform/x86/wmi.c | 8 +++++++- 1 files changed, 7 insertions(+), 1 deletions(-)
drivers/platform/x86/wmi.c +7 -1
@@ -518,8 +518,13 @@ static void wmi_notify_debug(u32 value, void *context) {struct acpi_buffer response = {ACPI_ALLOCATE_BUFFER ,NULL };union acpi_object *obj; +acpi_status status; -wmi_get_event_data (value, &response); + status =wmi_get_event_data (value, &response); +if (status !=AE_OK ) { +printk (KERN_INFO "wmi: bad event status 0x%x\n" , status); +return ; + } obj = (union acpi_object *)response.pointer;
@@ -543,6 +548,7 @@ static void wmi_notify_debug(u32 value, void *context)default :printk ("object type 0x%X\n" , obj->type); } +kfree (obj); }/**
Signature · 1 line
1.5.4.3
Quoted 2 lines · On Monday 28 June 2010 03:30:45 Axel Lin wrote:
When
acpi_evaluate_object()is passedACPI_ALLOCATE_BUFFER, the caller must kfree the returned buffer ifAE_OKis returned.
Oops, I forgot to free the buffer...
Thanks!
Matthew, can you queue this up, please.
It's a safe memleak fix (if wmi driver is loaded with debug_event=1).
Thomas
Matthew Garrett
AppliedQuoted 9 lines · Axel Lin
When
acpi_evaluate_object()is passedACPI_ALLOCATE_BUFFER, the caller must kfree the returned buffer ifAE_OKis returned.The callers of
wmi_get_event_data()passACPI_ALLOCATE_BUFFER, and thus must check its return value before accessing orkfree()on the buffer.This patch adds return value checking for
wmi_get_event_data()and adds a missing kfree(obj) in the end ofwmi_notify_debug
Applied, thanks.
Signature · 1 line
Matthew Garrett | [email protected]