Browse Source

[ALSA] Fix Oops with PCM OSS sync

The PCM OSS emulation can cause Oops at sync operation due to the wrong
data size calculation.  Typically happening on Sparc64:
	http://lkml.org/lkml/2008/1/24/426

Signed-off-by: Takashi Iwai <tiwai@suse.de>
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
Takashi Iwai 17 years ago
parent
commit
4939c66034
1 changed files with 1 additions and 0 deletions
  1. 1 0
      sound/core/oss/pcm_oss.c

+ 1 - 0
sound/core/oss/pcm_oss.c

@@ -1621,6 +1621,7 @@ static int snd_pcm_oss_sync(struct snd_pcm_oss_file *pcm_oss_file)
 					snd_pcm_format_set_silence(runtime->format,
 					snd_pcm_format_set_silence(runtime->format,
 								   runtime->oss.buffer,
 								   runtime->oss.buffer,
 								   size1);
 								   size1);
+					size1 /= runtime->channels; /* frames */
 					fs = snd_enter_user();
 					fs = snd_enter_user();
 					snd_pcm_lib_write(substream, (void __user *)runtime->oss.buffer, size1);
 					snd_pcm_lib_write(substream, (void __user *)runtime->oss.buffer, size1);
 					snd_leave_user(fs);
 					snd_leave_user(fs);