All of lore.kernel.org
 help / color / mirror / Atom feed
From: Ingo Molnar <mingo@elte.hu>
To: Thomas Gleixner <tglx@linutronix.de>
Cc: Roland Dreier <rdreier@cisco.com>,
	linux-kernel@vger.kernel.org,
	Thomas Mingarelli <thomas.mingarelli@hp.com>
Subject: Re: hpwdt oops in clflush_cache_range
Date: Wed, 27 Feb 2008 22:14:14 +0100	[thread overview]
Message-ID: <20080227211414.GA12199@elte.hu> (raw)
In-Reply-To: <alpine.LFD.1.00.0802272155190.7583@apollo.tec.linutronix.de>


* Thomas Gleixner <tglx@linutronix.de> wrote:

> On Wed, 27 Feb 2008, Thomas Gleixner wrote:
> > +static inline int phys_addr_valid(unsigned long addr)
> > +{
> > +	return addr < (1 << boot_cpu_data.x86_phys_bits);
> 
> That needs to be:
> 
> +     return addr < (1UL << boot_cpu_data.x86_phys_bits);
> 
> Where is my brown paperbag ? I know that GCC _is_ stupid, but I never 
> remember.

here's the updated patch.

	Ingo

-------------->
Subject: x86: check physical address range in ioremap
From: Thomas Gleixner <tglx@linutronix.de>
Date: Wed, 27 Feb 2008 20:57:40 +0100

Roland Dreier reported in http://lkml.org/lkml/2008/2/27/194

[ 8425.915139] BUG: unable to handle kernel paging request at ffffc20001a0a000
[ 8425.919087] IP: [<ffffffff8021dacc>] clflush_cache_range+0xc/0x25
[ 8425.919087] PGD 1bf80e067 PUD 1bf80f067 PMD 1bb497067 PTE 80000047000ee17b

This is on a Intel machine with 36bit physical address space. The PTE
entry references 47000ee000, which is outside of it.

Add a check for the physical address space and warn/printk about the
stupid caller.

Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Signed-off-by: Ingo Molnar <mingo@elte.hu>
---
 arch/x86/mm/ioremap.c |   19 +++++++++++++++++++
 1 file changed, 19 insertions(+)

Index: linux-x86.q/arch/x86/mm/ioremap.c
===================================================================
--- linux-x86.q.orig/arch/x86/mm/ioremap.c
+++ linux-x86.q/arch/x86/mm/ioremap.c
@@ -35,6 +35,18 @@ unsigned long __phys_addr(unsigned long 
 }
 EXPORT_SYMBOL(__phys_addr);
 
+static inline int phys_addr_valid(unsigned long addr)
+{
+	return addr < (1UL << boot_cpu_data.x86_phys_bits);
+}
+
+#else
+
+static inline int phys_addr_valid(unsigned long addr)
+{
+	return 1;
+}
+
 #endif
 
 int page_is_ram(unsigned long pagenr)
@@ -118,6 +130,13 @@ static void __iomem *__ioremap(unsigned 
 	if (!size || last_addr < phys_addr)
 		return NULL;
 
+	if (!phys_addr_valid(phys_addr)) {
+		printk(KERN_WARNING "ioremap: invalid physical address %lx\n",
+		       phys_addr);
+		WARN_ON_ONCE(1);
+		return NULL;
+	}
+
 	/*
 	 * Don't remap the low PCI/ISA area, it's always mapped..
 	 */

  reply	other threads:[~2008-02-27 21:14 UTC|newest]

Thread overview: 20+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2008-02-27 17:08 hpwdt oops in clflush_cache_range Roland Dreier
2008-02-27 17:37 ` Mingarelli, Thomas
2008-02-27 18:14 ` Thomas Gleixner
2008-02-27 18:38   ` Roland Dreier
2008-02-27 19:48     ` Thomas Gleixner
2008-02-27 20:36       ` Ingo Molnar
2008-02-27 20:42         ` Thomas Gleixner
2008-02-27 20:44           ` Ingo Molnar
2008-02-27 20:59           ` Thomas Gleixner
2008-02-27 21:14             ` Ingo Molnar [this message]
2008-02-27 21:17             ` Roland Dreier
2008-02-27 21:35               ` Roland Dreier
2008-02-27 23:44               ` Mingarelli, Thomas
2008-02-28  0:12                 ` Roland Dreier
2008-02-28  3:09                   ` Mingarelli, Thomas
     [not found]                   ` <E14D1C2A44812C4F9C3ED321127EDF6505829D5D6C@G3W0854.americas.hpqcorp.net>
2008-02-28 17:38                     ` [PATCH] [WATCHDOG] Fix declaration of struct smbios_entry_point in hpwdt Roland Dreier
2008-02-28 17:48                       ` [PATCH for 2.6.26] [WATCHDOG] Fix return value warning " Roland Dreier
2008-02-28 20:34                       ` [PATCH] [WATCHDOG] hpwdt: Use dmi_walk() instead of own copy Roland Dreier
2008-02-28 21:24                         ` Mingarelli, Thomas
2008-02-28 21:26                         ` Wim Van Sebroeck

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=20080227211414.GA12199@elte.hu \
    --to=mingo@elte.hu \
    --cc=linux-kernel@vger.kernel.org \
    --cc=rdreier@cisco.com \
    --cc=tglx@linutronix.de \
    --cc=thomas.mingarelli@hp.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 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.