All of lore.kernel.org
 help / color / mirror / Atom feed
From: Lukas Wunner <lukas@wunner.de>
To: Jonathan Cameron <jic23@kernel.org>
Cc: linux-iio@vger.kernel.org,
	"Rafael J . Wysocki" <rafael@kernel.org>,
	"Len Brown" <lenb@kernel.org>,
	linux-acpi@vger.kernel.org,
	"Andy Shevchenko" <andriy.shevchenko@linux.intel.com>,
	"Greg Kroah-Hartman" <gregkh@linuxfoundation.org>,
	"Daniel Scally" <djrscally@gmail.com>,
	"Heikki Krogerus" <heikki.krogerus@linux.intel.com>,
	"Sakari Ailus" <sakari.ailus@linux.intel.com>,
	"Nuno Sá" <nuno.sa@analog.com>,
	"Cosmin Tanislav" <cosmin.tanislav@analog.com>,
	"Mihail Chindris" <mihail.chindris@analog.com>,
	"Rasmus Villemoes" <linux@rasmusvillemoes.dk>,
	"Tomislav Denis" <tomislav.denis@avl.com>,
	"Marek Vasut" <marex@denx.de>,
	"Olivier Moysan" <olivier.moysan@foss.st.com>,
	"Fabrice Gasnier" <fabrice.gasnier@foss.st.com>,
	"Lad Prabhakar" <prabhakar.mahadev-lad.rj@bp.renesas.com>,
	"Dmitry Baryshkov" <dmitry.baryshkov@linaro.org>,
	"Marijn Suijten" <marijn.suijten@somainline.org>,
	"Marius Cristea" <marius.cristea@microchip.com>,
	"Ibrahim Tilki" <Ibrahim.Tilki@analog.com>,
	"Jonathan Cameron" <Jonathan.Cameron@huawei.com>
Subject: Re: [PATCH 01/13] device property: Add cleanup.h based fwnode_handle_put() scope based cleanup.
Date: Sun, 21 Jan 2024 19:06:03 +0100	[thread overview]
Message-ID: <20240121180603.GA13937@wunner.de> (raw)
In-Reply-To: <20240114172009.179893-2-jic23@kernel.org>

On Sun, Jan 14, 2024 at 05:19:57PM +0000, Jonathan Cameron wrote:
> This allows the following
> 
> struct fwnode_handle *child __free(fwnode_handle) = NULL;
> 
> device_for_each_child_node(dev, child) {
> 	if (false)
> 		return -EINVAL;
> }
> 
> without the fwnode_handle_put() call which tends to complicate early
> exits from such loops and lead to resource leak bugs.
> 
> Can also be used where the fwnode_handle was obtained from a call
> such as fwnode_find_reference() as it will safely do nothing if
> IS_ERR() is true.
> 
> Signed-off-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
> ---
> v1: Thanks to Andy for reviewing the RFC.
>     Add check for if (!IS_ERR_OR_NULL(_T)) to allow the compiler to optimize
>     cases where it knows the passed in parameter is NULL or an error pointer.

Heads-up:  Using IS_ERR_OR_NULL() in DEFINE_FREE() macros bloats
the code with additional IS_ERR() checks and NULL pointer checks.

See the detailed explanation in this patch which adds a DEFINE_FREE()
macro for x509_free_certificate():

https://lore.kernel.org/all/70ecd3904a70d2b92f8f1e04365a2b9ce66fac25.1705857475.git.lukas@wunner.de/

I'm wondering if a solution might be to stop returning IS_ERR()
from "constructors" such as x509_cert_parse() and instead assign
the created "object" (x509_certificate) to a call-by-reference
pointer and return an integer.  If the returned integer is not 0,
inhibit "destruction" of the "object" with no_free_ptr().

Thoughts?


> +DEFINE_FREE(fwnode_handle, struct fwnode_handle *,
> +	    if (!IS_ERR_OR_NULL(_T)) fwnode_handle_put(_T))

If you do not align the "if" to the opening parenthesis,
checkpatch --strict complains:
"CHECK: Alignment should match open parenthesis"

If you do align to the opening parenthesis, it complains:
"WARNING: Statements should start on a tabstop"

I chose the latter for x509_free_certificate() for aesthetic reasons.

Either way, checkpatch still emits:

ERROR: trailing statements should be on next line"
#183: FILE: crypto/asymmetric_keys/x509_parser.h:49:
+	    if (!IS_ERR_OR_NULL(_T)) x509_free_certificate(_T))

Can't make it happy with these new-fangled DEFINE_FREE macros it seems. :(

Thanks,

Lukas

  parent reply	other threads:[~2024-01-21 18:06 UTC|newest]

Thread overview: 24+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2024-01-14 17:19 [PATCH 00/13] device property / IIO: Use cleanup.h magic for fwnode_handle_put() handling Jonathan Cameron
2024-01-14 17:19 ` [PATCH 01/13] device property: Add cleanup.h based fwnode_handle_put() scope based cleanup Jonathan Cameron
2024-01-21 12:28   ` Andy Shevchenko
2024-01-21 16:38     ` Jonathan Cameron
2024-01-21 18:06   ` Lukas Wunner [this message]
2024-01-21 18:20     ` Lukas Wunner
2024-01-14 17:19 ` [PATCH 02/13] iio: adc: max11410: Use __free(fwnode_handle) to replace fwnode_handle_put() calls Jonathan Cameron
2024-01-14 17:19 ` [PATCH 03/13] iio: adc: mcp3564: " Jonathan Cameron
2024-01-14 17:20 ` [PATCH 04/13] iio: adc: qcom-spmi-adc5: " Jonathan Cameron
2024-01-14 17:20 ` [PATCH 05/13] iio: adc: rzg2l_adc: " Jonathan Cameron
2024-01-14 17:20 ` [PATCH 06/13] iio: adc: stm32: " Jonathan Cameron
2024-01-14 17:20 ` [PATCH 07/13] iio: adc: ti-ads1015: " Jonathan Cameron
2024-01-14 17:20 ` [PATCH 08/13] iio: adc: ti-ads131e08: " Jonathan Cameron
2024-01-14 17:20 ` [PATCH 09/13] iio: addac: ad74413r: " Jonathan Cameron
2024-01-15 10:17   ` Nuno Sá
2024-02-11 18:53     ` Jonathan Cameron
2024-01-14 17:20 ` [PATCH 10/13] iio: dac: ad3552: " Jonathan Cameron
2024-01-15 10:19   ` Nuno Sá
2024-01-14 17:20 ` [PATCH 11/13] iio: dac: ad5770r: " Jonathan Cameron
2024-01-14 17:20 ` [PATCH 12/13] iio: dac: ltc2688: " Jonathan Cameron
2024-01-15 10:26   ` Nuno Sá
2024-01-14 17:20 ` [PATCH 13/13] iio: temp: ltc2983: " Jonathan Cameron
2024-01-15 10:29   ` Nuno Sá
2024-01-21 12:27 ` [PATCH 00/13] device property / IIO: Use cleanup.h magic for fwnode_handle_put() handling Andy Shevchenko

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20240121180603.GA13937@wunner.de \
    --to=lukas@wunner.de \
    --cc=Ibrahim.Tilki@analog.com \
    --cc=Jonathan.Cameron@huawei.com \
    --cc=andriy.shevchenko@linux.intel.com \
    --cc=cosmin.tanislav@analog.com \
    --cc=djrscally@gmail.com \
    --cc=dmitry.baryshkov@linaro.org \
    --cc=fabrice.gasnier@foss.st.com \
    --cc=gregkh@linuxfoundation.org \
    --cc=heikki.krogerus@linux.intel.com \
    --cc=jic23@kernel.org \
    --cc=lenb@kernel.org \
    --cc=linux-acpi@vger.kernel.org \
    --cc=linux-iio@vger.kernel.org \
    --cc=linux@rasmusvillemoes.dk \
    --cc=marex@denx.de \
    --cc=marijn.suijten@somainline.org \
    --cc=marius.cristea@microchip.com \
    --cc=mihail.chindris@analog.com \
    --cc=nuno.sa@analog.com \
    --cc=olivier.moysan@foss.st.com \
    --cc=prabhakar.mahadev-lad.rj@bp.renesas.com \
    --cc=rafael@kernel.org \
    --cc=sakari.ailus@linux.intel.com \
    --cc=tomislav.denis@avl.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.