Received: by 10.213.65.68 with SMTP id h4csp809191imn; Tue, 27 Mar 2018 09:09:17 -0700 (PDT) X-Google-Smtp-Source: AG47ELsP72wtUZbxCK0fkl/2LIeZMqCbATNWVrG9U/fumJkUasVPngAhplsepeDkr9EpQj9K+cbi X-Received: by 10.101.70.203 with SMTP id n11mr32183442pgr.166.1522166956947; Tue, 27 Mar 2018 09:09:16 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1522166956; cv=none; d=google.com; s=arc-20160816; b=puHma44MnqF3U84RgzchH6i8GkWN3DY00vqgbCToPbqsgkl4oe3x1hO+Xb4kekqPdf 1UmP/x+lIF0kRwFXzdw3/jaVBNngw6ZJfBrZmvrfziIqkZe2baY9stosdNCdkhE6EyY8 BXvSGoKY5DodAcfu4//9nECmSam/UYbL6VKX/9X4ScbJOE6cdcok9YW7YmjhvaUEw5jK Eu1X/BTtrm0IkQUfBZi6YxhIYr4PrbUqT+yjHtIctGQL7wG76DVxvHdevGXJEw/yBbxP bpSqfvmjmiEJcUUsvrzs4Z22ZGMqj+ozEl6zu361OQJv77tzXc1DcVUaQabgHzVvGW11 tVmg== 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=7dLRKTs2LWbtFVTEEsOgPwyFNyP7WMaayYTyc/RGm6I=; b=CutFnOXeLEA1tCQ6dzleMIltBtXMOboptQ/Yoitvo/He4zXPRrgGkxuCmr1t6Su+5E BSs8PKqn7hmrCpBUp1/AvYYWfACmKWT5Mm/dCh7+CvKLUTc6OPKuqeK/ph6cZxbjix87 rakKxh6w7cZDsD+l/QUj6W8upVIK0kGyvwYe15h/HHHBblyzrY1a14VIrmLijaz6Fi1W 9ItDm+FwygCcVkqChpsR7ftEqmQ37Ak/6JFCKrMgbaAU+uA+vz60/F2qV4GN8rF7ZN3V hM+UQoi19aehLJq6dxZUiUHfv4Ys1fHTy06mmI64983ErkfZyY7f+lJIzBgTRT+V+yDj 3l3A== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b=BQtHJR0s; 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 s13si140088pgc.250.2018.03.27.09.08.59; Tue, 27 Mar 2018 09:09:16 -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=BQtHJR0s; 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 S1752931AbeC0QHN (ORCPT + 99 others); Tue, 27 Mar 2018 12:07:13 -0400 Received: from mail-wm0-f65.google.com ([74.125.82.65]:52077 "EHLO mail-wm0-f65.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752559AbeC0QHG (ORCPT ); Tue, 27 Mar 2018 12:07:06 -0400 Received: by mail-wm0-f65.google.com with SMTP id v21so22715315wmc.1 for ; Tue, 27 Mar 2018 09:07:06 -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=7dLRKTs2LWbtFVTEEsOgPwyFNyP7WMaayYTyc/RGm6I=; b=BQtHJR0sRwxmnnLgGUI3bRTfcwQ+/U4AmIF3i9KEBdDlNUCz+kZM+HBa+6Mg/cj9Iy xZry0PQ0A9+dZ5oQWdUEh9KYeFxF74AFDMYV1c/V/pcKZVpH61tz6ElEnXdoHfQcriUR 7i++iOGRDMHI3QaAiAxs1ECavM5mtGfDCekI4= 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=7dLRKTs2LWbtFVTEEsOgPwyFNyP7WMaayYTyc/RGm6I=; b=UC9UuCOiclG+Geb1PoRShfIeoab/wvfltSh+1BpuWUhMccgnEbEcXDKgK3JV8k7goZ HykO9pyWYiHaisR5u2M+HdAvedJyIuiJZJCFskaPeHlW7JGG2hgrdBwne7wVYK5pix46 l1t1wJxBcJsgCn15H9dd3U9xhZ3hhdVJy22XSYHfZTTEfoh0YKHnl14Y9Q4KRxehLL3O fFtlvDVuYayYmfJCneKmt1k3CVYIJFMP7ChwXwV1cfCBfq/4wT6nTA2E2UahkeFlO7j8 kt22Gg/RkZ92lqvTd5ooPQ/PTbNbaZyo3NerhoHNNvzgsKf9Iuz7mCSFiZuBcoTslAoS WXiQ== X-Gm-Message-State: AElRT7Gj8snJ/mSRGFrPzkpaVPmuOJ5QLeWNJ6i0AkAE8xye3Oonb/ms JoMVfcHw5KB0BiMZM6hB71vBqgLeZ1I9ymRSd7NTRbuZ X-Received: by 10.80.192.5 with SMTP id r5mr3416101edb.12.1522166825509; Tue, 27 Mar 2018 09:07:05 -0700 (PDT) MIME-Version: 1.0 Received: by 10.80.168.165 with HTTP; Tue, 27 Mar 2018 09:07:04 -0700 (PDT) In-Reply-To: <5AB9ACDA.9090207@gmail.com> References: <5AB9ACDA.9090207@gmail.com> From: Mathieu Poirier Date: Tue, 27 Mar 2018 10:07:04 -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 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". >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 >>> >