HID: Bluetooth: hidp: make sure input buffers are big enough
authorDavid Herrmann <dh.herrmann@gmail.com>
Thu, 19 Dec 2013 11:09:32 +0000 (12:09 +0100)
committerJiri Kosina <jkosina@suse.cz>
Mon, 17 Feb 2014 20:17:55 +0000 (21:17 +0100)
commita4b1b5877b514b276f0f31efe02388a9c2836728
treea09dd741c0a2b98db2ab8f71b45c5dc92efcc02c
parent218eb9ed840c6279686ed6b0c3e31a083e241ff9
HID: Bluetooth: hidp: make sure input buffers are big enough

HID core expects the input buffers to be at least of size 4096
(HID_MAX_BUFFER_SIZE). Other sizes will result in buffer-overflows if an
input-report is smaller than advertised. We could, like i2c, compute the
biggest report-size instead of using HID_MAX_BUFFER_SIZE, but this will
blow up if report-descriptors are changed after ->start() has been called.
So lets be safe and just use the biggest buffer we have.

Note that this adds an additional copy to the HIDP input path. If there is
a way to make sure the skb-buf is big enough, we should use that instead.

The best way would be to make hid-core honor the @size argument, though,
that sounds easier than it is. So lets just fix the buffer-overflows for
now and afterwards look for a faster way for all transport drivers.

Signed-off-by: David Herrmann <dh.herrmann@gmail.com>
Signed-off-by: Jiri Kosina <jkosina@suse.cz>
net/bluetooth/hidp/core.c
net/bluetooth/hidp/hidp.h