From: Ingo Molnar <mingo@elte.hu>
To: Andi Kleen <ak@suse.de>
Cc: ying.huang@intel.com, tglx@linutronix.de, linux-kernel@vger.kernel.org
Subject: Re: [PATCH] [4/8] CPA: Fix set_memory_x for ioremap
Date: Mon, 11 Feb 2008 13:27:05 +0100 [thread overview]
Message-ID: <20080211122705.GA23733@elte.hu> (raw)
In-Reply-To: <20080211093432.DA4331B41CE@basil.firstfloor.org>
* Andi Kleen <ak@suse.de> wrote:
> EFI currently calls set_memory_x() on potentially ioremapped
> addresses.
>
> This is problematic for several reasons:
>
> - The cpa code internally calls __pa on it which does not work for
> remapped addresses and will give some random result.
Wrong. We do call __pa() on vmalloc ranges (which is a known
uncleanliness that we intend to fix), but contrary to your claim the
result is not "random result". On 64-bit it's guaranteed to have a value
above ~66 TB on 64-bit and hence fails all the filters later on so it
has zero practical relevance at the moment. On 32-bit we transform it
down to somewhere around 1GB - where we check it against the BIOS range
filters - which again cannot trigger. But I do agree that it's unclean
and needs fixing up.
Detailed analysis on 64-bit: we call __pa() here:
static int change_page_attr_addr(struct cpa_data *cpa)
...
unsigned long phys_addr = __pa(address);
which for vmalloc area virtual addresses will indeed yield some really
high (and invalid) physical address. That address will never trigger
this check:
if (within(address, HIGH_MAP_START, HIGH_MAP_END))
address = (unsigned long) __va(phys_addr);
or this check:
if (within(phys_addr, 0, KERNEL_TEXT_SIZE)) {
so we'll never actuall _use_ that phys_addr.
> - cpa will try to change all potential aliases (like the kernel
> mapping on x86-64), but that is not needed for NX because the caller
> does only needs its specific virtual address executable. There is no
> requirement in the x86 architecture for nx bits to be coherent between
> mapping aliases. Also with the previous problem of __pa returning a
> wrong address it would likely try to change some random other page if
> you're unlucky and the random result would match the kernel text
> range.
wrong. That "random other page" is guaranteed to be above 66 TB
physical.
Anyway, i agree that it's ugly and unintuitive and it's on our clean-up
list. But your patch is not a good cleanup because it just hides the
underlying weakness.
Ingo
next prev parent reply other threads:[~2008-02-11 12:27 UTC|newest]
Thread overview: 37+ messages / expand[flat|nested] mbox.gz Atom feed top
2008-02-11 9:34 [PATCH] [0/8] Various kernel mapping bug fixes Andi Kleen
2008-02-11 9:34 ` [PATCH] [1/8] CPA: Fix gbpages support in try_preserve_lage_page Andi Kleen
2008-02-11 9:45 ` Thomas Gleixner
2008-02-11 10:12 ` Ingo Molnar
2008-02-11 11:01 ` Andi Kleen
2008-02-11 9:34 ` [PATCH] [2/8] CPA: Flush the caches when setting pages not present Andi Kleen
2008-02-11 11:00 ` Ingo Molnar
2008-02-11 12:26 ` Andi Kleen
2008-02-11 9:34 ` [PATCH] [3/8] CPA: Test the correct mapping alias on x86-64 Andi Kleen
2008-02-11 11:49 ` Ingo Molnar
2008-02-11 9:34 ` [PATCH] [4/8] CPA: Fix set_memory_x for ioremap Andi Kleen
2008-02-11 12:27 ` Ingo Molnar [this message]
2008-02-11 12:45 ` Andi Kleen
2008-02-11 9:34 ` [PATCH] [5/8] Fix logic error in 64bit memory hotadd Andi Kleen
2008-02-11 12:46 ` Ingo Molnar
2008-02-11 13:05 ` Andi Kleen
2008-02-11 13:33 ` Ingo Molnar
2008-02-11 13:44 ` Andi Kleen
2008-02-12 10:35 ` Yasunori Goto
2008-02-12 11:20 ` Andi Kleen
2008-02-11 9:34 ` [PATCH] [6/8] Account overlapped mappings in end_pfn_map Andi Kleen
2008-02-11 13:08 ` Ingo Molnar
2008-02-11 13:27 ` Andi Kleen
2008-02-11 13:55 ` Ingo Molnar
2008-02-11 14:16 ` Peter Zijlstra
2008-02-11 14:24 ` Andi Kleen
2008-02-11 14:41 ` Sam Ravnborg
2008-02-11 15:12 ` Arjan van de Ven
2008-02-11 9:34 ` [PATCH] [7/8] Implement true end_pfn_mapped for 32bit Andi Kleen
2008-02-12 19:39 ` Thomas Gleixner
2008-02-12 19:49 ` Andi Kleen
2008-02-12 20:25 ` Thomas Gleixner
2008-02-11 9:34 ` [PATCH] [8/8] RFC: Fix some EFI problems Andi Kleen
2008-02-12 20:04 ` Thomas Gleixner
2008-02-12 20:23 ` Andi Kleen
2008-02-12 20:48 ` Thomas Gleixner
2008-02-13 11:05 ` Andi Kleen
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=20080211122705.GA23733@elte.hu \
--to=mingo@elte.hu \
--cc=ak@suse.de \
--cc=linux-kernel@vger.kernel.org \
--cc=tglx@linutronix.de \
--cc=ying.huang@intel.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.