lkml.org 
[lkml]   [2019]   [Aug]   [29]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH AUTOSEL 4.19 04/29] ALSA: line6: Fix memory leak at line6_init_pcm() error path
    Date
    From: Takashi Iwai <tiwai@suse.de>

    [ Upstream commit 1bc8d18c75fef3b478dbdfef722aae09e2a9fde7 ]

    I forgot to release the allocated object at the early error path in
    line6_init_pcm(). For addressing it, slightly shuffle the code so
    that the PCM destructor (pcm->private_free) is assigned properly
    before all error paths.

    Fixes: 3450121997ce ("ALSA: line6: Fix write on zero-sized buffer")
    Cc: <stable@vger.kernel.org>
    Signed-off-by: Takashi Iwai <tiwai@suse.de>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    ---
    sound/usb/line6/pcm.c | 18 +++++++++---------
    1 file changed, 9 insertions(+), 9 deletions(-)

    diff --git a/sound/usb/line6/pcm.c b/sound/usb/line6/pcm.c
    index 78c2d6cab3b52..531564269444e 100644
    --- a/sound/usb/line6/pcm.c
    +++ b/sound/usb/line6/pcm.c
    @@ -554,6 +554,15 @@ int line6_init_pcm(struct usb_line6 *line6,
    line6pcm->volume_monitor = 255;
    line6pcm->line6 = line6;

    + spin_lock_init(&line6pcm->out.lock);
    + spin_lock_init(&line6pcm->in.lock);
    + line6pcm->impulse_period = LINE6_IMPULSE_DEFAULT_PERIOD;
    +
    + line6->line6pcm = line6pcm;
    +
    + pcm->private_data = line6pcm;
    + pcm->private_free = line6_cleanup_pcm;
    +
    line6pcm->max_packet_size_in =
    usb_maxpacket(line6->usbdev,
    usb_rcvisocpipe(line6->usbdev, ep_read), 0);
    @@ -566,15 +575,6 @@ int line6_init_pcm(struct usb_line6 *line6,
    return -EINVAL;
    }

    - spin_lock_init(&line6pcm->out.lock);
    - spin_lock_init(&line6pcm->in.lock);
    - line6pcm->impulse_period = LINE6_IMPULSE_DEFAULT_PERIOD;
    -
    - line6->line6pcm = line6pcm;
    -
    - pcm->private_data = line6pcm;
    - pcm->private_free = line6_cleanup_pcm;
    -
    err = line6_create_audio_out_urbs(line6pcm);
    if (err < 0)
    return err;
    --
    2.20.1
    \
     
     \ /
      Last update: 2019-08-29 12:55    [W:3.771 / U:0.028 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site