Blob Blame History Raw
From 690b1ad9d2032d6f2565d44f6564590d47835ae8 Mon Sep 17 00:00:00 2001
From: Zhang Rui <rui.zhang@intel.com>
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 <rui.zhang@intel.com>
---
 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