mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-11-16 00:34:20 +08:00
usbip: vhci_hcd: check rhport before using in vhci_hub_control()
Validate !rhport < 0 before using it to access port_status array. Signed-off-by: Shuah Khan <shuahkh@osg.samsung.com> Cc: stable <stable@vger.kernel.org> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
parent
83a62c51ba
commit
5b22f67611
@ -354,6 +354,8 @@ static int vhci_hub_control(struct usb_hcd *hcd, u16 typeReq, u16 wValue,
|
||||
usbip_dbg_vhci_rh(" ClearHubFeature\n");
|
||||
break;
|
||||
case ClearPortFeature:
|
||||
if (rhport < 0)
|
||||
goto error;
|
||||
switch (wValue) {
|
||||
case USB_PORT_FEAT_SUSPEND:
|
||||
if (hcd->speed == HCD_USB3) {
|
||||
@ -511,11 +513,16 @@ static int vhci_hub_control(struct usb_hcd *hcd, u16 typeReq, u16 wValue,
|
||||
goto error;
|
||||
}
|
||||
|
||||
if (rhport < 0)
|
||||
goto error;
|
||||
|
||||
vhci_hcd->port_status[rhport] |= USB_PORT_STAT_SUSPEND;
|
||||
break;
|
||||
case USB_PORT_FEAT_POWER:
|
||||
usbip_dbg_vhci_rh(
|
||||
" SetPortFeature: USB_PORT_FEAT_POWER\n");
|
||||
if (rhport < 0)
|
||||
goto error;
|
||||
if (hcd->speed == HCD_USB3)
|
||||
vhci_hcd->port_status[rhport] |= USB_SS_PORT_STAT_POWER;
|
||||
else
|
||||
@ -524,6 +531,8 @@ static int vhci_hub_control(struct usb_hcd *hcd, u16 typeReq, u16 wValue,
|
||||
case USB_PORT_FEAT_BH_PORT_RESET:
|
||||
usbip_dbg_vhci_rh(
|
||||
" SetPortFeature: USB_PORT_FEAT_BH_PORT_RESET\n");
|
||||
if (rhport < 0)
|
||||
goto error;
|
||||
/* Applicable only for USB3.0 hub */
|
||||
if (hcd->speed != HCD_USB3) {
|
||||
pr_err("USB_PORT_FEAT_BH_PORT_RESET req not "
|
||||
@ -534,6 +543,8 @@ static int vhci_hub_control(struct usb_hcd *hcd, u16 typeReq, u16 wValue,
|
||||
case USB_PORT_FEAT_RESET:
|
||||
usbip_dbg_vhci_rh(
|
||||
" SetPortFeature: USB_PORT_FEAT_RESET\n");
|
||||
if (rhport < 0)
|
||||
goto error;
|
||||
/* if it's already enabled, disable */
|
||||
if (hcd->speed == HCD_USB3) {
|
||||
vhci_hcd->port_status[rhport] = 0;
|
||||
@ -554,6 +565,8 @@ static int vhci_hub_control(struct usb_hcd *hcd, u16 typeReq, u16 wValue,
|
||||
default:
|
||||
usbip_dbg_vhci_rh(" SetPortFeature: default %d\n",
|
||||
wValue);
|
||||
if (rhport < 0)
|
||||
goto error;
|
||||
if (hcd->speed == HCD_USB3) {
|
||||
if ((vhci_hcd->port_status[rhport] &
|
||||
USB_SS_PORT_STAT_POWER) != 0) {
|
||||
|
Loading…
Reference in New Issue
Block a user