mirror of https://lore.kernel.org/lkml/
 help / color / mirror / Atom feed
From: Linus Torvalds <torvalds@linux-foundation.org>
To: Christoph Lameter <clameter@sgi.com>
Cc: akpm@linux-foundation.org, linux-kernel@vger.kernel.org,
	Jeremy Fitzhardinge <jeremy@goop.org>
Subject: Re: SLUB: Return ZERO_SIZE_PTR for kmalloc(0)
Date: Fri, 1 Jun 2007 19:54:57 -0700 (PDT)	[thread overview]
Message-ID: <alpine.LFD.0.98.0706011947030.3957@woody.linux-foundation.org> (raw)
In-Reply-To: <Pine.LNX.4.64.0706011831170.10767@schroedinger.engr.sgi.com>



On Fri, 1 Jun 2007, Christoph Lameter wrote:
>  
> -	if (!x)
> +	if (x <= ZERO_SIZE_PTR)
>  		return;

Btw, this is _not_ safe.

A number of gcc versions have done signed arithmetic on pointers. It's 
insane and stupid, but it happens, and it so happens to work on 
architectures where the point where the sign changes over is not a valid 
pointer area.

On x86, doing signed arithmetic on pointers is a clear and unambiguous 
_bug_ (because a C object really _can_ start in "positive" space and end 
in "negative" pointer space), but I think some gcc versions did it there 
too.

On some other architectures, like x86-64, the virtual memory around the 
magic switch-over point is not mappable, so a C object cannot validly 
straddle the area where positive overflows into negative, and as such a 
compiler _could_ consider pointers to be signed (although I really don't 
see the point).

So when I suggested the uglier

	if ((unsigned long)x <= 16)
		return;

I really did mean to use that ugly cast.. Yours is prettier, but sadly, 
yours is simply not safe: a signed comparison might end up making _all_ 
kernel pointers trigger that test.

			Linus

  parent reply	other threads:[~2007-06-02  2:55 UTC|newest]

Thread overview: 49+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2007-06-02  1:37 Christoph Lameter
2007-06-02  2:09 ` John Anthony Kazos Jr.
2007-06-02  2:15   ` Christoph Lameter
2007-06-02  2:21     ` John Anthony Kazos Jr.
2007-06-02  2:54 ` Linus Torvalds [this message]
2007-06-02  3:06   ` Christoph Lameter
2007-06-02  3:41 ` Andrew Morton
2007-06-02  4:01   ` Christoph Lameter
2007-06-02  4:31     ` Andrew Morton
2007-06-02  4:45       ` Christoph Lameter
2007-06-02  4:54         ` Andrew Morton
2007-06-03 16:17           ` Matt Mackall
2007-06-04 17:59           ` William Lee Irwin III
2007-06-03 16:15         ` Matt Mackall
2007-06-04 14:44           ` Alan Cox
2007-06-04 15:08         ` Pekka Enberg
2007-06-04 16:16           ` Christoph Lameter
2007-06-04 16:22             ` Pekka Enberg
2007-06-04 16:26               ` Linus Torvalds
2007-06-04 16:32                 ` Jeremy Fitzhardinge
2007-06-04 16:37                 ` Pekka Enberg
2007-06-04 16:38                   ` Jeremy Fitzhardinge
2007-06-04 16:43                   ` Roland Dreier
2007-06-04 17:02                     ` Pekka Enberg
2007-06-04 16:48                   ` Linus Torvalds
2007-06-04 18:22                   ` Cyrill Gorcunov
2007-06-04 17:20                 ` Alan Cox
2007-06-04 17:50                   ` Linus Torvalds
2007-06-04 18:05                     ` William Lee Irwin III
2007-06-04 18:47 ` Linus Torvalds
2007-06-04 19:01   ` Christoph Lameter
2007-06-04 19:13     ` Pekka Enberg
2007-06-04 19:14       ` Christoph Lameter
2007-06-04 19:25         ` Pekka Enberg
2007-06-04 22:39           ` Christoph Lameter
2007-06-04 22:53             ` Andrew Morton
2007-06-04 23:09               ` Christoph Lameter
2007-06-05  5:27                 ` Pekka Enberg
2007-06-05 17:23                   ` Christoph Lameter
2007-06-05  8:50                 ` Rene Herman
2007-06-05 12:07                   ` John Anthony Kazos Jr.
2007-06-05 12:54                     ` Rene Herman
2007-06-05 13:58                       ` John Anthony Kazos Jr.
2007-06-05 14:32                         ` Rene Herman
2007-06-05 19:07                           ` Pekka Enberg
2007-06-05 14:40                       ` Jeremy Fitzhardinge
2007-06-05 14:56                         ` Rene Herman
2007-06-06 21:26                           ` Pavel Machek
2007-06-06 21:58                             ` Rene Herman

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=alpine.LFD.0.98.0706011947030.3957@woody.linux-foundation.org \
    --to=torvalds@linux-foundation.org \
    --cc=akpm@linux-foundation.org \
    --cc=clameter@sgi.com \
    --cc=jeremy@goop.org \
    --cc=linux-kernel@vger.kernel.org \
    /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

all inboxes | Powered by JetHome®