From ac5b3e53d8a02c90880b264e2fd6ddd2008cfa96 Mon Sep 17 00:00:00 2001 From: Lionel Sambuc Date: Mon, 28 Apr 2014 10:05:45 +0200 Subject: [PATCH] Stub for setrlimit Change-Id: I54c7233d71805711bd72e1e751456aad30fd3e35 --- bin/pax/pax.c | 4 ---- lib/libc/sys-minix/Makefile.inc | 2 +- lib/libc/sys-minix/getrlimit.c | 10 +++++++-- lib/libc/sys-minix/setrlimit.c | 38 +++++++++++++++++++++++++++++++++ lib/libutil/login_cap.c | 6 ------ lib/libutil/passwd.c | 2 -- libexec/getty/main.c | 4 +--- tests/lib/libc/stdio/t_printf.c | 2 -- usr.bin/make/main.c | 2 +- usr.bin/sort/sort.c | 4 ---- 10 files changed, 49 insertions(+), 25 deletions(-) create mode 100644 lib/libc/sys-minix/setrlimit.c diff --git a/bin/pax/pax.c b/bin/pax/pax.c index b8a3232ca..253d5fc94 100644 --- a/bin/pax/pax.c +++ b/bin/pax/pax.c @@ -374,13 +374,10 @@ sig_cleanup(int which_sig) static int gen_init(void) { -#if !defined(__minix) struct rlimit reslimit; -#endif /* !defined(__minix) */ struct sigaction n_hand; struct sigaction o_hand; -#if !defined(__minix) /* * Really needed to handle large archives. We can run out of memory for * internal tables really fast when we have a whole lot of files... @@ -416,7 +413,6 @@ gen_init(void) (void)setrlimit(RLIMIT_RSS , &reslimit); } #endif -#endif /* !defined(__minix) */ /* * Handle posix locale diff --git a/lib/libc/sys-minix/Makefile.inc b/lib/libc/sys-minix/Makefile.inc index b7d38d153..7805a9e68 100644 --- a/lib/libc/sys-minix/Makefile.inc +++ b/lib/libc/sys-minix/Makefile.inc @@ -22,7 +22,7 @@ SRCS+= accept.c access.c adjtime.c bind.c brk.c sbrk.c m_closefrom.c getsid.c \ sync.c syscall.c sysuname.c truncate.c umask.c unlink.c write.c \ utimensat.c utimes.c futimes.c lutimes.c futimens.c \ _exit.c _ucontext.c environ.c __getcwd.c vfork.c sizeup.c init.c \ - getrusage.c + getrusage.c setrlimit.c # Minix specific syscalls / utils. SRCS+= cprofile.c sprofile.c stack_utils.c _mcontext.c diff --git a/lib/libc/sys-minix/getrlimit.c b/lib/libc/sys-minix/getrlimit.c index dce895bdb..d39481625 100644 --- a/lib/libc/sys-minix/getrlimit.c +++ b/lib/libc/sys-minix/getrlimit.c @@ -20,12 +20,18 @@ int getrlimit(int resource, struct rlimit *rlp) switch (resource) { - case RLIMIT_CORE: case RLIMIT_CPU: - case RLIMIT_DATA: case RLIMIT_FSIZE: + case RLIMIT_DATA: case RLIMIT_STACK: + case RLIMIT_CORE: + case RLIMIT_RSS: + case RLIMIT_MEMLOCK: + case RLIMIT_NPROC: + case RLIMIT_SBSIZE: case RLIMIT_AS: + /* case RLIMIT_VMEM: Same as RLIMIT_AS */ + case RLIMIT_NTHR: /* no limit enforced (however architectural limits * may apply) */ diff --git a/lib/libc/sys-minix/setrlimit.c b/lib/libc/sys-minix/setrlimit.c new file mode 100644 index 000000000..ffa28edb6 --- /dev/null +++ b/lib/libc/sys-minix/setrlimit.c @@ -0,0 +1,38 @@ +#include +#include "namespace.h" + +#include +#include +#include +#include + +/* Simple stub for now. */ +int setrlimit(int resource, const struct rlimit *rlp) +{ + rlim_t limit; + + switch (resource) + { + case RLIMIT_CPU: + case RLIMIT_FSIZE: + case RLIMIT_DATA: + case RLIMIT_STACK: + case RLIMIT_CORE: + case RLIMIT_RSS: + case RLIMIT_MEMLOCK: + case RLIMIT_NPROC: + case RLIMIT_NOFILE: + case RLIMIT_SBSIZE: + case RLIMIT_AS: + /* case RLIMIT_VMEM: Same as RLIMIT_AS */ + case RLIMIT_NTHR: + break; + + default: + errno = EINVAL; + return -1; + } + + return 0; +} + diff --git a/lib/libutil/login_cap.c b/lib/libutil/login_cap.c index 16b26e443..cbc32d25d 100644 --- a/lib/libutil/login_cap.c +++ b/lib/libutil/login_cap.c @@ -417,17 +417,13 @@ static struct { { RLIMIT_FSIZE, R_CSIZE, "filesize", }, { RLIMIT_DATA, R_CSIZE, "datasize", }, { RLIMIT_STACK, R_CSIZE, "stacksize", }, -#if !defined(__minix) { RLIMIT_RSS, R_CSIZE, "memoryuse", }, { RLIMIT_MEMLOCK, R_CSIZE, "memorylocked", }, { RLIMIT_NPROC, R_CNUMB, "maxproc", }, { RLIMIT_NTHR, R_CNUMB, "maxthread", }, -#endif /* !defined(__minix) */ { RLIMIT_NOFILE, R_CNUMB, "openfiles", }, { RLIMIT_CORE, R_CSIZE, "coredumpsize", }, -#ifdef RLIMIT_SBSIZE { RLIMIT_SBSIZE, R_CSIZE, "sbsize", }, -#endif { -1, 0, 0 } }; @@ -477,13 +473,11 @@ gsetrl(login_cap_t *lc, int what, const char *name, int type) return (-1); } -#if !defined(__minix) if (setrlimit(what, &rl)) { syslog(LOG_ERR, "%s: setting resource limit %s: %m", lc->lc_class, name); return (-1); } -#endif /* !defined(__minix) */ #undef RCUR #undef RMAX return (0); diff --git a/lib/libutil/passwd.c b/lib/libutil/passwd.c index 826abb14e..9cc1d481a 100644 --- a/lib/libutil/passwd.c +++ b/lib/libutil/passwd.c @@ -207,7 +207,6 @@ pw_cont(int sig) void pw_init(void) { -#if !defined(__minix) struct rlimit rlim; /* Unlimited resource limits. */ @@ -221,7 +220,6 @@ pw_init(void) /* Don't drop core (not really necessary, but GP's). */ rlim.rlim_cur = rlim.rlim_max = 0; (void)setrlimit(RLIMIT_CORE, &rlim); -#endif /* !defined(__minix) */ /* Turn off signals. */ (void)signal(SIGALRM, SIG_IGN); diff --git a/libexec/getty/main.c b/libexec/getty/main.c index 2063c7a03..1ca450259 100644 --- a/libexec/getty/main.c +++ b/libexec/getty/main.c @@ -219,10 +219,10 @@ main(int argc, char *argv[], char *envp[]) */ #if !defined(__minix) (void)signal(SIGXCPU, timeoverrun); +#endif /* !defined(__minix) */ limit.rlim_max = RLIM_INFINITY; limit.rlim_cur = GETTY_TIMEOUT; (void)setrlimit(RLIMIT_CPU, &limit); -#endif /* !defined(__minix) */ /* * The following is a work around for vhangup interactions @@ -432,9 +432,7 @@ main(int argc, char *argv[], char *envp[]) limit.rlim_max = RLIM_INFINITY; limit.rlim_cur = RLIM_INFINITY; -#if !defined(__minix) (void)setrlimit(RLIMIT_CPU, &limit); -#endif /* !defined(__minix) */ if (NN) (void)execle(LO, "login", AL ? "-fp" : "-p", NULL, env); diff --git a/tests/lib/libc/stdio/t_printf.c b/tests/lib/libc/stdio/t_printf.c index 02b46bfeb..95b4b2c9d 100644 --- a/tests/lib/libc/stdio/t_printf.c +++ b/tests/lib/libc/stdio/t_printf.c @@ -138,14 +138,12 @@ ATF_TC_BODY(snprintf_float, tc) uint32_t ul, uh; time_t now; char buf[1000]; -#if !defined(__minix) struct rlimit rl; rl.rlim_cur = rl.rlim_max = 1 * 1024 * 1024; ATF_CHECK(setrlimit(RLIMIT_AS, &rl) != -1); rl.rlim_cur = rl.rlim_max = 1 * 1024 * 1024; ATF_CHECK(setrlimit(RLIMIT_DATA, &rl) != -1); -#endif /* !defined(__minix) */ time(&now); srand(now); diff --git a/usr.bin/make/main.c b/usr.bin/make/main.c index dd77a52c2..3f5a74936 100644 --- a/usr.bin/make/main.c +++ b/usr.bin/make/main.c @@ -841,7 +841,7 @@ main(int argc, char **argv) progname++; else progname = argv[0]; -#if !defined(__minix) && (defined(MAKE_NATIVE) || (defined(HAVE_SETRLIMIT) && defined(RLIMIT_NOFILE))) +#if defined(MAKE_NATIVE) || (defined(HAVE_SETRLIMIT) && defined(RLIMIT_NOFILE)) /* * get rid of resource limit on file descriptors */ diff --git a/usr.bin/sort/sort.c b/usr.bin/sort/sort.c index 76ea52ce6..ab1303d65 100644 --- a/usr.bin/sort/sort.c +++ b/usr.bin/sort/sort.c @@ -124,21 +124,17 @@ main(int argc, char *argv[]) struct filelist filelist; int num_input_files; FILE *outfp = NULL; -#if !defined(__minix) struct rlimit rl; -#endif /* !defined(__minix) */ struct stat st; setlocale(LC_ALL, ""); -#if !defined(__minix) /* bump RLIMIT_NOFILE to maximum our hard limit allows */ if (getrlimit(RLIMIT_NOFILE, &rl) < 0) err(2, "getrlimit"); rl.rlim_cur = rl.rlim_max; if (setrlimit(RLIMIT_NOFILE, &rl) < 0) err(2, "setrlimit"); -#endif /* !defined(__minix) */ d_mask[REC_D = '\n'] = REC_D_F; d_mask['\t'] = d_mask[' '] = BLANK | FLD_D;