Use rlimit64
authorRobert Swiecki <swiecki@google.com>
Tue, 13 Oct 2015 17:06:49 +0000 (19:06 +0200)
committerRobert Swiecki <swiecki@google.com>
Tue, 13 Oct 2015 17:06:59 +0000 (19:06 +0200)
cmdline.c
common.h
contain.c

index cbfd5f7d5842f00e041cbfc991801ef98dcb48cb..3969400786cca43195d17c89852a520d27dd6149 100644 (file)
--- a/cmdline.c
+++ b/cmdline.c
@@ -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;
index ae303883523f4c46aeedf86885de590d5fe99e3d..57102060f6249a49142751c2a858ca75e98efeda 100644 (file)
--- a/common.h
+++ b/common.h
@@ -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;
index dd9e6a18167baf7f748967b975affc77f4b46b1a..37abfa165dc93b3c88379c359b238336df0b32d1 100644 (file)
--- a/contain.c
+++ b/contain.c
@@ -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;