Re: [PATCH] Input: MT - use __GFP_NOWARN allocation at input_mt_init_slots()

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On 2022/11/23 8:23, Dmitry Torokhov wrote:
> Hi Tetsuo,
> 
> On Sat, Nov 19, 2022 at 04:09:56PM +0900, Tetsuo Handa wrote:
>> syzbot is reporting too large allocation at input_mt_init_slots() {1], for
>> num_slots is supplied from userspace using ioctl(UI_DEV_CREATE).
>> Also, replace n2 with array_size(), for 32bits variable n2 will overflow
>> if num_slots >= 65536.
> 
> Not really keen on fiddling with the memory allocator flags just to
> appease syzbot. Maybe keep them as is, and simply limit the number of
> slots to something more reasonable, like 64, and return -EINVAL if it is
> above?
> 

Hmm, although most users seem to pass values within "unsigned char" range,
not limited to syzbot.

drivers/input/misc/uinput.c has

	nslot = input_abs_get_max(dev, ABS_MT_SLOT) + 1;
	error = input_mt_init_slots(dev, nslot, 0);

and drivers/virtio/virtio_input.c has

	nslots = input_abs_get_max(vi->idev, ABS_MT_SLOT) + 1;
	err = input_mt_init_slots(vi->idev, nslots, 0);

and drivers/input/misc/xen-kbdfront.c has

	int num_cont, width, height;
	num_cont = xenbus_read_unsigned(info->xbdev->otherend,
					XENKBD_FIELD_MT_NUM_CONTACTS,
					1);
	ret = input_mt_init_slots(mtouch, num_cont, INPUT_MT_DIRECT);

. Since these users might need to pass values beyond "unsigned char" range,
I think we should not limit to too small values like 64.

More worrisome thing is that several users are not handling
input_mt_init_slots() failures.





[Index of Archives]     [Linux Media Devel]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]     [Linux Wireless Networking]     [Linux Omap]

  Powered by Linux