@@ -2102,11 +2102,6 @@ static int loop_control_remove(int idx)
struct loop_device *lo;
int ret;
- if (idx < 0) {
- pr_warn("deleting an unspecified loop device is not supported.\n");
- return -EINVAL;
- }
-
/* Hide this loop device for serialization. */
ret = mutex_lock_killable(&loop_ctl_mutex);
if (ret)
@@ -2145,7 +2140,7 @@ static int loop_control_remove(int idx)
return ret;
}
-static int loop_control_get_free(int idx)
+static int loop_control_get_free(void)
{
struct loop_device *lo;
int id, ret;
@@ -2168,13 +2163,16 @@ static int loop_control_get_free(int idx)
static long loop_control_ioctl(struct file *file, unsigned int cmd,
unsigned long parm)
{
+ if (parm > MINORMASK)
+ pr_warn("ioctl parameter is out of max_minor.\n");
+ return -EINVAL;
switch (cmd) {
case LOOP_CTL_ADD:
return loop_add(parm);
case LOOP_CTL_REMOVE:
return loop_control_remove(parm);
case LOOP_CTL_GET_FREE:
- return loop_control_get_free(parm);
+ return loop_control_get_free();
default:
return -ENOSYS;
}