[LTP] [PATCH v4] Add test case to cover the setting resource limit64 for process

Chunfu Wen chwen@redhat.com
Wed Feb 26 02:15:10 CET 2025


Hello Maintainers,

Could you please help me review the V4 patch when you have time?

Best Regards,

Chunfu Wen


On Mon, Feb 24, 2025 at 11:07 AM Chunfu Wen <chwen@redhat.com> wrote:

> From: chunfuwen <chwen@redhat.com>
>
> The test ensures that the process gets the correct signals in the correct
> order:
>
> First, it should get SIGXCPU after reaching the soft CPU time limit64.
> Then, if the CPU time exceeds the hard limit, it should receive SIGKILL
>
> Signed-off-by: chunfuwen <chwen@redhat.com>
> ---
>  include/lapi/resource.h                       | 28 ++++++++++++
>  .../kernel/syscalls/setrlimit/setrlimit06.c   | 44 ++++++++++++++-----
>  2 files changed, 60 insertions(+), 12 deletions(-)
>  create mode 100644 include/lapi/resource.h
>
> diff --git a/include/lapi/resource.h b/include/lapi/resource.h
> new file mode 100644
> index 000000000..a9bc57a0a
> --- /dev/null
> +++ b/include/lapi/resource.h
> @@ -0,0 +1,28 @@
> +// SPDX-License-Identifier: GPL-2.0-or-later
> +/*
> + * Copyright (c) 2025 Red Hat Inc. All Rights Reserved.
> + * Author: Chunfu Wen <chwen@redhat.com>
> + */
> +
> +#ifndef LAPI_RESOURCE_H__
> +#define LAPI_RESOURCE_H__
> +
> +#define _GNU_SOURCE
> +
> +#include "config.h"
> +#include <sys/resource.h>
> +#include "lapi/syscalls.h"
> +
> +#ifndef HAVE_STRUCT_RLIMIT64
> +struct rlimit64 {
> +        uint64_t rlim_cur;
> +        uint64_t rlim_max;
> +};
> +#endif
> +
> +static int setrlimit_u64(int resource, const struct rlimit64 *rlim)
> +{
> +        return tst_syscall(__NR_prlimit64, 0, resource, rlim, NULL);
> +}
> +
> +#endif /* LAPI_RESOURCE_H__ */
> diff --git a/testcases/kernel/syscalls/setrlimit/setrlimit06.c
> b/testcases/kernel/syscalls/setrlimit/setrlimit06.c
> index 9ff515d81..ded550973 100644
> --- a/testcases/kernel/syscalls/setrlimit/setrlimit06.c
> +++ b/testcases/kernel/syscalls/setrlimit/setrlimit06.c
> @@ -4,12 +4,12 @@
>   * Author: Xiao Yang <yangx.jy@cn.fujitsu.com>
>   */
>
> -/*
> - * Description:
> +/*\
>   * Set CPU time limit for a process and check its behavior
> - * after reaching CPU time limit.
> - * 1) Process got SIGXCPU after reaching soft limit of CPU time.
> - * 2) Process got SIGKILL after reaching hard limit of CPU time.
> + * after reaching CPU time limit
> + *
> + * - Process got SIGXCPU after reaching soft limit of CPU time
> + * - Process got SIGKILL after reaching hard limit of CPU time
>   *
>   * Note:
>   * This is also a regression test for the following kernel bug:
> @@ -27,6 +27,12 @@
>  #include <sys/mman.h>
>
>  #include "tst_test.h"
> +#include "lapi/resource.h"
> +
> +#define TEST_VARIANTS 2
> +
> +static struct rlimit *rlim;
> +static struct rlimit64 *rlim_64;
>
>  static int *end;
>
> @@ -37,6 +43,11 @@ static void sighandler(int sig)
>
>  static void setup(void)
>  {
> +       rlim->rlim_cur = 1;
> +       rlim->rlim_max = 2;
> +       rlim_64->rlim_cur = 1;
> +       rlim_64->rlim_max = 2;
> +
>         SAFE_SIGNAL(SIGXCPU, sighandler);
>
>         end = SAFE_MMAP(NULL, sizeof(int), PROT_READ | PROT_WRITE,
> @@ -58,12 +69,14 @@ static void verify_setrlimit(void)
>
>         pid = SAFE_FORK();
>         if (!pid) {
> -               struct rlimit rlim = {
> -                       .rlim_cur = 1,
> -                       .rlim_max = 2,
> -               };
> -
> -               TEST(setrlimit(RLIMIT_CPU, &rlim));
> +               switch (tst_variant) {
> +               case 0:
> +                       TEST(setrlimit(RLIMIT_CPU, rlim));
> +               break;
> +               case 1:
> +                       TEST(setrlimit_u64(RLIMIT_CPU, rlim_64));
> +               break;
> +               }
>                 if (TST_RET == -1) {
>                         tst_res(TFAIL | TTERRNO,
>                                 "setrlimit(RLIMIT_CPU) failed");
> @@ -72,7 +85,8 @@ static void verify_setrlimit(void)
>
>                 alarm(20);
>
> -               while (1);
> +               while (1)
> +                       ;
>         }
>
>         SAFE_WAITPID(pid, &status, 0);
> @@ -112,6 +126,12 @@ static void verify_setrlimit(void)
>  static struct tst_test test = {
>         .test_all = verify_setrlimit,
>         .setup = setup,
> +       .test_variants = TEST_VARIANTS,
> +       .bufs = (struct tst_buffers []) {
> +               {&rlim, .size = sizeof(*rlim)},
> +               {&rlim_64, .size = sizeof(*rlim_64)},
> +               {}
> +       },
>         .cleanup = cleanup,
>         .forks_child = 1,
>         .tags = (const struct tst_tag[]) {
> --
> 2.43.5
>
>


More information about the ltp mailing list