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

Commit 88e45dbb authored by Luis Lloret's avatar Luis Lloret Committed by Greg Kroah-Hartman
Browse files

USB: Stall control endpoint when file storage class request wValue != 0



This patch makes the File Storage Gadget stall the control endpoint
when a MSC class request is made with wValue != 0.  This change makes
some MSC compliance test warnings disappear.

Signed-off-by: default avatarLuis Lloret <luislloret@gmail.com>
Signed-off-by: default avatarAlan Stern <stern@rowland.harvard.edu>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@suse.de>
parent 468d1362
Loading
Loading
Loading
Loading
+4 −3
Original line number Original line Diff line number Diff line
@@ -1295,6 +1295,7 @@ static int class_setup_req(struct fsg_dev *fsg,
	struct usb_request	*req = fsg->ep0req;
	struct usb_request	*req = fsg->ep0req;
	int			value = -EOPNOTSUPP;
	int			value = -EOPNOTSUPP;
	u16			w_index = le16_to_cpu(ctrl->wIndex);
	u16			w_index = le16_to_cpu(ctrl->wIndex);
	u16                     w_value = le16_to_cpu(ctrl->wValue);
	u16			w_length = le16_to_cpu(ctrl->wLength);
	u16			w_length = le16_to_cpu(ctrl->wLength);


	if (!fsg->config)
	if (!fsg->config)
@@ -1308,7 +1309,7 @@ static int class_setup_req(struct fsg_dev *fsg,
			if (ctrl->bRequestType != (USB_DIR_OUT |
			if (ctrl->bRequestType != (USB_DIR_OUT |
					USB_TYPE_CLASS | USB_RECIP_INTERFACE))
					USB_TYPE_CLASS | USB_RECIP_INTERFACE))
				break;
				break;
			if (w_index != 0) {
			if (w_index != 0 || w_value != 0) {
				value = -EDOM;
				value = -EDOM;
				break;
				break;
			}
			}
@@ -1324,7 +1325,7 @@ static int class_setup_req(struct fsg_dev *fsg,
			if (ctrl->bRequestType != (USB_DIR_IN |
			if (ctrl->bRequestType != (USB_DIR_IN |
					USB_TYPE_CLASS | USB_RECIP_INTERFACE))
					USB_TYPE_CLASS | USB_RECIP_INTERFACE))
				break;
				break;
			if (w_index != 0) {
			if (w_index != 0 || w_value != 0) {
				value = -EDOM;
				value = -EDOM;
				break;
				break;
			}
			}
@@ -1343,7 +1344,7 @@ static int class_setup_req(struct fsg_dev *fsg,
			if (ctrl->bRequestType != (USB_DIR_OUT |
			if (ctrl->bRequestType != (USB_DIR_OUT |
					USB_TYPE_CLASS | USB_RECIP_INTERFACE))
					USB_TYPE_CLASS | USB_RECIP_INTERFACE))
				break;
				break;
			if (w_index != 0) {
			if (w_index != 0 || w_value != 0) {
				value = -EDOM;
				value = -EDOM;
				break;
				break;
			}
			}