summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLinaro CI <ci-bot@linaro.org>2021-11-25 21:04:37 +0000
committerLinaro CI <ci-bot@linaro.org>2021-11-25 21:04:37 +0000
commitf526c0862d6381a10060928da8cf10c0450e2faf (patch)
tree868b4ad74a2c188e4e653931ee2c1a549e593d4f
parent7c08af54c6cf7f88320601b99e7b38a68f9d213d (diff)
parent79ae2af2010acdbcb54b5a2cba6e05c8a8017966 (diff)
downloadomap-4.19.217-79ae2af2010a-20211125-377.tar.gz
Merge remote-tracking branch 'aosp/android-4.19-stable' into android-beagle-x15-4.19-stable-lkft4.19.217-79ae2af2010a-20211125-377
* aosp/android-4.19-stable: ANDROID: usb: gadget: f_accessory: Mitgate handling of non-existent USB request
-rw-r--r--drivers/usb/gadget/function/f_accessory.c15
1 files changed, 13 insertions, 2 deletions
diff --git a/drivers/usb/gadget/function/f_accessory.c b/drivers/usb/gadget/function/f_accessory.c
index 718e01e3190f..b6adf7d803ef 100644
--- a/drivers/usb/gadget/function/f_accessory.c
+++ b/drivers/usb/gadget/function/f_accessory.c
@@ -601,8 +601,11 @@ fail:
pr_err("acc_bind() could not allocate requests\n");
while ((req = req_get(dev, &dev->tx_idle)))
acc_request_free(req, dev->ep_in);
- for (i = 0; i < RX_REQ_MAX; i++)
+ for (i = 0; i < RX_REQ_MAX; i++) {
acc_request_free(dev->rx_req[i], dev->ep_out);
+ dev->rx_req[i] = NULL;
+ }
+
return -1;
}
@@ -634,6 +637,12 @@ static ssize_t acc_read(struct file *fp, char __user *buf,
goto done;
}
+ if (!dev->rx_req[0]) {
+ pr_warn("acc_read: USB request already handled/freed");
+ r = -EINVAL;
+ goto done;
+ }
+
/*
* Calculate the data length by considering termination character.
* Then compansite the difference of rounding up to
@@ -1098,8 +1107,10 @@ acc_function_unbind(struct usb_configuration *c, struct usb_function *f)
while ((req = req_get(dev, &dev->tx_idle)))
acc_request_free(req, dev->ep_in);
- for (i = 0; i < RX_REQ_MAX; i++)
+ for (i = 0; i < RX_REQ_MAX; i++) {
acc_request_free(dev->rx_req[i], dev->ep_out);
+ dev->rx_req[i] = NULL;
+ }
acc_hid_unbind(dev);
}