diff mbox series

ASoC: mediatek: common: Fix refcount leak in parse_dai_link_info

Message ID 20230411003431.4048700-1-shraash@google.com (mailing list archive)
State New, archived
Headers show
Series ASoC: mediatek: common: Fix refcount leak in parse_dai_link_info | expand

Commit Message

Aashish Sharma April 11, 2023, 12:34 a.m. UTC
Add missing of_node_put()s before the returns to balance
of_node_get()s and of_node_put()s, which may get unbalanced
in case the for loop 'for_each_available_child_of_node' returns
early.

Fixes: 4302187d955f ("ASoC: mediatek: common: add soundcard driver common code")
Reported-by: kernel test robot <lkp@intel.com>
Reported-by: Julia Lawall <julia.lawall@inria.fr>
Link: https://lore.kernel.org/r/202304090504.2K8L6soj-lkp@intel.com/
Signed-off-by: Aashish Sharma <shraash@google.com>
---
 sound/soc/mediatek/common/mtk-soundcard-driver.c | 12 +++++++++---
 1 file changed, 9 insertions(+), 3 deletions(-)

Comments

Guenter Roeck April 11, 2023, 3:02 a.m. UTC | #1
On Mon, Apr 10, 2023 at 5:34 PM Aashish Sharma <shraash@google.com> wrote:
>
> Add missing of_node_put()s before the returns to balance
> of_node_get()s and of_node_put()s, which may get unbalanced
> in case the for loop 'for_each_available_child_of_node' returns
> early.
>
> Fixes: 4302187d955f ("ASoC: mediatek: common: add soundcard driver common code")
> Reported-by: kernel test robot <lkp@intel.com>
> Reported-by: Julia Lawall <julia.lawall@inria.fr>
> Link: https://lore.kernel.org/r/202304090504.2K8L6soj-lkp@intel.com/
> Signed-off-by: Aashish Sharma <shraash@google.com>

Reviewed-by: Guenter Roeck <groeck@chromium.org>

> ---
>  sound/soc/mediatek/common/mtk-soundcard-driver.c | 12 +++++++++---
>  1 file changed, 9 insertions(+), 3 deletions(-)
>
> diff --git a/sound/soc/mediatek/common/mtk-soundcard-driver.c b/sound/soc/mediatek/common/mtk-soundcard-driver.c
> index 7c55c2cb1f21..738093451ccb 100644
> --- a/sound/soc/mediatek/common/mtk-soundcard-driver.c
> +++ b/sound/soc/mediatek/common/mtk-soundcard-driver.c
> @@ -47,20 +47,26 @@ int parse_dai_link_info(struct snd_soc_card *card)
>         /* Loop over all the dai link sub nodes */
>         for_each_available_child_of_node(dev->of_node, sub_node) {
>                 if (of_property_read_string(sub_node, "link-name",
> -                                           &dai_link_name))
> +                                           &dai_link_name)) {
> +                       of_node_put(sub_node);
>                         return -EINVAL;
> +               }
>
>                 for_each_card_prelinks(card, i, dai_link) {
>                         if (!strcmp(dai_link_name, dai_link->name))
>                                 break;
>                 }
>
> -               if (i >= card->num_links)
> +               if (i >= card->num_links) {
> +                       of_node_put(sub_node);
>                         return -EINVAL;
> +               }
>
>                 ret = set_card_codec_info(card, sub_node, dai_link);
> -               if (ret < 0)
> +               if (ret < 0) {
> +                       of_node_put(sub_node);
>                         return ret;
> +               }
>         }
>
>         return 0;
> --
> 2.40.0.577.gac1e443424-goog
>
Trevor Wu (吳文良) April 11, 2023, 3:32 a.m. UTC | #2
On Tue, 2023-04-11 at 06:04 +0530, Aashish Sharma wrote:
> External email : Please do not click links or open attachments until
> you have verified the sender or the content.
> 
> 
> Add missing of_node_put()s before the returns to balance
> of_node_get()s and of_node_put()s, which may get unbalanced
> in case the for loop 'for_each_available_child_of_node' returns
> early.
> 
> Fixes: 4302187d955f ("ASoC: mediatek: common: add soundcard driver
> common code")
> Reported-by: kernel test robot <lkp@intel.com>
> Reported-by: Julia Lawall <julia.lawall@inria.fr>
> Link: https://lore.kernel.org/r/202304090504.2K8L6soj-lkp@intel.com/
> Signed-off-by: Aashish Sharma <shraash@google.com>


Reviewed-by: Trevor Wu <trevor.wu@mediatek.com>

> ---
>  sound/soc/mediatek/common/mtk-soundcard-driver.c | 12 +++++++++---
>  1 file changed, 9 insertions(+), 3 deletions(-)
> 
> diff --git a/sound/soc/mediatek/common/mtk-soundcard-driver.c
> b/sound/soc/mediatek/common/mtk-soundcard-driver.c
> index 7c55c2cb1f21..738093451ccb 100644
> --- a/sound/soc/mediatek/common/mtk-soundcard-driver.c
> +++ b/sound/soc/mediatek/common/mtk-soundcard-driver.c
> @@ -47,20 +47,26 @@ int parse_dai_link_info(struct snd_soc_card
> *card)
>         /* Loop over all the dai link sub nodes */
>         for_each_available_child_of_node(dev->of_node, sub_node) {
>                 if (of_property_read_string(sub_node, "link-name",
> -                                           &dai_link_name))
> +                                           &dai_link_name)) {
> +                       of_node_put(sub_node);
>                         return -EINVAL;
> +               }
> 
>                 for_each_card_prelinks(card, i, dai_link) {
>                         if (!strcmp(dai_link_name, dai_link->name))
>                                 break;
>                 }
> 
> -               if (i >= card->num_links)
> +               if (i >= card->num_links) {
> +                       of_node_put(sub_node);
>                         return -EINVAL;
> +               }
> 
>                 ret = set_card_codec_info(card, sub_node, dai_link);
> -               if (ret < 0)
> +               if (ret < 0) {
> +                       of_node_put(sub_node);
>                         return ret;
> +               }
>         }
> 
>         return 0;
> --
> 2.40.0.577.gac1e443424-goog
>
Mark Brown April 11, 2023, 2:19 p.m. UTC | #3
On Tue, 11 Apr 2023 06:04:31 +0530, Aashish Sharma wrote:
> Add missing of_node_put()s before the returns to balance
> of_node_get()s and of_node_put()s, which may get unbalanced
> in case the for loop 'for_each_available_child_of_node' returns
> early.
> 
> 

Applied to

   https://git.kernel.org/pub/scm/linux/kernel/git/broonie/sound.git for-next

Thanks!

[1/1] ASoC: mediatek: common: Fix refcount leak in parse_dai_link_info
      commit: beed115c2ce78f990222a29abed042582df4e87c

All being well this means that it will be integrated into the linux-next
tree (usually sometime in the next 24 hours) and sent to Linus during
the next merge window (or sooner if it is a bug fix), however if
problems are discovered then the patch may be dropped or reverted.

You may get further e-mails resulting from automated or manual testing
and review of the tree, please engage with people reporting problems and
send followup patches addressing any issues that are reported if needed.

If any updates are required or you are submitting further changes they
should be sent as incremental updates against current git, existing
patches will not be replaced.

Please add any relevant lists and maintainers to the CCs when replying
to this mail.

Thanks,
Mark
diff mbox series

Patch

diff --git a/sound/soc/mediatek/common/mtk-soundcard-driver.c b/sound/soc/mediatek/common/mtk-soundcard-driver.c
index 7c55c2cb1f21..738093451ccb 100644
--- a/sound/soc/mediatek/common/mtk-soundcard-driver.c
+++ b/sound/soc/mediatek/common/mtk-soundcard-driver.c
@@ -47,20 +47,26 @@  int parse_dai_link_info(struct snd_soc_card *card)
 	/* Loop over all the dai link sub nodes */
 	for_each_available_child_of_node(dev->of_node, sub_node) {
 		if (of_property_read_string(sub_node, "link-name",
-					    &dai_link_name))
+					    &dai_link_name)) {
+			of_node_put(sub_node);
 			return -EINVAL;
+		}
 
 		for_each_card_prelinks(card, i, dai_link) {
 			if (!strcmp(dai_link_name, dai_link->name))
 				break;
 		}
 
-		if (i >= card->num_links)
+		if (i >= card->num_links) {
+			of_node_put(sub_node);
 			return -EINVAL;
+		}
 
 		ret = set_card_codec_info(card, sub_node, dai_link);
-		if (ret < 0)
+		if (ret < 0) {
+			of_node_put(sub_node);
 			return ret;
+		}
 	}
 
 	return 0;