[alsa-devel] [PATCH] ALSA: snd-usb: fix sync pipe check
Takashi Iwai
tiwai at suse.de
Mon Jun 18 09:43:35 CEST 2012
At Sun, 17 Jun 2012 13:44:27 +0200,
Daniel Mack wrote:
>
> Fix a bogus sanity check for sync pipe in pcm.c. This flaw was
> introduced during the streaming logic refactorization.
>
> While at it, improve the error messages that are generated in such cases.
>
> Signed-off-by: Daniel Mack <zonque at gmail.com>
> Reported-and-tested-by: <ben at b1c1l1.com>
Thanks, applied.
Takashi
> ---
> sound/usb/pcm.c | 18 +++++++++++-------
> 1 file changed, 11 insertions(+), 7 deletions(-)
>
> diff --git a/sound/usb/pcm.c b/sound/usb/pcm.c
> index cdf8b76..fc7ce7c 100644
> --- a/sound/usb/pcm.c
> +++ b/sound/usb/pcm.c
> @@ -354,17 +354,21 @@ static int set_format(struct snd_usb_substream *subs, struct audioformat *fmt)
> (get_endpoint(alts, 1)->bLength >= USB_DT_ENDPOINT_AUDIO_SIZE &&
> get_endpoint(alts, 1)->bSynchAddress != 0 &&
> !implicit_fb)) {
> - snd_printk(KERN_ERR "%d:%d:%d : invalid synch pipe\n",
> - dev->devnum, fmt->iface, fmt->altsetting);
> + snd_printk(KERN_ERR "%d:%d:%d : invalid sync pipe. bmAttributes %02x, bLength %d, bSynchAddress %02x\n",
> + dev->devnum, fmt->iface, fmt->altsetting,
> + get_endpoint(alts, 1)->bmAttributes,
> + get_endpoint(alts, 1)->bLength,
> + get_endpoint(alts, 1)->bSynchAddress);
> return -EINVAL;
> }
> ep = get_endpoint(alts, 1)->bEndpointAddress;
> - if (get_endpoint(alts, 0)->bLength >= USB_DT_ENDPOINT_AUDIO_SIZE &&
> + if (!implicit_fb &&
> + get_endpoint(alts, 0)->bLength >= USB_DT_ENDPOINT_AUDIO_SIZE &&
> (( is_playback && ep != (unsigned int)(get_endpoint(alts, 0)->bSynchAddress | USB_DIR_IN)) ||
> - (!is_playback && ep != (unsigned int)(get_endpoint(alts, 0)->bSynchAddress & ~USB_DIR_IN)) ||
> - ( is_playback && !implicit_fb))) {
> - snd_printk(KERN_ERR "%d:%d:%d : invalid synch pipe\n",
> - dev->devnum, fmt->iface, fmt->altsetting);
> + (!is_playback && ep != (unsigned int)(get_endpoint(alts, 0)->bSynchAddress & ~USB_DIR_IN)))) {
> + snd_printk(KERN_ERR "%d:%d:%d : invalid sync pipe. is_playback %d, ep %02x, bSynchAddress %02x\n",
> + dev->devnum, fmt->iface, fmt->altsetting,
> + is_playback, ep, get_endpoint(alts, 0)->bSynchAddress);
> return -EINVAL;
> }
>
> --
> 1.7.10.2
>
> _______________________________________________
> Alsa-devel mailing list
> Alsa-devel at alsa-project.org
> http://mailman.alsa-project.org/mailman/listinfo/alsa-devel
>
More information about the Alsa-devel
mailing list