public inbox for linux-ia64@vger.kernel.org
 help / color / mirror / Atom feed
* [PATCH] - Align RSE save area
@ 2004-01-16 20:47 Jack Steiner
  2004-01-16 21:03 ` Seth, Rohit
  0 siblings, 1 reply; 2+ messages in thread
From: Jack Steiner @ 2004-01-16 20:47 UTC (permalink / raw)
  To: linux-ia64


Due to a bug in ia64_set_rbs_bot(), the VMA that is created for the RSE
save area is not page aligned. The following shows the vma's of a
process with a bad alignment for the  RSE area (pagesize is 0x4000):

	vm_start            vm_end              vm_flags
	0x0000000000000000  0x0000000000004000  READ MAYREAD IO
>>>>	0x600007ffffffe000  0x6000080000002000  READ WRITE MAYREAD MAYWRITE GROWSUP
	0x60000ffffff58000  0x60000fffffffc000  READ WRITE MAYREAD MAYWRITE MAYEXEC GROWSDOWN

This is not expected nor correctly handled by the VM code.


When a process that has an unaligned VMA exits, the teardown of the process
address space fails. The result is that a pte may be left in a pagetable page
when the pagetable page is freed. Pagetable pages are assumed to be all zeros
and are cached in a quicklist for subsequent reuse. Pagetable pages
that are allocated from this quicklist not zeroed out on reuse (they are *suppose*
to be zero).

The process that reuses the pagetable page will "inherit" the stale pages left
over from the previous process that used the pagetable page. This was causing 
really weird failures.



Here is a proposed fix:


--- linux.base/arch/ia64/mm/init.c	Fri Jan  9 00:59:26 2004
+++ linux/arch/ia64/mm/init.c	Fri Jan 16 14:40:14 2004
@@ -98,7 +98,7 @@
 
 	if (stack_size > MAX_USER_STACK_SIZE)
 		stack_size = MAX_USER_STACK_SIZE;
-	current->thread.rbs_bot = STACK_TOP - stack_size;
+	current->thread.rbs_bot = PAGE_ALIGN(STACK_TOP - stack_size);
 }
 
 /*



-- 
Thanks

Jack Steiner (steiner@sgi.com)          651-683-5302
Principal Engineer                      SGI - Silicon Graphics, Inc.



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

* RE: [PATCH] - Align RSE save area
  2004-01-16 20:47 [PATCH] - Align RSE save area Jack Steiner
@ 2004-01-16 21:03 ` Seth, Rohit
  0 siblings, 0 replies; 2+ messages in thread
From: Seth, Rohit @ 2004-01-16 21:03 UTC (permalink / raw)
  To: linux-ia64

But the vm_start and vm_end for the vma mapping the rbs space are both
page aligned (irrespective of rbs_bot value).  Right?  Rbs_bot needs to
be just 16 byte aligned and that part is properly done in set_rbs_bot.

rohit

> -----Original Message-----
> From: linux-ia64-owner@vger.kernel.org [mailto:linux-ia64-
> owner@vger.kernel.org] On Behalf Of Jack Steiner
> Sent: Friday, January 16, 2004 12:48 PM
> To: davidm@hpl.hp.com; linux-ia64@vger.kernel.org
> Subject: [PATCH] - Align RSE save area
> 
> 
> Due to a bug in ia64_set_rbs_bot(), the VMA that is created for the
RSE
> save area is not page aligned. The following shows the vma's of a
> process with a bad alignment for the  RSE area (pagesize is 0x4000):
> 
> 	vm_start            vm_end              vm_flags
> 	0x0000000000000000  0x0000000000004000  READ MAYREAD IO
> >>>>	0x600007ffffffe000  0x6000080000002000  READ WRITE MAYREAD
MAYWRITE
> GROWSUP
> 	0x60000ffffff58000  0x60000fffffffc000  READ WRITE MAYREAD
MAYWRITE
> MAYEXEC GROWSDOWN
> 
> This is not expected nor correctly handled by the VM code.
> 
> 
> When a process that has an unaligned VMA exits, the teardown of the
> process
> address space fails. The result is that a pte may be left in a
pagetable
> page
> when the pagetable page is freed. Pagetable pages are assumed to be
all
> zeros
> and are cached in a quicklist for subsequent reuse. Pagetable pages
> that are allocated from this quicklist not zeroed out on reuse (they
are
> *suppose*
> to be zero).
> 
> The process that reuses the pagetable page will "inherit" the stale
pages
> left
> over from the previous process that used the pagetable page. This was
> causing
> really weird failures.
> 
> 
> 
> Here is a proposed fix:
> 
> 
> --- linux.base/arch/ia64/mm/init.c	Fri Jan  9 00:59:26 2004
> +++ linux/arch/ia64/mm/init.c	Fri Jan 16 14:40:14 2004
> @@ -98,7 +98,7 @@
> 
>  	if (stack_size > MAX_USER_STACK_SIZE)
>  		stack_size = MAX_USER_STACK_SIZE;
> -	current->thread.rbs_bot = STACK_TOP - stack_size;
> +	current->thread.rbs_bot = PAGE_ALIGN(STACK_TOP - stack_size);
>  }
> 
>  /*
> 
> 
> 
> --
> Thanks
> 
> Jack Steiner (steiner@sgi.com)          651-683-5302
> Principal Engineer                      SGI - Silicon Graphics, Inc.
> 
> 
> -
> To unsubscribe from this list: send the line "unsubscribe linux-ia64"
in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at  http://vger.kernel.org/majordomo-info.html

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

end of thread, other threads:[~2004-01-16 21:03 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2004-01-16 20:47 [PATCH] - Align RSE save area Jack Steiner
2004-01-16 21:03 ` Seth, Rohit

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