[alsa-devel] Setting invalid samplerate
Clemens Ladisch
clemens at ladisch.de
Thu May 19 12:55:28 CEST 2011
Torsten Schenk wrote:
> I'm working on the driver for the dmx 6fire usb. ...
> since Ubuntu 11.04, I get complaints about the card not working anymore,
I'd guess that would be commit 82d90313980b:
| ALSA: USB: 6fire: signedness bug in usb6fire_pcm_prepare()
|
| rt->rate is an unsigned char so it's never equal to -1. It's not a huge
| problem because the invalid rate is caught inside the call to
| usb6fire_pcm_set_rate() which returns -EINVAL. But if we fix the test
| then it prints out the correct error message so that's good.
|
| Signed-off-by: Dan Carpenter <error27 at gmail.com>
|
| --- a/sound/usb/6fire/pcm.c
| +++ b/sound/usb/6fire/pcm.c
| @@ -493,13 +493,12 @@ static int usb6fire_pcm_prepare(struct snd_pcm_substream *alsa_sub)
| sub->period_off = 0;
|
| if (rt->stream_state == STREAM_DISABLED) {
| - rt->rate = -1;
| for (i = 0; i < ARRAY_SIZE(rates); i++)
| if (alsa_rt->rate == rates[i]) {
| rt->rate = i;
| break;
| }
| - if (rt->rate == -1) {
| + if (i == ARRAY_SIZE(rates)) {
| mutex_unlock(&rt->stream_mutex);
| snd_printk("invalid rate %d in prepare.\n",
| alsa_rt->rate);
This fixed not a bug but just a symptom of the actual bug, that rt->rate
is not signed.
There are still "rt->rate = -1" initializations, and usb6fire_pcm_open()
then does:
if (rt->rate >= 0)
alsa_rt->hw.rates = rates_alsaid[rt->rate];
Regards,
Clemens
More information about the Alsa-devel
mailing list