aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAxel Lin <axel.lin@gmail.com>2010-06-27 21:30:45 -0400
committerMatthew Garrett <mjg@redhat.com>2010-08-03 09:48:51 -0400
commit1492616a434dae1908d0da2d6ee6605ca5a77e6f (patch)
tree4bab4bca46acbf15e242e6663b313e05f1d1be06
parentd5164dbf1f651d1e955b158fb70a9c844cc91cd1 (diff)
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 Signed-off-by: Axel Lin <axel.lin@gmail.com> Acked-by: Thomas Renninger <trenn@suse.de> Signed-off-by: Matthew Garrett <mjg@redhat.com>
-rw-r--r--drivers/platform/x86/wmi.c8
1 files changed, 7 insertions, 1 deletions
diff --git a/drivers/platform/x86/wmi.c b/drivers/platform/x86/wmi.c
index 582b5cdd3f43..6c15720be6a4 100644
--- a/drivers/platform/x86/wmi.c
+++ b/drivers/platform/x86/wmi.c
@@ -518,8 +518,13 @@ static void wmi_notify_debug(u32 value, void *context)
518{ 518{
519 struct acpi_buffer response = { ACPI_ALLOCATE_BUFFER, NULL }; 519 struct acpi_buffer response = { ACPI_ALLOCATE_BUFFER, NULL };
520 union acpi_object *obj; 520 union acpi_object *obj;
521 acpi_status status;
521 522
522 wmi_get_event_data(value, &response); 523 status = wmi_get_event_data(value, &response);
524 if (status != AE_OK) {
525 printk(KERN_INFO "wmi: bad event status 0x%x\n", status);
526 return;
527 }
523 528
524 obj = (union acpi_object *)response.pointer; 529 obj = (union acpi_object *)response.pointer;
525 530
@@ -543,6 +548,7 @@ static void wmi_notify_debug(u32 value, void *context)
543 default: 548 default:
544 printk("object type 0x%X\n", obj->type); 549 printk("object type 0x%X\n", obj->type);
545 } 550 }
551 kfree(obj);
546} 552}
547 553
548/** 554/**