diff options
Diffstat (limited to 'sound/core/compress_offload.c')
| -rw-r--r-- | sound/core/compress_offload.c | 13 | 
1 files changed, 8 insertions, 5 deletions
diff --git a/sound/core/compress_offload.c b/sound/core/compress_offload.c index dac3633507c..a68aed7fce0 100644 --- a/sound/core/compress_offload.c +++ b/sound/core/compress_offload.c @@ -441,19 +441,22 @@ snd_compr_set_params(struct snd_compr_stream *stream, unsigned long arg)  		params = kmalloc(sizeof(*params), GFP_KERNEL);  		if (!params)  			return -ENOMEM; -		if (copy_from_user(params, (void __user *)arg, sizeof(*params))) -			return -EFAULT; +		if (copy_from_user(params, (void __user *)arg, sizeof(*params))) { +			retval = -EFAULT; +			goto out; +		}  		retval = snd_compr_allocate_buffer(stream, params);  		if (retval) { -			kfree(params); -			return -ENOMEM; +			retval = -ENOMEM; +			goto out;  		}  		retval = stream->ops->set_params(stream, params);  		if (retval)  			goto out;  		stream->runtime->state = SNDRV_PCM_STATE_SETUP; -	} else +	} else {  		return -EPERM; +	}  out:  	kfree(params);  	return retval;  |