| From 81c7462883b0cc0a4eeef0687f80ad5b5baee5f6 Mon Sep 17 00:00:00 2001 |
| From: Macpaul Lin <macpaul.lin@mediatek.com> |
| Date: Thu, 18 Jun 2020 17:13:38 +0800 |
| Subject: USB: replace hardcode maximum usb string length by definition |
| |
| From: Macpaul Lin <macpaul.lin@mediatek.com> |
| |
| commit 81c7462883b0cc0a4eeef0687f80ad5b5baee5f6 upstream. |
| |
| Replace hardcoded maximum USB string length (126 bytes) by definition |
| "USB_MAX_STRING_LEN". |
| |
| Signed-off-by: Macpaul Lin <macpaul.lin@mediatek.com> |
| Acked-by: Alan Stern <stern@rowland.harvard.edu> |
| Link: https://lore.kernel.org/r/1592471618-29428-1-git-send-email-macpaul.lin@mediatek.com |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| --- |
| drivers/usb/gadget/composite.c | 4 ++-- |
| drivers/usb/gadget/configfs.c | 2 +- |
| drivers/usb/gadget/usbstring.c | 4 ++-- |
| include/uapi/linux/usb/ch9.h | 3 +++ |
| 4 files changed, 8 insertions(+), 5 deletions(-) |
| |
| --- a/drivers/usb/gadget/composite.c |
| +++ b/drivers/usb/gadget/composite.c |
| @@ -1076,7 +1076,7 @@ static void collect_langs(struct usb_gad |
| while (*sp) { |
| s = *sp; |
| language = cpu_to_le16(s->language); |
| - for (tmp = buf; *tmp && tmp < &buf[126]; tmp++) { |
| + for (tmp = buf; *tmp && tmp < &buf[USB_MAX_STRING_LEN]; tmp++) { |
| if (*tmp == language) |
| goto repeat; |
| } |
| @@ -1151,7 +1151,7 @@ static int get_string(struct usb_composi |
| collect_langs(sp, s->wData); |
| } |
| |
| - for (len = 0; len <= 126 && s->wData[len]; len++) |
| + for (len = 0; len <= USB_MAX_STRING_LEN && s->wData[len]; len++) |
| continue; |
| if (!len) |
| return -EINVAL; |
| --- a/drivers/usb/gadget/configfs.c |
| +++ b/drivers/usb/gadget/configfs.c |
| @@ -114,7 +114,7 @@ static int usb_string_copy(const char *s |
| char *str; |
| char *copy = *s_copy; |
| ret = strlen(s); |
| - if (ret > 126) |
| + if (ret > USB_MAX_STRING_LEN) |
| return -EOVERFLOW; |
| |
| str = kstrdup(s, GFP_KERNEL); |
| --- a/drivers/usb/gadget/usbstring.c |
| +++ b/drivers/usb/gadget/usbstring.c |
| @@ -59,9 +59,9 @@ usb_gadget_get_string (struct usb_gadget |
| return -EINVAL; |
| |
| /* string descriptors have length, tag, then UTF16-LE text */ |
| - len = min ((size_t) 126, strlen (s->s)); |
| + len = min((size_t)USB_MAX_STRING_LEN, strlen(s->s)); |
| len = utf8s_to_utf16s(s->s, len, UTF16_LITTLE_ENDIAN, |
| - (wchar_t *) &buf[2], 126); |
| + (wchar_t *) &buf[2], USB_MAX_STRING_LEN); |
| if (len < 0) |
| return -EINVAL; |
| buf [0] = (len + 1) * 2; |
| --- a/include/uapi/linux/usb/ch9.h |
| +++ b/include/uapi/linux/usb/ch9.h |
| @@ -358,6 +358,9 @@ struct usb_config_descriptor { |
| |
| /*-------------------------------------------------------------------------*/ |
| |
| +/* USB String descriptors can contain at most 126 characters. */ |
| +#define USB_MAX_STRING_LEN 126 |
| + |
| /* USB_DT_STRING: String descriptor */ |
| struct usb_string_descriptor { |
| __u8 bLength; |