Commit b6cb6f9f authored by Colin Ian King's avatar Colin Ian King Committed by Greg Kroah-Hartman

platform/x86: alienware-wmi: fix kfree on potentially uninitialized pointer

[ Upstream commit 98e26302 ]

Currently the kfree of output.pointer can be potentially freeing
an uninitalized pointer in the case where out_data is NULL. Fix this
by reworking the case where out_data is not-null to perform the
ACPI status check and also the kfree of outpoint.pointer in one block
and hence ensuring the pointer is only freed when it has been used.

Also replace the if (ptr != NULL) idiom with just if (ptr).

Fixes: ff0e9f26 ("platform/x86: alienware-wmi: Correct a memory leak")
Signed-off-by: default avatarColin Ian King <colin.king@canonical.com>
Signed-off-by: default avatarDarren Hart (VMware) <dvhart@infradead.org>
Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
parent e60e2a29
...@@ -522,23 +522,22 @@ static acpi_status alienware_wmax_command(struct wmax_basic_args *in_args, ...@@ -522,23 +522,22 @@ static acpi_status alienware_wmax_command(struct wmax_basic_args *in_args,
input.length = (acpi_size) sizeof(*in_args); input.length = (acpi_size) sizeof(*in_args);
input.pointer = in_args; input.pointer = in_args;
if (out_data != NULL) { if (out_data) {
output.length = ACPI_ALLOCATE_BUFFER; output.length = ACPI_ALLOCATE_BUFFER;
output.pointer = NULL; output.pointer = NULL;
status = wmi_evaluate_method(WMAX_CONTROL_GUID, 0, status = wmi_evaluate_method(WMAX_CONTROL_GUID, 0,
command, &input, &output); command, &input, &output);
} else if (ACPI_SUCCESS(status)) {
status = wmi_evaluate_method(WMAX_CONTROL_GUID, 0,
command, &input, NULL);
if (ACPI_SUCCESS(status) && out_data != NULL) {
obj = (union acpi_object *)output.pointer; obj = (union acpi_object *)output.pointer;
if (obj && obj->type == ACPI_TYPE_INTEGER) if (obj && obj->type == ACPI_TYPE_INTEGER)
*out_data = (u32) obj->integer.value; *out_data = (u32)obj->integer.value;
} }
kfree(output.pointer); kfree(output.pointer);
} else {
status = wmi_evaluate_method(WMAX_CONTROL_GUID, 0,
command, &input, NULL);
}
return status; return status;
} }
/* /*
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment