[dm-devel] Re: dm-ioctl on amd64 with 32bit userspace

Guido Guenther agx at sigxcpu.org
Thu Sep 20 18:46:41 UTC 2007


Hi Alasdair,
On Thu, Sep 20, 2007 at 04:32:10PM +0100, Alasdair G Kergon wrote:
> Does this (untested) also work for you?
> 
> +	if (new_name < (char *) (align_ptr(param + 1) - 4) ||
> 
Yes this seems to work, I used:

Signed-off-by: Guido Guenther <agx at sigxcpu.org>

--- aa-amd64-smp/drivers/md/dm-ioctl.c	2007-09-17 14:51:10.000000000 +0000
+++ linux-2.6.22/drivers/md/dm-ioctl.c	2007-07-08 23:32:17.000000000 +0000
@@ -700,7 +700,7 @@
 	int r;
 	char *new_name = (char *) param + param->data_start;
 
-	if (new_name < (char *) (param + 1) ||
+	if (new_name < (char *) (align_ptr(param + 1) - 4) ||
 	    invalid_str(new_name, (void *) param + param_size)) {
 		DMWARN("Invalid new logical volume name supplied.");
 		return -EINVAL;
@@ -726,7 +726,7 @@
 	if (!md)
 		return -ENXIO;
 
-	if (geostr < (char *) (param + 1) ||
+	if (geostr < (char *) (align_ptr(param + 1) - 4) ||
 	    invalid_str(geostr, (void *) param + param_size)) {
 		DMWARN("Invalid geometry supplied.");
 		goto out;
@@ -1233,7 +1233,7 @@
 	if (r)
 		goto out;
 
-	if (tmsg < (struct dm_target_msg *) (param + 1) ||
+	if (tmsg < (struct dm_target_msg *) (align_ptr(param + 1) - 4) ||
 	    invalid_str(tmsg->message, (void *) param + param_size)) {
 		DMWARN("Invalid target message parameters.");
 		r = -EINVAL;




More information about the dm-devel mailing list