ALSA: timer: Reject user params with too small ticks

am: 9879f9d01a

Change-Id: I3fb699e66b0e89da94eea1124c89fedf9f2cc576
This commit is contained in:
Takashi Iwai 2017-03-12 08:13:51 +00:00 committed by android-build-merger
commit 5b01070e45

View file

@ -1700,10 +1700,22 @@ static int snd_timer_user_params(struct file *file,
return -EBADFD; return -EBADFD;
if (copy_from_user(&params, _params, sizeof(params))) if (copy_from_user(&params, _params, sizeof(params)))
return -EFAULT; return -EFAULT;
if (!(t->hw.flags & SNDRV_TIMER_HW_SLAVE) && params.ticks < 1) { if (!(t->hw.flags & SNDRV_TIMER_HW_SLAVE)) {
u64 resolution;
if (params.ticks < 1) {
err = -EINVAL; err = -EINVAL;
goto _end; goto _end;
} }
/* Don't allow resolution less than 1ms */
resolution = snd_timer_resolution(tu->timeri);
resolution *= params.ticks;
if (resolution < 1000000) {
err = -EINVAL;
goto _end;
}
}
if (params.queue_size > 0 && if (params.queue_size > 0 &&
(params.queue_size < 32 || params.queue_size > 1024)) { (params.queue_size < 32 || params.queue_size > 1024)) {
err = -EINVAL; err = -EINVAL;