lkml.org 
[lkml]   [2020]   [Jun]   [19]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 4.4 085/101] media: go7007: fix a miss of snd_card_free
    Date
    From: Chuhong Yuan <hslester96@gmail.com>

    commit 9453264ef58638ce8976121ac44c07a3ef375983 upstream.

    go7007_snd_init() misses a snd_card_free() in an error path.
    Add the missed call to fix it.

    Signed-off-by: Chuhong Yuan <hslester96@gmail.com>
    Signed-off-by: Hans Verkuil <hverkuil-cisco@xs4all.nl>
    Signed-off-by: Mauro Carvalho Chehab <mchehab+huawei@kernel.org>
    [Salvatore Bonaccorso: Adjust context for backport to versions which do
    not contain c0decac19da3 ("media: use strscpy() instead of strlcpy()")
    and ba78170ef153 ("media: go7007: Fix misuse of strscpy")]
    Signed-off-by: Salvatore Bonaccorso <carnil@debian.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

    ---
    drivers/media/usb/go7007/snd-go7007.c | 35 ++++++++++++++++------------------
    1 file changed, 17 insertions(+), 18 deletions(-)

    --- a/drivers/media/usb/go7007/snd-go7007.c
    +++ b/drivers/media/usb/go7007/snd-go7007.c
    @@ -243,22 +243,18 @@ int go7007_snd_init(struct go7007 *go)
    gosnd->capturing = 0;
    ret = snd_card_new(go->dev, index[dev], id[dev], THIS_MODULE, 0,
    &gosnd->card);
    - if (ret < 0) {
    - kfree(gosnd);
    - return ret;
    - }
    + if (ret < 0)
    + goto free_snd;
    +
    ret = snd_device_new(gosnd->card, SNDRV_DEV_LOWLEVEL, go,
    &go7007_snd_device_ops);
    - if (ret < 0) {
    - kfree(gosnd);
    - return ret;
    - }
    + if (ret < 0)
    + goto free_card;
    +
    ret = snd_pcm_new(gosnd->card, "go7007", 0, 0, 1, &gosnd->pcm);
    - if (ret < 0) {
    - snd_card_free(gosnd->card);
    - kfree(gosnd);
    - return ret;
    - }
    + if (ret < 0)
    + goto free_card;
    +
    strlcpy(gosnd->card->driver, "go7007", sizeof(gosnd->card->driver));
    strlcpy(gosnd->card->shortname, go->name, sizeof(gosnd->card->driver));
    strlcpy(gosnd->card->longname, gosnd->card->shortname,
    @@ -269,11 +265,8 @@ int go7007_snd_init(struct go7007 *go)
    &go7007_snd_capture_ops);

    ret = snd_card_register(gosnd->card);
    - if (ret < 0) {
    - snd_card_free(gosnd->card);
    - kfree(gosnd);
    - return ret;
    - }
    + if (ret < 0)
    + goto free_card;

    gosnd->substream = NULL;
    go->snd_context = gosnd;
    @@ -281,6 +274,12 @@ int go7007_snd_init(struct go7007 *go)
    ++dev;

    return 0;
    +
    +free_card:
    + snd_card_free(gosnd->card);
    +free_snd:
    + kfree(gosnd);
    + return ret;
    }
    EXPORT_SYMBOL(go7007_snd_init);


    \
     
     \ /
      Last update: 2020-06-19 18:52    [W:4.084 / U:0.004 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site