diff options
| -rw-r--r-- | drivers/staging/ozwpan/ozusbsvc1.c | 13 | 
1 files changed, 9 insertions, 4 deletions
| diff --git a/drivers/staging/ozwpan/ozusbsvc1.c b/drivers/staging/ozwpan/ozusbsvc1.c index d434d8c6fff6..b573ad3e9674 100644 --- a/drivers/staging/ozwpan/ozusbsvc1.c +++ b/drivers/staging/ozwpan/ozusbsvc1.c @@ -390,10 +390,15 @@ void oz_usb_rx(struct oz_pd *pd, struct oz_elt *elt)  	case OZ_GET_DESC_RSP: {  			struct oz_get_desc_rsp *body =  				(struct oz_get_desc_rsp *)usb_hdr; -			int data_len = elt->length - -					sizeof(struct oz_get_desc_rsp) + 1; -			u16 offs = le16_to_cpu(get_unaligned(&body->offset)); -			u16 total_size = +			u16 offs, total_size; +			u8 data_len; + +			if (elt->length < sizeof(struct oz_get_desc_rsp) - 1) +				break; +			data_len = elt->length - +					(sizeof(struct oz_get_desc_rsp) - 1); +			offs = le16_to_cpu(get_unaligned(&body->offset)); +			total_size =  				le16_to_cpu(get_unaligned(&body->total_size));  			oz_dbg(ON, "USB_REQ_GET_DESCRIPTOR - cnf\n");  			oz_hcd_get_desc_cnf(usb_ctx->hport, body->req_id, |