public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
* [PATCH] x86: fix system die when load with "reservetop" parameter
@ 2009-08-20 12:23 Xiao Guangrong
  2009-08-21 13:35 ` Ingo Molnar
  2009-08-21 14:43 ` [tip:x86/urgent] x86: Fix system crash when loading " tip-bot for Xiao Guangrong
  0 siblings, 2 replies; 4+ messages in thread
From: Xiao Guangrong @ 2009-08-20 12:23 UTC (permalink / raw)
  To: Andrew Morton; +Cc: Ingo Molnar, yinghai, LKML, x86

The system will die if the kernel is booted with "reservetop" parameter,
in present code, parse "reservetop" parameter after early_ioremap_init(),
and some function still use early_ioremap() after it.

The problem is, "reservetop" parameter can modify 'FIXADDR_TOP', then the
virtual address got by early_ioremap() is base on old 'FIXADDR_TOP', but
the page mapping is base on new 'FIXADDR_TOP', it will occur page fault,
and the IDT is not prepare yet, so, the system is dead.

So, put parse_early_param() in the front of early_ioremap_init() in this
patch.

Signed-off-by: Xiao Guangrong <xiaoguangrong@cn.fujitsu.com>
---
 arch/x86/kernel/setup.c |   10 +++++-----
 1 files changed, 5 insertions(+), 5 deletions(-)

diff --git a/arch/x86/kernel/setup.c b/arch/x86/kernel/setup.c
index 26fce55..aad6149 100644
--- a/arch/x86/kernel/setup.c
+++ b/arch/x86/kernel/setup.c
@@ -713,6 +713,11 @@ void __init setup_arch(char **cmdline_p)
 	printk(KERN_INFO "Command line: %s\n", boot_command_line);
 #endif
 
+	strlcpy(command_line, boot_command_line, COMMAND_LINE_SIZE);
+	*cmdline_p = command_line;
+
+	parse_early_param();
+
 	/* VMI may relocate the fixmap; do this before touching ioremap area */
 	vmi_init();
 
@@ -795,11 +800,6 @@ void __init setup_arch(char **cmdline_p)
 #endif
 #endif
 
-	strlcpy(command_line, boot_command_line, COMMAND_LINE_SIZE);
-	*cmdline_p = command_line;
-
-	parse_early_param();
-
 #ifdef CONFIG_X86_64
 	check_efer();
 #endif
-- 
1.6.1.2



^ permalink raw reply related	[flat|nested] 4+ messages in thread

* Re: [PATCH] x86: fix system die when load with "reservetop" parameter
  2009-08-20 12:23 [PATCH] x86: fix system die when load with "reservetop" parameter Xiao Guangrong
@ 2009-08-21 13:35 ` Ingo Molnar
  2009-08-24  1:21   ` Xiao Guangrong
  2009-08-21 14:43 ` [tip:x86/urgent] x86: Fix system crash when loading " tip-bot for Xiao Guangrong
  1 sibling, 1 reply; 4+ messages in thread
From: Ingo Molnar @ 2009-08-21 13:35 UTC (permalink / raw)
  To: Xiao Guangrong, Thomas Gleixner, H. Peter Anvin, Yinghai Lu
  Cc: Andrew Morton, LKML, x86


* Xiao Guangrong <xiaoguangrong@cn.fujitsu.com> wrote:

> The system will die if the kernel is booted with "reservetop" 
> parameter, in present code, parse "reservetop" parameter after 
> early_ioremap_init(), and some function still use early_ioremap() 
> after it.

btw., what are you using the 'reservetop' boot option for?

> The problem is, "reservetop" parameter can modify 'FIXADDR_TOP', 
> then the virtual address got by early_ioremap() is base on old 
> 'FIXADDR_TOP', but the page mapping is base on new 'FIXADDR_TOP', 
> it will occur page fault, and the IDT is not prepare yet, so, the 
> system is dead.
> 
> So, put parse_early_param() in the front of early_ioremap_init() 
> in this patch.
> 
> Signed-off-by: Xiao Guangrong <xiaoguangrong@cn.fujitsu.com>
> ---
>  arch/x86/kernel/setup.c |   10 +++++-----
>  1 files changed, 5 insertions(+), 5 deletions(-)

Does this bug trigger in 2.6.30 too?

I'm quite nervous about doing this change so late in the .31 cycle, 
we've got a hundred early parameters that now get executed much 
earlier than before. No way can i test all of them and others 
testing it (like in your case) takes time to trickle through.

So unless this is a .31 regression i'd be inclined to queue it up 
for .32.

	Ingo

^ permalink raw reply	[flat|nested] 4+ messages in thread

* [tip:x86/urgent] x86: Fix system crash when loading with "reservetop" parameter
  2009-08-20 12:23 [PATCH] x86: fix system die when load with "reservetop" parameter Xiao Guangrong
  2009-08-21 13:35 ` Ingo Molnar
@ 2009-08-21 14:43 ` tip-bot for Xiao Guangrong
  1 sibling, 0 replies; 4+ messages in thread
From: tip-bot for Xiao Guangrong @ 2009-08-21 14:43 UTC (permalink / raw)
  To: linux-tip-commits
  Cc: linux-kernel, hpa, mingo, akpm, xiaoguangrong, tglx, mingo

Commit-ID:  8126dec32738421afa362114337331337b4be17f
Gitweb:     http://git.kernel.org/tip/8126dec32738421afa362114337331337b4be17f
Author:     Xiao Guangrong <xiaoguangrong@cn.fujitsu.com>
AuthorDate: Thu, 20 Aug 2009 20:23:11 +0800
Committer:  Ingo Molnar <mingo@elte.hu>
CommitDate: Fri, 21 Aug 2009 16:40:30 +0200

x86: Fix system crash when loading with "reservetop" parameter

The system will die if the kernel is booted with "reservetop"
parameter, in present code, parse "reservetop" parameter after
early_ioremap_init(), and some function still use
early_ioremap() after it.

The problem is, "reservetop" parameter can modify
'FIXADDR_TOP', then the virtual address got by early_ioremap()
is base on old 'FIXADDR_TOP', but the page mapping is base on
new 'FIXADDR_TOP', it will occur page fault, and the IDT is not
prepare yet, so, the system is dead.

So, put parse_early_param() in the front of
early_ioremap_init() in this patch.

Signed-off-by: Xiao Guangrong <xiaoguangrong@cn.fujitsu.com>
Cc: yinghai@kernel.org
Cc: Andrew Morton <akpm@linux-foundation.org>
LKML-Reference: <4A8D402F.4080805@cn.fujitsu.com>
Signed-off-by: Ingo Molnar <mingo@elte.hu>


---
 arch/x86/kernel/setup.c |   10 +++++-----
 1 files changed, 5 insertions(+), 5 deletions(-)

diff --git a/arch/x86/kernel/setup.c b/arch/x86/kernel/setup.c
index 63f32d2..02643cc 100644
--- a/arch/x86/kernel/setup.c
+++ b/arch/x86/kernel/setup.c
@@ -711,6 +711,11 @@ void __init setup_arch(char **cmdline_p)
 	printk(KERN_INFO "Command line: %s\n", boot_command_line);
 #endif
 
+	strlcpy(command_line, boot_command_line, COMMAND_LINE_SIZE);
+	*cmdline_p = command_line;
+
+	parse_early_param();
+
 	/* VMI may relocate the fixmap; do this before touching ioremap area */
 	vmi_init();
 
@@ -793,11 +798,6 @@ void __init setup_arch(char **cmdline_p)
 #endif
 #endif
 
-	strlcpy(command_line, boot_command_line, COMMAND_LINE_SIZE);
-	*cmdline_p = command_line;
-
-	parse_early_param();
-
 #ifdef CONFIG_X86_64
 	check_efer();
 #endif

^ permalink raw reply related	[flat|nested] 4+ messages in thread

* Re: [PATCH] x86: fix system die when load with "reservetop" parameter
  2009-08-21 13:35 ` Ingo Molnar
@ 2009-08-24  1:21   ` Xiao Guangrong
  0 siblings, 0 replies; 4+ messages in thread
From: Xiao Guangrong @ 2009-08-24  1:21 UTC (permalink / raw)
  To: Ingo Molnar
  Cc: Thomas Gleixner, H. Peter Anvin, Yinghai Lu, Andrew Morton, LKML,
	x86



Ingo Molnar wrote:
> * Xiao Guangrong <xiaoguangrong@cn.fujitsu.com> wrote:
> 
>> The system will die if the kernel is booted with "reservetop" 
>> parameter, in present code, parse "reservetop" parameter after 
>> early_ioremap_init(), and some function still use early_ioremap() 
>> after it.
> 
> btw., what are you using the 'reservetop' boot option for?
> 

Hi Ingo,

Actually, this bug is detected by my review first, then confirm it by
loading with "reservetop" parameter

>> The problem is, "reservetop" parameter can modify 'FIXADDR_TOP', 
>> then the virtual address got by early_ioremap() is base on old 
>> 'FIXADDR_TOP', but the page mapping is base on new 'FIXADDR_TOP', 
>> it will occur page fault, and the IDT is not prepare yet, so, the 
>> system is dead.
>>
>> So, put parse_early_param() in the front of early_ioremap_init() 
>> in this patch.
>>
>> Signed-off-by: Xiao Guangrong <xiaoguangrong@cn.fujitsu.com>
>> ---
>>  arch/x86/kernel/setup.c |   10 +++++-----
>>  1 files changed, 5 insertions(+), 5 deletions(-)
> 
> Does this bug trigger in 2.6.30 too?
> 
> I'm quite nervous about doing this change so late in the .31 cycle, 
> we've got a hundred early parameters that now get executed much 
> earlier than before. No way can i test all of them and others 
> testing it (like in your case) takes time to trickle through.
> 
> So unless this is a .31 regression i'd be inclined to queue it up 
> for .32.
> 

OK, this parameter is introduced in v2.6.27, but It seems like less
people use it and no one report this bug before. So, I think we can
queue it up for .32

Thanks,
Xiao

^ permalink raw reply	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2009-08-24  1:21 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2009-08-20 12:23 [PATCH] x86: fix system die when load with "reservetop" parameter Xiao Guangrong
2009-08-21 13:35 ` Ingo Molnar
2009-08-24  1:21   ` Xiao Guangrong
2009-08-21 14:43 ` [tip:x86/urgent] x86: Fix system crash when loading " tip-bot for Xiao Guangrong

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox