Commit 3b45b2a2 authored by Andrzej Pietrasiewicz's avatar Andrzej Pietrasiewicz Committed by Felipe Balbi

usb: gadget: free opts struct on error recovery

Fix memory leaks introduced in commits:

40d133d7
usb: gadget: f_ncm: convert to new function interface with backward compatibility

fee562a6
usb: gadget: f_ecm: convert to new function interface with backward compatibility

fcbdf12e
usb: gadget: f_phonet: convert to new function interface with backward compatibility

b29002a1
usb: gadget: f_eem: convert to new function interface with backward compatibility

8cedba7c
usb: gadget: f_subset: convert to new function interface with backward compatibility

f466c635
usb: gadget: f_rndis: convert to new function interface with backward compatibility
Acked-by: default avatarMichal Nazarewicz <mina86@mina86.com>
Signed-off-by: default avatarAndrzej Pietrasiewicz <andrzej.p@samsung.com>
Signed-off-by: default avatarKyungmin Park <kyungmin.park@samsung.com>
Signed-off-by: default avatarFelipe Balbi <balbi@ti.com>
parent 23a113a0
...@@ -959,8 +959,11 @@ static struct usb_function_instance *ecm_alloc_inst(void) ...@@ -959,8 +959,11 @@ static struct usb_function_instance *ecm_alloc_inst(void)
mutex_init(&opts->lock); mutex_init(&opts->lock);
opts->func_inst.free_func_inst = ecm_free_inst; opts->func_inst.free_func_inst = ecm_free_inst;
opts->net = gether_setup_default(); opts->net = gether_setup_default();
if (IS_ERR(opts->net)) if (IS_ERR(opts->net)) {
return ERR_PTR(PTR_ERR(opts->net)); struct net_device *net = opts->net;
kfree(opts);
return ERR_CAST(net);
}
config_group_init_type_name(&opts->func_inst.group, "", &ecm_func_type); config_group_init_type_name(&opts->func_inst.group, "", &ecm_func_type);
......
...@@ -593,8 +593,11 @@ static struct usb_function_instance *eem_alloc_inst(void) ...@@ -593,8 +593,11 @@ static struct usb_function_instance *eem_alloc_inst(void)
mutex_init(&opts->lock); mutex_init(&opts->lock);
opts->func_inst.free_func_inst = eem_free_inst; opts->func_inst.free_func_inst = eem_free_inst;
opts->net = gether_setup_default(); opts->net = gether_setup_default();
if (IS_ERR(opts->net)) if (IS_ERR(opts->net)) {
return ERR_CAST(opts->net); struct net_device *net = opts->net;
kfree(opts);
return ERR_CAST(net);
}
config_group_init_type_name(&opts->func_inst.group, "", &eem_func_type); config_group_init_type_name(&opts->func_inst.group, "", &eem_func_type);
......
...@@ -1350,8 +1350,11 @@ static struct usb_function_instance *ncm_alloc_inst(void) ...@@ -1350,8 +1350,11 @@ static struct usb_function_instance *ncm_alloc_inst(void)
mutex_init(&opts->lock); mutex_init(&opts->lock);
opts->func_inst.free_func_inst = ncm_free_inst; opts->func_inst.free_func_inst = ncm_free_inst;
opts->net = gether_setup_default(); opts->net = gether_setup_default();
if (IS_ERR(opts->net)) if (IS_ERR(opts->net)) {
return ERR_PTR(PTR_ERR(opts->net)); struct net_device *net = opts->net;
kfree(opts);
return ERR_CAST(net);
}
config_group_init_type_name(&opts->func_inst.group, "", &ncm_func_type); config_group_init_type_name(&opts->func_inst.group, "", &ncm_func_type);
......
...@@ -656,8 +656,11 @@ static struct usb_function_instance *phonet_alloc_inst(void) ...@@ -656,8 +656,11 @@ static struct usb_function_instance *phonet_alloc_inst(void)
opts->func_inst.free_func_inst = phonet_free_inst; opts->func_inst.free_func_inst = phonet_free_inst;
opts->net = gphonet_setup_default(); opts->net = gphonet_setup_default();
if (IS_ERR(opts->net)) if (IS_ERR(opts->net)) {
return ERR_PTR(PTR_ERR(opts->net)); struct net_device *net = opts->net;
kfree(opts);
return ERR_CAST(net);
}
config_group_init_type_name(&opts->func_inst.group, "", config_group_init_type_name(&opts->func_inst.group, "",
&phonet_func_type); &phonet_func_type);
......
...@@ -963,8 +963,11 @@ static struct usb_function_instance *rndis_alloc_inst(void) ...@@ -963,8 +963,11 @@ static struct usb_function_instance *rndis_alloc_inst(void)
mutex_init(&opts->lock); mutex_init(&opts->lock);
opts->func_inst.free_func_inst = rndis_free_inst; opts->func_inst.free_func_inst = rndis_free_inst;
opts->net = gether_setup_default(); opts->net = gether_setup_default();
if (IS_ERR(opts->net)) if (IS_ERR(opts->net)) {
return ERR_CAST(opts->net); struct net_device *net = opts->net;
kfree(opts);
return ERR_CAST(net);
}
config_group_init_type_name(&opts->func_inst.group, "", config_group_init_type_name(&opts->func_inst.group, "",
&rndis_func_type); &rndis_func_type);
......
...@@ -505,8 +505,11 @@ static struct usb_function_instance *geth_alloc_inst(void) ...@@ -505,8 +505,11 @@ static struct usb_function_instance *geth_alloc_inst(void)
mutex_init(&opts->lock); mutex_init(&opts->lock);
opts->func_inst.free_func_inst = geth_free_inst; opts->func_inst.free_func_inst = geth_free_inst;
opts->net = gether_setup_default(); opts->net = gether_setup_default();
if (IS_ERR(opts->net)) if (IS_ERR(opts->net)) {
return ERR_CAST(opts->net); struct net_device *net = opts->net;
kfree(opts);
return ERR_CAST(net);
}
config_group_init_type_name(&opts->func_inst.group, "", config_group_init_type_name(&opts->func_inst.group, "",
&gether_func_type); &gether_func_type);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment