diff options
Diffstat (limited to 'drivers/input/misc/uinput.c')
| -rw-r--r-- | drivers/input/misc/uinput.c | 14 | 
1 files changed, 14 insertions, 0 deletions
diff --git a/drivers/input/misc/uinput.c b/drivers/input/misc/uinput.c index d23f3225b00f..445856c9127a 100644 --- a/drivers/input/misc/uinput.c +++ b/drivers/input/misc/uinput.c @@ -417,6 +417,20 @@ static int uinput_validate_absinfo(struct input_dev *dev, unsigned int code,  		return -EINVAL;  	} +	/* +	 * Limit number of contacts to a reasonable value (100). This +	 * ensures that we need less than 2 pages for struct input_mt +	 * (we are not using in-kernel slot assignment so not going to +	 * allocate memory for the "red" table), and we should have no +	 * trouble getting this much memory. +	 */ +	if (code == ABS_MT_SLOT && max > 99) { +		printk(KERN_DEBUG +		       "%s: unreasonably large number of slots requested: %d\n", +		       UINPUT_NAME, max); +		return -EINVAL; +	} +  	return 0;  }  | 
