staging: ion: Fix ION_IOC_FREE compat ioctl

The compat ioctl for ION_IOC_FREE currently passes allocation data
instead of the free data. Correct this.

Cc: Colin Cross <ccross@android.com>
Cc: Android Kernel Team <kernel-team@android.com>
Signed-off-by: Laura Abbott <lauraa@codeaurora.org>
[jstultz: Folded in a small build fix]
Signed-off-by: John Stultz <john.stultz@linaro.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
Laura Abbott 2014-02-04 16:08:39 -08:00 committed by Greg Kroah-Hartman
parent c9e8440eca
commit 8666a87611
1 changed files with 22 additions and 4 deletions

View File

@ -35,9 +35,14 @@ struct compat_ion_custom_data {
compat_ulong_t arg; compat_ulong_t arg;
}; };
struct compat_ion_handle_data {
compat_int_t handle;
};
#define COMPAT_ION_IOC_ALLOC _IOWR(ION_IOC_MAGIC, 0, \ #define COMPAT_ION_IOC_ALLOC _IOWR(ION_IOC_MAGIC, 0, \
struct compat_ion_allocation_data) struct compat_ion_allocation_data)
#define COMPAT_ION_IOC_FREE _IOWR(ION_IOC_MAGIC, 1, struct ion_handle_data) #define COMPAT_ION_IOC_FREE _IOWR(ION_IOC_MAGIC, 1, \
struct compat_ion_handle_data)
#define COMPAT_ION_IOC_CUSTOM _IOWR(ION_IOC_MAGIC, 6, \ #define COMPAT_ION_IOC_CUSTOM _IOWR(ION_IOC_MAGIC, 6, \
struct compat_ion_custom_data) struct compat_ion_custom_data)
@ -64,6 +69,19 @@ static int compat_get_ion_allocation_data(
return err; return err;
} }
static int compat_get_ion_handle_data(
struct compat_ion_handle_data __user *data32,
struct ion_handle_data __user *data)
{
compat_int_t i;
int err;
err = get_user(i, &data32->handle);
err |= put_user(i, &data->handle);
return err;
}
static int compat_put_ion_allocation_data( static int compat_put_ion_allocation_data(
struct compat_ion_allocation_data __user *data32, struct compat_ion_allocation_data __user *data32,
struct ion_allocation_data __user *data) struct ion_allocation_data __user *data)
@ -132,8 +150,8 @@ long compat_ion_ioctl(struct file *filp, unsigned int cmd, unsigned long arg)
} }
case COMPAT_ION_IOC_FREE: case COMPAT_ION_IOC_FREE:
{ {
struct compat_ion_allocation_data __user *data32; struct compat_ion_handle_data __user *data32;
struct ion_allocation_data __user *data; struct ion_handle_data __user *data;
int err; int err;
data32 = compat_ptr(arg); data32 = compat_ptr(arg);
@ -141,7 +159,7 @@ long compat_ion_ioctl(struct file *filp, unsigned int cmd, unsigned long arg)
if (data == NULL) if (data == NULL)
return -EFAULT; return -EFAULT;
err = compat_get_ion_allocation_data(data32, data); err = compat_get_ion_handle_data(data32, data);
if (err) if (err)
return err; return err;