sony-laptop: fix sony_nc_sysfs_store()
We made this an unsigned long and it causes a bug on 64 bit big endian systems when we try to pass the value to sony_nc_int_call(). Also value has to be signed because validate() returns negative error codes. Signed-off-by: Dan Carpenter <dan.carpenter@oracle.com> Signed-off-by: Mattia Dongili <malattia@linux.it> Signed-off-by: Matthew Garrett <mjg@redhat.com>
This commit is contained in:
parent
ca3c2c706d
commit
c7a2918373
|
@ -973,7 +973,7 @@ static ssize_t sony_nc_sysfs_store(struct device *dev,
|
||||||
struct device_attribute *attr,
|
struct device_attribute *attr,
|
||||||
const char *buffer, size_t count)
|
const char *buffer, size_t count)
|
||||||
{
|
{
|
||||||
unsigned long value = 0;
|
int value;
|
||||||
int ret = 0;
|
int ret = 0;
|
||||||
struct sony_nc_value *item =
|
struct sony_nc_value *item =
|
||||||
container_of(attr, struct sony_nc_value, devattr);
|
container_of(attr, struct sony_nc_value, devattr);
|
||||||
|
@ -984,7 +984,7 @@ static ssize_t sony_nc_sysfs_store(struct device *dev,
|
||||||
if (count > 31)
|
if (count > 31)
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
|
|
||||||
if (kstrtoul(buffer, 10, &value))
|
if (kstrtoint(buffer, 10, &value))
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
|
|
||||||
if (item->validate)
|
if (item->validate)
|
||||||
|
@ -994,7 +994,7 @@ static ssize_t sony_nc_sysfs_store(struct device *dev,
|
||||||
return value;
|
return value;
|
||||||
|
|
||||||
ret = sony_nc_int_call(sony_nc_acpi_handle, *item->acpiset,
|
ret = sony_nc_int_call(sony_nc_acpi_handle, *item->acpiset,
|
||||||
(int *)&value, NULL);
|
&value, NULL);
|
||||||
if (ret < 0)
|
if (ret < 0)
|
||||||
return -EIO;
|
return -EIO;
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue