From: Ingo Molnar <mingo@elte.hu>
To: Linus Torvalds <torvalds@linux-foundation.org>
Cc: Linux Kernel Mailing List <linux-kernel@vger.kernel.org>,
Andrew Morton <akpm@linux-foundation.org>,
Avi Kivity <avi@qumranet.com>
Subject: Re: [git pull] core, x86: make LIST_POISON less deadly
Date: Mon, 14 Jul 2008 18:07:48 +0200 [thread overview]
Message-ID: <20080714160748.GA10684@elte.hu> (raw)
In-Reply-To: <alpine.LFD.1.10.0807140856130.3305@woody.linux-foundation.org>
* Linus Torvalds <torvalds@linux-foundation.org> wrote:
> On Mon, 14 Jul 2008, Ingo Molnar wrote:
> > >
> > > Why not use something sane like 0xdead000000000000, which has the high
> > > bit set but very fundamentally isn't a valid pointer, and never will
> > > be? And which is a *lot* more visually obvious too!
> >
> > initially i suggested that too - but such addresses raise a #GP instead
> > of a page fault so their decoding is a bit harder.
>
> But raising a GP is exactly what you want: a PF is an indication that the
> address was actually half-way valid, and will not fault at all on some
> (possibly future) machine.
>
> > We dont do any instruction decoding in #GP handlers to figure out what
> > happened, while in the pagefault case we know which address faulted,
> > etc.
>
> Why would we care? It would be very obvious from the instruction
> disassembly plus the register contents. No need to decode instructions.
>
> > Perhaps we could try to make #GP handlers a bit more informative -
> > although decoding instructions will make things a bit more fragile
> > inevitably.
> >
> > Perhaps make it 0xffffcdead0000000 ?
>
> I'm really not seeing the reason for not just doing it right.
ok. Find the updated pull request below. I've added your Acked-by to the
last commit.
Please pull the latest safe-poison-pointers git tree from:
git://git.kernel.org/pub/scm/linux/kernel/git/tip/linux-2.6-tip.git safe-poison-pointers
Thanks,
Ingo
------------------>
Avi Kivity (1):
core, x86: make LIST_POISON less deadly
Ingo Molnar (1):
x86: change LIST_POISON to 0xdead000000000000
arch/x86/Kconfig | 5 +++++
include/linux/poison.h | 10 ++++++++--
2 files changed, 13 insertions(+), 2 deletions(-)
diff --git a/arch/x86/Kconfig b/arch/x86/Kconfig
index e0edaaa..0dbd040 100644
--- a/arch/x86/Kconfig
+++ b/arch/x86/Kconfig
@@ -1019,6 +1019,11 @@ config ARCH_MEMORY_PROBE
def_bool X86_64
depends on MEMORY_HOTPLUG
+config ILLEGAL_POINTER_VALUE
+ hex
+ default 0 if X86_32
+ default 0xdead000000000000 if X86_64
+
source "mm/Kconfig"
config HIGHPTE
diff --git a/include/linux/poison.h b/include/linux/poison.h
index 9f31683..0d105a5 100644
--- a/include/linux/poison.h
+++ b/include/linux/poison.h
@@ -1,14 +1,20 @@
#ifndef _LINUX_POISON_H
#define _LINUX_POISON_H
+#ifdef CONFIG_ILLEGAL_POINTER_VALUE
+#define POISON_POINTER_DELTA CONFIG_ILLEGAL_POINTER_VALUE
+#else
+#define POISON_POINTER_DELTA 0L
+#endif
+
/********** include/linux/list.h **********/
/*
* These are non-NULL pointers that will result in page faults
* under normal circumstances, used to verify that nobody uses
* non-initialized list entries.
*/
-#define LIST_POISON1 ((void *) 0x00100100)
-#define LIST_POISON2 ((void *) 0x00200200)
+#define LIST_POISON1 ((void *) 0x00100100 + POISON_POINTER_DELTA)
+#define LIST_POISON2 ((void *) 0x00200200 + POISON_POINTER_DELTA)
/********** include/linux/timer.h **********/
/*
next prev parent reply other threads:[~2008-07-14 16:08 UTC|newest]
Thread overview: 16+ messages / expand[flat|nested] mbox.gz Atom feed top
2008-07-14 14:48 [git pull] core, x86: make LIST_POISON less deadly Ingo Molnar
2008-07-14 15:03 ` Linus Torvalds
2008-07-14 15:12 ` Ingo Molnar
2008-07-14 15:53 ` Avi Kivity
2008-07-14 15:59 ` Linus Torvalds
2008-07-14 16:07 ` Ingo Molnar [this message]
2008-07-14 16:08 ` Avi Kivity
2008-07-14 16:26 ` Linus Torvalds
2008-07-14 16:34 ` Ingo Molnar
2008-07-14 18:33 ` Andi Kleen
2008-07-14 18:42 ` Linus Torvalds
2008-07-14 19:11 ` Andi Kleen
2008-07-14 19:30 ` Linus Torvalds
2008-07-14 19:42 ` Andi Kleen
2008-07-14 18:35 ` Andi Kleen
2008-07-14 18:42 ` Linus Torvalds
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=20080714160748.GA10684@elte.hu \
--to=mingo@elte.hu \
--cc=akpm@linux-foundation.org \
--cc=avi@qumranet.com \
--cc=linux-kernel@vger.kernel.org \
--cc=torvalds@linux-foundation.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 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.