mirror of
https://github.com/hardkernel/linux.git
synced 2026-06-11 05:17:10 +09:00
usb: gadget: Fix usb string id allocation
Don't reset next_string_id every time the gadget is enabled, this makes the next strings allocated overwrite strings allocated at probe time. Instead, fix rndis not to allocate new string ids on every config bind. Change-Id: Ied28ee416bb6f00c434c34176fe5b7f0dcb2b2d4 Signed-off-by: Benoit Goby <benoit@android.com>
This commit is contained in:
committed by
Arve Hjønnevåg
parent
c6ed5ce8fa
commit
bdad8743fb
@@ -1150,7 +1150,6 @@ static ssize_t enable_store(struct device *pdev, struct device_attribute *attr,
|
||||
|
||||
sscanf(buff, "%d", &enabled);
|
||||
if (enabled && !dev->enabled) {
|
||||
cdev->next_string_id = 0;
|
||||
/*
|
||||
* Update values in composite driver's copy of
|
||||
* device descriptor.
|
||||
|
||||
@@ -821,12 +821,12 @@ rndis_bind_config_vendor(struct usb_configuration *c, u8 ethaddr[ETH_ALEN],
|
||||
if (!can_support_rndis(c) || !ethaddr)
|
||||
return -EINVAL;
|
||||
|
||||
if (rndis_string_defs[0].id == 0) {
|
||||
/* ... and setup RNDIS itself */
|
||||
status = rndis_init();
|
||||
if (status < 0)
|
||||
return status;
|
||||
/* setup RNDIS itself */
|
||||
status = rndis_init();
|
||||
if (status < 0)
|
||||
return status;
|
||||
|
||||
if (rndis_string_defs[0].id == 0) {
|
||||
status = usb_string_ids_tab(c->cdev, rndis_string_defs);
|
||||
if (status)
|
||||
return status;
|
||||
|
||||
@@ -1127,11 +1127,15 @@ static struct proc_dir_entry *rndis_connect_state [RNDIS_MAX_CONFIGS];
|
||||
|
||||
#endif /* CONFIG_USB_GADGET_DEBUG_FILES */
|
||||
|
||||
static bool rndis_initialized;
|
||||
|
||||
int rndis_init(void)
|
||||
{
|
||||
u8 i;
|
||||
|
||||
if (rndis_initialized)
|
||||
return 0;
|
||||
|
||||
for (i = 0; i < RNDIS_MAX_CONFIGS; i++) {
|
||||
#ifdef CONFIG_USB_GADGET_DEBUG_FILES
|
||||
char name [20];
|
||||
@@ -1158,6 +1162,7 @@ int rndis_init(void)
|
||||
INIT_LIST_HEAD(&(rndis_per_dev_params[i].resp_queue));
|
||||
}
|
||||
|
||||
rndis_initialized = true;
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -1166,7 +1171,13 @@ void rndis_exit(void)
|
||||
#ifdef CONFIG_USB_GADGET_DEBUG_FILES
|
||||
u8 i;
|
||||
char name[20];
|
||||
#endif
|
||||
|
||||
if (!rndis_initialized)
|
||||
return;
|
||||
rndis_initialized = false;
|
||||
|
||||
#ifdef CONFIG_USB_GADGET_DEBUG_FILES
|
||||
for (i = 0; i < RNDIS_MAX_CONFIGS; i++) {
|
||||
sprintf(name, NAME_TEMPLATE, i);
|
||||
remove_proc_entry(name, NULL);
|
||||
|
||||
Reference in New Issue
Block a user