diff options
| author | Linus Torvalds <torvalds@linux-foundation.org> | 2017-03-01 20:59:21 +0300 | 
|---|---|---|
| committer | Linus Torvalds <torvalds@linux-foundation.org> | 2017-03-01 20:59:21 +0300 | 
| commit | 044d5dfd6262d0ef91f6f5b19e3973f82fc7e1d2 (patch) | |
| tree | 27691481f2dbd3e5021cdceb813187aef33de4a0 /sound/core/timer.c | |
| parent | 544a068f1f88da89254d2e334a7d4f0dc4ae9ab7 (diff) | |
| parent | f3ac9f737603da80c2da3e84b89e74429836bb6d (diff) | |
| download | linux-044d5dfd6262d0ef91f6f5b19e3973f82fc7e1d2.tar.xz | |
Merge tag 'sound-fix-4.11-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/tiwai/sound
Pull sound fixes from Takashi Iwai:
 "A few last-minute fixes for rc1:
   - ALSA core timer and sequencer fixes for bugs spotted by syzkaller
   - a couple of trivial HD-audio fixups
   - additional PCI / codec IDs for Intel Geminilake
   - fixes for CT-XFi DMA mask bugs"
* tag 'sound-fix-4.11-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/tiwai/sound:
  ALSA: seq: Fix link corruption by event error handling
  ALSA: hda - Add subwoofer support for Dell Inspiron 17 7000 Gaming
  ALSA: ctxfi: Fallback DMA mask to 32bit
  ALSA: timer: Reject user params with too small ticks
  ALSA: hda: Add Geminilake HDMI codec ID
  ALSA: hda - Fix micmute hotkey problem for a lenovo AIO machine
  ALSA: hda - Add Geminilake PCI ID
Diffstat (limited to 'sound/core/timer.c')
| -rw-r--r-- | sound/core/timer.c | 18 | 
1 files changed, 15 insertions, 3 deletions
diff --git a/sound/core/timer.c b/sound/core/timer.c index fc144f43faa6..ad153149b231 100644 --- a/sound/core/timer.c +++ b/sound/core/timer.c @@ -1702,9 +1702,21 @@ static int snd_timer_user_params(struct file *file,  		return -EBADFD;  	if (copy_from_user(¶ms, _params, sizeof(params)))  		return -EFAULT; -	if (!(t->hw.flags & SNDRV_TIMER_HW_SLAVE) && params.ticks < 1) { -		err = -EINVAL; -		goto _end; +	if (!(t->hw.flags & SNDRV_TIMER_HW_SLAVE)) { +		u64 resolution; + +		if (params.ticks < 1) { +			err = -EINVAL; +			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 &&  	    (params.queue_size < 32 || params.queue_size > 1024)) {  | 
