[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