51 lines
1.5 KiB
Diff
51 lines
1.5 KiB
Diff
|
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
|
||
|
|