diff options
author | Octavian Purdila <octavian.purdila@intel.com> | 2014-11-18 07:57:59 -0500 |
---|---|---|
committer | Lee Jones <lee.jones@linaro.org> | 2014-11-19 12:12:50 -0500 |
commit | 00ee7a37fdc3ed9bc6315f8af0270f2df55437d7 (patch) | |
tree | 87189f2932f9c28f0944c4093106d4d31b2e14f3 /drivers/mfd/dln2.c | |
parent | 9331642812b19313ca4c545b37c001d68efb7022 (diff) |
mfd: dln2: Add a limit check for invalid echo
The echo field in dln2_transfer_complete comes directly from an USB
transfer and we should not trust it is valid.
Reported-by: Dan Carpenter <dan.carpenter@oracle.com>
Signed-off-by: Octavian Purdila <octavian.purdila@intel.com>
Signed-off-by: Lee Jones <lee.jones@linaro.org>
Diffstat (limited to 'drivers/mfd/dln2.c')
-rw-r--r-- | drivers/mfd/dln2.c | 4 |
1 files changed, 4 insertions, 0 deletions
diff --git a/drivers/mfd/dln2.c b/drivers/mfd/dln2.c index cf22841c1e3c..df2fda9cd3db 100644 --- a/drivers/mfd/dln2.c +++ b/drivers/mfd/dln2.c | |||
@@ -195,6 +195,9 @@ static bool dln2_transfer_complete(struct dln2_dev *dln2, struct urb *urb, | |||
195 | struct dln2_rx_context *rxc; | 195 | struct dln2_rx_context *rxc; |
196 | bool valid_slot = false; | 196 | bool valid_slot = false; |
197 | 197 | ||
198 | if (rx_slot >= DLN2_MAX_RX_SLOTS) | ||
199 | goto out; | ||
200 | |||
198 | rxc = &rxs->slots[rx_slot]; | 201 | rxc = &rxs->slots[rx_slot]; |
199 | 202 | ||
200 | /* | 203 | /* |
@@ -210,6 +213,7 @@ static bool dln2_transfer_complete(struct dln2_dev *dln2, struct urb *urb, | |||
210 | } | 213 | } |
211 | spin_unlock(&rxs->lock); | 214 | spin_unlock(&rxs->lock); |
212 | 215 | ||
216 | out: | ||
213 | if (!valid_slot) | 217 | if (!valid_slot) |
214 | dev_warn(dev, "bad/late response %d/%d\n", handle, rx_slot); | 218 | dev_warn(dev, "bad/late response %d/%d\n", handle, rx_slot); |
215 | 219 | ||