public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
* [PATCH] do_wp_page: BUG on invalid pfn
       [not found] <20030815184720.A4D482CE79@lists.samba.org>
@ 2003-08-15 21:15 ` Ed L Cashin
  2003-08-15 21:22   ` Mike Fedyk
  2003-08-15 21:39   ` Russell King
  0 siblings, 2 replies; 8+ messages in thread
From: Ed L Cashin @ 2003-08-15 21:15 UTC (permalink / raw)
  To: linux-kernel; +Cc: Linus Torvalds, Rusty Russell

Rusty Russell <rusty@rustcorp.com.au> writes:

> In message <87d6fixvpm.fsf@uga.edu> you write:
>> This patch just does what the comment says should be done.
>
> Hi Ed!
>
> 	Not trivial I'm afraid.  Send to Linus and lkml.


This patch just does what the comment says should be done.  I thought
it was a trivial patch, but Rusty Russell has informed me otherwise.
(Thanks, RR).


--- linux-2.6.0-test2/mm/memory.c.orig	Sun Jul 27 13:01:24 2003
+++ linux-2.6.0-test2/mm/memory.c	Wed Aug  6 18:30:55 2003
@@ -990,15 +990,10 @@
 	int ret;
 
 	if (unlikely(!pfn_valid(pfn))) {
-		/*
-		 * This should really halt the system so it can be debugged or
-		 * at least the kernel stops what it's doing before it corrupts
-		 * data, but for the moment just pretend this is OOM.
-		 */
-		pte_unmap(page_table);
 		printk(KERN_ERR "do_wp_page: bogus page at address %08lx\n",
 				address);
-		goto oom;
+		dump_stack();
+		BUG();
 	}
 	old_page = pfn_to_page(pfn);
 
@@ -1054,7 +1049,6 @@
 
 no_mem:
 	page_cache_release(old_page);
-oom:
 	ret = VM_FAULT_OOM;
 out:
 	spin_unlock(&mm->page_table_lock);

-- 
--Ed L Cashin            |   PGP public key:
  ecashin@uga.edu        |   http://noserose.net/e/pgp/


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

* Re: [PATCH] do_wp_page: BUG on invalid pfn
  2003-08-15 21:15 ` [PATCH] do_wp_page: BUG on invalid pfn Ed L Cashin
@ 2003-08-15 21:22   ` Mike Fedyk
  2003-08-15 21:52     ` Ed L Cashin
  2003-08-15 21:39   ` Russell King
  1 sibling, 1 reply; 8+ messages in thread
From: Mike Fedyk @ 2003-08-15 21:22 UTC (permalink / raw)
  To: Ed L Cashin; +Cc: linux-kernel, Linus Torvalds, Rusty Russell

On Fri, Aug 15, 2003 at 05:15:45PM -0400, Ed L Cashin wrote:
> Rusty Russell <rusty@rustcorp.com.au> writes:
> 
> > In message <87d6fixvpm.fsf@uga.edu> you write:
> >> This patch just does what the comment says should be done.
> >
> > Hi Ed!
> >
> > 	Not trivial I'm afraid.  Send to Linus and lkml.
> 
> 
> This patch just does what the comment says should be done.  I thought
> it was a trivial patch, but Rusty Russell has informed me otherwise.
> (Thanks, RR).
> 
> 
> --- linux-2.6.0-test2/mm/memory.c.orig	Sun Jul 27 13:01:24 2003
> +++ linux-2.6.0-test2/mm/memory.c	Wed Aug  6 18:30:55 2003
> @@ -990,15 +990,10 @@
>  	int ret;
>  
>  	if (unlikely(!pfn_valid(pfn))) {
> -		/*
> -		 * This should really halt the system so it can be debugged or
> -		 * at least the kernel stops what it's doing before it corrupts
> -		 * data, but for the moment just pretend this is OOM.
> -		 */
> -		pte_unmap(page_table);
>  		printk(KERN_ERR "do_wp_page: bogus page at address %08lx\n",
>  				address);
> -		goto oom;
> +		dump_stack();
> +		BUG();

You're not unmapping the pte I guess to not interfere with the dump_stack,
but what about the printk?  Will that affect the dump_stack also?

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

* Re: [PATCH] do_wp_page: BUG on invalid pfn
  2003-08-15 21:15 ` [PATCH] do_wp_page: BUG on invalid pfn Ed L Cashin
  2003-08-15 21:22   ` Mike Fedyk
@ 2003-08-15 21:39   ` Russell King
  2003-08-15 21:50     ` Ed L Cashin
  1 sibling, 1 reply; 8+ messages in thread
From: Russell King @ 2003-08-15 21:39 UTC (permalink / raw)
  To: Ed L Cashin; +Cc: linux-kernel, Linus Torvalds, Rusty Russell

On Fri, Aug 15, 2003 at 05:15:45PM -0400, Ed L Cashin wrote:
> +		dump_stack();
> +		BUG();

Is there much point to both dump_stack and BUG() - BUG is supposed to
provide a calltrace, which dump_stack also does.  Do we really need two
copies?

-- 
Russell King (rmk@arm.linux.org.uk)                The developer of ARM Linux
             http://www.arm.linux.org.uk/personal/aboutme.html


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

* Re: [PATCH] do_wp_page: BUG on invalid pfn
  2003-08-15 21:39   ` Russell King
@ 2003-08-15 21:50     ` Ed L Cashin
  2003-08-15 22:11       ` Russell King
  0 siblings, 1 reply; 8+ messages in thread
From: Ed L Cashin @ 2003-08-15 21:50 UTC (permalink / raw)
  To: Ed L Cashin; +Cc: linux-kernel, Linus Torvalds, Rusty Russell

Russell King <rmk@arm.linux.org.uk> writes:

> On Fri, Aug 15, 2003 at 05:15:45PM -0400, Ed L Cashin wrote:
>> +		dump_stack();
>> +		BUG();
>
> Is there much point to both dump_stack and BUG() - BUG is supposed to
> provide a calltrace, which dump_stack also does.  Do we really need two
> copies?

On i386 WARN_ON calls dump_stack, but BUG just prints some minimal
helpful info on the console, like this:

------------[ cut here ]------------
kernel BUG at kernel/any.c:36!
invalid operand: 0000 [#1]


-- 
--Ed L Cashin            |   PGP public key:
  ecashin@uga.edu        |   http://noserose.net/e/pgp/


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

* Re: [PATCH] do_wp_page: BUG on invalid pfn
  2003-08-15 21:22   ` Mike Fedyk
@ 2003-08-15 21:52     ` Ed L Cashin
  2003-08-15 22:05       ` Mike Fedyk
  0 siblings, 1 reply; 8+ messages in thread
From: Ed L Cashin @ 2003-08-15 21:52 UTC (permalink / raw)
  To: Ed L Cashin; +Cc: linux-kernel, Linus Torvalds, Rusty Russell

Mike Fedyk <mfedyk@matchmail.com> writes:

> On Fri, Aug 15, 2003 at 05:15:45PM -0400, Ed L Cashin wrote:
>> Rusty Russell <rusty@rustcorp.com.au> writes:
>> 
>> > In message <87d6fixvpm.fsf@uga.edu> you write:
>> >> This patch just does what the comment says should be done.
>> >
>> > Hi Ed!
>> >
>> > 	Not trivial I'm afraid.  Send to Linus and lkml.
>> 
>> 
>> This patch just does what the comment says should be done.  I thought
>> it was a trivial patch, but Rusty Russell has informed me otherwise.
>> (Thanks, RR).
>> 
>> 
>> --- linux-2.6.0-test2/mm/memory.c.orig	Sun Jul 27 13:01:24 2003
>> +++ linux-2.6.0-test2/mm/memory.c	Wed Aug  6 18:30:55 2003
>> @@ -990,15 +990,10 @@
>>  	int ret;
>>  
>>  	if (unlikely(!pfn_valid(pfn))) {
>> -		/*
>> -		 * This should really halt the system so it can be debugged or
>> -		 * at least the kernel stops what it's doing before it corrupts
>> -		 * data, but for the moment just pretend this is OOM.
>> -		 */
>> -		pte_unmap(page_table);
>>  		printk(KERN_ERR "do_wp_page: bogus page at address %08lx\n",
>>  				address);
>> -		goto oom;
>> +		dump_stack();
>> +		BUG();
>
> You're not unmapping the pte I guess to not interfere with the dump_stack,

This patch changes the logic from "pretend it's out of memory" to
"announce something's very wrong and bail out right away."  Unmapping
the pte seems like a precursor to carrying on business as usual, but
there must be some subtleties here that I am unaware of, or Rusty
Russell wouldn't have called this patch non-trivial.

> but what about the printk?  Will that affect the dump_stack also?

It seems like you'd return from the printk before dumping the stack,
so I wouldn't think so.

-- 
--Ed L Cashin            |   PGP public key:
  ecashin@uga.edu        |   http://noserose.net/e/pgp/


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

* Re: [PATCH] do_wp_page: BUG on invalid pfn
  2003-08-15 21:52     ` Ed L Cashin
@ 2003-08-15 22:05       ` Mike Fedyk
  2003-08-15 22:18         ` Ed L Cashin
  0 siblings, 1 reply; 8+ messages in thread
From: Mike Fedyk @ 2003-08-15 22:05 UTC (permalink / raw)
  To: Ed L Cashin; +Cc: linux-kernel, Linus Torvalds, Rusty Russell

On Fri, Aug 15, 2003 at 05:52:09PM -0400, Ed L Cashin wrote:
> Mike Fedyk <mfedyk@matchmail.com> writes:
> 
> > On Fri, Aug 15, 2003 at 05:15:45PM -0400, Ed L Cashin wrote:
> >> Rusty Russell <rusty@rustcorp.com.au> writes:
> >> 
> >> > In message <87d6fixvpm.fsf@uga.edu> you write:
> >> >> This patch just does what the comment says should be done.
> >> >
> >> > Hi Ed!
> >> >
> >> > 	Not trivial I'm afraid.  Send to Linus and lkml.
> >> 
> >> 
> >> This patch just does what the comment says should be done.  I thought
> >> it was a trivial patch, but Rusty Russell has informed me otherwise.
> >> (Thanks, RR).
> >> 
> >> 
> >> --- linux-2.6.0-test2/mm/memory.c.orig	Sun Jul 27 13:01:24 2003
> >> +++ linux-2.6.0-test2/mm/memory.c	Wed Aug  6 18:30:55 2003
> >> @@ -990,15 +990,10 @@
> >>  	int ret;
> >>  
> >>  	if (unlikely(!pfn_valid(pfn))) {
> >> -		/*
> >> -		 * This should really halt the system so it can be debugged or
> >> -		 * at least the kernel stops what it's doing before it corrupts
> >> -		 * data, but for the moment just pretend this is OOM.
> >> -		 */
> >> -		pte_unmap(page_table);
> >>  		printk(KERN_ERR "do_wp_page: bogus page at address %08lx\n",
> >>  				address);
> >> -		goto oom;
> >> +		dump_stack();
> >> +		BUG();
> >
> > You're not unmapping the pte I guess to not interfere with the dump_stack,
> 
> This patch changes the logic from "pretend it's out of memory" to
> "announce something's very wrong and bail out right away."  Unmapping
> the pte seems like a precursor to carrying on business as usual, but
> there must be some subtleties here that I am unaware of, or Rusty
> Russell wouldn't have called this patch non-trivial.

So does show_stack() halt the kernel?  If not, then you probably want the
pte_unmap since you'll have a working/semi-working system after the bug()
call.

And if show_stack() does halt the kernel, what's the point of bug() then?

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

* Re: [PATCH] do_wp_page: BUG on invalid pfn
  2003-08-15 21:50     ` Ed L Cashin
@ 2003-08-15 22:11       ` Russell King
  0 siblings, 0 replies; 8+ messages in thread
From: Russell King @ 2003-08-15 22:11 UTC (permalink / raw)
  To: Ed L Cashin; +Cc: linux-kernel, Linus Torvalds, Rusty Russell

On Fri, Aug 15, 2003 at 05:50:05PM -0400, Ed L Cashin wrote:
> On i386 WARN_ON calls dump_stack, but BUG just prints some minimal
> helpful info on the console, like this:
> 
> ------------[ cut here ]------------
> kernel BUG at kernel/any.c:36!
> invalid operand: 0000 [#1]

BUG causes an exception, which calls die(), which in turn calls
handle_BUG(), and this indeed does print the first two lines of the
above.  die() goes on to print the 3rd line, but it also goes on
to call show_registers() which should print the registers and
calltrace as well.

Maybe you've found a bug in show_registers() ?

-- 
Russell King (rmk@arm.linux.org.uk)                The developer of ARM Linux
             http://www.arm.linux.org.uk/personal/aboutme.html


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

* Re: [PATCH] do_wp_page: BUG on invalid pfn
  2003-08-15 22:05       ` Mike Fedyk
@ 2003-08-15 22:18         ` Ed L Cashin
  0 siblings, 0 replies; 8+ messages in thread
From: Ed L Cashin @ 2003-08-15 22:18 UTC (permalink / raw)
  To: Mike Fedyk; +Cc: linux-kernel

Mike Fedyk <mfedyk@matchmail.com> writes:

> On Fri, Aug 15, 2003 at 05:52:09PM -0400, Ed L Cashin wrote:
...
>> >> +		dump_stack();
>> >> +		BUG();

...
> So does show_stack() halt the kernel?  

I'm not calling show_stack but dump_stack.  For i386 it looks like
handle_BUG in arch/i386/kernel/traps.c is the function that gets run
when BUG raises an exception.

BUG() does halt the system, though.

-- 
--Ed L Cashin            |   PGP public key:
  ecashin@uga.edu        |   http://noserose.net/e/pgp/


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

end of thread, other threads:[~2003-08-15 22:18 UTC | newest]

Thread overview: 8+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
     [not found] <20030815184720.A4D482CE79@lists.samba.org>
2003-08-15 21:15 ` [PATCH] do_wp_page: BUG on invalid pfn Ed L Cashin
2003-08-15 21:22   ` Mike Fedyk
2003-08-15 21:52     ` Ed L Cashin
2003-08-15 22:05       ` Mike Fedyk
2003-08-15 22:18         ` Ed L Cashin
2003-08-15 21:39   ` Russell King
2003-08-15 21:50     ` Ed L Cashin
2003-08-15 22:11       ` Russell King

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