Skip to content

Commit

Permalink
Merge series "Add sanity checks for topology API calls" from Amadeusz…
Browse files Browse the repository at this point in the history
… Sławiński<amadeuszx.slawinski@linux.intel.com>:

Topology API exposes just 2 function calls, to load and unload topology.
This adds sanity checks to make sure that it behaves well when some of
parameters are set incoorectly or not needed.

This makes developer live easier by failing early instead of proceeding
on and then failing in unexpected ways.

As loading and unloading topology usually happens one the overhead of
additional checks should be negligible.

Amadeusz Sławiński (2):
  ASoC: topology: Ensure that needed parameters are set
  ASoC: topology: Check if ops is set before dereference

 sound/soc/soc-topology.c | 22 +++++++++++++++-------
 1 file changed, 15 insertions(+), 7 deletions(-)

--
2.25.1
  • Loading branch information
Mark Brown committed Jan 21, 2021
2 parents ff385c1 + 9c88a98 commit c7a83ed
Showing 1 changed file with 15 additions and 7 deletions.
22 changes: 15 additions & 7 deletions sound/soc/soc-topology.c
Original file line number Diff line number Diff line change
Expand Up @@ -2659,20 +2659,28 @@ int snd_soc_tplg_component_load(struct snd_soc_component *comp,
struct soc_tplg tplg;
int ret;

/* component needs to exist to keep and reference data while parsing */
if (!comp)
/*
* check if we have sane parameters:
* comp - needs to exist to keep and reference data while parsing
* comp->dev - used for resource management and prints
* comp->card - used for setting card related parameters
* fw - we need it, as it is the very thing we parse
*/
if (!comp || !comp->dev || !comp->card || !fw)
return -EINVAL;

/* setup parsing context */
memset(&tplg, 0, sizeof(tplg));
tplg.fw = fw;
tplg.dev = comp->dev;
tplg.comp = comp;
tplg.ops = ops;
tplg.io_ops = ops->io_ops;
tplg.io_ops_count = ops->io_ops_count;
tplg.bytes_ext_ops = ops->bytes_ext_ops;
tplg.bytes_ext_ops_count = ops->bytes_ext_ops_count;
if (ops) {
tplg.ops = ops;
tplg.io_ops = ops->io_ops;
tplg.io_ops_count = ops->io_ops_count;
tplg.bytes_ext_ops = ops->bytes_ext_ops;
tplg.bytes_ext_ops_count = ops->bytes_ext_ops_count;
}

ret = soc_tplg_load(&tplg);
/* free the created components if fail to load topology */
Expand Down

0 comments on commit c7a83ed

Please sign in to comment.