linux-mm.kvack.org archive mirror
 help / color / mirror / Atom feed
From: "Larry H." <research@subreption.com>
To: Peter Zijlstra <peterz@infradead.org>
Cc: linux-mm@kvack.org, Alan Cox <alan@lxorguk.ukuu.org.uk>,
	Rik van Riel <riel@redhat.com>,
	linux-kernel@vger.kernel.org, Linus Torvalds <torvalds@osdl.org>,
	Andrew Morton <akpm@linux-foundation.org>,
	pageexec@freemail.hu
Subject: Re: [PATCH] Change ZERO_SIZE_PTR to point at unmapped space
Date: Sat, 30 May 2009 15:51:36 -0700	[thread overview]
Message-ID: <20090530225136.GN6535@oblivion.subreption.com> (raw)
In-Reply-To: <1243722771.6645.162.camel@laptop>

On 00:32 Sun 31 May     , Peter Zijlstra wrote:
> On Sat, 2009-05-30 at 12:28 -0700, Larry H. wrote:
> > [PATCH] Change ZERO_SIZE_PTR to point at unmapped space
> > 
> > This patch changes the ZERO_SIZE_PTR address to point at top memory
> > unmapped space, instead of the original location which could be
> > mapped from userland to abuse a NULL (or offset-from-null) pointer
> > dereference scenario.
> 
> Same goes for the regular NULL pointer, we have bits to disallow
> userspace mapping the NULL page, so I'm not exactly seeing what this
> patch buys us.

mmap_min_addr has a history of being easy to bypass. Let me get this
straight: you are arguing this doesn't bring anything new because an
additional mmap() based check exists, whose purpose is blocking NULL
from being mapped in userland. But the purpose of this patch, is making
sure that any user of ZERO_SIZE_PTR doesn't set some pointer to a
NULL+16 location, but a top memory unmapped address instead. In other
words, this is orthogonal to mmap_min_addr, preventing the situation
that mmap_min_addr is _supposed_ to block, from happening.

Both can coexist, one ensuring pointers don't get set to an userland
reachable/mmap-able region, and the other prevents such a region from
being mapped from userland.

The next patch changes LIST_POISON(1|2) to point at sane addresses as
well. Explaining why this is necessary to you will require you to
understand the security risks of unlinking doubly linked lists, etc. If
you aren't familiar with those concepts, I encourage you to look for
some literature on the matter ("Once upon a free()" is a good start, an
article published in Phrack magazine). Furthermore those changes will
only be effective when list debugging is enabled, therefore it's not
even used by the entire user base.

> > The ZERO_OR_NULL_PTR macro is changed accordingly. This patch does
> > not modify its behavior nor has any performance nor functionality
> > impact.
> 
> It does generate longer asm.

3 more bytes in amd64 (gcc 4.3.3):

 198:   48 83 ff 10             cmp    $0x10,%rdi
 19c:   74 1c                   je     1ba <kzfree+0x33>
 19e:   48 85 ff                test   %rdi,%rdi
 1a1:   74 17                   je     1ba <kzfree+0x33>
 --
 198:   48 81 ff 00 fc ff ff    cmp    $0xfffffffffffffc00,%rdi
 19f:   74 1c                   je     1bd <kzfree+0x36>
 1a1:   48 85 ff                test   %rdi,%rdi
 1a4:   74 17                   je     1bd <kzfree+0x36>

How many users of this macro exist? A dozen or so? Looks like the
security benefits of this patch outweight those 3 extra bytes.

	Larry

--
To unsubscribe, send a message with 'unsubscribe linux-mm' in
the body to majordomo@kvack.org.  For more info on Linux MM,
see: http://www.linux-mm.org/ .
Don't email: <a href=mailto:"dont@kvack.org"> email@kvack.org </a>

      reply	other threads:[~2009-05-30 22:53 UTC|newest]

Thread overview: 57+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2009-05-30 19:28 Larry H.
2009-05-30 22:29 ` Linus Torvalds
2009-05-30 23:00   ` Larry H.
2009-05-31  2:02     ` Linus Torvalds
2009-05-31  2:21       ` Larry H.
2009-06-02 15:37         ` Christoph Lameter
2009-06-02 20:34           ` Larry H.
2009-06-03 14:50             ` Security fix for remapping of page 0 (was [PATCH] Change ZERO_SIZE_PTR to point at unmapped space) Christoph Lameter
2009-06-03 15:07               ` Linus Torvalds
2009-06-03 15:23                 ` Christoph Lameter
2009-06-03 15:38                   ` Linus Torvalds
2009-06-03 16:14                     ` Alan Cox
2009-06-03 16:19                       ` Linus Torvalds
2009-06-03 16:24                         ` Eric Paris
2009-06-03 16:22                     ` Eric Paris
2009-06-03 16:28                       ` Linus Torvalds
2009-06-03 16:32                         ` Eric Paris
2009-06-03 16:44                           ` Linus Torvalds
2009-06-03 15:11               ` Stephen Smalley
2009-06-03 15:41                 ` Christoph Lameter
2009-06-03 16:18                   ` Linus Torvalds
2009-06-03 16:28                   ` Larry H.
2009-06-03 16:36                     ` Rik van Riel
2009-06-03 16:47                       ` Linus Torvalds
2009-06-03 17:16                         ` Eric Paris
2009-06-03 17:28                           ` Linus Torvalds
2009-06-03 17:31                             ` Eric Paris
2009-06-03 17:24                         ` Larry H.
2009-06-03 17:21                       ` Larry H.
2009-06-03 22:52                         ` James Morris
2009-06-03 17:29               ` Alan Cox
2009-06-03 17:35                 ` Linus Torvalds
2009-06-03 18:00                   ` Larry H.
2009-06-03 18:12                     ` Linus Torvalds
2009-06-03 18:39                       ` Larry H.
2009-06-03 18:45                         ` Linus Torvalds
2009-06-03 18:50                           ` Linus Torvalds
2009-06-03 18:59                             ` Christoph Lameter
2009-06-03 19:11                               ` Rik van Riel
2009-06-03 19:14                               ` Eric Paris
2009-06-03 19:42                                 ` Christoph Lameter
2009-06-03 19:51                                   ` Eric Paris
2009-06-03 20:04                                     ` Christoph Lameter
2009-06-03 20:16                                       ` Eric Paris
2009-06-03 20:36                                         ` Christoph Lameter
2009-06-03 21:20                                       ` Linus Torvalds
2009-06-04  2:41                                       ` James Morris
2009-06-03 19:21                               ` Alan Cox
2009-06-03 19:45                                 ` Christoph Lameter
2009-06-03 21:07                                   ` Alan Cox
2009-06-03 19:27                               ` Linus Torvalds
2009-06-03 19:50                                 ` Christoph Lameter
2009-06-03 20:00                             ` pageexec
2009-06-03 19:41                           ` pageexec
2009-06-07 10:29               ` Pavel Machek
2009-05-30 22:32 ` [PATCH] Change ZERO_SIZE_PTR to point at unmapped space Peter Zijlstra
2009-05-30 22:51   ` Larry H. [this message]

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=20090530225136.GN6535@oblivion.subreption.com \
    --to=research@subreption.com \
    --cc=akpm@linux-foundation.org \
    --cc=alan@lxorguk.ukuu.org.uk \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-mm@kvack.org \
    --cc=pageexec@freemail.hu \
    --cc=peterz@infradead.org \
    --cc=riel@redhat.com \
    --cc=torvalds@osdl.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