Patch "xhci: Fix NULL pointer dereference when cleaning up streams for removed host" has been added to the 3.18-stable tree
Subsystems (3)
This is a note to let you know that I've just added the patch titled
xhci: Fix NULL pointer dereference when cleaning up streams for removed host
to the 3.18-stable tree which can be found at:
http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary
The filename of the patch is:
xhci-fix-null-pointer-dereference-when-cleaning-up-streams-for-removed-host.patch
and it can be found in the queue-3.18 subdirectory.
If you, or anyone else, feels it should not be added to the stable tree, please let <[email protected]> know about it.
Quoted 1 line
From
4b895868bb2da60a386a17cde3bf9ecbc70c79f4Mon Sep 17 00:00:00 2001
From: Mathias Nyman <[email protected]>
Date: Thu, 20 Jul 2017 14:48:26 +0300
Subject: xhci: Fix NULL pointer dereference when cleaning up streams for removed host
From: Mathias Nyman <[email protected]>
commit 4b895868bb2da60a386a17cde3bf9ecbc70c79f4 upstream.
This off by one in stream_id indexing caused NULL pointer dereference and soft lockup on machines with USB attached SCSI devices connected to a hotpluggable xhci controller.
The code that cleans up pending URBs for dead hosts tried to dereference a stream ring at the invalid stream_id 0. ep->stream_info->stream_rings[0] doesn't point to a ring.
Start looping stream_id from 1 like in all the other places in the driver, and check that the ring exists before trying to kill URBs on it.
--- drivers/usb/host/xhci-ring.c | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-)
drivers/usb/host/xhci-ring.c +7 -4
@@ -782,13 +782,16 @@ static void xhci_kill_endpoint_urbs(stru (ep->ep_state & EP_GETTING_NO_STREAMS)) {int stream_id; -for (stream_id =0 ; stream_id < ep->stream_info->num_streams; +for (stream_id =1 ; stream_id < ep->stream_info->num_streams; stream_id++) { + ring = ep->stream_info->stream_rings[stream_id]; +if (!ring) +continue ; +xhci_dbg_trace (xhci, trace_xhci_dbg_cancel_urb,"Killing URBs for slot ID %u, ep index %u, stream %u" , - slot_id, ep_index, stream_id +1 ); -xhci_kill_ring_urbs (xhci, - ep->stream_info->stream_rings[stream_id]); + slot_id, ep_index, stream_id); +xhci_kill_ring_urbs (xhci, ring); } } else { ring = ep->ring;
Patches currently in stable-queue which might be from [email protected] are
queue-3.18/xhci-fix-null-pointer-dereference-when-cleaning-up-streams-for-removed-host.patch queue-3.18/xhci-fix-20000ms-port-resume-timeout.patch