summaryrefslogtreecommitdiffstats
path: root/sound/soc/samsung/s3c-i2s-v2.c
diff options
context:
space:
mode:
authorKrzysztof Kozlowski <krzk@kernel.org>2017-07-27 19:13:36 +0200
committerMark Brown <broonie@kernel.org>2017-07-28 11:58:23 +0200
commit776bac64bf13e20c27f7ad168811abdf3b72f14d (patch)
tree9e5802d8a1976e8d4ca635cac866c3b06be64e05 /sound/soc/samsung/s3c-i2s-v2.c
parentASoC: samsung: spdif: Handle return value of clk_prepare_enable. (diff)
downloadlinux-776bac64bf13e20c27f7ad168811abdf3b72f14d.tar.xz
linux-776bac64bf13e20c27f7ad168811abdf3b72f14d.zip
ASoC: samsung: Fix possible double iounmap on s3c24xx driver probe failure
Commit 87b132bc0315 ("ASoC: samsung: s3c24{xx,12}-i2s: port to use generic dmaengine API") moved ioremap() call from s3c-i2s-v2.c:s3c_i2sv2_probe() to s3c2412-i2s.c:s3c2412_iis_dev_probe() and converted it to devm- resource managed interface. However the error path in first of them - s3c_i2sv2_probe() - was not updated. If getting a iis clock in s3c_i2sv2_probe() failed, the address space would be unmapped there. This could lead to: 1. double iounmap() later from devm-interface of s3c2412_iis_dev_probe()), 2. accessing the memory by other functions in s3c2412-i2s.c unit. Anyway, the owner of this mapped region should be s3c2412-i2s.c because it starts the mapping. Affected are drivers for S3C24xx family although issue was not reproduced. Fixes: 87b132bc0315 ("ASoC: samsung: s3c24{xx,12}-i2s: port to use generic dmaengine API") Signed-off-by: Krzysztof Kozlowski <krzk@kernel.org> Acked-by: Arvind Yadav<arvind.yadav.cs@gmail.com> Signed-off-by: Mark Brown <broonie@kernel.org>
Diffstat (limited to 'sound/soc/samsung/s3c-i2s-v2.c')
-rw-r--r--sound/soc/samsung/s3c-i2s-v2.c1
1 files changed, 0 insertions, 1 deletions
diff --git a/sound/soc/samsung/s3c-i2s-v2.c b/sound/soc/samsung/s3c-i2s-v2.c
index ca522a95160b..9b28046eea8e 100644
--- a/sound/soc/samsung/s3c-i2s-v2.c
+++ b/sound/soc/samsung/s3c-i2s-v2.c
@@ -634,7 +634,6 @@ int s3c_i2sv2_probe(struct snd_soc_dai *dai,
i2s->iis_pclk = clk_get(dev, "iis");
if (IS_ERR(i2s->iis_pclk)) {
dev_err(dev, "failed to get iis_clock\n");
- iounmap(i2s->regs);
return -ENOENT;
}