--- src/limits.c Mon Oct 28 07:53:13 2019 -0600
+++ src/limits.c Tue Oct 29 08:27:31 2019 -0600
static struct saved_limit {
+ { RLIMIT_NOFILE, OPEN_MAX },
struct rlimit inf = { RLIM_INFINITY, RLIM_INFINITY };
debug_decl(unlimit_sudo, SUDO_DEBUG_UTIL)
/* Set resource limits to unlimited and stash the old values. */
if (setrlimit(lim->resource, &inf) == -1) {
struct rlimit rl = lim->limit;
- rl.rlim_cur = rl.rlim_max;
- if (setrlimit(lim->resource, &rl) == -1)
- sudo_warn("setrlimit(%d)", lim->resource);
+ rl.rlim_cur = MAX(rl.rlim_max, lim->fallback);
+ if ((rc = setrlimit(lim->resource, &rl)) == -1) {
+ if (lim->fallback != 0) {
+ /* macOS won't set rlim_cur to RLIM_INFINITY for NOFILE */
+ if (lim->fallback > lim->limit.rlim_cur) {
+ rl.rlim_cur = lim->fallback;
+ rc = setrlimit(lim->resource, &rl);
+ sudo_warn("setrlimit(%d)", lim->resource);