ASoC: fsl_asrc: Fix two dereferenced variable before check
Subsystems (3)
Nicolin Chen
reviewercover ASoC: fsl_asrc: Fix two dereferenced variable before check
These two patches fixes two warning of dereferenced variable reported by Dan Carpenter <[email protected]>
Nicolin Chen (2):
ASoC: fsl_sarc_dma: Check pair before using it
ASoC: fsl_asrc: Don't access members of config before checking it
sound/soc/fsl/fsl_asrc.c | 9 ++++++--- sound/soc/fsl/fsl_asrc_dma.c | 9 +++++++-- 2 files changed, 13 insertions(+), 5 deletions(-)
Signature · 1 line
1.8.4
Nicolin Chen
reviewerPATCH 2/2 ASoC: fsl_asrc: Don't access members of config before checking it
sound/soc/fsl/fsl_asrc.c:250 fsl_asrc_config_pair()
warn: variable dereferenced before check 'config' (see line 243)
git remote add next git://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git
git remote update next
git checkout 3117bb3109dc223e186302f5dc8ce9ed04adca90
vim +/config +250 sound/soc/fsl/fsl_asrc.c
237 */
238 static int fsl_asrc_config_pair(struct fsl_asrc_pair *pair) 239 {
240 struct asrc_config *config = pair->config; 241 struct fsl_asrc *asrc_priv = pair->asrc_priv; 242 enum asrc_pair_index index = pair->index; @243 u32 inrate = config->input_sample_rate, indiv; 244 u32 outrate = config->output_sample_rate, outdiv; 245 bool ideal = config->inclk == INCLK_NONE; 246 u32 clk_index[2], div[2]; 247 int in, out, channels; 248 struct clk *clk;
249
@250 if (!config) {
251 pair_err("invalid pair config\n");
252 return -EINVAL;
253 }
--- sound/soc/fsl/fsl_asrc.c | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-)
sound/soc/fsl/fsl_asrc.c +6 -3
@@ -240,12 +240,11 @@ static int fsl_asrc_config_pair(struct fsl_asrc_pair *pair)struct asrc_config *config = pair->config;struct fsl_asrc *asrc_priv = pair->asrc_priv;enum asrc_pair_index index = pair->index; -u32 inrate = config->input_sample_rate, indiv; -u32 outrate = config->output_sample_rate, outdiv; -bool ideal = config->inclk ==INCLK_NONE ; +u32 inrate, outrate, indiv, outdiv;u32 clk_index[2 ], div[2 ];int in, out, channels;struct clk *clk; +bool ideal;if (!config) {pair_err ("invalid pair config\n" );
@@ -264,6 +263,10 @@ static int fsl_asrc_config_pair(struct fsl_asrc_pair *pair)return -EINVAL ; } + inrate = config->input_sample_rate; + outrate = config->output_sample_rate; + ideal = config->inclk ==INCLK_NONE ; +/* Validate input and output sample rates */ for (in =0 ; in <ARRAY_SIZE (supported_input_rate); in++)if (inrate == supported_input_rate[in])
Signature · 1 line
1.8.4
Nicolin Chen
reviewerPATCH 1/2 ASoC: fsl_sarc_dma: Check pair before using it
In reply to Nicolin ChenThe patch 3117bb3109dc: "ASoC: fsl_asrc: Add ASRC ASoC CPU DAI and platform drivers" from Jul 29, 2014, leads to the following Smatch complaint:
sound/soc/fsl/fsl_asrc_dma.c:304 fsl_asrc_dma_shutdown()
warn: variable dereferenced before check 'pair' (see line 302)
sound/soc/fsl/fsl_asrc_dma.c
301 struct fsl_asrc_pair *pair = runtime->private_data;
302 struct fsl_asrc *asrc_priv = pair->asrc_priv;
^^^^^^^^^^^^^^^
Dereference.303
304 if (pair && asrc_priv->pair[pair->index] == pair)
^^^^
Check.305 asrc_priv->pair[pair->index] = NULL;
306
So we just let the driver check pair before using it.
--- sound/soc/fsl/fsl_asrc_dma.c | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-)
sound/soc/fsl/fsl_asrc_dma.c +7 -2
@@ -299,9 +299,14 @@ static int fsl_asrc_dma_shutdown(struct snd_pcm_substream *substream) {struct snd_pcm_runtime *runtime = substream->runtime;struct fsl_asrc_pair *pair = runtime->private_data; -struct fsl_asrc *asrc_priv = pair->asrc_priv; +struct fsl_asrc *asrc_priv; + +if (!pair) +return 0 ; + + asrc_priv = pair->asrc_priv; -if (pair && asrc_priv->pair[pair->index] == pair) +if (asrc_priv->pair[pair->index] == pair) asrc_priv->pair[pair->index] =NULL ;kfree (pair);
Signature · 1 line
1.8.4
Quoted 2 lines · Nicolin Chen
These two patches fixes two warning of dereferenced variable reported by Dan Carpenter <[email protected]>
Applied both, thanks.