lkml.org 
[lkml]   [2007]   [Mar]   [15]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
/
Date
From
SubjectRe: [BUGFIX][PATCH] fixing placement of register stack under ulimit -s
plz allow me to explain more.

"Why register-stack/memory-stack upside down is bad" is a bit complicated.
So...this is a test and result for explaining bug.

This is a sample code and its result on 2.6.21-rc3.
Note: base address of memory'stack can be randomly change.

== sample code ==
[kamezawa@drpq ~]$ cat sample.c
#include <stdio.h>

void do_print(int num)
{
if (num == 0)
return;
printf("%d\n",num);
do_print(num - 1);
}

int main(int argc, char *argv[])
{
do_print(10000);
return 0;
}

== before ulimit ==
[kamezawa@drpq ~]$ uname -a
Linux drpq 2.6.21-rc3 #3 SMP Fri Mar 16 11:57:47 JST 2007 ia64 ia64 ia64 GNU/Linux
[kamezawa@drpq ~]$ ulimit -s
8192
[kamezawa@drpq ~]$ ulimit -s -H
unlimited
[kamezawa@drpq ~]$ ./sample
10000
9999
....<snip>
1
[kamezawa@drpq ~]$
== after ulimit -s 8192 ==

[kamezawa@drpq ~]$ ulimit -s
8192
[kamezawa@drpq ~]$ ulimit -s -H
8192
[kamezawa@drpq ~]$ ./sample
10000
9999
....<snip>

9612
9611
9610
9609
9608
Segmentation fault

[kamezawa@drpq ~]$ ./sample (when I'm lucky)
10000
9999
....<snip>
1
[kamezawa@drpq ~]$
=====================================

This number 9608 is too short to use up all stack. The reason of this is
"ulimit -s + memory stack randomization + register-stack-expansion" is buggy.
The program can only use one page for register stack if unlucky.
My patch will fix this case.

-Kame








-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/

\
 
 \ /
  Last update: 2007-03-16 03:51    [W:0.050 / U:0.120 seconds]
©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site