Merge "USB: f_accessory: Check for length before updating accessory string"

This commit is contained in:
Linux Build Service Account 2017-07-21 11:08:22 -07:00 committed by Gerrit - the friendly Code Review server
commit 2221afb10d

View file

@ -346,6 +346,7 @@ static void acc_complete_set_string(struct usb_ep *ep, struct usb_request *req)
struct acc_dev *dev = ep->driver_data; struct acc_dev *dev = ep->driver_data;
char *string_dest = NULL; char *string_dest = NULL;
int length = req->actual; int length = req->actual;
unsigned long flags;
if (req->status != 0) { if (req->status != 0) {
pr_err("acc_complete_set_string, err %d\n", req->status); pr_err("acc_complete_set_string, err %d\n", req->status);
@ -371,9 +372,17 @@ static void acc_complete_set_string(struct usb_ep *ep, struct usb_request *req)
case ACCESSORY_STRING_SERIAL: case ACCESSORY_STRING_SERIAL:
string_dest = dev->serial; string_dest = dev->serial;
break; break;
default:
pr_err("unknown accessory string index %d\n",
dev->string_index);
return;
}
if (!length) {
pr_debug("zero length for accessory string index %d\n",
dev->string_index);
return;
} }
if (string_dest) {
unsigned long flags;
if (length >= ACC_STRING_SIZE) if (length >= ACC_STRING_SIZE)
length = ACC_STRING_SIZE - 1; length = ACC_STRING_SIZE - 1;
@ -383,10 +392,6 @@ static void acc_complete_set_string(struct usb_ep *ep, struct usb_request *req)
/* ensure zero termination */ /* ensure zero termination */
string_dest[length] = 0; string_dest[length] = 0;
spin_unlock_irqrestore(&dev->lock, flags); spin_unlock_irqrestore(&dev->lock, flags);
} else {
pr_err("unknown accessory string index %d\n",
dev->string_index);
}
} }
static void acc_complete_set_hid_report_desc(struct usb_ep *ep, static void acc_complete_set_hid_report_desc(struct usb_ep *ep,