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

Andrea Cervesato andrea.cervesato@suse.com
Fri Feb 21 11:34:15 CET 2025


Hi!

Thanks for converting 64bit test into setrlimit06. Please take in 
consideration the reviews given in the v2 to process v4, unfortunately 
the reviews arrived slightly before this version.

Kind regards,
Andrea Cervesato

On 2/20/25 09:35, Chunfu Wen 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>
> ---
> Changes in v3:
> - Add test logic into current existed file :setrlimit06.c
> - Remove setrlimit07.c file
> - Use test_variants to loop different types
> - Address review comments related to lapi/resurce.h
> - Fix make check issue:while (1) on previous setrlimit06.c file
> - Link to v1:https://lore.kernel.org/all/20250218023107.1208990-1-chwen@redhat.com/
> - Note: it looks like while (1) can not be replaced here after testing by either usleep() or TST_CHECKPOINT_WAKE
> ---
>   include/lapi/resource.h                       | 28 +++++++++++++++
>   .../kernel/syscalls/setrlimit/setrlimit06.c   | 34 +++++++++++++++----
>   2 files changed, 55 insertions(+), 7 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..f40774de7 100644
> --- a/testcases/kernel/syscalls/setrlimit/setrlimit06.c
> +++ b/testcases/kernel/syscalls/setrlimit/setrlimit06.c
> @@ -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[]) {


More information about the ltp mailing list