diff options
author | Chen Gang <gang.chen@asianux.com> | 2013-01-23 16:13:41 +0800 |
---|---|---|
committer | Greg Kroah-Hartman <gregkh@linuxfoundation.org> | 2013-01-24 13:42:09 -0800 |
commit | 13996ca7afd5b5d7980ea013b00e3ef7cf2cefd0 (patch) | |
tree | 5819c68b358a7c9fe44eee44b5e884e1bfe335ea /drivers/usb/host/uhci-hcd.c | |
parent | d2123fd9e1a56b8006986ed37e0aaf93ef0dd978 (diff) | |
download | blackbird-op-linux-13996ca7afd5b5d7980ea013b00e3ef7cf2cefd0.tar.gz blackbird-op-linux-13996ca7afd5b5d7980ea013b00e3ef7cf2cefd0.zip |
USB: uhci: check buffer length to avoid memory overflow
for function uhci_sprint_schedule:
the buffer len is MAX_OUTPUT: 64 * 1024, which may not be enough:
may loop UHCI_NUMFRAMES times (UHCI_NUMFRAMES is 1024)
each time of loop may get more than 64 bytes
so need check the buffer length to avoid memory overflow
this patch fix it like this:
at first, make enough room for buffering the exceeding contents
judge the contents which written whether bigger than buffer length
if bigger (the exceeding contents will be in the exceeding buffer)
break current work flow, and return.
Signed-off-by: Chen Gang <gang.chen@asianux.com>
Acked-by: Alan Stern <stern@rowland.harvard.edu>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Diffstat (limited to 'drivers/usb/host/uhci-hcd.c')
-rw-r--r-- | drivers/usb/host/uhci-hcd.c | 4 |
1 files changed, 2 insertions, 2 deletions
diff --git a/drivers/usb/host/uhci-hcd.c b/drivers/usb/host/uhci-hcd.c index 4b9e9aba2665..7c12b260531b 100644 --- a/drivers/usb/host/uhci-hcd.c +++ b/drivers/usb/host/uhci-hcd.c @@ -462,8 +462,8 @@ static irqreturn_t uhci_irq(struct usb_hcd *hcd) "very bad!\n"); if (debug > 1 && errbuf) { /* Print the schedule for debugging */ - uhci_sprint_schedule(uhci, - errbuf, ERRBUF_LEN); + uhci_sprint_schedule(uhci, errbuf, + ERRBUF_LEN - EXTRA_SPACE); lprintk(errbuf); } uhci_hc_died(uhci); |