Skip to content

Commit

Permalink
ALSA: usb-audio: Fix NULL dererence at error path
Browse files Browse the repository at this point in the history
At an error path to release URB buffers and contexts, the driver might
hit a NULL dererence for u->urb pointer, when u->buffer_size has been
already set but the actual URB allocation failed.

Fix it by adding the NULL check of urb.  Also, make sure that
buffer_size is cleared after the error path or the close.

Cc: <[email protected]>
Reported-by: Sabri N. Ferreiro <[email protected]>
Link: https://lore.kernel.org/r/CAKG+3NRjTey+fFfUEGwuxL-pi_=T4cUskYG9OzpzHytF+tzYng@mail.gmail.com
Link: https://lore.kernel.org/r/[email protected]
Signed-off-by: Takashi Iwai <[email protected]>
  • Loading branch information
tiwai committed Sep 30, 2022
1 parent 35a1744 commit 568be8a
Showing 1 changed file with 2 additions and 1 deletion.
3 changes: 2 additions & 1 deletion sound/usb/endpoint.c
Original file line number Diff line number Diff line change
Expand Up @@ -95,12 +95,13 @@ static inline unsigned get_usb_high_speed_rate(unsigned int rate)
*/
static void release_urb_ctx(struct snd_urb_ctx *u)
{
if (u->buffer_size)
if (u->urb && u->buffer_size)
usb_free_coherent(u->ep->chip->dev, u->buffer_size,
u->urb->transfer_buffer,
u->urb->transfer_dma);
usb_free_urb(u->urb);
u->urb = NULL;
u->buffer_size = 0;
}

static const char *usb_error_string(int err)
Expand Down

0 comments on commit 568be8a

Please sign in to comment.