diff options
author | Du, Changbin <changbin.du@intel.com> | 2016-04-12 04:24:34 -0400 |
---|---|---|
committer | Felipe Balbi <felipe.balbi@linux.intel.com> | 2016-04-18 05:35:18 -0400 |
commit | e6bdf8195b4a43ebff71f25fc7ca5e436e79161a (patch) | |
tree | 901dbc6c719c44f3da148c34cf2220866659fcc6 | |
parent | 5c4ad318de3b8e8680d654c82a254c4b65243739 (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.c | 13 |
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 | ||
679 | err2: | ||
680 | kfree(dwc->regset); | ||
681 | |||
679 | err1: | 682 | err1: |
680 | debugfs_remove_recursive(root); | 683 | debugfs_remove_recursive(root); |
681 | 684 | ||
@@ -686,5 +689,5 @@ err0: | |||
686 | void dwc3_debugfs_exit(struct dwc3 *dwc) | 689 | void 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 | } |