> If you can write a short program that demonstrates the failure,
> say by comparing getrlimit(RLIMIT_STACK) to the results of
> an internal "cat /proc/self/maps", then that's a kernel bug.
----- where.c
#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <fcntl.h>
#include <sys/time.h>
#include <sys/resource.h>
char buf[8192];
main()
{
struct rlimit rlim;
int const rv1= getrlimit(RLIMIT_STACK, &rlim);
printf("stack rlim_cur=%p rlim_max=%p stack=%p\n",
rlim.rlim_cur, rlim.rlim_max, &rlim);
fflush(stdout);
int const fd=open("/proc/self/maps", O_RDONLY);
for (;;) {
size_t len=read(fd, buf, sizeof(buf));
if (-1==len) {
perror("read"); exit(1);
}
if (0==len)
break;
if (len!=write(1, buf, len))
perror("write"); exit(1);
}
return 0;
}
-----
$ gcc -m32 -pie -fPIE -o where where.c
$ ./where
stack rlim_cur=0x800000 rlim_max=0xffffffff stack=0xffcc472c
f7558000-f7559000 rw-p 00000000 00:00 0
f7559000-f7704000 r-xp 00000000 08:0c 402364
/usr/lib/libc-2.15.so
f7704000-f7705000 ---p 001ab000 08:0c 402364
/usr/lib/libc-2.15.so
f7705000-f7707000 r--p 001ab000 08:0c 402364
/usr/lib/libc-2.15.so
f7707000-f7708000 rw-p 001ad000 08:0c 402364
/usr/lib/libc-2.15.so
f7708000-f770b000 rw-p 00000000 00:00 0
f7725000-f7727000 rw-p 00000000 00:00 0
f7727000-f7728000 r-xp 00000000 00:00 0 [vdso]
f7728000-f7747000 r-xp 00000000 08:0c 416838
/usr/lib/ld-2.15.so
f7747000-f7748000 r--p 0001e000 08:0c 416838
/usr/lib/ld-2.15.so
f7748000-f7749000 rw-p 0001f000 08:0c 416838
/usr/lib/ld-2.15.so
f7749000-f774a000 r-xp 00000000 08:15 7024004
/bigdata/home/jreiser/where
f774a000-f774b000 rw-p 00000000 08:15 7024004
/bigdata/home/jreiser/where
f774b000-f774d000 rw-p 00000000 00:00 0
ffca5000-ffcc6000 rw-p 00000000 00:00 0 [stack]
$
Looks OK to me. 0xffcc6000 - 0x800000 = 0xff4c6000 which is above 0xf774d000
by 0x7d79000 which is a lot. rlim_max=0xffffffff is "infinity" which
cannot be a real limit.
--
--
devel mailing list
[email protected]
https://admin.fedoraproject.org/mailman/listinfo/devel