Received: by 2002:a05:6a10:206:0:0:0:0 with SMTP id 6csp3463454pxj; Sun, 20 Jun 2021 22:09:53 -0700 (PDT) X-Google-Smtp-Source: ABdhPJzgI2YNIdebe2bxuC5VEc2A/uAhvFDx/o+T7RvMdMJ3gR2M2beRMvuIyXcQRGMdtandrJgw X-Received: by 2002:a92:cb02:: with SMTP id s2mr17029224ilo.256.1624252192889; Sun, 20 Jun 2021 22:09:52 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1624252192; cv=none; d=google.com; s=arc-20160816; b=RuZ2O02+rqwWAiceYaNIWrNUcf9gYl82sKvXOtkFWXtyc3Hyo6riJjWszjvIXS2trf wsSryrxSszTpHrFsBC0YX1aFad0TuS69Vn61GgiqdN+oiSaVk6gXOIIW1K7AG5zduDdB LNlaQNH5516Ni7/0WNfKlygxex/QSLEqaNFQUmwGQXOhtbY4viEj0rvjKZcK1Z+cdDaj MREXKsNatnBjEAVnJ48wbobxapry38c63th+WjUtqXpAzcf9RalxoSPU7QdNwTI6gz5u yvZ+uAT6kSAaU06Yzhr9dxqIEx+RH4VnjYDV1F6BcnwPRPBb6k5VcXVr1DqUTjyEltXN 3/RQ== 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 :references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature; bh=kMUpJT6SJolW0ymOF8PtGlnKamkYOUcs0svNbBgMhJY=; b=djJVq/V8ws3JYV4/N5g30T3l6V0awlc33W0krtQu6OVPdIchxPTViKXMCUqxPpkVDA JmnmMp4OJYm68I1IcvRkrHgUp6qzOgrXzQ6MH2eLftkZX5rRC+RSmFT8/CtxYmpoVV1L ldnNUlm4LEZJdCrQpKiy/ztFC/99EuAnm4LHXbZAr09vAEBJSDJKOiYBgGXFoc1jqdXl UpvkxXUuIfp2Y8pX9kCv6yJk+bdg7MufwgciGLIojnL9E7bwv4Sp0oF93bPJl47LpxOx G3aQDaxT3PGGi4QiLrGxV65Em1sBv/EG8R0osjds7OVQz+Qw9uq/gLyMLtBTe/NB/Gim DEdA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@gmail.com header.s=20161025 header.b=Nudnp+zb; 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=QUARANTINE dis=NONE) header.from=gmail.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id q3si19163763jac.31.2021.06.20.22.09.41; Sun, 20 Jun 2021 22:09:52 -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=@gmail.com header.s=20161025 header.b=Nudnp+zb; 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=QUARANTINE dis=NONE) header.from=gmail.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S229937AbhFUFKd (ORCPT + 99 others); Mon, 21 Jun 2021 01:10:33 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:44434 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229789AbhFUFKb (ORCPT ); Mon, 21 Jun 2021 01:10:31 -0400 Received: from mail-pl1-x62d.google.com (mail-pl1-x62d.google.com [IPv6:2607:f8b0:4864:20::62d]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id D62A9C061756; Sun, 20 Jun 2021 22:08:15 -0700 (PDT) Received: by mail-pl1-x62d.google.com with SMTP id b1so1097575pls.3; Sun, 20 Jun 2021 22:08:15 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=kMUpJT6SJolW0ymOF8PtGlnKamkYOUcs0svNbBgMhJY=; b=Nudnp+zb14BLhJ0FHsvMYBCcL4Wbt6dELJeu3PBbqKQVXuriixTJmJETbQG0lguS9C 47EygArUq/9STsCyOZBucXahoKt4wL3Qb6atUgE3uwDNTBqulskplXOi4Tpgn1ACAomW 6lH/bR4g8d/891nVEa9+0BJY8UoNTGpr5JMI1MpcElzJGGMVwe3vJWHKY4UqEoYkr+IB WdFXAZ+0GF12KUeAdO0Ov9yomRQqmetesnAvoR1TMCkDHdWJr2d0Vouo40ktpZBsBfQU WtaJY+uw7Quni3TubnodwriNg3mYm52KdRmh66iubwN1LpquGHL54sHlBYtGggXMUuwo n2DQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=kMUpJT6SJolW0ymOF8PtGlnKamkYOUcs0svNbBgMhJY=; b=k6JHznv2+SeFVI45ozkMMgOtDNWOI0VVEHp+ohv7BXH+NSq6sKDMqm2VBL44jnZc/Q 7cZN15xpMjN/KsxfQRyy+MgfWWS+Oc43WTTppFigZ1Xa5vH0Eo7mfQt3Ycl/WmLUYgcP SuwjUBCIdF60pMxUfIXkdoh19HlPN2P850ioXeEdQbND1NO+cE+h5R5m/XSrVm+kPDgk dKidzvAQ3PBfXdF0bgCbtS26Dzv2Hp2GOSGDVE2dXNvp8W7LAZfRPrmO7mlGaMu3014f zLdk9S47jh9h4LSHzIh2vaUjU3lfxrD6jqGypkmHFHtmqU2mFSxfcgKqW6CSM55CFl39 Z3jQ== X-Gm-Message-State: AOAM533ICHUKxFudw3srMe8YR4HOA7uRLsAsdx4GsVAcze3y2vnRjUjS 3StW9zMQ5b6nJc+uLlJIOwY= X-Received: by 2002:a17:90b:1bc4:: with SMTP id oa4mr25633384pjb.18.1624252095393; Sun, 20 Jun 2021 22:08:15 -0700 (PDT) Received: from localhost.localdomain ([45.135.186.71]) by smtp.gmail.com with ESMTPSA id b5sm11808783pgh.41.2021.06.20.22.08.13 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 20 Jun 2021 22:08:14 -0700 (PDT) From: Dongliang Mu To: Mauro Carvalho Chehab , Takashi Iwai , Sean Young Cc: Dongliang Mu , Mauro Carvalho Chehab , linux-media@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH 3/3] media: dvb-usb: Fix error handling in dvb_usb_i2c_init Date: Mon, 21 Jun 2021 13:07:28 +0800 Message-Id: <20210621050729.3898275-3-mudongliangabcd@gmail.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20210621050729.3898275-1-mudongliangabcd@gmail.com> References: <20210621050729.3898275-1-mudongliangabcd@gmail.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org In dvb_usb_i2c_init, if i2c_add_adapter fails, it only prints an error message, and then continues to set DVB_USB_STATE_I2C. This affects the logic of dvb_usb_i2c_exit, which leads to that, the deletion of i2c_adap even if the i2c_add_adapter fails. Fix this by returning at the failure of i2c_add_adapter and then move dvb_usb_i2c_exit out of the error handling code of dvb_usb_i2c_init. Fixes: 13a79f14ab28 ("media: dvb-usb: Fix memory leak at error in dvb_usb_device_init()") Signed-off-by: Dongliang Mu --- drivers/media/usb/dvb-usb/dvb-usb-i2c.c | 9 +++++++-- drivers/media/usb/dvb-usb/dvb-usb-init.c | 3 ++- 2 files changed, 9 insertions(+), 3 deletions(-) diff --git a/drivers/media/usb/dvb-usb/dvb-usb-i2c.c b/drivers/media/usb/dvb-usb/dvb-usb-i2c.c index 2e07106f4680..bc4b2abdde1a 100644 --- a/drivers/media/usb/dvb-usb/dvb-usb-i2c.c +++ b/drivers/media/usb/dvb-usb/dvb-usb-i2c.c @@ -17,7 +17,8 @@ int dvb_usb_i2c_init(struct dvb_usb_device *d) if (d->props.i2c_algo == NULL) { err("no i2c algorithm specified"); - return -EINVAL; + ret = -EINVAL; + goto err; } strscpy(d->i2c_adap.name, d->desc->name, sizeof(d->i2c_adap.name)); @@ -27,11 +28,15 @@ int dvb_usb_i2c_init(struct dvb_usb_device *d) i2c_set_adapdata(&d->i2c_adap, d); - if ((ret = i2c_add_adapter(&d->i2c_adap)) < 0) + ret = i2c_add_adapter(&d->i2c_adap); + if (ret < 0) { err("could not add i2c adapter"); + goto err; + } d->state |= DVB_USB_STATE_I2C; +err: return ret; } diff --git a/drivers/media/usb/dvb-usb/dvb-usb-init.c b/drivers/media/usb/dvb-usb/dvb-usb-init.c index 21ad51be4820..ae3f76787279 100644 --- a/drivers/media/usb/dvb-usb/dvb-usb-init.c +++ b/drivers/media/usb/dvb-usb/dvb-usb-init.c @@ -147,6 +147,7 @@ static int dvb_usb_exit(struct dvb_usb_device *d) d->props.priv_destroy(d); kfree(d->priv); + d->priv = NULL; return 0; } @@ -193,8 +194,8 @@ static int dvb_usb_init(struct dvb_usb_device *d, short *adapter_nums) err_adapter_init: dvb_usb_adapter_exit(d); -err_i2c_init: dvb_usb_i2c_exit(d); +err_i2c_init: if (d->priv && d->props.priv_destroy) d->props.priv_destroy(d); err_priv_init: -- 2.25.1