lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Date:	Thu, 24 Feb 2011 19:08:27 +0000
From:	Ilia Mirkin <imirkin@...m.mit.edu>
To:	Steven Rostedt <rostedt@...dmis.org>
Cc:	Greg KH <gregkh@...e.de>, devel@...verdev.osuosl.org,
	linux-kernel@...r.kernel.org
Subject: Re: [PATCH 1/2] staging: remove null checks before kfree

On Thu, Feb 24, 2011 at 5:25 PM, Steven Rostedt <rostedt@...dmis.org> wrote:
> On Thu, 2011-02-24 at 09:06 -0800, Greg KH wrote:
>> On Thu, Feb 24, 2011 at 11:08:29AM -0500, Steven Rostedt wrote:
>> > On Tue, Feb 22, 2011 at 03:53:40AM -0500, Ilia Mirkin wrote:
>> > > This patch was created with the following semantic patch:
>> > >
>> > > // <smpl>
>> > > @@
>> > > expression E;
>> > > @@
>> > >
>> > > - if (E != NULL) kfree(E);
>> > > + kfree(E);
>> > > // </smpl>
>> >
>> > OK, so when will we be removing the unlikely() from the implementations
>> > of kfree()?
>> >
>> >     if (unlikely(ZERO_OR_NULL_PTR(block)))
>> >                     return;
>>
>> Have you run the tool that checks for unlikely being true here?  Odds
>> are, even with all of these changes, the large majority of the time
>> kfree is called, it has a valid pointer.
>
> Crap, all my saved output files were in the /tmp directory and has since
> been purged. I can reboot into the unlikely tracing kernel again, but
> that may have to wait. I usually just do that at end of year as a
> cleanup.
>
> I can't remember exactly where kfree came in, but IIRC it was on the
> list. Maybe not that high though.

FWIW my reasoning for doing this was that generally the reason you're
freeing something is because you allocated it, so kfree(NULL) happens
rarely -- error paths, conditional features, etc. If you actually
expect the argument to be NULL often, then you would do something like
if (unlikely(x)) kfree(x). This is done a few times in the core
kernel. I think it makes more sense for kfree to keep the unlikely
since in cold paths it won't matter and in hot paths where it is often
NULL, there should be a conditional at the call site. [I'm sure you'll
note the lack of an attached benchmark... this is just what makes
sense to me.]

  -ilia
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@...r.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ