[PATCH] BLKBSZSET ioctl: fixes possibly silent blocksize change failure

From: Lou Langholtz (ldl@aros.net)
Date: Sun Jul 13 2003 - 00:18:12 EST


Here's a small patch that fixes a failure to return -EINVAL to user when
calling the BLKBSZSET ioctl and the requested new blocksize passed in is
smaller than bdev_hardsect_size(bdev). This patch applies against 2.5.75
through 2.5.75-bk2 (I have not tried applying the patch against any
other releases). A quick glance at the 2.4.20 code shows the same bug to
exist their too (as I suspect is in later 2.4 release also). A side
effect of this patch is that checking is re-ordered between checking if
busy and whether the new blocksize is valid. Programs expecting this
ioctl to validate the new size before checking if busy would need to be
updated to handle the new checking order.

diff -urN linux-2.5.75/drivers/block/ioctl.c linux-2.5.75-patched/drivers/block/ioctl.c
--- linux-2.5.75/drivers/block/ioctl.c 2003-07-10 14:04:46.000000000 -0600
+++ linux-2.5.75-patched/drivers/block/ioctl.c 2003-07-12 16:35:27.421331789 -0600
@@ -166,13 +166,11 @@
                         return -EINVAL;
                 if (get_user(n, (int *) arg))
                         return -EFAULT;
- if (n > PAGE_SIZE || n < 512 || (n & (n - 1)))
- return -EINVAL;
                 if (bd_claim(bdev, &holder) < 0)
                         return -EBUSY;
- set_blocksize(bdev, n);
+ ret = set_blocksize(bdev, n);
                 bd_release(bdev);
- return 0;
+ return ret;
         case BLKPG:
                 return blkpg_ioctl(bdev, (struct blkpg_ioctl_arg *) arg);
         case BLKRRPART:

-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/



This archive was generated by hypermail 2b29 : Tue Jul 15 2003 - 22:00:46 EST