]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
ASoC: cs48l32: Fix a signedness bug in cs48l32_hw_params()
authorHarshit Mogalapalli <harshit.m.mogalapalli@oracle.com>
Tue, 3 Jun 2025 21:48:13 +0000 (14:48 -0700)
committerMark Brown <broonie@kernel.org>
Sun, 8 Jun 2025 22:29:04 +0000 (23:29 +0100)
There is a type promotion that can happen when freq(u32) variable is
comapared with sclk_target(integer), when sclk_target is a negative
value it promotes to a large postive integer which might not be a
problem in this particular case as the condition evaluates to false
when that happens, but bail out early when sclk_target has negative
error codes.

cs48l32_sclk_rates[i].freq >= sclk_target

Fix this by adding a negative error check when
snd_soc_tdm_params_to_bclk() fails

Fixes: e2bcbf99d045 ("ASoC: cs48l32: Add driver for Cirrus Logic CS48L32 audio DSP")
Signed-off-by: Harshit Mogalapalli <harshit.m.mogalapalli@oracle.com>
Link: https://patch.msgid.link/20250603214813.197346-1-harshit.m.mogalapalli@oracle.com
Reviewed-by: Richard Fitzgerald <rf@opensource.cirrus.com>
Signed-off-by: Mark Brown <broonie@kernel.org>
sound/soc/codecs/cs48l32.c

index 90a795230d276e10269f951a43b44ec86410ca7d..9bdd48aab42a8732ba09a3980f424bd5436ab20a 100644 (file)
@@ -2162,6 +2162,10 @@ static int cs48l32_hw_params(struct snd_pcm_substream *substream,
                n_slots_multiple = 1;
 
        sclk_target = snd_soc_tdm_params_to_bclk(params, slotw, n_slots, n_slots_multiple);
+       if (sclk_target < 0) {
+               cs48l32_asp_err(dai, "Invalid parameters\n");
+               return sclk_target;
+       }
 
        for (i = 0; i < ARRAY_SIZE(cs48l32_sclk_rates); i++) {
                if ((cs48l32_sclk_rates[i].freq >= sclk_target) &&