lkml.org 
[lkml]   [2019]   [Oct]   [3]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 5.3 081/344] ALSA: usb-audio: Skip bSynchAddress endpoint check if it is invalid
    Date
    From: Ard van Breemen <ard@kwaak.net>

    [ Upstream commit 1b34121d9f26d272b0b2334209af6b6fc82d4bf1 ]

    The Linux kernel assumes that get_endpoint(alts,0) and
    get_endpoint(alts,1) are eachothers feedback endpoints.
    To reassure that validity it will test bsynchaddress to comply with that
    assumption. But if the bsyncaddress is 0 (invalid), it will flag that as
    a wrong assumption and return an error.
    Fix: Skip the test if bSynchAddress is 0.
    Note: those with a valid bSynchAddress should have a code quirck added.

    Signed-off-by: Ard van Breemen <ard@kwaak.net>
    Signed-off-by: Takashi Iwai <tiwai@suse.de>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    ---
    sound/usb/pcm.c | 1 +
    1 file changed, 1 insertion(+)

    diff --git a/sound/usb/pcm.c b/sound/usb/pcm.c
    index e4bbf79de956e..33cd26763c0ee 100644
    --- a/sound/usb/pcm.c
    +++ b/sound/usb/pcm.c
    @@ -457,6 +457,7 @@ static int set_sync_endpoint(struct snd_usb_substream *subs,
    }
    ep = get_endpoint(alts, 1)->bEndpointAddress;
    if (get_endpoint(alts, 0)->bLength >= USB_DT_ENDPOINT_AUDIO_SIZE &&
    + get_endpoint(alts, 0)->bSynchAddress != 0 &&
    ((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)))) {
    dev_err(&dev->dev,
    --
    2.20.1


    \
     
     \ /
      Last update: 2019-10-03 18:42    [W:2.742 / U:0.004 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site