]> git.ipfire.org Git - thirdparty/kernel/stable-queue.git/blame - releases/4.9.30/cx231xx-audio-fix-init-error-path.patch
Linux 4.14.95
[thirdparty/kernel/stable-queue.git] / releases / 4.9.30 / cx231xx-audio-fix-init-error-path.patch
CommitLineData
dcfe13a2
GKH
1From fff1abc4d54e469140a699612b4db8d6397bfcba Mon Sep 17 00:00:00 2001
2From: Johan Hovold <johan@kernel.org>
3Date: Mon, 13 Mar 2017 09:53:57 -0300
4Subject: [media] cx231xx-audio: fix init error path
5
6From: Johan Hovold <johan@kernel.org>
7
8commit fff1abc4d54e469140a699612b4db8d6397bfcba upstream.
9
10Make sure to release the snd_card also on a late allocation error.
11
12Fixes: e0d3bafd0258 ("V4L/DVB (10954): Add cx231xx USB driver")
13
14Cc: Sri Deevi <Srinivasa.Deevi@conexant.com>
15Signed-off-by: Johan Hovold <johan@kernel.org>
16Signed-off-by: Hans Verkuil <hans.verkuil@cisco.com>
17Signed-off-by: Mauro Carvalho Chehab <mchehab@s-opensource.com>
18Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
19
20---
21 drivers/media/usb/cx231xx/cx231xx-audio.c | 25 ++++++++++++++-----------
22 1 file changed, 14 insertions(+), 11 deletions(-)
23
24--- a/drivers/media/usb/cx231xx/cx231xx-audio.c
25+++ b/drivers/media/usb/cx231xx/cx231xx-audio.c
26@@ -674,10 +674,8 @@ static int cx231xx_audio_init(struct cx2
27
28 spin_lock_init(&adev->slock);
29 err = snd_pcm_new(card, "Cx231xx Audio", 0, 0, 1, &pcm);
30- if (err < 0) {
31- snd_card_free(card);
32- return err;
33- }
34+ if (err < 0)
35+ goto err_free_card;
36
37 snd_pcm_set_ops(pcm, SNDRV_PCM_STREAM_CAPTURE,
38 &snd_cx231xx_pcm_capture);
39@@ -691,10 +689,9 @@ static int cx231xx_audio_init(struct cx2
40 INIT_WORK(&dev->wq_trigger, audio_trigger);
41
42 err = snd_card_register(card);
43- if (err < 0) {
44- snd_card_free(card);
45- return err;
46- }
47+ if (err < 0)
48+ goto err_free_card;
49+
50 adev->sndcard = card;
51 adev->udev = dev->udev;
52
53@@ -713,9 +710,10 @@ static int cx231xx_audio_init(struct cx2
54 "audio EndPoint Addr 0x%x, Alternate settings: %i\n",
55 adev->end_point_addr, adev->num_alt);
56 adev->alt_max_pkt_size = kmalloc(32 * adev->num_alt, GFP_KERNEL);
57-
58- if (adev->alt_max_pkt_size == NULL)
59- return -ENOMEM;
60+ if (!adev->alt_max_pkt_size) {
61+ err = -ENOMEM;
62+ goto err_free_card;
63+ }
64
65 for (i = 0; i < adev->num_alt; i++) {
66 u16 tmp =
67@@ -729,6 +727,11 @@ static int cx231xx_audio_init(struct cx2
68 }
69
70 return 0;
71+
72+err_free_card:
73+ snd_card_free(card);
74+
75+ return err;
76 }
77
78 static int cx231xx_audio_fini(struct cx231xx *dev)