[alsa-devel] [PATCH 1/2] ALSA: compress - move the buffer check
Takashi Iwai
tiwai at suse.de
Mon Sep 17 09:59:13 CEST 2012
At Mon, 17 Sep 2012 11:51:25 +0530,
Vinod Koul wrote:
>
> Commit ALSA: compress_core: integer overflow in snd_compr_allocate_buffer()
> added a new error check for input params.
> this add new routine for input checks and moves buffer overflow check to this
> new routine. This allows the error value to be propogated to user space
>
> Signed-off-by: Vinod Koul <vinod.koul at linux.intel.com>
Applied, thanks.
Takashi
> ---
> sound/core/compress_offload.c | 20 ++++++++++++++++----
> 1 files changed, 16 insertions(+), 4 deletions(-)
>
> diff --git a/sound/core/compress_offload.c b/sound/core/compress_offload.c
> index 68fe02c..bd7f28e 100644
> --- a/sound/core/compress_offload.c
> +++ b/sound/core/compress_offload.c
> @@ -407,10 +407,6 @@ static int snd_compr_allocate_buffer(struct snd_compr_stream *stream,
> unsigned int buffer_size;
> void *buffer;
>
> - if (params->buffer.fragment_size == 0 ||
> - params->buffer.fragments > SIZE_MAX / params->buffer.fragment_size)
> - return -EINVAL;
> -
> buffer_size = params->buffer.fragment_size * params->buffer.fragments;
> if (stream->ops->copy) {
> buffer = NULL;
> @@ -429,6 +425,16 @@ static int snd_compr_allocate_buffer(struct snd_compr_stream *stream,
> return 0;
> }
>
> +static int snd_compress_check_input(struct snd_compr_params *params)
> +{
> + /* first let's check the buffer parameter's */
> + if (params->buffer.fragment_size == 0 ||
> + params->buffer.fragments > SIZE_MAX / params->buffer.fragment_size)
> + return -EINVAL;
> +
> + return 0;
> +}
> +
> static int
> snd_compr_set_params(struct snd_compr_stream *stream, unsigned long arg)
> {
> @@ -447,11 +453,17 @@ snd_compr_set_params(struct snd_compr_stream *stream, unsigned long arg)
> retval = -EFAULT;
> goto out;
> }
> +
> + retval = snd_compress_check_input(params);
> + if (retval)
> + goto out;
> +
> retval = snd_compr_allocate_buffer(stream, params);
> if (retval) {
> retval = -ENOMEM;
> goto out;
> }
> +
> retval = stream->ops->set_params(stream, params);
> if (retval)
> goto out;
> --
> 1.7.0.4
>
More information about the Alsa-devel
mailing list