|
@@ -6356,6 +6356,32 @@ static int md_getgeo(struct block_device *bdev, struct hd_geometry *geo)
|
|
|
return 0;
|
|
|
}
|
|
|
|
|
|
+static inline bool md_ioctl_valid(unsigned int cmd)
|
|
|
+{
|
|
|
+ switch (cmd) {
|
|
|
+ case ADD_NEW_DISK:
|
|
|
+ case BLKROSET:
|
|
|
+ case GET_ARRAY_INFO:
|
|
|
+ case GET_BITMAP_FILE:
|
|
|
+ case GET_DISK_INFO:
|
|
|
+ case HOT_ADD_DISK:
|
|
|
+ case HOT_REMOVE_DISK:
|
|
|
+ case PRINT_RAID_DEBUG:
|
|
|
+ case RAID_AUTORUN:
|
|
|
+ case RAID_VERSION:
|
|
|
+ case RESTART_ARRAY_RW:
|
|
|
+ case RUN_ARRAY:
|
|
|
+ case SET_ARRAY_INFO:
|
|
|
+ case SET_BITMAP_FILE:
|
|
|
+ case SET_DISK_FAULTY:
|
|
|
+ case STOP_ARRAY:
|
|
|
+ case STOP_ARRAY_RO:
|
|
|
+ return true;
|
|
|
+ default:
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
static int md_ioctl(struct block_device *bdev, fmode_t mode,
|
|
|
unsigned int cmd, unsigned long arg)
|
|
|
{
|
|
@@ -6364,6 +6390,9 @@ static int md_ioctl(struct block_device *bdev, fmode_t mode,
|
|
|
struct mddev *mddev = NULL;
|
|
|
int ro;
|
|
|
|
|
|
+ if (!md_ioctl_valid(cmd))
|
|
|
+ return -ENOTTY;
|
|
|
+
|
|
|
switch (cmd) {
|
|
|
case RAID_VERSION:
|
|
|
case GET_ARRAY_INFO:
|