linux/drivers/usb
Pete Zaitcev 19e6317d24 usb: mon: Fix a deadlock in usbmon between mmap and read
The problem arises because our read() function grabs a lock of the
circular buffer, finds something of interest, then invokes copy_to_user()
straight from the buffer, which in turn takes mm->mmap_sem. In the same
time, the callback mon_bin_vma_fault() is invoked under mm->mmap_sem.
It attempts to take the fetch lock and deadlocks.

This patch does away with protecting of our page list with any
semaphores, and instead relies on the kernel not close the device
while mmap is active in a process.

In addition, we prohibit re-sizing of a buffer while mmap is active.
This way, when (now unlocked) fault is processed, it works with the
page that is intended to be mapped-in, and not some other random page.
Note that this may have an ABI impact, but hopefully no legitimate
program is this wrong.

Signed-off-by: Pete Zaitcev <zaitcev@redhat.com>
Reported-by: syzbot+56f9673bb4cdcbeb0e92@syzkaller.appspotmail.com
Reviewed-by: Alan Stern <stern@rowland.harvard.edu>
Fixes: 46eb14a6e1 ("USB: fix usbmon BUG trigger")
Cc: <stable@vger.kernel.org>
Link: https://lore.kernel.org/r/20191204203941.3503452b@suzdal.zaitcev.lan
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
2019-12-10 11:41:20 +01:00
..
atm USB: atm: cxacru: convert to use dev_groups 2019-08-09 07:55:45 +02:00
c67x00
cdns3 USB: changes for v5.5 2019-11-18 08:24:12 +01:00
chipidea usb: chipidea: imx: pinctrl for HSIC is optional 2019-11-18 17:40:27 +08:00
class compat_ioctl: remove most of fs/compat_ioctl.c 2019-12-01 13:46:15 -08:00
common usb: common: usb-conn-gpio: Don't log an error on probe deferral 2019-12-10 11:41:20 +01:00
core usb: core: urb: fix URB structure initialization function 2019-12-10 11:41:19 +01:00
dwc2 USB: changes for v5.5 2019-11-18 08:24:12 +01:00
dwc3 usb: dwc3: Fix Kconfig indentation 2019-11-21 14:39:39 +01:00
early drivers: Remove explicit invocations of mmiowb() 2019-04-08 12:01:02 +01:00
gadget compat_ioctl: remove most of fs/compat_ioctl.c 2019-12-01 13:46:15 -08:00
host pci-v5.5-changes 2019-12-03 13:58:22 -08:00
image Merge 5.4-rc3 into usb-next 2019-10-14 07:09:59 +02:00
isp1760 usb: isp1760: isp1760-hcd.c: Drop condition with no effect 2019-10-07 13:01:47 +02:00
misc usb: misc: Fix Kconfig indentation 2019-11-21 14:39:40 +01:00
mon usb: mon: Fix a deadlock in usbmon between mmap and read 2019-12-10 11:41:20 +01:00
mtu3 Merge 5.4-rc6 into usb-next 2019-11-04 06:41:09 +01:00
musb usb: musb: create debugfs directory under usb root 2019-11-21 18:20:29 +01:00
phy usb: phy: mxs: use devm_platform_ioremap_resource() to simplify code 2019-10-22 10:29:10 +03:00
renesas_usbhs usb: renesas_usbhs: Use dma_request_chan() directly for channel request 2019-11-14 11:12:31 +08:00
roles usb: roles: fix a potential use after free 2019-12-10 11:41:18 +01:00
serial usb: serial: Fix Kconfig indentation 2019-11-21 14:39:41 +01:00
storage SCSI misc on 20191130 2019-12-02 13:37:02 -08:00
typec usb: typec: fix use after free in typec_register_port() 2019-12-10 11:41:19 +01:00
usbip usbip: Fix uninitialized symbol 'nents' in stub_recv_cmd_submit() 2019-11-13 18:53:11 +08:00
Kconfig usb: common: create Kconfig file 2019-09-03 19:00:39 +02:00
Makefile USB: Changes for v5.4 merge window 2019-09-02 19:20:57 +02:00
usb-skeleton.c USB: usb-skeleton: drop redundant in-urb check 2019-10-10 12:41:19 +02:00