All of lore.kernel.org
 help / color / mirror / Atom feed
* [LTP] [PATCH v1 0/2] Lib add .ulimit setting
@ 2023-10-21 12:29 Wei Gao via ltp
  2023-10-21 12:29 ` [LTP] [PATCH v1 1/2] lib: Add .ulimit Wei Gao via ltp
                   ` (2 more replies)
  0 siblings, 3 replies; 23+ messages in thread
From: Wei Gao via ltp @ 2023-10-21 12:29 UTC (permalink / raw)
  To: ltp

Wei Gao: 
  lib: Add .ulimit
  execl01.c: set stack to unlimited

 include/tst_test.h                        |  6 ++++++
 include/tst_ulimit.h                      | 18 +++++++++++++++++
 lib/tst_test.c                            |  9 +++++++++
 lib/tst_ulimit.c                          | 24 +++++++++++++++++++++++
 testcases/kernel/syscalls/execl/execl01.c |  4 ++++
 5 files changed, 61 insertions(+)
 create mode 100644 include/tst_ulimit.h
 create mode 100644 lib/tst_ulimit.c

-- 
2.35.3


-- 
Mailing list info: https://lists.linux.it/listinfo/ltp

^ permalink raw reply	[flat|nested] 23+ messages in thread

* [LTP] [PATCH v1 1/2] lib: Add .ulimit
  2023-10-21 12:29 [LTP] [PATCH v1 0/2] Lib add .ulimit setting Wei Gao via ltp
@ 2023-10-21 12:29 ` Wei Gao via ltp
  2023-10-23 11:03   ` Petr Vorel
  2023-10-23 12:29   ` Cyril Hrubis
  2023-10-21 12:29 ` [LTP] [PATCH v1 2/2] execl01.c: set stack to unlimited Wei Gao via ltp
  2023-10-25  8:37 ` [LTP] [PATCH v2 0/2] Lib add .ulimit setting Wei Gao via ltp
  2 siblings, 2 replies; 23+ messages in thread
From: Wei Gao via ltp @ 2023-10-21 12:29 UTC (permalink / raw)
  To: ltp

Fix: #530
Signed-off-by: Wei Gao <wegao@suse.com>
---
 include/tst_test.h   |  6 ++++++
 include/tst_ulimit.h | 18 ++++++++++++++++++
 lib/tst_test.c       |  9 +++++++++
 lib/tst_ulimit.c     | 24 ++++++++++++++++++++++++
 4 files changed, 57 insertions(+)
 create mode 100644 include/tst_ulimit.h
 create mode 100644 lib/tst_ulimit.c

diff --git a/include/tst_test.h b/include/tst_test.h
index 75c2109b9..79abc2773 100644
--- a/include/tst_test.h
+++ b/include/tst_test.h
@@ -34,6 +34,7 @@
 #include "tst_get_bad_addr.h"
 #include "tst_path_has_mnt_flags.h"
 #include "tst_sys_conf.h"
+#include "tst_ulimit.h"
 #include "tst_coredump.h"
 #include "tst_buffers.h"
 #include "tst_capability.h"
@@ -306,6 +307,11 @@ struct tst_test {
 	 */
 	const struct tst_path_val *save_restore;
 
+	/*
+	 * {NULL, NULL} terminated array of (ulimit resource type and value)
+	 */
+	const struct tst_ulimit_val *ulimit;
+
 	/*
 	 * NULL terminated array of kernel config options required for the
 	 * test.
diff --git a/include/tst_ulimit.h b/include/tst_ulimit.h
new file mode 100644
index 000000000..b4f97670a
--- /dev/null
+++ b/include/tst_ulimit.h
@@ -0,0 +1,18 @@
+/* SPDX-License-Identifier: GPL-2.0-only
+ *
+ * Copyright (c) 2023 Wei Gao <wegao@suse.com>
+ */
+
+#ifndef TST_ULIMIT_H__
+#define TST_ULIMIT_H__
+
+#include <sys/resource.h>
+
+struct tst_ulimit_val {
+	int resource;
+	struct rlimit rlim;
+};
+
+void tst_ulimit_conf(const struct tst_ulimit_val *conf);
+
+#endif
diff --git a/lib/tst_test.c b/lib/tst_test.c
index 2e58cad33..a8c7c7ba6 100644
--- a/lib/tst_test.c
+++ b/lib/tst_test.c
@@ -1227,6 +1227,15 @@ static void do_setup(int argc, char *argv[])
 		}
 	}
 
+	if (tst_test->ulimit) {
+		const struct tst_ulimit_val *pvl = tst_test->ulimit;
+
+		while (pvl->resource) {
+			tst_ulimit_conf(pvl);
+			pvl++;
+		}
+	}
+
 	if (tst_test->mntpoint)
 		SAFE_MKDIR(tst_test->mntpoint, 0777);
 
diff --git a/lib/tst_ulimit.c b/lib/tst_ulimit.c
new file mode 100644
index 000000000..1249d65d8
--- /dev/null
+++ b/lib/tst_ulimit.c
@@ -0,0 +1,24 @@
+// SPDX-License-Identifier: GPL-2.0-only
+/*
+ * Copyright (c) 2023 Wei Gao <wegao@suse.com>
+ */
+
+#define TST_NO_DEFAULT_MAIN
+#include "tst_test.h"
+#include "tst_ulimit.h"
+
+struct tst_ulimit_conf {
+	int resource;
+	struct rlimit rlim;
+};
+
+void tst_ulimit_conf(const struct tst_ulimit_val *conf)
+{
+	struct rlimit rlim;
+
+	rlim.rlim_cur = conf->rlim.rlim_cur;
+	rlim.rlim_max = conf->rlim.rlim_max;
+
+	tst_res(TINFO, "Set ulimit resource:%d rlim_cur:%ld rlim_max:%ld", conf->resource, rlim.rlim_cur, rlim.rlim_max);
+	SAFE_SETRLIMIT(conf->resource, &rlim);
+}
-- 
2.35.3


-- 
Mailing list info: https://lists.linux.it/listinfo/ltp

^ permalink raw reply related	[flat|nested] 23+ messages in thread

* [LTP] [PATCH v1 2/2] execl01.c: set stack to unlimited
  2023-10-21 12:29 [LTP] [PATCH v1 0/2] Lib add .ulimit setting Wei Gao via ltp
  2023-10-21 12:29 ` [LTP] [PATCH v1 1/2] lib: Add .ulimit Wei Gao via ltp
@ 2023-10-21 12:29 ` Wei Gao via ltp
  2023-10-23 11:26   ` Petr Vorel
  2023-10-25  8:37 ` [LTP] [PATCH v2 0/2] Lib add .ulimit setting Wei Gao via ltp
  2 siblings, 1 reply; 23+ messages in thread
From: Wei Gao via ltp @ 2023-10-21 12:29 UTC (permalink / raw)
  To: ltp

Signed-off-by: Wei Gao <wegao@suse.com>
---
 testcases/kernel/syscalls/execl/execl01.c | 4 ++++
 1 file changed, 4 insertions(+)

diff --git a/testcases/kernel/syscalls/execl/execl01.c b/testcases/kernel/syscalls/execl/execl01.c
index 9268d4976..5cdd84656 100644
--- a/testcases/kernel/syscalls/execl/execl01.c
+++ b/testcases/kernel/syscalls/execl/execl01.c
@@ -35,4 +35,8 @@ static struct tst_test test = {
 	.forks_child = 1,
 	.child_needs_reinit = 1,
 	.test_all = verify_execl,
+	.ulimit = (const struct tst_ulimit_val[]) {
+		{RLIMIT_STACK, {RLIM_INFINITY, RLIM_INFINITY}},
+		{}
+	},
 };
-- 
2.35.3


-- 
Mailing list info: https://lists.linux.it/listinfo/ltp

^ permalink raw reply related	[flat|nested] 23+ messages in thread

* Re: [LTP] [PATCH v1 1/2] lib: Add .ulimit
  2023-10-21 12:29 ` [LTP] [PATCH v1 1/2] lib: Add .ulimit Wei Gao via ltp
@ 2023-10-23 11:03   ` Petr Vorel
  2023-10-23 12:29   ` Cyril Hrubis
  1 sibling, 0 replies; 23+ messages in thread
From: Petr Vorel @ 2023-10-23 11:03 UTC (permalink / raw)
  To: Wei Gao; +Cc: ltp

> Fix: #530
very nit: Although this works, we usually use:
Fixes: #530

...
>  	/*
>  	 * NULL terminated array of kernel config options required for the
>  	 * test.
> diff --git a/include/tst_ulimit.h b/include/tst_ulimit.h
> new file mode 100644
> index 000000000..b4f97670a
> --- /dev/null
> +++ b/include/tst_ulimit.h

I wonder if it's worth to add new header and C source just for single struct and
function. We might do so, but I consider that as a bad habit. I'd move that to
tst_test.{c,h}. But maybe others see it differently.

> @@ -0,0 +1,18 @@
> +/* SPDX-License-Identifier: GPL-2.0-only
Why v2 only? We use GLP v2+ for new code.
SPDX-License-Identifier: GPL-2.0-or-later

> + *
> + * Copyright (c) 2023 Wei Gao <wegao@suse.com>
> + */
> +
> +#ifndef TST_ULIMIT_H__
> +#define TST_ULIMIT_H__
> +
> +#include <sys/resource.h>
> +
> +struct tst_ulimit_val {
> +	int resource;
> +	struct rlimit rlim;
> +};
> +
> +void tst_ulimit_conf(const struct tst_ulimit_val *conf);
> +
> +#endif
> diff --git a/lib/tst_test.c b/lib/tst_test.c
> index 2e58cad33..a8c7c7ba6 100644
> --- a/lib/tst_test.c
> +++ b/lib/tst_test.c
> @@ -1227,6 +1227,15 @@ static void do_setup(int argc, char *argv[])
>  		}
>  	}

> +	if (tst_test->ulimit) {
> +		const struct tst_ulimit_val *pvl = tst_test->ulimit;
> +
> +		while (pvl->resource) {
> +			tst_ulimit_conf(pvl);
> +			pvl++;
> +		}
> +	}
> +
>  	if (tst_test->mntpoint)
>  		SAFE_MKDIR(tst_test->mntpoint, 0777);

> diff --git a/lib/tst_ulimit.c b/lib/tst_ulimit.c
> new file mode 100644
> index 000000000..1249d65d8
> --- /dev/null
> +++ b/lib/tst_ulimit.c
> @@ -0,0 +1,24 @@
> +// SPDX-License-Identifier: GPL-2.0-only
Again, v2+ please.

> +/*
> + * Copyright (c) 2023 Wei Gao <wegao@suse.com>
> + */
> +
> +#define TST_NO_DEFAULT_MAIN
> +#include "tst_test.h"
> +#include "tst_ulimit.h"
Again, please IMHO this should be in tst_test.c.

> +
> +struct tst_ulimit_conf {
> +	int resource;
> +	struct rlimit rlim;
> +};
> +
> +void tst_ulimit_conf(const struct tst_ulimit_val *conf)
> +{
> +	struct rlimit rlim;
> +
> +	rlim.rlim_cur = conf->rlim.rlim_cur;
> +	rlim.rlim_max = conf->rlim.rlim_max;
> +
> +	tst_res(TINFO, "Set ulimit resource:%d rlim_cur:%ld rlim_max:%ld", conf->resource, rlim.rlim_cur, rlim.rlim_max);
nit: Could we improve formatting (spaces, commas):
	tst_res(TINFO, "Set ulimit resource: %d, rlim_cur: %ld, rlim_max: %ld",
		conf->resource, rlim.rlim_cur, rlim.rlim_max);

First I thought all library code should use tst_res_(), so that we get file and
line of the original call, not the place in the library. But in code is used
only in the library thus tst_res() is ok.

> +	SAFE_SETRLIMIT(conf->resource, &rlim);
Also here is probably ok that SAFE_SETRLIMIT() is correct (not
safe_setrlimit()).

Kind regards,
Petr

-- 
Mailing list info: https://lists.linux.it/listinfo/ltp

^ permalink raw reply	[flat|nested] 23+ messages in thread

* Re: [LTP] [PATCH v1 2/2] execl01.c: set stack to unlimited
  2023-10-21 12:29 ` [LTP] [PATCH v1 2/2] execl01.c: set stack to unlimited Wei Gao via ltp
@ 2023-10-23 11:26   ` Petr Vorel
  0 siblings, 0 replies; 23+ messages in thread
From: Petr Vorel @ 2023-10-23 11:26 UTC (permalink / raw)
  To: Wei Gao; +Cc: ltp

Hi Wei,

It would be also here mention
https://github.com/linux-test-project/ltp/issues/530

Reviewed-by: Petr Vorel <pvorel@suse.cz>

> Signed-off-by: Wei Gao <wegao@suse.com>
> ---
>  testcases/kernel/syscalls/execl/execl01.c | 4 ++++
>  1 file changed, 4 insertions(+)

> diff --git a/testcases/kernel/syscalls/execl/execl01.c b/testcases/kernel/syscalls/execl/execl01.c
> index 9268d4976..5cdd84656 100644
> --- a/testcases/kernel/syscalls/execl/execl01.c
> +++ b/testcases/kernel/syscalls/execl/execl01.c
> @@ -35,4 +35,8 @@ static struct tst_test test = {
>  	.forks_child = 1,
>  	.child_needs_reinit = 1,
>  	.test_all = verify_execl,

BTW #530 mentions execve(). Is it ok that we use it on execl()?

The difference is not big (all glibc wrappers use SYS_execve syscall
internally), so that it might be OK, but how about also add it to some test
which uses execve() + SAFE_FORK()/.fork_child (e.g. execve01.c).

Kind regards,
Petr

> +	.ulimit = (const struct tst_ulimit_val[]) {
> +		{RLIMIT_STACK, {RLIM_INFINITY, RLIM_INFINITY}},
> +		{}
> +	},
>  };

-- 
Mailing list info: https://lists.linux.it/listinfo/ltp

^ permalink raw reply	[flat|nested] 23+ messages in thread

* Re: [LTP] [PATCH v1 1/2] lib: Add .ulimit
  2023-10-21 12:29 ` [LTP] [PATCH v1 1/2] lib: Add .ulimit Wei Gao via ltp
  2023-10-23 11:03   ` Petr Vorel
@ 2023-10-23 12:29   ` Cyril Hrubis
  2023-10-23 12:32     ` Cyril Hrubis
  1 sibling, 1 reply; 23+ messages in thread
From: Cyril Hrubis @ 2023-10-23 12:29 UTC (permalink / raw)
  To: Wei Gao; +Cc: ltp

Hi!
> +	/*
> +	 * {NULL, NULL} terminated array of (ulimit resource type and value)
              ^
	      That's technically {0, NULL} or maybe we can just start
	      using the newer syntax with just {}
> +	 */
> +	const struct tst_ulimit_val *ulimit;
> +
>  	/*
>  	 * NULL terminated array of kernel config options required for the
>  	 * test.
> diff --git a/include/tst_ulimit.h b/include/tst_ulimit.h
> new file mode 100644
> index 000000000..b4f97670a
> --- /dev/null
> +++ b/include/tst_ulimit.h
> @@ -0,0 +1,18 @@
> +/* SPDX-License-Identifier: GPL-2.0-only
> + *
> + * Copyright (c) 2023 Wei Gao <wegao@suse.com>
> + */
> +
> +#ifndef TST_ULIMIT_H__
> +#define TST_ULIMIT_H__
> +
> +#include <sys/resource.h>
> +
> +struct tst_ulimit_val {
> +	int resource;
> +	struct rlimit rlim;
> +};
> +
> +void tst_ulimit_conf(const struct tst_ulimit_val *conf);

Maybe tst_ulimit_set()?

> +#endif
> diff --git a/lib/tst_test.c b/lib/tst_test.c
> index 2e58cad33..a8c7c7ba6 100644
> --- a/lib/tst_test.c
> +++ b/lib/tst_test.c
> @@ -1227,6 +1227,15 @@ static void do_setup(int argc, char *argv[])
>  		}
>  	}
>  
> +	if (tst_test->ulimit) {
> +		const struct tst_ulimit_val *pvl = tst_test->ulimit;
> +
> +		while (pvl->resource) {
> +			tst_ulimit_conf(pvl);
> +			pvl++;
> +		}
> +	}
> +
>  	if (tst_test->mntpoint)
>  		SAFE_MKDIR(tst_test->mntpoint, 0777);
>  
> diff --git a/lib/tst_ulimit.c b/lib/tst_ulimit.c
> new file mode 100644
> index 000000000..1249d65d8
> --- /dev/null
> +++ b/lib/tst_ulimit.c
> @@ -0,0 +1,24 @@
> +// SPDX-License-Identifier: GPL-2.0-only
> +/*
> + * Copyright (c) 2023 Wei Gao <wegao@suse.com>
> + */
> +
> +#define TST_NO_DEFAULT_MAIN
> +#include "tst_test.h"
> +#include "tst_ulimit.h"
> +
> +struct tst_ulimit_conf {
> +	int resource;
> +	struct rlimit rlim;
> +};

This structure is defined in header already.

> +void tst_ulimit_conf(const struct tst_ulimit_val *conf)
> +{
> +	struct rlimit rlim;
> +
> +	rlim.rlim_cur = conf->rlim.rlim_cur;
> +	rlim.rlim_max = conf->rlim.rlim_max;

I wonder if we should adjust the max only if it's smallre than the
requested value.

> +	tst_res(TINFO, "Set ulimit resource:%d rlim_cur:%ld rlim_max:%ld", conf->resource, rlim.rlim_cur, rlim.rlim_max);
> +	SAFE_SETRLIMIT(conf->resource, &rlim);
> +}
> -- 
> 2.35.3
> 
> 
> -- 
> Mailing list info: https://lists.linux.it/listinfo/ltp

-- 
Cyril Hrubis
chrubis@suse.cz

-- 
Mailing list info: https://lists.linux.it/listinfo/ltp

^ permalink raw reply	[flat|nested] 23+ messages in thread

* Re: [LTP] [PATCH v1 1/2] lib: Add .ulimit
  2023-10-23 12:29   ` Cyril Hrubis
@ 2023-10-23 12:32     ` Cyril Hrubis
  0 siblings, 0 replies; 23+ messages in thread
From: Cyril Hrubis @ 2023-10-23 12:32 UTC (permalink / raw)
  To: Wei Gao; +Cc: ltp

Hi!
> > +void tst_ulimit_conf(const struct tst_ulimit_val *conf)
> > +{
> > +	struct rlimit rlim;
> > +
> > +	rlim.rlim_cur = conf->rlim.rlim_cur;
> > +	rlim.rlim_max = conf->rlim.rlim_max;
> 
> I wonder if we should adjust the max only if it's smallre than the
> requested value.

Looking again we store both values in the structure. I wonder if we need
to set both, maybe we just need the rlim_cur value in the tst_ulimit_val
structure and we would attempt to adjust rlim_max only if its smaller
than rlim_cur. That would allow us to use the API even for tests that
does not require root to raise limits within the permitted maxium.

-- 
Cyril Hrubis
chrubis@suse.cz

-- 
Mailing list info: https://lists.linux.it/listinfo/ltp

^ permalink raw reply	[flat|nested] 23+ messages in thread

* [LTP] [PATCH v2 0/2] Lib add .ulimit setting
  2023-10-21 12:29 [LTP] [PATCH v1 0/2] Lib add .ulimit setting Wei Gao via ltp
  2023-10-21 12:29 ` [LTP] [PATCH v1 1/2] lib: Add .ulimit Wei Gao via ltp
  2023-10-21 12:29 ` [LTP] [PATCH v1 2/2] execl01.c: set stack to unlimited Wei Gao via ltp
@ 2023-10-25  8:37 ` Wei Gao via ltp
  2023-10-25  8:37   ` [LTP] [PATCH v2 1/2] lib: Add .ulimit Wei Gao via ltp
                     ` (2 more replies)
  2 siblings, 3 replies; 23+ messages in thread
From: Wei Gao via ltp @ 2023-10-25  8:37 UTC (permalink / raw)
  To: ltp

Wei Gao (2):
  lib: Add .ulimit
  execl01.c: set stack to unlimited

 include/tst_test.h                        | 14 ++++++++++++
 lib/tst_test.c                            | 28 +++++++++++++++++++++++
 testcases/kernel/syscalls/execl/execl01.c |  4 ++++
 3 files changed, 46 insertions(+)

-- 
2.35.3


-- 
Mailing list info: https://lists.linux.it/listinfo/ltp

^ permalink raw reply	[flat|nested] 23+ messages in thread

* [LTP] [PATCH v2 1/2] lib: Add .ulimit
  2023-10-25  8:37 ` [LTP] [PATCH v2 0/2] Lib add .ulimit setting Wei Gao via ltp
@ 2023-10-25  8:37   ` Wei Gao via ltp
  2024-01-08 11:47     ` Petr Vorel
  2023-10-25  8:37   ` [LTP] [PATCH v2 2/2] execl01.c: set stack to unlimited Wei Gao via ltp
  2024-01-09  6:59   ` [LTP] [PATCH v3 0/2] Lib add .ulimit setting Wei Gao via ltp
  2 siblings, 1 reply; 23+ messages in thread
From: Wei Gao via ltp @ 2023-10-25  8:37 UTC (permalink / raw)
  To: ltp

Fixs: #530
Signed-off-by: Wei Gao <wegao@suse.com>
---
 include/tst_test.h | 14 ++++++++++++++
 lib/tst_test.c     | 28 ++++++++++++++++++++++++++++
 2 files changed, 42 insertions(+)

diff --git a/include/tst_test.h b/include/tst_test.h
index 75c2109b9..dcdbc71d7 100644
--- a/include/tst_test.h
+++ b/include/tst_test.h
@@ -15,6 +15,7 @@
 #include <limits.h>
 #include <string.h>
 #include <errno.h>
+#include <sys/resource.h>
 
 #include "tst_common.h"
 #include "tst_res_flags.h"
@@ -148,6 +149,11 @@ extern unsigned int tst_variant;
 
 #define TST_UNLIMITED_RUNTIME (-1)
 
+struct tst_ulimit_val {
+	int resource;
+	rlim_t rlim_cur;
+};
+
 struct tst_test {
 	/* number of tests available in test() function */
 	unsigned int tcnt;
@@ -306,6 +312,11 @@ struct tst_test {
 	 */
 	const struct tst_path_val *save_restore;
 
+	/*
+	 * {NULL, NULL} terminated array of (ulimit resource type and value)
+	 */
+	const struct tst_ulimit_val *ulimit;
+
 	/*
 	 * NULL terminated array of kernel config options required for the
 	 * test.
@@ -392,6 +403,9 @@ int tst_validate_children_(const char *file, const int lineno,
 #define tst_validate_children(child_count) \
 	tst_validate_children_(__FILE__, __LINE__, (child_count))
 
+#define tst_set_ulimit(conf) \
+	tst_set_ulimit_(__FILE__, __LINE__, (conf))
+
 #ifndef TST_NO_DEFAULT_MAIN
 
 static struct tst_test test;
diff --git a/lib/tst_test.c b/lib/tst_test.c
index 2e58cad33..59eeda7e7 100644
--- a/lib/tst_test.c
+++ b/lib/tst_test.c
@@ -1129,6 +1129,25 @@ static void do_cgroup_requires(void)
 	tst_cg_init();
 }
 
+void tst_set_ulimit_(const char *file, const int lineno, const struct tst_ulimit_val *conf)
+{
+	struct rlimit rlim;
+
+	SAFE_GETRLIMIT(conf->resource, &rlim);
+
+	if (conf->rlim_cur > rlim.rlim_max) {
+		rlim.rlim_max = conf->rlim_cur;
+		rlim.rlim_cur = conf->rlim_cur;
+	} else {
+		rlim.rlim_cur = conf->rlim_cur;
+	}
+
+	tst_res_(file, lineno, TINFO, "Set ulimit resource:%d rlim_cur:%lu rlim_max:%lu",
+		conf->resource, rlim.rlim_cur, rlim.rlim_max);
+
+	safe_setrlimit(file, lineno, conf->resource, &rlim);
+}
+
 static void do_setup(int argc, char *argv[])
 {
 	if (!tst_test)
@@ -1227,6 +1246,15 @@ static void do_setup(int argc, char *argv[])
 		}
 	}
 
+	if (tst_test->ulimit) {
+		const struct tst_ulimit_val *pvl = tst_test->ulimit;
+
+		while (pvl->resource) {
+			tst_set_ulimit(pvl);
+			pvl++;
+		}
+	}
+
 	if (tst_test->mntpoint)
 		SAFE_MKDIR(tst_test->mntpoint, 0777);
 
-- 
2.35.3


-- 
Mailing list info: https://lists.linux.it/listinfo/ltp

^ permalink raw reply related	[flat|nested] 23+ messages in thread

* [LTP] [PATCH v2 2/2] execl01.c: set stack to unlimited
  2023-10-25  8:37 ` [LTP] [PATCH v2 0/2] Lib add .ulimit setting Wei Gao via ltp
  2023-10-25  8:37   ` [LTP] [PATCH v2 1/2] lib: Add .ulimit Wei Gao via ltp
@ 2023-10-25  8:37   ` Wei Gao via ltp
  2024-01-08 10:17     ` Petr Vorel
  2024-01-09  6:59   ` [LTP] [PATCH v3 0/2] Lib add .ulimit setting Wei Gao via ltp
  2 siblings, 1 reply; 23+ messages in thread
From: Wei Gao via ltp @ 2023-10-25  8:37 UTC (permalink / raw)
  To: ltp

Signed-off-by: Wei Gao <wegao@suse.com>
---
 testcases/kernel/syscalls/execl/execl01.c | 4 ++++
 1 file changed, 4 insertions(+)

diff --git a/testcases/kernel/syscalls/execl/execl01.c b/testcases/kernel/syscalls/execl/execl01.c
index 9268d4976..dfefd1fa8 100644
--- a/testcases/kernel/syscalls/execl/execl01.c
+++ b/testcases/kernel/syscalls/execl/execl01.c
@@ -35,4 +35,8 @@ static struct tst_test test = {
 	.forks_child = 1,
 	.child_needs_reinit = 1,
 	.test_all = verify_execl,
+	.ulimit = (const struct tst_ulimit_val[]) {
+		{RLIMIT_STACK, RLIM_INFINITY},
+		{}
+	},
 };
-- 
2.35.3


-- 
Mailing list info: https://lists.linux.it/listinfo/ltp

^ permalink raw reply related	[flat|nested] 23+ messages in thread

* Re: [LTP] [PATCH v2 2/2] execl01.c: set stack to unlimited
  2023-10-25  8:37   ` [LTP] [PATCH v2 2/2] execl01.c: set stack to unlimited Wei Gao via ltp
@ 2024-01-08 10:17     ` Petr Vorel
  0 siblings, 0 replies; 23+ messages in thread
From: Petr Vorel @ 2024-01-08 10:17 UTC (permalink / raw)
  To: Wei Gao; +Cc: ltp

Hi Wei,

Reviewed-by: Petr Vorel <pvorel@suse.cz>

Kind regards,
Petr

-- 
Mailing list info: https://lists.linux.it/listinfo/ltp

^ permalink raw reply	[flat|nested] 23+ messages in thread

* Re: [LTP] [PATCH v2 1/2] lib: Add .ulimit
  2023-10-25  8:37   ` [LTP] [PATCH v2 1/2] lib: Add .ulimit Wei Gao via ltp
@ 2024-01-08 11:47     ` Petr Vorel
  0 siblings, 0 replies; 23+ messages in thread
From: Petr Vorel @ 2024-01-08 11:47 UTC (permalink / raw)
  To: Wei Gao; +Cc: ltp

Hi Wei, Cyril,

> Fixs: #530
> Signed-off-by: Wei Gao <wegao@suse.com>
> ---
>  include/tst_test.h | 14 ++++++++++++++
>  lib/tst_test.c     | 28 ++++++++++++++++++++++++++++
>  2 files changed, 42 insertions(+)

> diff --git a/include/tst_test.h b/include/tst_test.h
> index 75c2109b9..dcdbc71d7 100644
> --- a/include/tst_test.h
> +++ b/include/tst_test.h
> @@ -15,6 +15,7 @@
>  #include <limits.h>
>  #include <string.h>
>  #include <errno.h>
> +#include <sys/resource.h>

>  #include "tst_common.h"
>  #include "tst_res_flags.h"
> @@ -148,6 +149,11 @@ extern unsigned int tst_variant;

>  #define TST_UNLIMITED_RUNTIME (-1)

> +struct tst_ulimit_val {
> +	int resource;
> +	rlim_t rlim_cur;
> +};
> +
>  struct tst_test {
>  	/* number of tests available in test() function */
>  	unsigned int tcnt;
> @@ -306,6 +312,11 @@ struct tst_test {
>  	 */
>  	const struct tst_path_val *save_restore;

> +	/*
> +	 * {NULL, NULL} terminated array of (ulimit resource type and value)
> +	 */
> +	const struct tst_ulimit_val *ulimit;
> +
>  	/*
>  	 * NULL terminated array of kernel config options required for the
>  	 * test.
> @@ -392,6 +403,9 @@ int tst_validate_children_(const char *file, const int lineno,
>  #define tst_validate_children(child_count) \
>  	tst_validate_children_(__FILE__, __LINE__, (child_count))

> +#define tst_set_ulimit(conf) \
> +	tst_set_ulimit_(__FILE__, __LINE__, (conf))
> +
>  #ifndef TST_NO_DEFAULT_MAIN

>  static struct tst_test test;
> diff --git a/lib/tst_test.c b/lib/tst_test.c
> index 2e58cad33..59eeda7e7 100644
> --- a/lib/tst_test.c
> +++ b/lib/tst_test.c
> @@ -1129,6 +1129,25 @@ static void do_cgroup_requires(void)
>  	tst_cg_init();
>  }

This patch requires manual adjustments (it does not apply to the master any more).

Also, this should be documented in doc/C-Test-API.asciidoc.

> +void tst_set_ulimit_(const char *file, const int lineno, const struct tst_ulimit_val *conf)
$ cd lib && make check-tst_test
...
tst_test.c:1150:13: warning: LTP-003: Symbol 'tst_set_ulimit_' has the LTP public library prefix, but is static (private).

If we want to use also in the tests (like tst_validate_children), the function
signature should be also in the header, e.g.:

include/tst_test.h
...
void tst_set_ulimit_(const char *file, const int lineno, const struct tst_ulimit_val *conf);
#define tst_set_ulimit(conf) \
	tst_set_ulimit_(__FILE__, __LINE__, (conf))

And, because offered to use in th tests, the function would deserve 1) comment
in include/tst_test.h.

But because tst_set_ulimit_() is just a wrapper over safe_setrlimit(), I don't
think it's needed to be called in the tests directly. Therefore the
#define tst_set_ulimit(conf) definition in the header is IMHO not needed
and tst_set_ulimit_() in lib/tst_test.c could be tst_set_ulimit() (without
underscore) and with static keyword.

> +{
> +	struct rlimit rlim;
> +
> +	SAFE_GETRLIMIT(conf->resource, &rlim);
When function has file and line, you want to use it for all library functions,
thus:
	safe_getrlimit(file, lineno, conf->resource, &rlim);

NOTE: some functions in tst_test.c calls SAFE_() macros, which is wrong. I'll
send patch after this is fixed.

> +
> +	if (conf->rlim_cur > rlim.rlim_max) {
> +		rlim.rlim_max = conf->rlim_cur;
> +		rlim.rlim_cur = conf->rlim_cur;
> +	} else {
> +		rlim.rlim_cur = conf->rlim_cur;
> +	}

rlim.rlim_cur is set twice, why not just:

	rlim.rlim_cur = conf->rlim_cur;

	if (conf->rlim_cur > rlim.rlim_max)
		rlim.rlim_max = conf->rlim_cur;

> +
> +	tst_res_(file, lineno, TINFO, "Set ulimit resource:%d rlim_cur:%lu rlim_max:%lu",
nit: space after ':' helps readability:
> +		conf->resource, rlim.rlim_cur, rlim.rlim_max);
> +
> +	safe_setrlimit(file, lineno, conf->resource, &rlim);
> +}
> +
>  static void do_setup(int argc, char *argv[])
>  {
>  	if (!tst_test)
> @@ -1227,6 +1246,15 @@ static void do_setup(int argc, char *argv[])
>  		}
>  	}

> +	if (tst_test->ulimit) {
> +		const struct tst_ulimit_val *pvl = tst_test->ulimit;
> +
> +		while (pvl->resource) {
> +			tst_set_ulimit(pvl);
> +			pvl++;
> +		}
> +	}
> +
>  	if (tst_test->mntpoint)
>  		SAFE_MKDIR(tst_test->mntpoint, 0777);

I suggest to merge with following changes.
@Cyril: feel free to improve the description.

diff --git doc/C-Test-API.asciidoc doc/C-Test-API.asciidoc
index db16be36e..c42a9754c 100644
--- doc/C-Test-API.asciidoc
+++ doc/C-Test-API.asciidoc
@@ -2426,6 +2426,24 @@ Test can be skipped on various conditions: on enabled SecureBoot
 ('.skip_in_secureboot = 1'), lockdown ('.skip_in_lockdown = 1') or in 32-bit
 compat mode ('.skip_in_compat = 1').
 
+1.43 Set resource limits
+~~~~~~~~~~~~~~~~~~~~~~~~
+
+'.ulimit' allows to set resource limits on particular resource. NOTE: It sets 'rlim_cur'
+only if it's higher than 'rlim_cur'.
+
+[source,c]
+-------------------------------------------------------------------------------
+#include "tst_test.h"
+
+static struct tst_test test = {
+	...
+	.ulimit = (const struct tst_ulimit_val[]) {
+		{RLIMIT_STACK, RLIM_INFINITY},
+		{}
+	},
+};
+
 2. Common problems
 ------------------
 
diff --git include/tst_test.h include/tst_test.h
index bbcfb308d..42c348906 100644
--- include/tst_test.h
+++ include/tst_test.h
@@ -314,7 +314,7 @@ struct tst_test {
 	const struct tst_path_val *save_restore;
 
 	/*
-	 * {NULL, NULL} terminated array of (ulimit resource type and value)
+	 * {} terminated array of ulimit resource type and value.
 	 */
 	const struct tst_ulimit_val *ulimit;
 
@@ -404,9 +404,6 @@ int tst_validate_children_(const char *file, const int lineno,
 #define tst_validate_children(child_count) \
 	tst_validate_children_(__FILE__, __LINE__, (child_count))
 
-#define tst_set_ulimit(conf) \
-	tst_set_ulimit_(__FILE__, __LINE__, (conf))
-
 #ifndef TST_NO_DEFAULT_MAIN
 
 static struct tst_test test;
diff --git lib/tst_test.c lib/tst_test.c
index d2f967ade..6c81b9b02 100644
--- lib/tst_test.c
+++ lib/tst_test.c
@@ -1147,20 +1147,24 @@ static void do_cgroup_requires(void)
 	tst_cg_init();
 }
 
-void tst_set_ulimit_(const char *file, const int lineno, const struct tst_ulimit_val *conf)
+#define tst_set_ulimit(conf) \
+	tst_set_ulimit_(__FILE__, __LINE__, (conf))
+
+/*
+ * Set resource limits.
+ */
+static void tst_set_ulimit_(const char *file, const int lineno, const struct tst_ulimit_val *conf)
 {
 	struct rlimit rlim;
 
-	SAFE_GETRLIMIT(conf->resource, &rlim);
+	safe_getrlimit(file, lineno, conf->resource, &rlim);
 
-	if (conf->rlim_cur > rlim.rlim_max) {
+	rlim.rlim_cur = conf->rlim_cur;
+
+	if (conf->rlim_cur > rlim.rlim_max)
 		rlim.rlim_max = conf->rlim_cur;
-		rlim.rlim_cur = conf->rlim_cur;
-	} else {
-		rlim.rlim_cur = conf->rlim_cur;
-	}
 
-	tst_res_(file, lineno, TINFO, "Set ulimit resource:%d rlim_cur:%lu rlim_max:%lu",
+	tst_res_(file, lineno, TINFO, "Set ulimit resource: %d rlim_cur: %lu rlim_max: %lu",
 		conf->resource, rlim.rlim_cur, rlim.rlim_max);
 
 	safe_setrlimit(file, lineno, conf->resource, &rlim);

-- 
Mailing list info: https://lists.linux.it/listinfo/ltp

^ permalink raw reply related	[flat|nested] 23+ messages in thread

* [LTP] [PATCH v3 0/2] Lib add .ulimit setting
  2023-10-25  8:37 ` [LTP] [PATCH v2 0/2] Lib add .ulimit setting Wei Gao via ltp
  2023-10-25  8:37   ` [LTP] [PATCH v2 1/2] lib: Add .ulimit Wei Gao via ltp
  2023-10-25  8:37   ` [LTP] [PATCH v2 2/2] execl01.c: set stack to unlimited Wei Gao via ltp
@ 2024-01-09  6:59   ` Wei Gao via ltp
  2024-01-09  6:59     ` [LTP] [PATCH v3 1/2] lib: Add .ulimit Wei Gao via ltp
                       ` (2 more replies)
  2 siblings, 3 replies; 23+ messages in thread
From: Wei Gao via ltp @ 2024-01-09  6:59 UTC (permalink / raw)
  To: ltp

Wei Gao (2):
  lib: Add .ulimit
  execl01.c: set stack to unlimited

 doc/C-Test-API.asciidoc                   | 18 +++++++++++++
 include/tst_test.h                        | 16 ++++++++++++
 lib/tst_test.c                            | 32 +++++++++++++++++++++++
 testcases/kernel/syscalls/execl/execl01.c |  4 +++
 4 files changed, 70 insertions(+)

-- 
2.35.3


-- 
Mailing list info: https://lists.linux.it/listinfo/ltp

^ permalink raw reply	[flat|nested] 23+ messages in thread

* [LTP] [PATCH v3 1/2] lib: Add .ulimit
  2024-01-09  6:59   ` [LTP] [PATCH v3 0/2] Lib add .ulimit setting Wei Gao via ltp
@ 2024-01-09  6:59     ` Wei Gao via ltp
  2024-01-19 16:08       ` Cyril Hrubis
  2024-01-09  6:59     ` [LTP] [PATCH v3 2/2] execl01.c: set stack to unlimited Wei Gao via ltp
  2024-01-23  2:19     ` [LTP] [PATCH v4 0/2] Lib add .ulimit setting Wei Gao via ltp
  2 siblings, 1 reply; 23+ messages in thread
From: Wei Gao via ltp @ 2024-01-09  6:59 UTC (permalink / raw)
  To: ltp

Fixs: #530
Signed-off-by: Wei Gao <wegao@suse.com>
---
 doc/C-Test-API.asciidoc | 18 ++++++++++++++++++
 include/tst_test.h      | 16 ++++++++++++++++
 lib/tst_test.c          | 32 ++++++++++++++++++++++++++++++++
 3 files changed, 66 insertions(+)

diff --git a/doc/C-Test-API.asciidoc b/doc/C-Test-API.asciidoc
index db16be36e..c42a9754c 100644
--- a/doc/C-Test-API.asciidoc
+++ b/doc/C-Test-API.asciidoc
@@ -2426,6 +2426,24 @@ Test can be skipped on various conditions: on enabled SecureBoot
 ('.skip_in_secureboot = 1'), lockdown ('.skip_in_lockdown = 1') or in 32-bit
 compat mode ('.skip_in_compat = 1').
 
+1.43 Set resource limits
+~~~~~~~~~~~~~~~~~~~~~~~~
+
+'.ulimit' allows to set resource limits on particular resource. NOTE: It sets 'rlim_cur'
+only if it's higher than 'rlim_cur'.
+
+[source,c]
+-------------------------------------------------------------------------------
+#include "tst_test.h"
+
+static struct tst_test test = {
+	...
+	.ulimit = (const struct tst_ulimit_val[]) {
+		{RLIMIT_STACK, RLIM_INFINITY},
+		{}
+	},
+};
+
 2. Common problems
 ------------------
 
diff --git a/include/tst_test.h b/include/tst_test.h
index 0c3171e5b..374a8615c 100644
--- a/include/tst_test.h
+++ b/include/tst_test.h
@@ -15,6 +15,7 @@
 #include <limits.h>
 #include <string.h>
 #include <errno.h>
+#include <sys/resource.h>
 
 #include "tst_common.h"
 #include "tst_res_flags.h"
@@ -149,6 +150,11 @@ extern unsigned int tst_variant;
 
 #define TST_UNLIMITED_RUNTIME (-1)
 
+struct tst_ulimit_val {
+	int resource;
+	rlim_t rlim_cur;
+};
+
 struct tst_test {
 	/* number of tests available in test() function */
 	unsigned int tcnt;
@@ -307,6 +313,11 @@ struct tst_test {
 	 */
 	const struct tst_path_val *save_restore;
 
+	/*
+	 * {} terminated array of ulimit resource type and value.
+	 */
+	const struct tst_ulimit_val *ulimit;
+
 	/*
 	 * NULL terminated array of kernel config options required for the
 	 * test.
@@ -393,6 +404,11 @@ int tst_validate_children_(const char *file, const int lineno,
 #define tst_validate_children(child_count) \
 	tst_validate_children_(__FILE__, __LINE__, (child_count))
 
+/*
+ * Set system resource limits
+ */
+void tst_set_ulimit_(const char *file, const int lineno, const struct tst_ulimit_val *conf);
+
 #ifndef TST_NO_DEFAULT_MAIN
 
 static struct tst_test test;
diff --git a/lib/tst_test.c b/lib/tst_test.c
index bcf2c4555..f5037330a 100644
--- a/lib/tst_test.c
+++ b/lib/tst_test.c
@@ -1147,6 +1147,29 @@ static void do_cgroup_requires(void)
 	tst_cg_init();
 }
 
+#define tst_set_ulimit(conf) \
+	tst_set_ulimit_(__FILE__, __LINE__, (conf))
+
+/*
+ * Set resource limits.
+ */
+void tst_set_ulimit_(const char *file, const int lineno, const struct tst_ulimit_val *conf)
+{
+	struct rlimit rlim;
+
+	safe_getrlimit(file, lineno, conf->resource, &rlim);
+
+	rlim.rlim_cur = conf->rlim_cur;
+
+	if (conf->rlim_cur > rlim.rlim_max)
+		rlim.rlim_max = conf->rlim_cur;
+
+	tst_res_(file, lineno, TINFO, "Set ulimit resource: %d rlim_cur: %lu rlim_max: %lu",
+		conf->resource, rlim.rlim_cur, rlim.rlim_max);
+
+	safe_setrlimit(file, lineno, conf->resource, &rlim);
+}
+
 static void do_setup(int argc, char *argv[])
 {
 	char *tdebug_env = getenv("LTP_ENABLE_DEBUG");
@@ -1252,6 +1275,15 @@ static void do_setup(int argc, char *argv[])
 		}
 	}
 
+	if (tst_test->ulimit) {
+		const struct tst_ulimit_val *pvl = tst_test->ulimit;
+
+		while (pvl->resource) {
+			tst_set_ulimit(pvl);
+			pvl++;
+		}
+	}
+
 	if (tst_test->mntpoint)
 		SAFE_MKDIR(tst_test->mntpoint, 0777);
 
-- 
2.35.3


-- 
Mailing list info: https://lists.linux.it/listinfo/ltp

^ permalink raw reply related	[flat|nested] 23+ messages in thread

* [LTP] [PATCH v3 2/2] execl01.c: set stack to unlimited
  2024-01-09  6:59   ` [LTP] [PATCH v3 0/2] Lib add .ulimit setting Wei Gao via ltp
  2024-01-09  6:59     ` [LTP] [PATCH v3 1/2] lib: Add .ulimit Wei Gao via ltp
@ 2024-01-09  6:59     ` Wei Gao via ltp
  2024-01-19 16:09       ` Cyril Hrubis
  2024-01-23  2:19     ` [LTP] [PATCH v4 0/2] Lib add .ulimit setting Wei Gao via ltp
  2 siblings, 1 reply; 23+ messages in thread
From: Wei Gao via ltp @ 2024-01-09  6:59 UTC (permalink / raw)
  To: ltp

Signed-off-by: Wei Gao <wegao@suse.com>
---
 testcases/kernel/syscalls/execl/execl01.c | 4 ++++
 1 file changed, 4 insertions(+)

diff --git a/testcases/kernel/syscalls/execl/execl01.c b/testcases/kernel/syscalls/execl/execl01.c
index 9268d4976..dfefd1fa8 100644
--- a/testcases/kernel/syscalls/execl/execl01.c
+++ b/testcases/kernel/syscalls/execl/execl01.c
@@ -35,4 +35,8 @@ static struct tst_test test = {
 	.forks_child = 1,
 	.child_needs_reinit = 1,
 	.test_all = verify_execl,
+	.ulimit = (const struct tst_ulimit_val[]) {
+		{RLIMIT_STACK, RLIM_INFINITY},
+		{}
+	},
 };
-- 
2.35.3


-- 
Mailing list info: https://lists.linux.it/listinfo/ltp

^ permalink raw reply related	[flat|nested] 23+ messages in thread

* Re: [LTP] [PATCH v3 1/2] lib: Add .ulimit
  2024-01-09  6:59     ` [LTP] [PATCH v3 1/2] lib: Add .ulimit Wei Gao via ltp
@ 2024-01-19 16:08       ` Cyril Hrubis
  2024-01-23  7:57         ` Petr Vorel
  0 siblings, 1 reply; 23+ messages in thread
From: Cyril Hrubis @ 2024-01-19 16:08 UTC (permalink / raw)
  To: Wei Gao; +Cc: ltp

Hi!
> +1.43 Set resource limits
> +~~~~~~~~~~~~~~~~~~~~~~~~
> +
> +'.ulimit' allows to set resource limits on particular resource. NOTE: It sets 'rlim_cur'
                                                                                    ^
										    rlim_max?
> +only if it's higher than 'rlim_cur'.
> +
> +[source,c]
> +-------------------------------------------------------------------------------
> +#include "tst_test.h"
> +
> +static struct tst_test test = {
> +	...
> +	.ulimit = (const struct tst_ulimit_val[]) {
> +		{RLIMIT_STACK, RLIM_INFINITY},
> +		{}
> +	},
> +};
> +
>  2. Common problems
>  ------------------
>  
> diff --git a/include/tst_test.h b/include/tst_test.h
> index 0c3171e5b..374a8615c 100644
> --- a/include/tst_test.h
> +++ b/include/tst_test.h
> @@ -15,6 +15,7 @@
>  #include <limits.h>
>  #include <string.h>
>  #include <errno.h>
> +#include <sys/resource.h>
>  
>  #include "tst_common.h"
>  #include "tst_res_flags.h"
> @@ -149,6 +150,11 @@ extern unsigned int tst_variant;
>  
>  #define TST_UNLIMITED_RUNTIME (-1)
>  
> +struct tst_ulimit_val {
> +	int resource;
> +	rlim_t rlim_cur;
> +};
> +
>  struct tst_test {
>  	/* number of tests available in test() function */
>  	unsigned int tcnt;
> @@ -307,6 +313,11 @@ struct tst_test {
>  	 */
>  	const struct tst_path_val *save_restore;
>  
> +	/*
> +	 * {} terminated array of ulimit resource type and value.
> +	 */
> +	const struct tst_ulimit_val *ulimit;
> +
>  	/*
>  	 * NULL terminated array of kernel config options required for the
>  	 * test.
> @@ -393,6 +404,11 @@ int tst_validate_children_(const char *file, const int lineno,
>  #define tst_validate_children(child_count) \
>  	tst_validate_children_(__FILE__, __LINE__, (child_count))
>  
> +/*
> + * Set system resource limits
> + */
> +void tst_set_ulimit_(const char *file, const int lineno, const struct tst_ulimit_val *conf);
> +
>  #ifndef TST_NO_DEFAULT_MAIN
>  
>  static struct tst_test test;
> diff --git a/lib/tst_test.c b/lib/tst_test.c
> index bcf2c4555..f5037330a 100644
> --- a/lib/tst_test.c
> +++ b/lib/tst_test.c
> @@ -1147,6 +1147,29 @@ static void do_cgroup_requires(void)
>  	tst_cg_init();
>  }
>  
> +#define tst_set_ulimit(conf) \
> +	tst_set_ulimit_(__FILE__, __LINE__, (conf))

If we want this to be part of the API, i.e. allow tests to call this
function directly this should be in the tst_test.h header.

If not, the function should be static and only used in the tst_test.c

> +/*
> + * Set resource limits.
> + */
> +void tst_set_ulimit_(const char *file, const int lineno, const struct tst_ulimit_val *conf)
> +{
> +	struct rlimit rlim;
> +
> +	safe_getrlimit(file, lineno, conf->resource, &rlim);
> +
> +	rlim.rlim_cur = conf->rlim_cur;
> +
> +	if (conf->rlim_cur > rlim.rlim_max)
> +		rlim.rlim_max = conf->rlim_cur;
> +
> +	tst_res_(file, lineno, TINFO, "Set ulimit resource: %d rlim_cur: %lu rlim_max: %lu",
> +		conf->resource, rlim.rlim_cur, rlim.rlim_max);
> +
> +	safe_setrlimit(file, lineno, conf->resource, &rlim);
> +}
> +
>  static void do_setup(int argc, char *argv[])
>  {
>  	char *tdebug_env = getenv("LTP_ENABLE_DEBUG");
> @@ -1252,6 +1275,15 @@ static void do_setup(int argc, char *argv[])
>  		}
>  	}
>  
> +	if (tst_test->ulimit) {
> +		const struct tst_ulimit_val *pvl = tst_test->ulimit;
> +
> +		while (pvl->resource) {
> +			tst_set_ulimit(pvl);
> +			pvl++;
> +		}
> +	}
> +
>  	if (tst_test->mntpoint)
>  		SAFE_MKDIR(tst_test->mntpoint, 0777);

The rest looks good.

-- 
Cyril Hrubis
chrubis@suse.cz

-- 
Mailing list info: https://lists.linux.it/listinfo/ltp

^ permalink raw reply	[flat|nested] 23+ messages in thread

* Re: [LTP] [PATCH v3 2/2] execl01.c: set stack to unlimited
  2024-01-09  6:59     ` [LTP] [PATCH v3 2/2] execl01.c: set stack to unlimited Wei Gao via ltp
@ 2024-01-19 16:09       ` Cyril Hrubis
  0 siblings, 0 replies; 23+ messages in thread
From: Cyril Hrubis @ 2024-01-19 16:09 UTC (permalink / raw)
  To: Wei Gao; +Cc: ltp

Hi!
> Signed-off-by: Wei Gao <wegao@suse.com>

The previous version was reviewed by Peter, so this should have included
his reviewed-by line...

> ---
>  testcases/kernel/syscalls/execl/execl01.c | 4 ++++
>  1 file changed, 4 insertions(+)
> 
> diff --git a/testcases/kernel/syscalls/execl/execl01.c b/testcases/kernel/syscalls/execl/execl01.c
> index 9268d4976..dfefd1fa8 100644
> --- a/testcases/kernel/syscalls/execl/execl01.c
> +++ b/testcases/kernel/syscalls/execl/execl01.c
> @@ -35,4 +35,8 @@ static struct tst_test test = {
>  	.forks_child = 1,
>  	.child_needs_reinit = 1,
>  	.test_all = verify_execl,
> +	.ulimit = (const struct tst_ulimit_val[]) {
> +		{RLIMIT_STACK, RLIM_INFINITY},
> +		{}
> +	},
>  };
> -- 
> 2.35.3
> 
> 
> -- 
> Mailing list info: https://lists.linux.it/listinfo/ltp

-- 
Cyril Hrubis
chrubis@suse.cz

-- 
Mailing list info: https://lists.linux.it/listinfo/ltp

^ permalink raw reply	[flat|nested] 23+ messages in thread

* [LTP] [PATCH v4 0/2] Lib add .ulimit setting
  2024-01-09  6:59   ` [LTP] [PATCH v3 0/2] Lib add .ulimit setting Wei Gao via ltp
  2024-01-09  6:59     ` [LTP] [PATCH v3 1/2] lib: Add .ulimit Wei Gao via ltp
  2024-01-09  6:59     ` [LTP] [PATCH v3 2/2] execl01.c: set stack to unlimited Wei Gao via ltp
@ 2024-01-23  2:19     ` Wei Gao via ltp
  2024-01-23  2:19       ` [LTP] [PATCH v4 1/2] lib: Add .ulimit Wei Gao via ltp
  2024-01-23  2:19       ` [LTP] [PATCH v4 2/2] execl01.c: set stack to unlimited Wei Gao via ltp
  2 siblings, 2 replies; 23+ messages in thread
From: Wei Gao via ltp @ 2024-01-23  2:19 UTC (permalink / raw)
  To: ltp

Wei Gao (2):
  lib: Add .ulimit
  execl01.c: set stack to unlimited

 doc/C-Test-API.asciidoc                   | 18 +++++++++++++
 include/tst_test.h                        | 11 ++++++++
 lib/tst_test.c                            | 32 +++++++++++++++++++++++
 testcases/kernel/syscalls/execl/execl01.c |  4 +++
 4 files changed, 65 insertions(+)

-- 
2.35.3


-- 
Mailing list info: https://lists.linux.it/listinfo/ltp

^ permalink raw reply	[flat|nested] 23+ messages in thread

* [LTP] [PATCH v4 1/2] lib: Add .ulimit
  2024-01-23  2:19     ` [LTP] [PATCH v4 0/2] Lib add .ulimit setting Wei Gao via ltp
@ 2024-01-23  2:19       ` Wei Gao via ltp
  2024-01-23  8:36         ` Petr Vorel
  2024-01-23  2:19       ` [LTP] [PATCH v4 2/2] execl01.c: set stack to unlimited Wei Gao via ltp
  1 sibling, 1 reply; 23+ messages in thread
From: Wei Gao via ltp @ 2024-01-23  2:19 UTC (permalink / raw)
  To: ltp

Fixs: #530
Signed-off-by: Wei Gao <wegao@suse.com>
---
 doc/C-Test-API.asciidoc | 18 ++++++++++++++++++
 include/tst_test.h      | 11 +++++++++++
 lib/tst_test.c          | 32 ++++++++++++++++++++++++++++++++
 3 files changed, 61 insertions(+)

v4->v3:
To fix following warning when make check-tst_test, i rename tst_set_ulimit_ -> set_ulimit_ and add static key word.
tst_test.c:1156:13: warning: LTP-003: Symbol 'tst_set_ulimit_' has the LTP public library prefix, but is static (private).

diff --git a/doc/C-Test-API.asciidoc b/doc/C-Test-API.asciidoc
index db16be36e..e3891d5e8 100644
--- a/doc/C-Test-API.asciidoc
+++ b/doc/C-Test-API.asciidoc
@@ -2426,6 +2426,24 @@ Test can be skipped on various conditions: on enabled SecureBoot
 ('.skip_in_secureboot = 1'), lockdown ('.skip_in_lockdown = 1') or in 32-bit
 compat mode ('.skip_in_compat = 1').
 
+1.43 Set resource limits
+~~~~~~~~~~~~~~~~~~~~~~~~
+
+'.ulimit' allows to set resource limits on particular resource. NOTE: It sets 'rlim_max'
+only if it's higher than 'rlim_cur'.
+
+[source,c]
+-------------------------------------------------------------------------------
+#include "tst_test.h"
+
+static struct tst_test test = {
+	...
+	.ulimit = (const struct tst_ulimit_val[]) {
+		{RLIMIT_STACK, RLIM_INFINITY},
+		{}
+	},
+};
+
 2. Common problems
 ------------------
 
diff --git a/include/tst_test.h b/include/tst_test.h
index fda696eeb..47b5902f9 100644
--- a/include/tst_test.h
+++ b/include/tst_test.h
@@ -15,6 +15,7 @@
 #include <limits.h>
 #include <string.h>
 #include <errno.h>
+#include <sys/resource.h>
 
 #include "tst_common.h"
 #include "tst_res_flags.h"
@@ -150,6 +151,11 @@ extern unsigned int tst_variant;
 
 #define TST_UNLIMITED_RUNTIME (-1)
 
+struct tst_ulimit_val {
+	int resource;
+	rlim_t rlim_cur;
+};
+
 struct tst_test {
 	/* number of tests available in test() function */
 	unsigned int tcnt;
@@ -308,6 +314,11 @@ struct tst_test {
 	 */
 	const struct tst_path_val *save_restore;
 
+	/*
+	 * {} terminated array of ulimit resource type and value.
+	 */
+	const struct tst_ulimit_val *ulimit;
+
 	/*
 	 * NULL terminated array of kernel config options required for the
 	 * test.
diff --git a/lib/tst_test.c b/lib/tst_test.c
index bcf2c4555..f9a6f1ae0 100644
--- a/lib/tst_test.c
+++ b/lib/tst_test.c
@@ -1147,6 +1147,29 @@ static void do_cgroup_requires(void)
 	tst_cg_init();
 }
 
+#define tst_set_ulimit(conf) \
+	set_ulimit_(__FILE__, __LINE__, (conf))
+
+/*
+ * Set resource limits.
+ */
+static void set_ulimit_(const char *file, const int lineno, const struct tst_ulimit_val *conf)
+{
+	struct rlimit rlim;
+
+	safe_getrlimit(file, lineno, conf->resource, &rlim);
+
+	rlim.rlim_cur = conf->rlim_cur;
+
+	if (conf->rlim_cur > rlim.rlim_max)
+		rlim.rlim_max = conf->rlim_cur;
+
+	tst_res_(file, lineno, TINFO, "Set ulimit resource: %d rlim_cur: %lu rlim_max: %lu",
+		conf->resource, rlim.rlim_cur, rlim.rlim_max);
+
+	safe_setrlimit(file, lineno, conf->resource, &rlim);
+}
+
 static void do_setup(int argc, char *argv[])
 {
 	char *tdebug_env = getenv("LTP_ENABLE_DEBUG");
@@ -1252,6 +1275,15 @@ static void do_setup(int argc, char *argv[])
 		}
 	}
 
+	if (tst_test->ulimit) {
+		const struct tst_ulimit_val *pvl = tst_test->ulimit;
+
+		while (pvl->resource) {
+			tst_set_ulimit(pvl);
+			pvl++;
+		}
+	}
+
 	if (tst_test->mntpoint)
 		SAFE_MKDIR(tst_test->mntpoint, 0777);
 
-- 
2.35.3


-- 
Mailing list info: https://lists.linux.it/listinfo/ltp

^ permalink raw reply related	[flat|nested] 23+ messages in thread

* [LTP] [PATCH v4 2/2] execl01.c: set stack to unlimited
  2024-01-23  2:19     ` [LTP] [PATCH v4 0/2] Lib add .ulimit setting Wei Gao via ltp
  2024-01-23  2:19       ` [LTP] [PATCH v4 1/2] lib: Add .ulimit Wei Gao via ltp
@ 2024-01-23  2:19       ` Wei Gao via ltp
  1 sibling, 0 replies; 23+ messages in thread
From: Wei Gao via ltp @ 2024-01-23  2:19 UTC (permalink / raw)
  To: ltp

Signed-off-by: Wei Gao <wegao@suse.com>
Reviewed-by: Petr Vorel <pvorel@suse.cz>
---
 testcases/kernel/syscalls/execl/execl01.c | 4 ++++
 1 file changed, 4 insertions(+)

diff --git a/testcases/kernel/syscalls/execl/execl01.c b/testcases/kernel/syscalls/execl/execl01.c
index 9268d4976..dfefd1fa8 100644
--- a/testcases/kernel/syscalls/execl/execl01.c
+++ b/testcases/kernel/syscalls/execl/execl01.c
@@ -35,4 +35,8 @@ static struct tst_test test = {
 	.forks_child = 1,
 	.child_needs_reinit = 1,
 	.test_all = verify_execl,
+	.ulimit = (const struct tst_ulimit_val[]) {
+		{RLIMIT_STACK, RLIM_INFINITY},
+		{}
+	},
 };
-- 
2.35.3


-- 
Mailing list info: https://lists.linux.it/listinfo/ltp

^ permalink raw reply related	[flat|nested] 23+ messages in thread

* Re: [LTP] [PATCH v3 1/2] lib: Add .ulimit
  2024-01-19 16:08       ` Cyril Hrubis
@ 2024-01-23  7:57         ` Petr Vorel
  0 siblings, 0 replies; 23+ messages in thread
From: Petr Vorel @ 2024-01-23  7:57 UTC (permalink / raw)
  To: Cyril Hrubis; +Cc: ltp

Hi,

...
> > +++ b/lib/tst_test.c
> > @@ -1147,6 +1147,29 @@ static void do_cgroup_requires(void)
> >  	tst_cg_init();
> >  }

> > +#define tst_set_ulimit(conf) \
> > +	tst_set_ulimit_(__FILE__, __LINE__, (conf))

> If we want this to be part of the API, i.e. allow tests to call this
> function directly this should be in the tst_test.h header.

> If not, the function should be static and only used in the tst_test.c

Thanks! I tried to explain it in v2, but was not able to express it clearly.
https://lore.kernel.org/ltp/20240108114738.GC1565258@pevik/

Kind regards,
Petr

-- 
Mailing list info: https://lists.linux.it/listinfo/ltp

^ permalink raw reply	[flat|nested] 23+ messages in thread

* Re: [LTP] [PATCH v4 1/2] lib: Add .ulimit
  2024-01-23  2:19       ` [LTP] [PATCH v4 1/2] lib: Add .ulimit Wei Gao via ltp
@ 2024-01-23  8:36         ` Petr Vorel
  2024-01-30 11:55           ` Petr Vorel
  0 siblings, 1 reply; 23+ messages in thread
From: Petr Vorel @ 2024-01-23  8:36 UTC (permalink / raw)
  To: Wei Gao; +Cc: ltp

Hi Wei,

> Fixs: #530
^ typo, it should have been

Fixes: #530

Fortunately github formats properly even there is a typo:
https://github.com/pevik/ltp/commit/2e6289d26c325db796cde27765b6765217541d24

But it would not close the ticket.
Also people sometimes do 'git log --grep=Fixes:' to see changes.

...
> diff --git a/doc/C-Test-API.asciidoc b/doc/C-Test-API.asciidoc
> index db16be36e..e3891d5e8 100644
> --- a/doc/C-Test-API.asciidoc
> +++ b/doc/C-Test-API.asciidoc
> @@ -2426,6 +2426,24 @@ Test can be skipped on various conditions: on enabled SecureBoot
>  ('.skip_in_secureboot = 1'), lockdown ('.skip_in_lockdown = 1') or in 32-bit
>  compat mode ('.skip_in_compat = 1').

> +1.43 Set resource limits
> +~~~~~~~~~~~~~~~~~~~~~~~~
> +
> +'.ulimit' allows to set resource limits on particular resource. NOTE: It sets 'rlim_max'
> +only if it's higher than 'rlim_cur'.
> +
> +[source,c]
> +-------------------------------------------------------------------------------
> +#include "tst_test.h"
> +
> +static struct tst_test test = {
> +	...
> +	.ulimit = (const struct tst_ulimit_val[]) {
> +		{RLIMIT_STACK, RLIM_INFINITY},
> +		{}
> +	},
> +};
Here is missing separator, which is required to end formatting, otherwise page
would be horribly broken:
-------------------------------------------------------------------------------

Have look at my fork how it looks like and please, next time test formatting of
doc changes yourself in your fork (preview is enough to see the problems):
https://github.com/pevik/ltp/wiki/TEST#143-set-resource-limits

Both issues can be fixed before merge.

Reviewed-by: Petr Vorel <pvorel@suse.cz>

Unless Cyril or Li acks this to be merged before the release, it will be merged
after the release (not a fix).

Kind regards,
Petr

> +
>  2. Common problems
>  ------------------
...

-- 
Mailing list info: https://lists.linux.it/listinfo/ltp

^ permalink raw reply	[flat|nested] 23+ messages in thread

* Re: [LTP] [PATCH v4 1/2] lib: Add .ulimit
  2024-01-23  8:36         ` Petr Vorel
@ 2024-01-30 11:55           ` Petr Vorel
  0 siblings, 0 replies; 23+ messages in thread
From: Petr Vorel @ 2024-01-30 11:55 UTC (permalink / raw)
  To: Wei Gao, ltp

Hi Wei,

thanks, patchset merged!

Kind regards,
Petr

-- 
Mailing list info: https://lists.linux.it/listinfo/ltp

^ permalink raw reply	[flat|nested] 23+ messages in thread

end of thread, other threads:[~2024-01-30 11:55 UTC | newest]

Thread overview: 23+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2023-10-21 12:29 [LTP] [PATCH v1 0/2] Lib add .ulimit setting Wei Gao via ltp
2023-10-21 12:29 ` [LTP] [PATCH v1 1/2] lib: Add .ulimit Wei Gao via ltp
2023-10-23 11:03   ` Petr Vorel
2023-10-23 12:29   ` Cyril Hrubis
2023-10-23 12:32     ` Cyril Hrubis
2023-10-21 12:29 ` [LTP] [PATCH v1 2/2] execl01.c: set stack to unlimited Wei Gao via ltp
2023-10-23 11:26   ` Petr Vorel
2023-10-25  8:37 ` [LTP] [PATCH v2 0/2] Lib add .ulimit setting Wei Gao via ltp
2023-10-25  8:37   ` [LTP] [PATCH v2 1/2] lib: Add .ulimit Wei Gao via ltp
2024-01-08 11:47     ` Petr Vorel
2023-10-25  8:37   ` [LTP] [PATCH v2 2/2] execl01.c: set stack to unlimited Wei Gao via ltp
2024-01-08 10:17     ` Petr Vorel
2024-01-09  6:59   ` [LTP] [PATCH v3 0/2] Lib add .ulimit setting Wei Gao via ltp
2024-01-09  6:59     ` [LTP] [PATCH v3 1/2] lib: Add .ulimit Wei Gao via ltp
2024-01-19 16:08       ` Cyril Hrubis
2024-01-23  7:57         ` Petr Vorel
2024-01-09  6:59     ` [LTP] [PATCH v3 2/2] execl01.c: set stack to unlimited Wei Gao via ltp
2024-01-19 16:09       ` Cyril Hrubis
2024-01-23  2:19     ` [LTP] [PATCH v4 0/2] Lib add .ulimit setting Wei Gao via ltp
2024-01-23  2:19       ` [LTP] [PATCH v4 1/2] lib: Add .ulimit Wei Gao via ltp
2024-01-23  8:36         ` Petr Vorel
2024-01-30 11:55           ` Petr Vorel
2024-01-23  2:19       ` [LTP] [PATCH v4 2/2] execl01.c: set stack to unlimited Wei Gao via ltp

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.