Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit e86103a7 authored by Robert Dobrowolski's avatar Robert Dobrowolski Committed by Greg Kroah-Hartman
Browse files

usb: hcd: out of bounds access in for_each_companion



On BXT platform Host Controller and Device Controller figure as
same PCI device but with different device function. HCD should
not pass data to Device Controller but only to Host Controllers.
Checking if companion device is Host Controller, otherwise skip.

Cc: <stable@vger.kernel.org>
Signed-off-by: default avatarRobert Dobrowolski <robert.dobrowolski@linux.intel.com>
Acked-by: default avatarAlan Stern <stern@rowland.harvard.edu>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
parent 13630746
Loading
Loading
Loading
Loading
+9 −0
Original line number Original line Diff line number Diff line
@@ -73,6 +73,15 @@ static void for_each_companion(struct pci_dev *pdev, struct usb_hcd *hcd,
		if (companion->bus != pdev->bus ||
		if (companion->bus != pdev->bus ||
				PCI_SLOT(companion->devfn) != slot)
				PCI_SLOT(companion->devfn) != slot)
			continue;
			continue;

		/*
		 * Companion device should be either UHCI,OHCI or EHCI host
		 * controller, otherwise skip.
		 */
		if (companion->class != CL_UHCI && companion->class != CL_OHCI &&
				companion->class != CL_EHCI)
			continue;

		companion_hcd = pci_get_drvdata(companion);
		companion_hcd = pci_get_drvdata(companion);
		if (!companion_hcd || !companion_hcd->self.root_hub)
		if (!companion_hcd || !companion_hcd->self.root_hub)
			continue;
			continue;