]> git.ipfire.org Git - thirdparty/kernel/stable-queue.git/blame - releases/4.14.105/alsa-compress-prevent-potential-divide-by-zero-bugs.patch
Linux 4.14.105
[thirdparty/kernel/stable-queue.git] / releases / 4.14.105 / alsa-compress-prevent-potential-divide-by-zero-bugs.patch
CommitLineData
9aa60b56
SL
1From c474ce5d94ea0e99fae8b82aebd627fa0d3de4f1 Mon Sep 17 00:00:00 2001
2From: Dan Carpenter <dan.carpenter@oracle.com>
3Date: Fri, 21 Dec 2018 12:06:58 +0300
4Subject: ALSA: compress: prevent potential divide by zero bugs
5
6[ Upstream commit 678e2b44c8e3fec3afc7202f1996a4500a50be93 ]
7
8The problem is seen in the q6asm_dai_compr_set_params() function:
9
10 ret = q6asm_map_memory_regions(dir, prtd->audio_client, prtd->phys,
11 (prtd->pcm_size / prtd->periods),
12 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
13 prtd->periods);
14
15In this code prtd->pcm_size is the buffer_size and prtd->periods comes
16from params->buffer.fragments. If we allow the number of fragments to
17be zero then it results in a divide by zero bug. One possible fix would
18be to use prtd->pcm_count directly instead of using the division to
19re-calculate it. But I decided that it doesn't really make sense to
20allow zero fragments.
21
22Signed-off-by: Dan Carpenter <dan.carpenter@oracle.com>
23Signed-off-by: Mark Brown <broonie@kernel.org>
24Signed-off-by: Sasha Levin <sashal@kernel.org>
25---
26 sound/core/compress_offload.c | 3 ++-
27 1 file changed, 2 insertions(+), 1 deletion(-)
28
29diff --git a/sound/core/compress_offload.c b/sound/core/compress_offload.c
30index 4490a699030b1..555df64d46ffc 100644
31--- a/sound/core/compress_offload.c
32+++ b/sound/core/compress_offload.c
33@@ -529,7 +529,8 @@ static int snd_compress_check_input(struct snd_compr_params *params)
34 {
35 /* first let's check the buffer parameter's */
36 if (params->buffer.fragment_size == 0 ||
37- params->buffer.fragments > INT_MAX / params->buffer.fragment_size)
38+ params->buffer.fragments > INT_MAX / params->buffer.fragment_size ||
39+ params->buffer.fragments == 0)
40 return -EINVAL;
41
42 /* now codec parameters */
43--
442.19.1
45