From 690b1ad9d2032d6f2565d44f6564590d47835ae8 Mon Sep 17 00:00:00 2001 From: Zhang Rui Date: Thu, 29 Nov 2012 01:30:43 +0800 Subject: [PATCH 1/2] ACPI sony-laptop: do proper memcpy for ACPI_TYPE_INTEGER acpi_object the return value of __call_snc_method can either be an ACPI_TYPE_BUFFER object or a ACPI_TYPE_INTEGER object. do proper memcpy for ACPI_TYPE_INTEGER object. https://bugzilla.kernel.org/show_bug.cgi?id=50111 Signed-off-by: Zhang Rui --- drivers/platform/x86/sony-laptop.c | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/drivers/platform/x86/sony-laptop.c b/drivers/platform/x86/sony-laptop.c index daaddec..92e0da2 100644 --- a/drivers/platform/x86/sony-laptop.c +++ b/drivers/platform/x86/sony-laptop.c @@ -792,20 +792,19 @@ static int sony_nc_buffer_call(acpi_handle handle, char *name, u64 *value, if (!object) return -EINVAL; - if (object->type == ACPI_TYPE_BUFFER) + if (object->type == ACPI_TYPE_BUFFER) { len = MIN(buflen, object->buffer.length); - - else if (object->type == ACPI_TYPE_INTEGER) + memcpy(buffer, object->buffer.pointer, len); + } else if (object->type == ACPI_TYPE_INTEGER) { len = MIN(buflen, sizeof(object->integer.value)); - - else { + memcpy(buffer, (void *)&object->integer.value, len); + } else { pr_warn("Invalid acpi_object: expected 0x%x got 0x%x\n", ACPI_TYPE_BUFFER, object->type); kfree(object); return -EINVAL; } - memcpy(buffer, object->buffer.pointer, len); kfree(object); return 0; } -- 1.7.9.5