diff options
author | Andrzej Pietrasiewicz <andrzej.p@samsung.com> | 2013-07-25 03:13:18 -0400 |
---|---|---|
committer | Greg Kroah-Hartman <gregkh@linuxfoundation.org> | 2013-07-25 14:32:15 -0400 |
commit | 172d934c92089e9183165f7024eba9508cb9ebce (patch) | |
tree | 868a08b0fe019966675934433eba119f7491e52d /drivers/usb | |
parent | 5f8a2e68b679b41cc8e9b642f2f5aa45dd678641 (diff) |
usb/gadget: free opts struct on error recovery
Fix memory leaks introduced in commits:
40d133d7f542616cf9538508a372306e626a16e9
usb: gadget: f_ncm: convert to new function interface with backward compatibility
fee562a6450b7806f1fbbe1469a67b5395b5c10a
usb: gadget: f_ecm: convert to new function interface with backward compatibility
fcbdf12ebef73a6069e2a1aada1e546fb578a4aa
usb: gadget: f_phonet: convert to new function interface with backward compatibility
b29002a157940752dfed2c488b2011f63f007d71
usb: gadget: f_eem: convert to new function interface with backward compatibility
8cedba7c73af1369599b1111639cfeb66fe13aaa
usb: gadget: f_subset: convert to new function interface with backward compatibility
f466c6353819326873fa48a02c6f2d7c903240d6
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>
Diffstat (limited to 'drivers/usb')
-rw-r--r-- | drivers/usb/gadget/f_ecm.c | 7 | ||||
-rw-r--r-- | drivers/usb/gadget/f_eem.c | 7 | ||||
-rw-r--r-- | drivers/usb/gadget/f_ncm.c | 7 | ||||
-rw-r--r-- | drivers/usb/gadget/f_phonet.c | 7 | ||||
-rw-r--r-- | drivers/usb/gadget/f_rndis.c | 7 | ||||
-rw-r--r-- | drivers/usb/gadget/f_subset.c | 7 |
6 files changed, 30 insertions, 12 deletions
diff --git a/drivers/usb/gadget/f_ecm.c b/drivers/usb/gadget/f_ecm.c index 5d3561ea1c15..edab45da3741 100644 --- a/drivers/usb/gadget/f_ecm.c +++ b/drivers/usb/gadget/f_ecm.c | |||
@@ -959,8 +959,11 @@ static struct usb_function_instance *ecm_alloc_inst(void) | |||
959 | mutex_init(&opts->lock); | 959 | mutex_init(&opts->lock); |
960 | opts->func_inst.free_func_inst = ecm_free_inst; | 960 | opts->func_inst.free_func_inst = ecm_free_inst; |
961 | opts->net = gether_setup_default(); | 961 | opts->net = gether_setup_default(); |
962 | if (IS_ERR(opts->net)) | 962 | if (IS_ERR(opts->net)) { |
963 | return ERR_PTR(PTR_ERR(opts->net)); | 963 | struct net_device *net = opts->net; |
964 | kfree(opts); | ||
965 | return ERR_CAST(net); | ||
966 | } | ||
964 | 967 | ||
965 | config_group_init_type_name(&opts->func_inst.group, "", &ecm_func_type); | 968 | config_group_init_type_name(&opts->func_inst.group, "", &ecm_func_type); |
966 | 969 | ||
diff --git a/drivers/usb/gadget/f_eem.c b/drivers/usb/gadget/f_eem.c index 90ee8022e8d8..d00392d879db 100644 --- a/drivers/usb/gadget/f_eem.c +++ b/drivers/usb/gadget/f_eem.c | |||
@@ -593,8 +593,11 @@ static struct usb_function_instance *eem_alloc_inst(void) | |||
593 | mutex_init(&opts->lock); | 593 | mutex_init(&opts->lock); |
594 | opts->func_inst.free_func_inst = eem_free_inst; | 594 | opts->func_inst.free_func_inst = eem_free_inst; |
595 | opts->net = gether_setup_default(); | 595 | opts->net = gether_setup_default(); |
596 | if (IS_ERR(opts->net)) | 596 | if (IS_ERR(opts->net)) { |
597 | return ERR_CAST(opts->net); | 597 | struct net_device *net = opts->net; |
598 | kfree(opts); | ||
599 | return ERR_CAST(net); | ||
600 | } | ||
598 | 601 | ||
599 | config_group_init_type_name(&opts->func_inst.group, "", &eem_func_type); | 602 | config_group_init_type_name(&opts->func_inst.group, "", &eem_func_type); |
600 | 603 | ||
diff --git a/drivers/usb/gadget/f_ncm.c b/drivers/usb/gadget/f_ncm.c index 952177f7eb9b..1c28fe13328a 100644 --- a/drivers/usb/gadget/f_ncm.c +++ b/drivers/usb/gadget/f_ncm.c | |||
@@ -1350,8 +1350,11 @@ static struct usb_function_instance *ncm_alloc_inst(void) | |||
1350 | mutex_init(&opts->lock); | 1350 | mutex_init(&opts->lock); |
1351 | opts->func_inst.free_func_inst = ncm_free_inst; | 1351 | opts->func_inst.free_func_inst = ncm_free_inst; |
1352 | opts->net = gether_setup_default(); | 1352 | opts->net = gether_setup_default(); |
1353 | if (IS_ERR(opts->net)) | 1353 | if (IS_ERR(opts->net)) { |
1354 | return ERR_PTR(PTR_ERR(opts->net)); | 1354 | struct net_device *net = opts->net; |
1355 | kfree(opts); | ||
1356 | return ERR_CAST(net); | ||
1357 | } | ||
1355 | 1358 | ||
1356 | config_group_init_type_name(&opts->func_inst.group, "", &ncm_func_type); | 1359 | config_group_init_type_name(&opts->func_inst.group, "", &ncm_func_type); |
1357 | 1360 | ||
diff --git a/drivers/usb/gadget/f_phonet.c b/drivers/usb/gadget/f_phonet.c index 7944fb0efe3b..1bf26e9f38cd 100644 --- a/drivers/usb/gadget/f_phonet.c +++ b/drivers/usb/gadget/f_phonet.c | |||
@@ -656,8 +656,11 @@ static struct usb_function_instance *phonet_alloc_inst(void) | |||
656 | 656 | ||
657 | opts->func_inst.free_func_inst = phonet_free_inst; | 657 | opts->func_inst.free_func_inst = phonet_free_inst; |
658 | opts->net = gphonet_setup_default(); | 658 | opts->net = gphonet_setup_default(); |
659 | if (IS_ERR(opts->net)) | 659 | if (IS_ERR(opts->net)) { |
660 | return ERR_PTR(PTR_ERR(opts->net)); | 660 | struct net_device *net = opts->net; |
661 | kfree(opts); | ||
662 | return ERR_CAST(net); | ||
663 | } | ||
661 | 664 | ||
662 | config_group_init_type_name(&opts->func_inst.group, "", | 665 | config_group_init_type_name(&opts->func_inst.group, "", |
663 | &phonet_func_type); | 666 | &phonet_func_type); |
diff --git a/drivers/usb/gadget/f_rndis.c b/drivers/usb/gadget/f_rndis.c index 191df35ae69d..717ed7f95639 100644 --- a/drivers/usb/gadget/f_rndis.c +++ b/drivers/usb/gadget/f_rndis.c | |||
@@ -963,8 +963,11 @@ static struct usb_function_instance *rndis_alloc_inst(void) | |||
963 | mutex_init(&opts->lock); | 963 | mutex_init(&opts->lock); |
964 | opts->func_inst.free_func_inst = rndis_free_inst; | 964 | opts->func_inst.free_func_inst = rndis_free_inst; |
965 | opts->net = gether_setup_default(); | 965 | opts->net = gether_setup_default(); |
966 | if (IS_ERR(opts->net)) | 966 | if (IS_ERR(opts->net)) { |
967 | return ERR_CAST(opts->net); | 967 | struct net_device *net = opts->net; |
968 | kfree(opts); | ||
969 | return ERR_CAST(net); | ||
970 | } | ||
968 | 971 | ||
969 | config_group_init_type_name(&opts->func_inst.group, "", | 972 | config_group_init_type_name(&opts->func_inst.group, "", |
970 | &rndis_func_type); | 973 | &rndis_func_type); |
diff --git a/drivers/usb/gadget/f_subset.c b/drivers/usb/gadget/f_subset.c index 5601e1d96c4f..7c8674fa7e80 100644 --- a/drivers/usb/gadget/f_subset.c +++ b/drivers/usb/gadget/f_subset.c | |||
@@ -505,8 +505,11 @@ static struct usb_function_instance *geth_alloc_inst(void) | |||
505 | mutex_init(&opts->lock); | 505 | mutex_init(&opts->lock); |
506 | opts->func_inst.free_func_inst = geth_free_inst; | 506 | opts->func_inst.free_func_inst = geth_free_inst; |
507 | opts->net = gether_setup_default(); | 507 | opts->net = gether_setup_default(); |
508 | if (IS_ERR(opts->net)) | 508 | if (IS_ERR(opts->net)) { |
509 | return ERR_CAST(opts->net); | 509 | struct net_device *net = opts->net; |
510 | kfree(opts); | ||
511 | return ERR_CAST(net); | ||
512 | } | ||
510 | 513 | ||
511 | config_group_init_type_name(&opts->func_inst.group, "", | 514 | config_group_init_type_name(&opts->func_inst.group, "", |
512 | &gether_func_type); | 515 | &gether_func_type); |