Skip to content

Commit

Permalink
usb/gadget: free opts struct on error recovery
Browse files Browse the repository at this point in the history
Fix memory leaks introduced in commits:

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

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

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

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

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

f466c63
usb: gadget: f_rndis: convert to new function interface with backward compatibility

Signed-off-by: Andrzej Pietrasiewicz <andrzej.p@samsung.com>
Signed-off-by: Kyungmin Park <kyungmin.park@samsung.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
  • Loading branch information
Andrzej Pietrasiewicz authored and Greg Kroah-Hartman committed Jul 25, 2013
1 parent 5f8a2e6 commit 172d934
Show file tree
Hide file tree
Showing 6 changed files with 30 additions and 12 deletions.
7 changes: 5 additions & 2 deletions drivers/usb/gadget/f_ecm.c
Original file line number Diff line number Diff line change
Expand Up @@ -959,8 +959,11 @@ static struct usb_function_instance *ecm_alloc_inst(void)
mutex_init(&opts->lock);
opts->func_inst.free_func_inst = ecm_free_inst;
opts->net = gether_setup_default();
if (IS_ERR(opts->net))
return ERR_PTR(PTR_ERR(opts->net));
if (IS_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);

Expand Down
7 changes: 5 additions & 2 deletions drivers/usb/gadget/f_eem.c
Original file line number Diff line number Diff line change
Expand Up @@ -593,8 +593,11 @@ static struct usb_function_instance *eem_alloc_inst(void)
mutex_init(&opts->lock);
opts->func_inst.free_func_inst = eem_free_inst;
opts->net = gether_setup_default();
if (IS_ERR(opts->net))
return ERR_CAST(opts->net);
if (IS_ERR(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);

Expand Down
7 changes: 5 additions & 2 deletions drivers/usb/gadget/f_ncm.c
Original file line number Diff line number Diff line change
Expand Up @@ -1350,8 +1350,11 @@ static struct usb_function_instance *ncm_alloc_inst(void)
mutex_init(&opts->lock);
opts->func_inst.free_func_inst = ncm_free_inst;
opts->net = gether_setup_default();
if (IS_ERR(opts->net))
return ERR_PTR(PTR_ERR(opts->net));
if (IS_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);

Expand Down
7 changes: 5 additions & 2 deletions drivers/usb/gadget/f_phonet.c
Original file line number Diff line number Diff line change
Expand Up @@ -656,8 +656,11 @@ static struct usb_function_instance *phonet_alloc_inst(void)

opts->func_inst.free_func_inst = phonet_free_inst;
opts->net = gphonet_setup_default();
if (IS_ERR(opts->net))
return ERR_PTR(PTR_ERR(opts->net));
if (IS_ERR(opts->net)) {
struct net_device *net = opts->net;
kfree(opts);
return ERR_CAST(net);
}

config_group_init_type_name(&opts->func_inst.group, "",
&phonet_func_type);
Expand Down
7 changes: 5 additions & 2 deletions drivers/usb/gadget/f_rndis.c
Original file line number Diff line number Diff line change
Expand Up @@ -963,8 +963,11 @@ static struct usb_function_instance *rndis_alloc_inst(void)
mutex_init(&opts->lock);
opts->func_inst.free_func_inst = rndis_free_inst;
opts->net = gether_setup_default();
if (IS_ERR(opts->net))
return ERR_CAST(opts->net);
if (IS_ERR(opts->net)) {
struct net_device *net = opts->net;
kfree(opts);
return ERR_CAST(net);
}

config_group_init_type_name(&opts->func_inst.group, "",
&rndis_func_type);
Expand Down
7 changes: 5 additions & 2 deletions drivers/usb/gadget/f_subset.c
Original file line number Diff line number Diff line change
Expand Up @@ -505,8 +505,11 @@ static struct usb_function_instance *geth_alloc_inst(void)
mutex_init(&opts->lock);
opts->func_inst.free_func_inst = geth_free_inst;
opts->net = gether_setup_default();
if (IS_ERR(opts->net))
return ERR_CAST(opts->net);
if (IS_ERR(opts->net)) {
struct net_device *net = opts->net;
kfree(opts);
return ERR_CAST(net);
}

config_group_init_type_name(&opts->func_inst.group, "",
&gether_func_type);
Expand Down

0 comments on commit 172d934

Please sign in to comment.