linux/drivers/usb/misc
Xiao Han 9c6256a5e7 usb: misc: ftdi-elan: Fix off-by-one memory corruptions
This patch fixes fives off-by-one bugs in the ftdi-elan driver code. The
bug can be triggered by plugging a USB adapter for CardBus 3G cards (model
U132 manufactured by Elan Digital Systems, Ltd), causing a kernel panic.
The fix was tested on Ubuntu 14.04.4 with 4.7.0-rc14.2.0-27-generic+ and
4.4.0-22-generic+ kernel. In the ftdi_elan_synchronize function, an
off-by-one memory corruption occurs when packet_bytes is equal or bigger
than m. After having read m bytes, that is bytes_read is equal to m, "
..\x00" is still copied to the stack variable causing an out bounds write
of 4 bytes, which overwrites the stack canary and results in a kernel
panic.

This off-by-one requires physical access to the machine. It is not
exploitable since we have no control on the overwritten data.  Similar
off-by-one bugs have been observed in 4 other functions:
ftdi_elan_stuck_waiting, ftdi_elan_read, ftdi_elan_edset_output and
ftdi_elan_flush_input_fifo.

Reported-by: Alex Palesandro <palexster@gmail.com>
Signed-off-by: Xiao Han <xiao.han@orange.fr>
Tested-by: Paul Chaignon <pchaigno@gmail.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
2016-08-09 15:45:59 +02:00
..
sisusbvga tty: vt, convert more macros to functions 2016-06-25 09:04:48 -07:00
adutux.c USB: adutux: NULL dereferences on disconnect 2014-11-26 19:50:15 -08:00
appledisplay.c USB: appledisplay: Deletion of a check before backlight_device_unregister() 2015-03-18 16:56:40 +01:00
chaoskey.c hwrng: chaoskey - Fix URB warning due to timeout on Alea 2016-06-07 18:42:44 +08:00
cypress_cy7c63.c usb: delete non-required instances of include <linux/init.h> 2014-01-08 15:01:39 -08:00
cytherm.c usb: delete non-required instances of include <linux/init.h> 2014-01-08 15:01:39 -08:00
ehset.c usb: ehci: Add support for SINGLE_STEP_SET_FEATURE test of EHSET 2013-08-12 13:13:32 -07:00
emi26.c usb: delete non-required instances of include <linux/init.h> 2014-01-08 15:01:39 -08:00
emi62.c usb: delete non-required instances of include <linux/init.h> 2014-01-08 15:01:39 -08:00
ezusb.c usb: delete non-required instances of include <linux/init.h> 2014-01-08 15:01:39 -08:00
ftdi-elan.c usb: misc: ftdi-elan: Fix off-by-one memory corruptions 2016-08-09 15:45:59 +02:00
idmouse.c USB: idmouse.c: Put the interface on error 2016-03-03 19:44:06 -08:00
iowarrior.c USB: iowarrior: fix oops with malicious USB descriptors 2016-03-18 09:19:02 -07:00
isight_firmware.c Merge branch 'usb-next' of git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/usb 2012-01-09 12:09:47 -08:00
Kconfig Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/jikos/hid 2016-07-28 14:30:16 -07:00
ldusb.c usb, HID: Remove Vernier devices from lsusb and hid_ignore_list 2015-06-01 14:44:08 +02:00
legousbtower.c USB: legotower: use msecs_to_jiffies for time conversion 2015-03-18 16:20:34 +01:00
lvstest.c Pratyush Anand has moved 2015-06-25 17:00:38 -07:00
Makefile Merge branch 'for-4.8/hid-led' into for-linus 2016-07-28 10:49:23 +02:00
rio500_usb.h
rio500.c usb: delete non-required instances of include <linux/init.h> 2014-01-08 15:01:39 -08:00
trancevibrator.c usb: delete non-required instances of include <linux/init.h> 2014-01-08 15:01:39 -08:00
ucsi.c usb: Add driver for UCSI 2016-04-29 15:29:18 -07:00
ucsi.h usb: Add driver for UCSI 2016-04-29 15:29:18 -07:00
usb3503.c usb: misc: usb3503: Clean up on driver unbind 2016-06-07 22:19:59 -07:00
usb_u132.h
usblcd.c usb: delete non-required instances of include <linux/init.h> 2014-01-08 15:01:39 -08:00
usbsevseg.c usb: delete non-required instances of include <linux/init.h> 2014-01-08 15:01:39 -08:00
usbtest.c usb: misc: usbtest: usbtest_do_ioctl may return positive integer 2016-08-09 15:45:59 +02:00
uss720.c USB: uss720.c: move assignment out of if () block 2015-05-10 16:01:12 +02:00
yurex.c usb: yurex: fixed sparse warning of incorrect type 2014-11-03 15:34:00 -08:00