Received: by 10.213.65.68 with SMTP id h4csp868616imn; Tue, 27 Mar 2018 10:14:57 -0700 (PDT) X-Google-Smtp-Source: AIpwx4+5kfmnbS2YIKLNY0CGfO8wGVUFQgpiP4logmNGIsJqA318dmNBx07Kuw8joq7FQmMubjzQ X-Received: by 2002:a17:902:6884:: with SMTP id i4-v6mr147814plk.259.1522170897370; Tue, 27 Mar 2018 10:14:57 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1522170897; cv=none; d=google.com; s=arc-20160816; b=nEjOYQ0cY/gi8ylsCw052xODVGGlh17aNO8NBunF8d8Ks6JbwktyzpMEwkpr7FMpEx Ye5PekgC3vS7Yvg1mgWW4epeOoHpQxyRuYZ3DzcYhitLEkPMsi1cxvelXtdd6OEudKTm lu7Idzw5qI3SgPWdn3IfXWDybxYnFp+o5sEn9ValZR+rGZyqki5295CE79mW+Xh9t95C t7C2/z1WfdLzLPy0q35A0eu3jk4HStYPJFjONGqF39iueD2TjGE6irTlsKokGRmWjrsI 34XWWm48wSnRCr/NCSSIDF+dLZD+QdZWlyjfKsGsdmitYZXD++dbX4dH3S94Hfl//kMd v6qw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:cc:to:subject:message-id:date:from :references:in-reply-to:mime-version:dkim-signature :arc-authentication-results; bh=TxxAKtw2GhXhGWIPE8GvoUrUwadMSBwYpdALGuQhJYE=; b=EBvqV/KkrEc5mDiqe7xQ5ChdJUL131JQqMDh9015Hri1m6cWlC1LpzKCYmkF7LKtZw xj0DeIU6pzqpOacUOfafbJa36Uz9EnDid2wuIHVc1XbLnl1ODk8dFu9nIkV8s83xzEly v27e6IbzMw5q+NNUCJrdiTrrj+mkb0iU4cvU/DSGoDtU4IAiIOIC/jSxfLiz8bV7DJpm W9YStfIMB9/5LzA5RYJT0E+gDGpDNd967a1kh9sXz9JibZCgq8NY7QvPcIyz4ksg/DbU KGud4ZFQUDM7kpBk/mWSRg95e47p5tE3u8ydjB4P+huV995huZa/KB2f3avkHGqATyLl aG5Q== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b=T0rYY0Zp; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id i21si1304196pfk.34.2018.03.27.10.14.42; Tue, 27 Mar 2018 10:14:57 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b=T0rYY0Zp; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1753116AbeC0RNp (ORCPT + 99 others); Tue, 27 Mar 2018 13:13:45 -0400 Received: from mail-wm0-f67.google.com ([74.125.82.67]:33410 "EHLO mail-wm0-f67.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751001AbeC0RNn (ORCPT ); Tue, 27 Mar 2018 13:13:43 -0400 Received: by mail-wm0-f67.google.com with SMTP id o23so10566313wmf.0 for ; Tue, 27 Mar 2018 10:13:42 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=mime-version:in-reply-to:references:from:date:message-id:subject:to :cc; bh=TxxAKtw2GhXhGWIPE8GvoUrUwadMSBwYpdALGuQhJYE=; b=T0rYY0Zpbf6Oy/XP9jnlHXWBuXls2h6oSN1xJ7brJgOjfud0Spry7CYaBvWtuFtmRz a8+Yki2mj1SYEcKm7ZWxjwypsD27nsiDsSw+6SP9NvNPwWcoBb1b+DNkEhF9IRLhDoDY rueWUjiNbp+C4TzeqD4Uty09Kx06GmXZZNuRM= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:in-reply-to:references:from:date :message-id:subject:to:cc; bh=TxxAKtw2GhXhGWIPE8GvoUrUwadMSBwYpdALGuQhJYE=; b=dOyqddy0pV9pY7H2apSgTMlTnWqiFNCA9wupcTVVfV/5pJs1fjBRAdyLCO27DlhjM9 tMx2kCJVSpBdAQHs8cr/UgHS0SYnc2mMbF3bo3GOj8S5LYxlTh1MYV56frVvTsvreuOW u/YJOdbxvxVZENvc/lI8lwiGC/sHw96mOVLPmM7RFfOLwl7HH1DquPQB8PH1SDOTSGf6 7n0/5lTsyA7WDM3oHop9ArzjHTFAlE3oEmvNtbaWm8AY8dWPGUH6yRRY///Z38qfX5yM WHKKVB+3QMs3xsEmLDP1lqi7d61p/3a+G71Pb2G8GbHoEXL9nxpnTgLf5mzVBsLARK+c l6KQ== X-Gm-Message-State: AElRT7G+/IWVfpYr/tTpuvGTpqnZtXHFpi7RprYmtRHB7AOK57jR1TQy GpTEWryCI8yT2NBaJwe/8bkjcmG51zvEPGxmP1Fz8w== X-Received: by 10.80.169.117 with SMTP id m50mr167545edc.242.1522170821992; Tue, 27 Mar 2018 10:13:41 -0700 (PDT) MIME-Version: 1.0 Received: by 10.80.168.165 with HTTP; Tue, 27 Mar 2018 10:13:41 -0700 (PDT) In-Reply-To: <5ABA7111.3020908@gmail.com> References: <5AB9ACDA.9090207@gmail.com> <5ABA7111.3020908@gmail.com> From: Mathieu Poirier Date: Tue, 27 Mar 2018 11:13:41 -0600 Message-ID: Subject: Re: [PATCH] coresight: use put_device() instead of kfree() To: arvindY Cc: linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org Content-Type: text/plain; charset="UTF-8" Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On 27 March 2018 at 10:28, arvindY wrote: > > > On Tuesday 27 March 2018 09:37 PM, Mathieu Poirier wrote: >> >> On 26 March 2018 at 20:30, arvindY wrote: >>> >>> >>> On Tuesday 27 March 2018 03:16 AM, Mathieu Poirier wrote: >>>> >>>> drivers/hwtracing/coresight/coresight.c >>>> On 18 March 2018 at 01:38, Arvind Yadav >>>> wrote: >>>>> >>>>> Never directly free @dev after calling device_register(), even >>>>> if it returned an error. Always use put_device() to give up the >>>>> reference initialized. >>>>> >>>>> Signed-off-by: Arvind Yadav >>>>> --- >>>>> drivers/hwtracing/coresight/coresight.c | 8 ++++---- >>>>> 1 file changed, 4 insertions(+), 4 deletions(-) >>>>> >>>>> diff --git a/drivers/hwtracing/coresight/coresight.c >>>>> b/drivers/hwtracing/coresight/coresight.c >>>>> index 389c4ba..132dfbc 100644 >>>>> --- a/drivers/hwtracing/coresight/coresight.c >>>>> +++ b/drivers/hwtracing/coresight/coresight.c >>>>> @@ -1026,8 +1026,10 @@ struct coresight_device >>>>> *coresight_register(struct >>>>> coresight_desc *desc) >>>>> dev_set_name(&csdev->dev, "%s", desc->pdata->name); >>>>> >>>>> ret = device_register(&csdev->dev); >>>>> - if (ret) >>>>> - goto err_device_register; >>>>> + if (ret) { >>>>> + put_device(&csdev->dev); >>>>> + goto err_kzalloc_csdev; >>>>> + } >>>>> >>>>> mutex_lock(&coresight_mutex); >>>>> >>>>> @@ -1038,8 +1040,6 @@ struct coresight_device >>>>> *coresight_register(struct >>>>> coresight_desc *desc) >>>>> >>>>> return csdev; >>>>> >>>>> -err_device_register: >>>>> - kfree(conns); >>>> >>>> Apologies for the late reply, I was travelling. >>>> >>>> I suggest to simply replace kfree() with put_device() in order to >>>> concentrate the error handling code in the same area and make sure >>>> that memory allocated for @conns and @refcnts is freed. >>>> >>>> Thanks, >>>> Mathieu >>> >>> >>> If you will see the comment for device_register(drivers/base/core.c) >>> there is mentioned that 'NOTE: _Never_ directly free @dev >>> after calling this function, even if it returned an error! >>> Always use put_device() to give up the reference initialized >>> in this function instead. >> >> I have read the notice and in full agreement with the put_device() part. >> >>> Here put_device() will decrement the last reference and then >>> free the memory by calling dev->release. Internally >>> put_device() -> kobject_put() -> kobject_cleanup() which is >>> responsible to call 'dev -> release' and also free other kobject >>> resources. >> >> Memory would be automatically freed if it would have been allocated >> with the devm_XYZ() helpers but it is not the case here. As such it >> has to be freed explicitly. Reading your patch again (and the jetlag >> somewhat fading) I think you've done the right thing except for the >> "goto" that should still point to "err_device_register". >> > > Take rest :) > 'goto' should not point to "err_device_register" because > put_device() will call 'dev->release' which is coresight_device_release(). > It's release @conns, @refcnt and @csdev . If we will keep same 'goto > then kfree() will be redundant for all. You are correct - your patch does exactly what should be done. > > >>> we should always avoid kfree() if device_register() >>> returned an error. Otherwise it'll not do clean up of other >>> kobject resources. >>> >>> ~arvind >>>>> >>>>> err_kzalloc_conns: >>>>> kfree(refcnts); >>>>> err_kzalloc_refcnts: >>>>> -- >>>>> 2.7.4 >>>>> >