From fc39db457dc42903ce96c79573d49fcaa49012c7 Mon Sep 17 00:00:00 2001 From: Alasdair G Kergon Date: Fri, 8 Feb 2008 02:09:53 +0000 Subject: [PATCH] --- yaml --- r: 84557 b: refs/heads/master c: 27238b2bea89b1808b570bece6777ab2abc52fe2 h: refs/heads/master i: 84555: 4871180ebe6fb16feaa6df3a8fb88650472c9b65 v: v3 --- [refs] | 2 +- trunk/drivers/md/dm-ioctl.c | 15 +++++++++------ 2 files changed, 10 insertions(+), 7 deletions(-) diff --git a/[refs] b/[refs] index 5e6ef3a6c60b..9d86b4f08af8 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: b9249e556877643b940e4543824a3de5c85bce49 +refs/heads/master: 27238b2bea89b1808b570bece6777ab2abc52fe2 diff --git a/trunk/drivers/md/dm-ioctl.c b/trunk/drivers/md/dm-ioctl.c index 9627fa0f9470..4aa1f78b78f0 100644 --- a/trunk/drivers/md/dm-ioctl.c +++ b/trunk/drivers/md/dm-ioctl.c @@ -702,7 +702,7 @@ static int dev_rename(struct dm_ioctl *param, size_t param_size) int r; char *new_name = (char *) param + param->data_start; - if (new_name < (char *) param->data || + if (new_name < param->data || invalid_str(new_name, (void *) param + param_size)) { DMWARN("Invalid new logical volume name supplied."); return -EINVAL; @@ -728,7 +728,7 @@ static int dev_set_geometry(struct dm_ioctl *param, size_t param_size) if (!md) return -ENXIO; - if (geostr < (char *) param->data || + if (geostr < param->data || invalid_str(geostr, (void *) param + param_size)) { DMWARN("Invalid geometry supplied."); goto out; @@ -1397,13 +1397,11 @@ static int validate_params(uint cmd, struct dm_ioctl *param) return 0; } -static int ctl_ioctl(struct inode *inode, struct file *file, - uint command, ulong u) +static int ctl_ioctl(uint command, struct dm_ioctl __user *user) { int r = 0; unsigned int cmd; struct dm_ioctl *param; - struct dm_ioctl __user *user = (struct dm_ioctl __user *) u; ioctl_fn fn = NULL; size_t param_size; @@ -1471,8 +1469,13 @@ static int ctl_ioctl(struct inode *inode, struct file *file, return r; } +static long dm_ctl_ioctl(struct file *file, uint command, ulong u) +{ + return (long)ctl_ioctl(command, (struct dm_ioctl __user *)u); +} + static const struct file_operations _ctl_fops = { - .ioctl = ctl_ioctl, + .unlocked_ioctl = dm_ctl_ioctl, .owner = THIS_MODULE, };