Use rlimit64

This commit is contained in:
Robert Swiecki 2015-10-13 19:06:49 +02:00
parent 3c9c63b608
commit 5202a7fc07
3 changed files with 26 additions and 26 deletions

View File

@ -129,8 +129,8 @@ static bool cmdlineIsANumber(const char *s)
rlim_t cmdlineParseRLimit(int res, const char *optarg, unsigned long mul)
{
struct rlimit cur;
if (getrlimit(res, &cur) == -1) {
struct rlimit64 cur;
if (prlimit64(0, res, NULL, &cur) == -1) {
PLOG_F("getrlimit(%d)", res);
}
if (strcasecmp(optarg, "max") == 0) {
@ -143,8 +143,8 @@ rlim_t cmdlineParseRLimit(int res, const char *optarg, unsigned long mul)
LOG_F("RLIMIT %d needs a numeric or 'max'/'def' value ('%s' provided)", res,
optarg);
}
rlim_t val = strtoul(optarg, NULL, 0) * mul;
if (val == ULONG_MAX && errno != 0) {
rlim_t val = strtoull(optarg, NULL, 0) * mul;
if (val == ULLONG_MAX && errno != 0) {
PLOG_F("strtoul('%s', 0)", optarg);
}
return val;

View File

@ -63,13 +63,13 @@ struct nsjconf_t {
bool verbose;
bool keep_env;
bool keep_caps;
rlim_t rl_as;
rlim_t rl_core;
rlim_t rl_cpu;
rlim_t rl_fsize;
rlim_t rl_nofile;
rlim_t rl_nproc;
rlim_t rl_stack;
rlim64_t rl_as;
rlim64_t rl_core;
rlim64_t rl_cpu;
rlim64_t rl_fsize;
rlim64_t rl_nofile;
rlim64_t rl_nproc;
rlim64_t rl_stack;
unsigned long personality;
bool clone_newnet;
bool clone_newuser;

View File

@ -412,40 +412,40 @@ bool containMountFS(struct nsjconf_t * nsjconf)
bool containSetLimits(struct nsjconf_t * nsjconf)
{
struct rlimit rl;
struct rlimit64 rl;
rl.rlim_cur = rl.rlim_max = nsjconf->rl_as;
if (setrlimit(RLIMIT_AS, &rl) == -1) {
PLOG_E("setrlimit(RLIMIT_AS, %lu)", nsjconf->rl_as);
if (prlimit64(0, RLIMIT_AS, &rl, NULL) == -1) {
PLOG_E("prlimit64(0, RLIMIT_AS, %lu)", nsjconf->rl_as);
return false;
}
rl.rlim_cur = rl.rlim_max = nsjconf->rl_core;
if (setrlimit(RLIMIT_CORE, &rl) == -1) {
PLOG_E("setrlimit(RLIMIT_CORE, %lu)", nsjconf->rl_core);
if (prlimit64(0, RLIMIT_CORE, &rl, NULL) == -1) {
PLOG_E("prlimit64(0, RLIMIT_CORE, %lu)", nsjconf->rl_core);
return false;
}
rl.rlim_cur = rl.rlim_max = nsjconf->rl_cpu;
if (setrlimit(RLIMIT_CPU, &rl) == -1) {
PLOG_E("setrlimit(RLIMIT_CPU), %lu", nsjconf->rl_cpu);
if (prlimit64(0, RLIMIT_CPU, &rl, NULL) == -1) {
PLOG_E("prlimit64(0, RLIMIT_CPU), %lu", nsjconf->rl_cpu);
return false;
}
rl.rlim_cur = rl.rlim_max = nsjconf->rl_fsize;
if (setrlimit(RLIMIT_FSIZE, &rl) == -1) {
PLOG_E("setrlimit(RLIMIT_FSIZE), %lu", nsjconf->rl_fsize);
if (prlimit64(0, RLIMIT_FSIZE, &rl, NULL) == -1) {
PLOG_E("prlimit64(0, RLIMIT_FSIZE), %lu", nsjconf->rl_fsize);
return false;
}
rl.rlim_cur = rl.rlim_max = nsjconf->rl_nofile;
if (setrlimit(RLIMIT_NOFILE, &rl) == -1) {
PLOG_E("setrlimit(RLIMIT_NOFILE), %lu", nsjconf->rl_nofile);
if (prlimit64(0, RLIMIT_NOFILE, &rl, NULL) == -1) {
PLOG_E("prlimit64(0, RLIMIT_NOFILE), %lu", nsjconf->rl_nofile);
return false;
}
rl.rlim_cur = rl.rlim_max = nsjconf->rl_nproc;
if (setrlimit(RLIMIT_NPROC, &rl) == -1) {
PLOG_E("setrlimit(RLIMIT_NPROC), %lu", nsjconf->rl_nproc);
if (prlimit64(0, RLIMIT_NPROC, &rl, NULL) == -1) {
PLOG_E("prlimit64(0, RLIMIT_NPROC), %lu", nsjconf->rl_nproc);
return false;
}
rl.rlim_cur = rl.rlim_max = nsjconf->rl_stack;
if (setrlimit(RLIMIT_STACK, &rl) == -1) {
PLOG_E("setrlimit(RLIMIT_STACK), %lu", nsjconf->rl_stack);
if (prlimit64(0, RLIMIT_STACK, &rl, NULL) == -1) {
PLOG_E("prlimit64(0, RLIMIT_STACK), %lu", nsjconf->rl_stack);
return false;
}
return true;