aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDu, Changbin <changbin.du@intel.com>2016-04-12 04:24:34 -0400
committerFelipe Balbi <felipe.balbi@linux.intel.com>2016-04-18 05:35:18 -0400
commite6bdf8195b4a43ebff71f25fc7ca5e436e79161a (patch)
tree901dbc6c719c44f3da148c34cf2220866659fcc6
parent5c4ad318de3b8e8680d654c82a254c4b65243739 (diff)
usb: dwc3: fix memory leak of dwc->regset
dwc->regset is allocated on dwc3_debugfs_init, and should be released on init failure or dwc3_debugfs_exit. Btw, The line "dwc->root = NULL" is unnecessary, so remove it. Signed-off-by: Du, Changbin <changbin.du@intel.com> [ felipe.balbi@linux.intel.com : add another err label for the new error condition ] Signed-off-by: Felipe Balbi <felipe.balbi@linux.intel.com>
-rw-r--r--drivers/usb/dwc3/debugfs.c13
1 files changed, 8 insertions, 5 deletions
diff --git a/drivers/usb/dwc3/debugfs.c b/drivers/usb/dwc3/debugfs.c
index 9ac37fe1b6a7..cebf9e38b60a 100644
--- a/drivers/usb/dwc3/debugfs.c
+++ b/drivers/usb/dwc3/debugfs.c
@@ -645,7 +645,7 @@ int dwc3_debugfs_init(struct dwc3 *dwc)
645 file = debugfs_create_regset32("regdump", S_IRUGO, root, dwc->regset); 645 file = debugfs_create_regset32("regdump", S_IRUGO, root, dwc->regset);
646 if (!file) { 646 if (!file) {
647 ret = -ENOMEM; 647 ret = -ENOMEM;
648 goto err1; 648 goto err2;
649 } 649 }
650 650
651 if (IS_ENABLED(CONFIG_USB_DWC3_DUAL_ROLE)) { 651 if (IS_ENABLED(CONFIG_USB_DWC3_DUAL_ROLE)) {
@@ -653,7 +653,7 @@ int dwc3_debugfs_init(struct dwc3 *dwc)
653 dwc, &dwc3_mode_fops); 653 dwc, &dwc3_mode_fops);
654 if (!file) { 654 if (!file) {
655 ret = -ENOMEM; 655 ret = -ENOMEM;
656 goto err1; 656 goto err2;
657 } 657 }
658 } 658 }
659 659
@@ -663,19 +663,22 @@ int dwc3_debugfs_init(struct dwc3 *dwc)
663 dwc, &dwc3_testmode_fops); 663 dwc, &dwc3_testmode_fops);
664 if (!file) { 664 if (!file) {
665 ret = -ENOMEM; 665 ret = -ENOMEM;
666 goto err1; 666 goto err2;
667 } 667 }
668 668
669 file = debugfs_create_file("link_state", S_IRUGO | S_IWUSR, root, 669 file = debugfs_create_file("link_state", S_IRUGO | S_IWUSR, root,
670 dwc, &dwc3_link_state_fops); 670 dwc, &dwc3_link_state_fops);
671 if (!file) { 671 if (!file) {
672 ret = -ENOMEM; 672 ret = -ENOMEM;
673 goto err1; 673 goto err2;
674 } 674 }
675 } 675 }
676 676
677 return 0; 677 return 0;
678 678
679err2:
680 kfree(dwc->regset);
681
679err1: 682err1:
680 debugfs_remove_recursive(root); 683 debugfs_remove_recursive(root);
681 684
@@ -686,5 +689,5 @@ err0:
686void dwc3_debugfs_exit(struct dwc3 *dwc) 689void dwc3_debugfs_exit(struct dwc3 *dwc)
687{ 690{
688 debugfs_remove_recursive(dwc->root); 691 debugfs_remove_recursive(dwc->root);
689 dwc->root = NULL; 692 kfree(dwc->regset);
690} 693}