Use rlimit64
This commit is contained in:
parent
3c9c63b608
commit
5202a7fc07
@ -129,8 +129,8 @@ static bool cmdlineIsANumber(const char *s)
|
|||||||
|
|
||||||
rlim_t cmdlineParseRLimit(int res, const char *optarg, unsigned long mul)
|
rlim_t cmdlineParseRLimit(int res, const char *optarg, unsigned long mul)
|
||||||
{
|
{
|
||||||
struct rlimit cur;
|
struct rlimit64 cur;
|
||||||
if (getrlimit(res, &cur) == -1) {
|
if (prlimit64(0, res, NULL, &cur) == -1) {
|
||||||
PLOG_F("getrlimit(%d)", res);
|
PLOG_F("getrlimit(%d)", res);
|
||||||
}
|
}
|
||||||
if (strcasecmp(optarg, "max") == 0) {
|
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,
|
LOG_F("RLIMIT %d needs a numeric or 'max'/'def' value ('%s' provided)", res,
|
||||||
optarg);
|
optarg);
|
||||||
}
|
}
|
||||||
rlim_t val = strtoul(optarg, NULL, 0) * mul;
|
rlim_t val = strtoull(optarg, NULL, 0) * mul;
|
||||||
if (val == ULONG_MAX && errno != 0) {
|
if (val == ULLONG_MAX && errno != 0) {
|
||||||
PLOG_F("strtoul('%s', 0)", optarg);
|
PLOG_F("strtoul('%s', 0)", optarg);
|
||||||
}
|
}
|
||||||
return val;
|
return val;
|
||||||
|
14
common.h
14
common.h
@ -63,13 +63,13 @@ struct nsjconf_t {
|
|||||||
bool verbose;
|
bool verbose;
|
||||||
bool keep_env;
|
bool keep_env;
|
||||||
bool keep_caps;
|
bool keep_caps;
|
||||||
rlim_t rl_as;
|
rlim64_t rl_as;
|
||||||
rlim_t rl_core;
|
rlim64_t rl_core;
|
||||||
rlim_t rl_cpu;
|
rlim64_t rl_cpu;
|
||||||
rlim_t rl_fsize;
|
rlim64_t rl_fsize;
|
||||||
rlim_t rl_nofile;
|
rlim64_t rl_nofile;
|
||||||
rlim_t rl_nproc;
|
rlim64_t rl_nproc;
|
||||||
rlim_t rl_stack;
|
rlim64_t rl_stack;
|
||||||
unsigned long personality;
|
unsigned long personality;
|
||||||
bool clone_newnet;
|
bool clone_newnet;
|
||||||
bool clone_newuser;
|
bool clone_newuser;
|
||||||
|
30
contain.c
30
contain.c
@ -412,40 +412,40 @@ bool containMountFS(struct nsjconf_t * nsjconf)
|
|||||||
|
|
||||||
bool containSetLimits(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;
|
rl.rlim_cur = rl.rlim_max = nsjconf->rl_as;
|
||||||
if (setrlimit(RLIMIT_AS, &rl) == -1) {
|
if (prlimit64(0, RLIMIT_AS, &rl, NULL) == -1) {
|
||||||
PLOG_E("setrlimit(RLIMIT_AS, %lu)", nsjconf->rl_as);
|
PLOG_E("prlimit64(0, RLIMIT_AS, %lu)", nsjconf->rl_as);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
rl.rlim_cur = rl.rlim_max = nsjconf->rl_core;
|
rl.rlim_cur = rl.rlim_max = nsjconf->rl_core;
|
||||||
if (setrlimit(RLIMIT_CORE, &rl) == -1) {
|
if (prlimit64(0, RLIMIT_CORE, &rl, NULL) == -1) {
|
||||||
PLOG_E("setrlimit(RLIMIT_CORE, %lu)", nsjconf->rl_core);
|
PLOG_E("prlimit64(0, RLIMIT_CORE, %lu)", nsjconf->rl_core);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
rl.rlim_cur = rl.rlim_max = nsjconf->rl_cpu;
|
rl.rlim_cur = rl.rlim_max = nsjconf->rl_cpu;
|
||||||
if (setrlimit(RLIMIT_CPU, &rl) == -1) {
|
if (prlimit64(0, RLIMIT_CPU, &rl, NULL) == -1) {
|
||||||
PLOG_E("setrlimit(RLIMIT_CPU), %lu", nsjconf->rl_cpu);
|
PLOG_E("prlimit64(0, RLIMIT_CPU), %lu", nsjconf->rl_cpu);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
rl.rlim_cur = rl.rlim_max = nsjconf->rl_fsize;
|
rl.rlim_cur = rl.rlim_max = nsjconf->rl_fsize;
|
||||||
if (setrlimit(RLIMIT_FSIZE, &rl) == -1) {
|
if (prlimit64(0, RLIMIT_FSIZE, &rl, NULL) == -1) {
|
||||||
PLOG_E("setrlimit(RLIMIT_FSIZE), %lu", nsjconf->rl_fsize);
|
PLOG_E("prlimit64(0, RLIMIT_FSIZE), %lu", nsjconf->rl_fsize);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
rl.rlim_cur = rl.rlim_max = nsjconf->rl_nofile;
|
rl.rlim_cur = rl.rlim_max = nsjconf->rl_nofile;
|
||||||
if (setrlimit(RLIMIT_NOFILE, &rl) == -1) {
|
if (prlimit64(0, RLIMIT_NOFILE, &rl, NULL) == -1) {
|
||||||
PLOG_E("setrlimit(RLIMIT_NOFILE), %lu", nsjconf->rl_nofile);
|
PLOG_E("prlimit64(0, RLIMIT_NOFILE), %lu", nsjconf->rl_nofile);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
rl.rlim_cur = rl.rlim_max = nsjconf->rl_nproc;
|
rl.rlim_cur = rl.rlim_max = nsjconf->rl_nproc;
|
||||||
if (setrlimit(RLIMIT_NPROC, &rl) == -1) {
|
if (prlimit64(0, RLIMIT_NPROC, &rl, NULL) == -1) {
|
||||||
PLOG_E("setrlimit(RLIMIT_NPROC), %lu", nsjconf->rl_nproc);
|
PLOG_E("prlimit64(0, RLIMIT_NPROC), %lu", nsjconf->rl_nproc);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
rl.rlim_cur = rl.rlim_max = nsjconf->rl_stack;
|
rl.rlim_cur = rl.rlim_max = nsjconf->rl_stack;
|
||||||
if (setrlimit(RLIMIT_STACK, &rl) == -1) {
|
if (prlimit64(0, RLIMIT_STACK, &rl, NULL) == -1) {
|
||||||
PLOG_E("setrlimit(RLIMIT_STACK), %lu", nsjconf->rl_stack);
|
PLOG_E("prlimit64(0, RLIMIT_STACK), %lu", nsjconf->rl_stack);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
|
Loading…
Reference in New Issue
Block a user