|
From: Skarakis, K. <kon...@un...> - 2014-10-06 15:09:05
|
Hello,
I am having trouble running programs that need to use "ulimit" under valgrind. For instance, here is a simple script that changes the limit of open files to 100000. All commands below are executed as root:
> cat foo
#!/bin/sh
ulimit -n 100000
I can run it fine on its own.
> ./foo
> echo $?
0
But under valgrind I get blocked with "Operation not permitted":
> valgrind ./foo
==729== Memcheck, a memory error detector
==729== Copyright (C) 2002-2011, and GNU GPL'd, by Julian Seward et al.
==729== Using Valgrind-3.7.0 and LibVEX; rerun with -h for copyright info
==729== Command: ./foo
==729==
./foo: line 2: ulimit: open files: cannot modify limit: Operation not permitted
==729==
==729== HEAP SUMMARY:
==729== in use at exit: 22,355 bytes in 579 blocks
==729== total heap usage: 689 allocs, 110 frees, 34,516 bytes allocated
==729==
==729== LEAK SUMMARY:
==729== definitely lost: 0 bytes in 0 blocks
==729== indirectly lost: 0 bytes in 0 blocks
==729== possibly lost: 0 bytes in 0 blocks
==729== still reachable: 22,355 bytes in 579 blocks
==729== suppressed: 0 bytes in 0 blocks
==729== Rerun with --leak-check=full to see details of leaked memory
==729==
==729== For counts of detected and suppressed errors, rerun with: -v
==729== ERROR SUMMARY: 0 errors from 0 contexts (suppressed: 4 from 4)
Right now I have no entries in /etc/security/limits.conf, however it looks like the file is not even accessed:
> strace -s 100 -f /usr/bin/valgrind ./foo > trace 2>&1
> grep limits.conf trace
> echo $?
1
Any hints will be much appreciated.
My platform is 64-bit Linux.
Thank you,
Costas
PS: Here is part of the trace I took above. Maybe it is obvious to someone what goes wrong:
read(255, "#!/bin/sh\nulimit -n 100000\n", 27) = 27
rt_sigprocmask(SIG_SETMASK, ~[ILL TRAP BUS FPE KILL SEGV STOP], NULL, 8) = 0
gettid() = 784
read(1027, "G", 1) = 1
rt_sigprocmask(SIG_SETMASK, ~[], ~[ILL TRAP BUS FPE KILL SEGV STOP], 8) = 0
rt_sigtimedwait(~[], 0x4029a1d00) = -1 EAGAIN (Resource temporarily unavailable)
rt_sigprocmask(SIG_SETMASK, ~[ILL TRAP BUS FPE KILL SEGV STOP], NULL, 8) = 0
getrlimit(RLIMIT_NOFILE, {rlim_cur=1034, rlim_max=8*1024}) = 0
getrlimit(RLIMIT_NOFILE, {rlim_cur=1034, rlim_max=8*1024}) = 0
fstat(2, {st_mode=S_IFREG|0644, st_size=129020, ...}) = 0
mmap(0x4028000, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0x4028000
gettid() = 784
write(1028, "H", 1) = 1
rt_sigprocmask(SIG_SETMASK, [], ~[ILL TRAP BUS FPE KILL SEGV STOP], 8) = 0
write(2, "./foo: line 2: ulimit: open files: cannot modify limit: Operation not permitted\n", 80./foo: line 2: ulimit: open files: cannot modify limit: Operation not permitted) = 80
|