diff options
Diffstat (limited to 'target/linux/layerscape/patches-5.4/801-audio-0058-MLK-20189-8-ASoC-fsl_sai-use-signed-offset-variable.patch')
-rw-r--r-- | target/linux/layerscape/patches-5.4/801-audio-0058-MLK-20189-8-ASoC-fsl_sai-use-signed-offset-variable.patch | 53 |
1 files changed, 53 insertions, 0 deletions
diff --git a/target/linux/layerscape/patches-5.4/801-audio-0058-MLK-20189-8-ASoC-fsl_sai-use-signed-offset-variable.patch b/target/linux/layerscape/patches-5.4/801-audio-0058-MLK-20189-8-ASoC-fsl_sai-use-signed-offset-variable.patch new file mode 100644 index 0000000000..97f4cb0350 --- /dev/null +++ b/target/linux/layerscape/patches-5.4/801-audio-0058-MLK-20189-8-ASoC-fsl_sai-use-signed-offset-variable.patch @@ -0,0 +1,53 @@ +From d8802def525b4f74f66fca02afe9c17a729a3201 Mon Sep 17 00:00:00 2001 +From: Viorel Suman <viorel.suman@nxp.com> +Date: Tue, 13 Nov 2018 11:36:29 +0200 +Subject: [PATCH] MLK-20189-8: ASoC: fsl_sai: use signed offset variable + +Both dataline_off and dataline_off_dsd fields are unsigned, +thus checking negative values make no sense. Use a signed +variable to calculate offset instead. + +This fixes Coverity issue: CID1899299 + +Signed-off-by: Viorel Suman <viorel.suman@nxp.com> +--- + sound/soc/fsl/fsl_sai.c | 14 +++++--------- + 1 file changed, 5 insertions(+), 9 deletions(-) + +--- a/sound/soc/fsl/fsl_sai.c ++++ b/sound/soc/fsl/fsl_sai.c +@@ -1273,7 +1273,7 @@ static int fsl_sai_probe(struct platform + char tmp[8]; + int irq, ret, i; + int index; +- int firstbitidx, nextbitidx; ++ int firstbitidx, nextbitidx, offset; + struct regmap_config fsl_sai_regmap_config = fsl_sai_v2_regmap_config; + unsigned long irqflags = 0; + +@@ -1356,10 +1356,8 @@ static int fsl_sai_probe(struct platform + for (i = 0; i < 2; i++) { + firstbitidx = find_first_bit((const unsigned long *)&sai->dataline[i], 8); + nextbitidx = find_next_bit((const unsigned long *)&sai->dataline[i], 8, firstbitidx+1); +- sai->dataline_off[i] = nextbitidx - firstbitidx - 1; +- +- if (sai->dataline_off[i] < 0 || sai->dataline_off[i] >= 7) +- sai->dataline_off[i] = 0; ++ offset = nextbitidx - firstbitidx - 1; ++ sai->dataline_off[i] = (offset < 0 || offset >= 7 ? 0 : offset); + } + + ret = of_property_read_u32_index(np, "fsl,dataline,dsd", 0, &sai->dataline_dsd[0]); +@@ -1378,10 +1376,8 @@ static int fsl_sai_probe(struct platform + for (i = 0; i < 2; i++) { + firstbitidx = find_first_bit((const unsigned long *)&sai->dataline_dsd[i], 8); + nextbitidx = find_next_bit((const unsigned long *)&sai->dataline_dsd[i], 8, firstbitidx+1); +- sai->dataline_off_dsd[i] = nextbitidx - firstbitidx - 1; +- +- if (sai->dataline_off_dsd[i] < 0 || sai->dataline_off_dsd[i] >= 7) +- sai->dataline_off_dsd[i] = 0; ++ offset = nextbitidx - firstbitidx - 1; ++ sai->dataline_off_dsd[i] = (offset < 0 || offset >= 7 ? 0 : offset); + } + + if ((of_find_property(np, "fsl,i2s-xtor", NULL) != NULL) || |