Received: by 2002:a05:6a10:206:0:0:0:0 with SMTP id 6csp2706253pxj; Mon, 10 May 2021 08:58:17 -0700 (PDT) X-Google-Smtp-Source: ABdhPJxUpsG1Cf9SuYgWfqB0JlfPR5pPyy8TOLFaSlhApmqJd5jxKTUzimlUzBNm1WwrRoS9eIX/ X-Received: by 2002:a17:907:6289:: with SMTP id nd9mr25759941ejc.384.1620662297139; Mon, 10 May 2021 08:58:17 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1620662297; cv=none; d=google.com; s=arc-20160816; b=OT1EPI+XRXR0VQ77VHIkWuZW+7OOrhMoaAAxM7TCJXRTwYZ+j/s+tkd5kVHoG86Anr 5V7w3nj5PoX2k7VlI+6QFWPdTNdI9PHet8mx+nuHH8PzBH8pJLbcQBG6B8XxyJ7akPy7 aSP8slz6+ACVFbxFh4G8UujbJb7UeD2S3/+Y+1dalo1Aor9RHUEqVMmasgbtX+UPeowl W8HIeNLbttZuE+W6uxyYwu28D1zltATuXLHmHQltyVlXmMFu07Y2/adROwZPjP+S9MtU iMM4dl5GU+qpVW8Rz1vT/9g7Ka1sSSX06ZTfBWuRoQvoqd+la0tEkmu3WIaEbvllu//C v+gg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :user-agent:references:in-reply-to:message-id:date:subject:cc:to :from:dkim-signature; bh=G+XJdFUCaKSLKo57uzgvJhwkloUnZ3KhXDLJWZlMZsE=; b=UFm8yUfn0Lhx07dEJnMMYPFGiilr/uUq4XPyPQVOjR/QysoKQoHdxn3zwZtfizzq1y YF3UTSnNPldjKG8pGZkpaxN1E6YNZpQu7Xa6wVORjCORZiyXxB1lBjwYy6PSwyg86PW4 OcqDXPzyi0zBx5BGMX2kGMy4M3/nvdC81OX8leqV65RFDmjZIowz5QdxQzErt0ObmZ/5 UJio/2bD1O8uvl9o5Yl/W0IDeXiV/GnpCUJgkEiGCbXs4BIXv3I8BMO1R2lKclTJhPBX 8jIsIynXsLHfRR/og499dr/k9aj6Z89GVQbJB5MuX2JKVVNH5J7UpoVjcI5MeGsHoD24 kuCw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linuxfoundation.org header.s=korg header.b=rHe8Eb8w; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linuxfoundation.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id z22si17335735edm.578.2021.05.10.08.57.53; Mon, 10 May 2021 08:58:17 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; dkim=pass header.i=@linuxfoundation.org header.s=korg header.b=rHe8Eb8w; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linuxfoundation.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S240515AbhEJLav (ORCPT + 99 others); Mon, 10 May 2021 07:30:51 -0400 Received: from mail.kernel.org ([198.145.29.99]:55456 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S234844AbhEJK5L (ORCPT ); Mon, 10 May 2021 06:57:11 -0400 Received: by mail.kernel.org (Postfix) with ESMTPSA id 0FC55619FE; Mon, 10 May 2021 10:49:53 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=linuxfoundation.org; s=korg; t=1620643794; bh=Wh17wluSKUTBOWNzYuYLyW+TL60RDkDmKbWLKi2/MZc=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=rHe8Eb8wIRTVf+kdHxjRPOGzafj7kyUkU7FBba/h/aPwAHpNu5DXgm9frnSKGti9+ 4CCswd6W0aJmo+hhEy1M+z5+34QLyUmgZGBqOANf+AwAAenjLF6kBSAAYCdTDduZr0 aQ9NCVQ/9uDw043T/a9wuh1KeWKXHzSnUa+BD/1o= From: Greg Kroah-Hartman To: linux-kernel@vger.kernel.org Cc: Greg Kroah-Hartman , stable@vger.kernel.org, Daniel Niv , Hans Verkuil , Mauro Carvalho Chehab , Sasha Levin Subject: [PATCH 5.11 161/342] media: media/saa7164: fix saa7164_encoder_register() memory leak bugs Date: Mon, 10 May 2021 12:19:11 +0200 Message-Id: <20210510102015.413258471@linuxfoundation.org> X-Mailer: git-send-email 2.31.1 In-Reply-To: <20210510102010.096403571@linuxfoundation.org> References: <20210510102010.096403571@linuxfoundation.org> User-Agent: quilt/0.66 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Daniel Niv [ Upstream commit c759b2970c561e3b56aa030deb13db104262adfe ] Add a fix for the memory leak bugs that can occur when the saa7164_encoder_register() function fails. The function allocates memory without explicitly freeing it when errors occur. Add a better error handling that deallocate the unused buffers before the function exits during a fail. Signed-off-by: Daniel Niv Signed-off-by: Hans Verkuil Signed-off-by: Mauro Carvalho Chehab Signed-off-by: Sasha Levin --- drivers/media/pci/saa7164/saa7164-encoder.c | 20 +++++++++++--------- 1 file changed, 11 insertions(+), 9 deletions(-) diff --git a/drivers/media/pci/saa7164/saa7164-encoder.c b/drivers/media/pci/saa7164/saa7164-encoder.c index 11e1eb6a6809..1d1d32e043f1 100644 --- a/drivers/media/pci/saa7164/saa7164-encoder.c +++ b/drivers/media/pci/saa7164/saa7164-encoder.c @@ -1008,7 +1008,7 @@ int saa7164_encoder_register(struct saa7164_port *port) printk(KERN_ERR "%s() failed (errno = %d), NO PCI configuration\n", __func__, result); result = -ENOMEM; - goto failed; + goto fail_pci; } /* Establish encoder defaults here */ @@ -1062,7 +1062,7 @@ int saa7164_encoder_register(struct saa7164_port *port) 100000, ENCODER_DEF_BITRATE); if (hdl->error) { result = hdl->error; - goto failed; + goto fail_hdl; } port->std = V4L2_STD_NTSC_M; @@ -1080,7 +1080,7 @@ int saa7164_encoder_register(struct saa7164_port *port) printk(KERN_INFO "%s: can't allocate mpeg device\n", dev->name); result = -ENOMEM; - goto failed; + goto fail_hdl; } port->v4l_device->ctrl_handler = hdl; @@ -1091,10 +1091,7 @@ int saa7164_encoder_register(struct saa7164_port *port) if (result < 0) { printk(KERN_INFO "%s: can't register mpeg device\n", dev->name); - /* TODO: We're going to leak here if we don't dealloc - The buffers above. The unreg function can't deal wit it. - */ - goto failed; + goto fail_reg; } printk(KERN_INFO "%s: registered device video%d [mpeg]\n", @@ -1116,9 +1113,14 @@ int saa7164_encoder_register(struct saa7164_port *port) saa7164_api_set_encoder(port); saa7164_api_get_encoder(port); + return 0; - result = 0; -failed: +fail_reg: + video_device_release(port->v4l_device); + port->v4l_device = NULL; +fail_hdl: + v4l2_ctrl_handler_free(hdl); +fail_pci: return result; } -- 2.30.2