int main(void) {

  prlimit();

  return 0;
  
}
Esempio n. 2
0
int main(int argc, char* argv[]) {
  struct rlimit* r;
  struct rlimit* r2;

  ALLOCATE_GUARD(r, 0);
  ALLOCATE_GUARD(r2, 'x');

  test_assert(0 == getrlimit(RLIMIT_FSIZE, r));
  test_assert(r->rlim_cur > 0);
  test_assert(r->rlim_max > 0);
  VERIFY_GUARD(r);

  r->rlim_cur /= 2;
  test_assert(0 == setrlimit(RLIMIT_FSIZE, r));
  VERIFY_GUARD(r);

  test_assert(0 == getrlimit(RLIMIT_FSIZE, r2));
  test_assert(r2->rlim_cur == r->rlim_cur);
  VERIFY_GUARD(r2);

  test_assert(0 == prlimit(0, RLIMIT_FSIZE, r, r2));
  test_assert(r2->rlim_cur == r->rlim_cur);
  VERIFY_GUARD(r);
  VERIFY_GUARD(r2);

  atomic_puts("EXIT-SUCCESS");
  return 0;
}
Esempio n. 3
0
static int
virProcessPrLimit(pid_t pid,
                  int resource,
                  const struct rlimit *new_limit,
                  struct rlimit *old_limit)
{
    return prlimit(pid, resource, new_limit, old_limit);
}
Esempio n. 4
0
static int proc_protect(struct judgx_proc_info *proc_info){
    cap_t caps;
    struct rlimit limit;
    struct judgx_com_proc_add com_proc_add;

    /*caps = cap_init();
    if(cap_set_file(proc_info->path,caps)){
	cap_free(caps);
	goto error;
    }
    cap_free(caps);*/

    limit.rlim_cur = 1;
    limit.rlim_max = limit.rlim_cur;
    prlimit(proc_info->pid,RLIMIT_NPROC,&limit,NULL);

    limit.rlim_cur = 4L;
    limit.rlim_max = limit.rlim_cur;
    prlimit(proc_info->pid,RLIMIT_NOFILE,&limit,NULL);

    limit.rlim_cur = (proc_info->timelimit) / 1000L + 1L;
    limit.rlim_max = limit.rlim_cur;
    prlimit(proc_info->pid,RLIMIT_CPU,&limit,NULL);

    /*limit.rlim_cur = proc_info->memlimit * 1024L + 4096L * 128L;
    limit.rlim_max = limit.rlim_cur;
    prlimit(proc_info->pid,RLIMIT_AS,&limit,NULL);*/

    com_proc_add.path[0] = '\0';
    strncat(com_proc_add.path,proc_info->exe_path,sizeof(com_proc_add.path));
    com_proc_add.pid = proc_info->pid;
    com_proc_add.memlimit = proc_info->memlimit * 1024L + 4096L * 128L;
    if(ioctl(judgx_modfd,IOCTL_PROC_ADD,&com_proc_add)){
	return -1;
    }
    proc_info->task = com_proc_add.task;

    return 0;
}
void SysResourceTest::CheckResourceLimits() {
  ASSERT_EQ(0, getrlimit(RLIMIT_CORE, &l32_));
  ASSERT_EQ(0, getrlimit64(RLIMIT_CORE, &l64_));
  ASSERT_EQ(0, prlimit(0, RLIMIT_CORE, nullptr, &pr_l32_));
  ASSERT_EQ(0, prlimit64(0, RLIMIT_CORE, nullptr, &pr_l64_));

  ASSERT_EQ(l32_.rlim_cur, pr_l32_.rlim_cur);
  ASSERT_EQ(l64_.rlim_cur, pr_l64_.rlim_cur);

  if (l64_.rlim_cur == RLIM64_INFINITY) {
    ASSERT_EQ(RLIM_INFINITY, l32_.rlim_cur);
  } else {
    ASSERT_EQ(l64_.rlim_cur, l32_.rlim_cur);
  }

  ASSERT_EQ(l32_.rlim_max, pr_l32_.rlim_max);
  ASSERT_EQ(l64_.rlim_max, pr_l64_.rlim_max);

  if (l64_.rlim_max == RLIM64_INFINITY) {
    ASSERT_EQ(RLIM_INFINITY, l32_.rlim_max);
  } else {
    ASSERT_EQ(l64_.rlim_max, l32_.rlim_max);
  }
}
Esempio n. 6
0
static int
virProcessPrLimit(pid_t pid, int resource, struct rlimit *rlim)
{
    return prlimit(pid, resource, rlim, NULL);
}
Esempio n. 7
0
                lim.rlim_max = MAX_LIMIT_NUM_FD;
            }
        }

        // Move the iterator back to where it was.
        LE_ASSERT(le_cfg_GoToParent(procCfg) == LE_OK);
    }

    // Hard and soft limits are the same.
    lim.rlim_cur = lim.rlim_max;

    // @todo: Should report the resource name as something more readable than the node name in the
    //        config tree.

    LE_INFO("Setting resource limit %s to value %d.", resourceName, (int)lim.rlim_max);
    LE_ERROR_IF(prlimit(pid, resourceID, &lim, NULL) == -1,
                "Could not set resource limit %s (%d).  %m.", resourceName, resourceID);
}


//--------------------------------------------------------------------------------------------------
/**
 * Sets the resource limits for the specified application.
 */
//--------------------------------------------------------------------------------------------------
void resLim_SetAppLimits
(
    app_Ref_t appRef                ///< [IN] The application to set resource limits for.
)
{
    // Get the application's user name for use with cgroups.
Esempio n. 8
0
int main(int argc, char **argv)
{
    struct rlimit limit;
    char          soft[22], hard[22];
    pid_t         pid;
    int           index = 0;

    if (argc < 2 || !strcmp(argv[1], "-h"))
    {
        return usage();
    }
    if (!(pid = atol(argv[1])) || (!geteuid() && kill(pid, 0)))
    {
        fprintf(stderr, "invalid PID %s\n", argv[1]);
        return -2;
    }
    if (argc < 3)
    {
        return usage();
    }
    if (!strcmp(argv[2], "-a"))
    {
        printf("Limit                     Soft Limit           Hard Limit           Units          Option\n");
        while (limits[index].description)
        {
            if (!prlimit(pid, limits[index].resource, NULL, &limit))
            {
                 if (limit.rlim_cur != RLIM_INFINITY)
                 {
                     sprintf(soft, "%ld", limit.rlim_cur);
                 }
                 else
                 {
                     strcpy(soft, "unlimited");
                 }
                 if (limit.rlim_max != RLIM_INFINITY)
                 {
                     sprintf(hard, "%ld", limit.rlim_max);
                 }
                 else
                 {
                     strcpy(hard, "unlimited");
                 }
            }
            else
            {
                 strcpy(soft, "unknown");
                 strcpy(hard, "unknown");
            }
            printf("%-26.26s%-21.21s%-21.21s%-15.15s-%c\n", limits[index].description, soft, hard, limits[index].units, limits[index].option);
            index++;
        }
        return 0;
    }
    if (argc < 4 || strlen(argv[2]) != 2 || argv[2][0] != '-')
    {
        return usage();
    }
    while (limits[index].description)
    {
        if (argv[2][1] == limits[index].option)
        {
            break;
        }
        index++;
    }
    if (!limits[index].description)
    {
        fprintf(stderr, "unknown option %s\n", argv[2]);
        return usage();
    }
    limit.rlim_cur = limit.rlim_max = atol(argv[3]);
    if (prlimit(pid, limits[index].resource, &limit, NULL))
    {
        perror("rlimit");
        return -3;
    }
    return 0;
}
TEST_F(SysResourceTest, prlimit) {
  pr_l32_.rlim_cur = pr_l32_.rlim_max;
  ASSERT_EQ(0, prlimit(0, RLIMIT_CORE, &pr_l32_, nullptr));
  CheckResourceLimits();
  ASSERT_EQ(pr_l32_.rlim_max, pr_l32_.rlim_cur);
}
 void SetUp() override {
   ASSERT_EQ(0, getrlimit(RLIMIT_CORE, &l32_));
   ASSERT_EQ(0, getrlimit64(RLIMIT_CORE, &l64_));
   ASSERT_EQ(0, prlimit(0, RLIMIT_CORE, nullptr, &pr_l32_));
   ASSERT_EQ(0, prlimit64(0, RLIMIT_CORE, nullptr, &pr_l64_));
 }