From: Dan Carpenter <dan.carpenter@oracle.com>
To: "Michal Suchánek" <msuchanek@suse.de>
Cc: "SF Markus Elfring" <elfring@users.sourceforge.net>,
linux-integrity@vger.kernel.org, linuxppc-dev@lists.ozlabs.org,
"Andy Shevchenko" <andriy.shevchenko@linux.intel.com>,
"Benjamin Herrenschmidt" <benh@kernel.crashing.org>,
"Corentin Labbe" <clabbe.montjoie@gmail.com>,
"Jarkko Sakkinen" <jarkko.sakkinen@linux.intel.com>,
"Jason Gunthorpe" <jgunthorpe@obsidianresearch.com>,
"Jerry Snitselaar" <jsnitsel@redhat.com>,
"Kenneth Goldman" <kgold@linux.vnet.ibm.com>,
"Michael Ellerman" <mpe@ellerman.id.au>,
"Nayna Jain" <nayna@linux.vnet.ibm.com>,
"Paul Mackerras" <paulus@samba.org>,
"Peter Hüwe" <PeterHuewe@gmx.de>,
"Stefan Berger" <stefanb@linux.vnet.ibm.com>,
kernel-janitors@vger.kernel.org,
LKML <linux-kernel@vger.kernel.org>
Subject: Re: [PATCH 4/4] char/tpm: Less checks in tpm_ibmvtpm_probe() after error detection
Date: Thu, 19 Oct 2017 16:36:46 +0300 [thread overview]
Message-ID: <20171019133646.gu7qv2tywfk4tcxj@mwanda> (raw)
In-Reply-To: <20171019135632.4af42743@kitsune.suse.cz>
On Thu, Oct 19, 2017 at 01:56:32PM +0200, Michal Suchanek wrote:
>
> I think a single cleanup section is better than many labels that just
> avoid a single null check.
>
I am not a big advocate of churn, but one err style error handling is
really bug prone.
I'm dealing with static analysis so most of the bugs I see are error
handling bugs. That's because error handling is hard to test but easy
for static analysis. One err style error handling is the worst because
you get things like:
fail:
kfree(foo->bar);
kfree(foo);
Oops, foo->bar is a NULL dereference. And generally, it's a bad thing
to free things that haven't been allocated so, for example, I see
refcounting bugs in error handling paths as well where we decrement
something that wasn't incremented. Freeing everything is more
complicated than just freeing one specific thing the way standard kernel
error handling works.
> As long as you can tell easily which resources were already allocated
> and need to be freed it is saner to keep only one cleanup section.
>
Sure, if the function is simple and short then the error handling is
normally simple and short. This is true for any style of error
handling.
> If the code doing the allocation is changed in the future the single
> cleanup can stay whereas multiple labels have to be rewritten again.
No, they don't unless you choose bad label names. Perhaps numbered
labels? We don't get a lot of those in the kernel any more. Label
name should be based on what the label does. Often I see bad label
names like generic labels:
foo = kmalloc();
if (!foo)
goto out;
What is out going to do? Another common anti-pattern is come-from
labels:
foo = kmalloc();
if (!foo)
goto kmalloc_failed;
Obviously, we can see from the if statement that the alloc failed and
you *just* know the next line is going to be is going to be:
if (invalid)
goto kmalloc_failed;
Which is wrong because kmalloc didn't fail... But if the label name is
based on what it does then, when you add or a remove an allocation, you
just have to edit the one thing. It's very simple:
+ foo = new_alloc();
+ if (!foo)
+ return -ENOMEM;
+
bar = old_alloc();
- if (!bar)
- return -ENOMEM;
+ if (!bar) {
+ ret -ENOMEM;
+ goto free_foo;
[ snip ]
free_whatever:
free(whatever);
+free_foo:
+ free(foo);
return ret;
>
> Also just changing this just for the sake of code style does not seem
> worth it whatever style you prefer.
True.
regards,
dan carpenter
next prev parent reply other threads:[~2017-10-19 13:38 UTC|newest]
Thread overview: 86+ messages / expand[flat|nested] mbox.gz Atom feed top
2017-10-16 17:30 [PATCH 0/4] char-TPM: Adjustments for ten function implementations SF Markus Elfring
2017-10-16 17:31 ` [PATCH 1/4] char/tpm: Delete an error message for a failed memory allocation in tpm_ascii_bios_measurements_show() SF Markus Elfring
2017-10-16 17:32 ` [PATCH 2/4] char/tpm: Delete an error message for a failed memory allocation in tpm_ibmvtpm_probe() SF Markus Elfring
2017-10-16 17:33 ` [PATCH 3/4] char/tpm: Improve a size determination in nine functions SF Markus Elfring
2017-10-17 11:03 ` Andy Shevchenko
2017-10-17 11:50 ` Alexander.Steffen
2017-10-17 12:52 ` Mimi Zohar
2017-10-17 12:58 ` Julia Lawall
2017-10-17 15:17 ` Mimi Zohar
2017-10-17 15:29 ` Julia Lawall
2017-10-18 9:16 ` Alexander.Steffen
2017-10-17 18:41 ` SF Markus Elfring
2017-10-17 19:28 ` Mimi Zohar
2017-10-17 20:04 ` SF Markus Elfring
2017-10-17 19:36 ` Andy Shevchenko
2017-10-17 20:24 ` SF Markus Elfring
2017-10-18 14:57 ` Jarkko Sakkinen
2017-10-18 15:22 ` SF Markus Elfring
2017-10-18 15:59 ` Jarkko Sakkinen
2017-10-18 16:43 ` SF Markus Elfring
2017-10-18 17:18 ` Jarkko Sakkinen
2017-10-18 17:22 ` Jarkko Sakkinen
2017-10-18 17:54 ` SF Markus Elfring
2017-10-18 17:48 ` SF Markus Elfring
2017-10-18 17:54 ` Jerry Snitselaar
2017-10-18 18:11 ` char/tpm: Delete an error message for a failed memory allocation in tpm_…() SF Markus Elfring
2017-10-18 18:03 ` char/tpm: Improve a size determination in nine functions Andy Shevchenko
2017-10-19 12:04 ` Michal Suchánek
2017-10-19 12:16 ` Jarkko Sakkinen
2017-10-17 15:22 ` [PATCH 3/4] " Alexander.Steffen
[not found] ` <1508245325.16112.478.camel@linux.intel.com>
2017-10-18 14:52 ` Jarkko Sakkinen
2017-10-18 14:48 ` Jarkko Sakkinen
2017-10-19 16:58 ` Alexander.Steffen
2017-10-20 9:01 ` Jarkko Sakkinen
2017-10-20 10:23 ` Jarkko Sakkinen
2017-10-20 12:03 ` Alexander.Steffen
2017-10-23 13:20 ` Dan Carpenter
2017-10-18 14:40 ` Jarkko Sakkinen
2017-10-16 17:34 ` [PATCH 4/4] char/tpm: Less checks in tpm_ibmvtpm_probe() after error detection SF Markus Elfring
2017-10-19 11:56 ` Michal Suchánek
2017-10-19 12:36 ` SF Markus Elfring
2017-10-19 12:46 ` Michal Suchánek
2017-10-19 14:26 ` Dan Carpenter
2017-10-19 13:36 ` Dan Carpenter [this message]
2017-10-19 14:16 ` Michal Suchánek
2017-10-19 14:59 ` Dan Carpenter
2017-10-19 20:44 ` SF Markus Elfring
2017-10-16 18:31 ` [PATCH 0/4] char-TPM: Adjustments for ten function implementations Jarkko Sakkinen
2017-10-16 18:35 ` Jarkko Sakkinen
2017-10-16 20:44 ` SF Markus Elfring
2017-10-18 15:04 ` Jarkko Sakkinen
2017-10-18 15:43 ` SF Markus Elfring
2017-10-16 22:46 ` [PATCH 0/4] " Joe Perches
2017-10-17 7:20 ` SF Markus Elfring
2017-10-17 8:51 ` Dan Carpenter
2017-10-17 8:56 ` Julia Lawall
2017-10-17 9:44 ` Dan Carpenter
2017-10-17 10:11 ` Julia Lawall
2017-10-17 11:52 ` Mimi Zohar
2017-10-18 3:18 ` Michael Ellerman
2017-10-19 13:16 ` Mimi Zohar
2017-10-19 16:08 ` Circumstances for using the tag “Fixes” (or not) SF Markus Elfring
2017-10-17 12:26 ` [PATCH 0/4] char-TPM: Adjustments for ten function implementations Michael Ellerman
2017-10-18 15:07 ` Jarkko Sakkinen
2017-10-17 9:25 ` SF Markus Elfring
[not found] ` <1508255833.3129.33.camel@HansenPartnership.com>
2017-10-17 16:32 ` SF Markus Elfring
2017-10-17 22:43 ` Joe Perches
2017-10-18 9:00 ` SF Markus Elfring
2017-10-18 9:18 ` Joe Perches
2017-10-18 9:50 ` Alexander.Steffen
2017-10-18 10:00 ` Julia Lawall
2017-10-18 10:28 ` Joe Perches
2017-10-18 11:00 ` Adjusting further size determinations? SF Markus Elfring
2017-10-18 11:49 ` Joe Perches
2017-10-18 12:07 ` SF Markus Elfring
2017-10-18 12:58 ` David Laight
2017-10-18 13:32 ` Julia Lawall
2017-10-18 13:50 ` SF Markus Elfring
2017-10-18 10:44 ` char-TPM: Adjustments for ten function implementations Alexander.Steffen
2017-10-18 10:49 ` Joe Perches
2017-10-18 11:07 ` Alexander.Steffen
2017-10-18 9:55 ` SF Markus Elfring
2017-10-18 18:27 ` Michal Suchánek
2017-10-18 15:10 ` [PATCH 0/4] " Jarkko Sakkinen
2017-10-18 16:09 ` James Bottomley
2017-10-18 17:13 ` Jarkko Sakkinen
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=20171019133646.gu7qv2tywfk4tcxj@mwanda \
--to=dan.carpenter@oracle.com \
--cc=PeterHuewe@gmx.de \
--cc=andriy.shevchenko@linux.intel.com \
--cc=benh@kernel.crashing.org \
--cc=clabbe.montjoie@gmail.com \
--cc=elfring@users.sourceforge.net \
--cc=jarkko.sakkinen@linux.intel.com \
--cc=jgunthorpe@obsidianresearch.com \
--cc=jsnitsel@redhat.com \
--cc=kernel-janitors@vger.kernel.org \
--cc=kgold@linux.vnet.ibm.com \
--cc=linux-integrity@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linuxppc-dev@lists.ozlabs.org \
--cc=mpe@ellerman.id.au \
--cc=msuchanek@suse.de \
--cc=nayna@linux.vnet.ibm.com \
--cc=paulus@samba.org \
--cc=stefanb@linux.vnet.ibm.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox