rendered paste body-----
#include <stdio.h>
#include <sys/resource.h>
main(){
struct rlimit a;
getrlimit(RLIMIT_NPROC, &a);
printf("soft: %d hard: %d\nuid: %d euid: %d\n", a.rlim_cur, a.rlim_max, getuid(), geteuid());
usleep(1000000);
printf("(euid=%d) setuid(%d)=",geteuid(), getuid() );
printf("%d", setuid(getuid()));
printf(" (euid=%d)\n", geteuid());
}
----
Running this as a root suid, these are the results:
soft: -1 hard: -1
uid: 1000 euid: 0
(euid=0) setuid(1000)=0 (euid=1000)
after a ulimit -u 100
soft: 100 hard: 100
uid: 1000 euid: 0
(euid=0) setuid(1000)=0 (euid=1000)