Unverified Commit a3039aef authored by Dragos Tarcatu's avatar Dragos Tarcatu Committed by Mark Brown
Browse files

ASoC: topology: Check return value for soc_tplg_pcm_create()



The return value of soc_tplg_pcm_create() is currently not checked
in soc_tplg_pcm_elems_load(). If an error is to occur there, the
topology ignores it and continues loading.

Fix that by checking the status and rejecting the topology on error.

Reviewed-by: default avatarRanjani Sridharan <ranjani.sridharan@linux.intel.com>
Signed-off-by: default avatarDragos Tarcatu <dragos_tarcatu@mentor.com>
Signed-off-by: default avatarPierre-Louis Bossart <pierre-louis.bossart@linux.intel.com>
Link: https://lore.kernel.org/r/20191210003939.15752-3-pierre-louis.bossart@linux.intel.com


Signed-off-by: default avatarMark Brown <broonie@kernel.org>
parent 76d27036
Loading
Loading
Loading
Loading
+7 −1
Original line number Original line Diff line number Diff line
@@ -2046,6 +2046,7 @@ static int soc_tplg_pcm_elems_load(struct soc_tplg *tplg,
	int size;
	int size;
	int i;
	int i;
	bool abi_match;
	bool abi_match;
	int ret;


	count = le32_to_cpu(hdr->count);
	count = le32_to_cpu(hdr->count);


@@ -2087,7 +2088,12 @@ static int soc_tplg_pcm_elems_load(struct soc_tplg *tplg,
		}
		}


		/* create the FE DAIs and DAI links */
		/* create the FE DAIs and DAI links */
		soc_tplg_pcm_create(tplg, _pcm);
		ret = soc_tplg_pcm_create(tplg, _pcm);
		if (ret < 0) {
			if (!abi_match)
				kfree(_pcm);
			return ret;
		}


		/* offset by version-specific struct size and
		/* offset by version-specific struct size and
		 * real priv data size
		 * real priv data size