diff options
Diffstat (limited to 'sound/usb/quirks.c')
-rw-r--r-- | sound/usb/quirks.c | 4 |
1 files changed, 4 insertions, 0 deletions
diff --git a/sound/usb/quirks.c b/sound/usb/quirks.c index fb62bce2435c..6178bb5d0731 100644 --- a/sound/usb/quirks.c +++ b/sound/usb/quirks.c | |||
@@ -150,6 +150,7 @@ static int create_fixed_stream_quirk(struct snd_usb_audio *chip, | |||
150 | usb_audio_err(chip, "cannot memdup\n"); | 150 | usb_audio_err(chip, "cannot memdup\n"); |
151 | return -ENOMEM; | 151 | return -ENOMEM; |
152 | } | 152 | } |
153 | INIT_LIST_HEAD(&fp->list); | ||
153 | if (fp->nr_rates > MAX_NR_RATES) { | 154 | if (fp->nr_rates > MAX_NR_RATES) { |
154 | kfree(fp); | 155 | kfree(fp); |
155 | return -EINVAL; | 156 | return -EINVAL; |
@@ -193,6 +194,7 @@ static int create_fixed_stream_quirk(struct snd_usb_audio *chip, | |||
193 | return 0; | 194 | return 0; |
194 | 195 | ||
195 | error: | 196 | error: |
197 | list_del(&fp->list); /* unlink for avoiding double-free */ | ||
196 | kfree(fp); | 198 | kfree(fp); |
197 | kfree(rate_table); | 199 | kfree(rate_table); |
198 | return err; | 200 | return err; |
@@ -469,6 +471,7 @@ static int create_uaxx_quirk(struct snd_usb_audio *chip, | |||
469 | fp->ep_attr = get_endpoint(alts, 0)->bmAttributes; | 471 | fp->ep_attr = get_endpoint(alts, 0)->bmAttributes; |
470 | fp->datainterval = 0; | 472 | fp->datainterval = 0; |
471 | fp->maxpacksize = le16_to_cpu(get_endpoint(alts, 0)->wMaxPacketSize); | 473 | fp->maxpacksize = le16_to_cpu(get_endpoint(alts, 0)->wMaxPacketSize); |
474 | INIT_LIST_HEAD(&fp->list); | ||
472 | 475 | ||
473 | switch (fp->maxpacksize) { | 476 | switch (fp->maxpacksize) { |
474 | case 0x120: | 477 | case 0x120: |
@@ -492,6 +495,7 @@ static int create_uaxx_quirk(struct snd_usb_audio *chip, | |||
492 | ? SNDRV_PCM_STREAM_CAPTURE : SNDRV_PCM_STREAM_PLAYBACK; | 495 | ? SNDRV_PCM_STREAM_CAPTURE : SNDRV_PCM_STREAM_PLAYBACK; |
493 | err = snd_usb_add_audio_stream(chip, stream, fp); | 496 | err = snd_usb_add_audio_stream(chip, stream, fp); |
494 | if (err < 0) { | 497 | if (err < 0) { |
498 | list_del(&fp->list); /* unlink for avoiding double-free */ | ||
495 | kfree(fp); | 499 | kfree(fp); |
496 | return err; | 500 | return err; |
497 | } | 501 | } |