Loading drivers/usb/gadget/configfs.c +12 −5 Original line number Original line Diff line number Diff line Loading @@ -139,21 +139,28 @@ struct gadget_config_name { struct list_head list; struct list_head list; }; }; #define MAX_USB_STRING_LEN 126 #define MAX_USB_STRING_WITH_NULL_LEN (MAX_USB_STRING_LEN+1) static int usb_string_copy(const char *s, char **s_copy) static int usb_string_copy(const char *s, char **s_copy) { { int ret; int ret; char *str; char *str; char *copy = *s_copy; char *copy = *s_copy; ret = strlen(s); ret = strlen(s); if (ret > 126) if (ret > MAX_USB_STRING_LEN) return -EOVERFLOW; return -EOVERFLOW; str = kstrdup(s, GFP_KERNEL); if (copy) { str = copy; } else { str = kmalloc(MAX_USB_STRING_WITH_NULL_LEN, GFP_KERNEL); if (!str) if (!str) return -ENOMEM; return -ENOMEM; } strncpy(str, s, MAX_USB_STRING_WITH_NULL_LEN); if (str[ret - 1] == '\n') if (str[ret - 1] == '\n') str[ret - 1] = '\0'; str[ret - 1] = '\0'; kfree(copy); *s_copy = str; *s_copy = str; return 0; return 0; } } Loading Loading
drivers/usb/gadget/configfs.c +12 −5 Original line number Original line Diff line number Diff line Loading @@ -139,21 +139,28 @@ struct gadget_config_name { struct list_head list; struct list_head list; }; }; #define MAX_USB_STRING_LEN 126 #define MAX_USB_STRING_WITH_NULL_LEN (MAX_USB_STRING_LEN+1) static int usb_string_copy(const char *s, char **s_copy) static int usb_string_copy(const char *s, char **s_copy) { { int ret; int ret; char *str; char *str; char *copy = *s_copy; char *copy = *s_copy; ret = strlen(s); ret = strlen(s); if (ret > 126) if (ret > MAX_USB_STRING_LEN) return -EOVERFLOW; return -EOVERFLOW; str = kstrdup(s, GFP_KERNEL); if (copy) { str = copy; } else { str = kmalloc(MAX_USB_STRING_WITH_NULL_LEN, GFP_KERNEL); if (!str) if (!str) return -ENOMEM; return -ENOMEM; } strncpy(str, s, MAX_USB_STRING_WITH_NULL_LEN); if (str[ret - 1] == '\n') if (str[ret - 1] == '\n') str[ret - 1] = '\0'; str[ret - 1] = '\0'; kfree(copy); *s_copy = str; *s_copy = str; return 0; return 0; } } Loading