[<prev] [next>] [thread-next>] [day] [month] [year] [list]
Message-ID: <55498EB0.3080904@huawei.com>
Date: Wed, 6 May 2015 11:46:56 +0800
From: "long.wanglong" <long.wanglong@...wei.com>
To: <torvalds@...ux-foundation.org>
CC: <jay.foad@...il.com>, <cwhuang@...roid-x86.org>,
<akpm@...ux-foundation.org>, <kirill.shutemov@...ux.intel.com>,
<riel@...hat.com>, <sasha.levin@...cle.com>,
Michal Hocko <mhocko@...e.cz>, <dave@...olabs.net>,
<koct9i@...il.com>, <luto@...capital.net>, <pfeiner@...gle.com>,
<dh.herrmann@...il.com>, <vishnu.ps@...sung.com>,
<linux-mm@...ck.org>,
"linux-kernel@...r.kernel.org" <linux-kernel@...r.kernel.org>,
Wang Kai <morgan.wang@...wei.com>,
peifeiyue <peifeiyue@...wei.com>, <linux-arch@...r.kernel.org>,
<jengelh@...i.de>, "wang long" <long.wanglong@...wei.com>
Subject: [RFC] kernel random segmentation fault?
Hi all:
I meet a kernel problem about the random segmentation fault(x86_64). In my testcase, the size of local variables exceeds 20MB.
when run the testcase, it will cause segmentation fault(because the default stack size limit is 8192KB).
when I increase the stack size limit to 1024000KB(ulimit -s 1024000), the testcase will pass.
But when I run the testcase 100 times, it will cause random segmentation fault.
Maybe the commit fee7e49d45149fba60156f5b59014f764d3e3728 "mm: propagate error from stack expansion even for guard page"
cause this problems, when I revert it, the testcase will not cause random segmentation fault problem.
Can anyone give some ideas about this problem?
Best Regards
Wang Long
############ Test Environment #############
# uname -a
Linux ivybridge 4.1.0-rc2+ #3 SMP PREEMPT Wed May 6 10:46:57 CST 2015 x86_64 x86_64 x86_64 GNU/Linux
############ The Testcase ################
#include <stdio.h>
#include <stdlib.h>
#include <sys/resource.h>
#define KB *1024
#define MB *(1024*1024)
#define GB *(1024*1024*1024)
int main(int argc, char** argv)
{
int ret;
struct rlimit rlim;
rlim.rlim_cur=20 MB;
rlim.rlim_max=20 MB;
ret = setrlimit(RLIMIT_AS, &rlim);
if ( 0 > ret)
{
perror("setrlimit failed");
exit(1);
}
printf("setrlimit success\n");
char tmp[20 MB];
int i = 0;
for (i = 0; i < 20 MB; i++)
{
tmp[i]=1;
}
printf("test success\n");
exit(1);
}
# My config
--
1.8.3.4
.
View attachment "config" of type "text/plain" (92190 bytes)
Powered by blists - more mailing lists