From 503b137b8c27b23e2415a38f9d25a3eeac11b702 Mon Sep 17 00:00:00 2001 From: Jerry Jelinek Date: Thu, 7 Aug 2014 00:47:33 +0000 Subject: OS-3320 ltp setrlimit errno failures --- usr/src/lib/brand/lx/lx_brand/common/rlimit.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/usr/src/lib/brand/lx/lx_brand/common/rlimit.c b/usr/src/lib/brand/lx/lx_brand/common/rlimit.c index 17c28409f3..39b17dfc7e 100644 --- a/usr/src/lib/brand/lx/lx_brand/common/rlimit.c +++ b/usr/src/lib/brand/lx/lx_brand/common/rlimit.c @@ -348,6 +348,11 @@ set_rctl(char *rctl, uint64_t value, rctl_priv_t priv) if (rctlblk_get_value(oblk) == value) return (0); + /* non-root cannot raise privileged limit */ + if (priv == RCPRIV_PRIVILEGED && geteuid() != 0 && + value > rctlblk_get_value(oblk)) + return (-EPERM); + bcopy(oblk, nblk, rctlblk_size()); rctlblk_set_value(nblk, value); if (setrctl(rctl, oblk, nblk, RCTL_REPLACE) == -1) @@ -412,6 +417,13 @@ setrlimit_common(int resource, uint64_t rlim_cur, uint64_t rlim_max) if (strcmp(rctl, "process.max-sigqueue-size") == 0 && rlim_max > 8192) return (0); + /* + * Linux limits the max number of open files to 1m and there is a test + * for this. + */ + if (resource == LX_RLIMIT_NOFILE && rlim_max > (1024 * 1024)) + return (-EPERM); + if ((rv = set_rctl(rctl, rlim_max, RCPRIV_PRIVILEGED)) != 0) return (rv); @@ -441,7 +453,7 @@ lx_setrlimit(uintptr_t p1, uintptr_t p2) if (rl.rlim_max == LX_RLIM_INFINITY_N) rlim_max = LX_RLIM64_INFINITY; else - rlim_max = rl.rlim_cur; + rlim_max = rl.rlim_max; return (setrlimit_common(resource, rlim_cur, rlim_max)); } -- cgit v1.2.3