ASoC: wm_adsp: Fix uninitialized variable warnings

wm_adsp_read_data_word() used if (ret) to check for an error from
wm_adsp_read_raw_data_block(). While this is perfectly valid,
wm_adsp_read_raw_data_block() itself uses if (ret < 0) and three
calls to wm_adsp_read_data_word() also use if (ret < 0).

This creates an error check chain like this:

  1st) if (ret < 0) return ret;
  2nd) if (ret) return ret;
  3rd) if (ret < 0) ...

This can confuse the compiler into thinking that there are possible
returns > 0 from the middle if() that are not handled by the final
if(). If this was true it would lead to using uninitialized variables
later in the outer function.

Fix this by changing the test in wm_adsp_read_data_word() to be
if (ret < 0).

Signed-off-by: Richard Fitzgerald <rf@opensource.cirrus.com>
Link: https://lore.kernel.org/r/20210111133825.8758-1-rf@opensource.cirrus.com
Signed-off-by: Mark Brown <broonie@kernel.org>
This commit is contained in:
Richard Fitzgerald 2021-01-11 13:38:25 +00:00 committed by Mark Brown
parent 4eeed5f403
commit fe9989fb25
No known key found for this signature in database
GPG Key ID: 24D68B725D5487D0

View File

@ -3694,7 +3694,7 @@ static inline int wm_adsp_read_data_word(struct wm_adsp *dsp, int mem_type,
int ret;
ret = wm_adsp_read_raw_data_block(dsp, mem_type, mem_addr, 1, &raw);
if (ret)
if (ret < 0)
return ret;
*data = be32_to_cpu(raw) & 0x00ffffffu;