lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <ca7a1547-5bb0-40d7-a77a-9ca6c14fd6f2@collabora.com>
Date: Sat, 30 Mar 2024 01:20:10 +0500
From: Muhammad Usama Anjum <usama.anjum@...labora.com>
To: Tianchen Ding <dtcccc@...ux.alibaba.com>, linux-kernel@...r.kernel.org
Cc: Muhammad Usama Anjum <usama.anjum@...labora.com>,
 Tejun Heo <tj@...nel.org>, Zefan Li <lizefan.x@...edance.com>,
 Johannes Weiner <hannes@...xchg.org>, Shuah Khan <shuah@...nel.org>,
 cgroups@...r.kernel.org, linux-kselftest@...r.kernel.org
Subject: Re: [PATCH] selftests: cgroup: skip test_cgcore_lesser_ns_open when
 cgroup2 mounted without nsdelegate

On 3/27/24 7:44 AM, Tianchen Ding wrote:
> The test case test_cgcore_lesser_ns_open only tasks effect when cgroup2
> is mounted with "nsdelegate" mount option. If it misses this option, or
> is remounted without "nsdelegate", the test case will fail. For example,
> running bpf/test_cgroup_storage first, and then run cgroup/test_core will
> fail on test_cgcore_lesser_ns_open. Skip it if "nsdelegate" is not
> detected in cgroup2 mount options.
> 
> Fixes: bf35a7879f1d ("selftests: cgroup: Test open-time cgroup namespace usage for migration checks")
> Signed-off-by: Tianchen Ding <dtcccc@...ux.alibaba.com>
Reviewed-by: Muhammad Usama Anjum <usama.anjum@...labora.com>

> ---
>  tools/testing/selftests/cgroup/cgroup_util.c        | 8 +++++---
>  tools/testing/selftests/cgroup/cgroup_util.h        | 2 +-
>  tools/testing/selftests/cgroup/test_core.c          | 7 ++++++-
>  tools/testing/selftests/cgroup/test_cpu.c           | 2 +-
>  tools/testing/selftests/cgroup/test_cpuset.c        | 2 +-
>  tools/testing/selftests/cgroup/test_freezer.c       | 2 +-
>  tools/testing/selftests/cgroup/test_hugetlb_memcg.c | 2 +-
>  tools/testing/selftests/cgroup/test_kill.c          | 2 +-
>  tools/testing/selftests/cgroup/test_kmem.c          | 2 +-
>  tools/testing/selftests/cgroup/test_memcontrol.c    | 2 +-
>  tools/testing/selftests/cgroup/test_zswap.c         | 2 +-
>  11 files changed, 20 insertions(+), 13 deletions(-)
> 
> diff --git a/tools/testing/selftests/cgroup/cgroup_util.c b/tools/testing/selftests/cgroup/cgroup_util.c
> index 0340d4ca8f51..432db923bced 100644
> --- a/tools/testing/selftests/cgroup/cgroup_util.c
> +++ b/tools/testing/selftests/cgroup/cgroup_util.c
> @@ -195,10 +195,10 @@ int cg_write_numeric(const char *cgroup, const char *control, long value)
>  	return cg_write(cgroup, control, buf);
>  }
>  
> -int cg_find_unified_root(char *root, size_t len)
> +int cg_find_unified_root(char *root, size_t len, bool *nsdelegate)
>  {
>  	char buf[10 * PAGE_SIZE];
> -	char *fs, *mount, *type;
> +	char *fs, *mount, *type, *options;
>  	const char delim[] = "\n\t ";
>  
>  	if (read_text("/proc/self/mounts", buf, sizeof(buf)) <= 0)
> @@ -211,12 +211,14 @@ int cg_find_unified_root(char *root, size_t len)
>  	for (fs = strtok(buf, delim); fs; fs = strtok(NULL, delim)) {
>  		mount = strtok(NULL, delim);
>  		type = strtok(NULL, delim);
> -		strtok(NULL, delim);
> +		options = strtok(NULL, delim);
>  		strtok(NULL, delim);
>  		strtok(NULL, delim);
>  
>  		if (strcmp(type, "cgroup2") == 0) {
>  			strncpy(root, mount, len);
> +			if (nsdelegate)
> +				*nsdelegate = !!strstr(options, "nsdelegate");
>  			return 0;
>  		}
>  	}
> diff --git a/tools/testing/selftests/cgroup/cgroup_util.h b/tools/testing/selftests/cgroup/cgroup_util.h
> index 1df7f202214a..89e8519fb271 100644
> --- a/tools/testing/selftests/cgroup/cgroup_util.h
> +++ b/tools/testing/selftests/cgroup/cgroup_util.h
> @@ -21,7 +21,7 @@ static inline int values_close(long a, long b, int err)
>  	return abs(a - b) <= (a + b) / 100 * err;
>  }
>  
> -extern int cg_find_unified_root(char *root, size_t len);
> +extern int cg_find_unified_root(char *root, size_t len, bool *nsdelegate);
>  extern char *cg_name(const char *root, const char *name);
>  extern char *cg_name_indexed(const char *root, const char *name, int index);
>  extern char *cg_control(const char *cgroup, const char *control);
> diff --git a/tools/testing/selftests/cgroup/test_core.c b/tools/testing/selftests/cgroup/test_core.c
> index 80aa6b2373b9..a5672a91d273 100644
> --- a/tools/testing/selftests/cgroup/test_core.c
> +++ b/tools/testing/selftests/cgroup/test_core.c
> @@ -18,6 +18,8 @@
>  #include "../kselftest.h"
>  #include "cgroup_util.h"
>  
> +static bool nsdelegate;
> +
>  static int touch_anon(char *buf, size_t size)
>  {
>  	int fd;
> @@ -775,6 +777,9 @@ static int test_cgcore_lesser_ns_open(const char *root)
>  	pid_t pid;
>  	int status;
>  
> +	if (!nsdelegate)
> +		return KSFT_SKIP;
> +
>  	cg_test_a = cg_name(root, "cg_test_a");
>  	cg_test_b = cg_name(root, "cg_test_b");
>  
> @@ -862,7 +867,7 @@ int main(int argc, char *argv[])
>  	char root[PATH_MAX];
>  	int i, ret = EXIT_SUCCESS;
>  
> -	if (cg_find_unified_root(root, sizeof(root)))
> +	if (cg_find_unified_root(root, sizeof(root), &nsdelegate))
>  		ksft_exit_skip("cgroup v2 isn't mounted\n");
>  
>  	if (cg_read_strstr(root, "cgroup.subtree_control", "memory"))
> diff --git a/tools/testing/selftests/cgroup/test_cpu.c b/tools/testing/selftests/cgroup/test_cpu.c
> index 24020a2c68dc..186bf96f6a28 100644
> --- a/tools/testing/selftests/cgroup/test_cpu.c
> +++ b/tools/testing/selftests/cgroup/test_cpu.c
> @@ -700,7 +700,7 @@ int main(int argc, char *argv[])
>  	char root[PATH_MAX];
>  	int i, ret = EXIT_SUCCESS;
>  
> -	if (cg_find_unified_root(root, sizeof(root)))
> +	if (cg_find_unified_root(root, sizeof(root), NULL))
>  		ksft_exit_skip("cgroup v2 isn't mounted\n");
>  
>  	if (cg_read_strstr(root, "cgroup.subtree_control", "cpu"))
> diff --git a/tools/testing/selftests/cgroup/test_cpuset.c b/tools/testing/selftests/cgroup/test_cpuset.c
> index b061ed1e05b4..4034d14ba69a 100644
> --- a/tools/testing/selftests/cgroup/test_cpuset.c
> +++ b/tools/testing/selftests/cgroup/test_cpuset.c
> @@ -249,7 +249,7 @@ int main(int argc, char *argv[])
>  	char root[PATH_MAX];
>  	int i, ret = EXIT_SUCCESS;
>  
> -	if (cg_find_unified_root(root, sizeof(root)))
> +	if (cg_find_unified_root(root, sizeof(root), NULL))
>  		ksft_exit_skip("cgroup v2 isn't mounted\n");
>  
>  	if (cg_read_strstr(root, "cgroup.subtree_control", "cpuset"))
> diff --git a/tools/testing/selftests/cgroup/test_freezer.c b/tools/testing/selftests/cgroup/test_freezer.c
> index 8845353aca53..8730645d363a 100644
> --- a/tools/testing/selftests/cgroup/test_freezer.c
> +++ b/tools/testing/selftests/cgroup/test_freezer.c
> @@ -827,7 +827,7 @@ int main(int argc, char *argv[])
>  	char root[PATH_MAX];
>  	int i, ret = EXIT_SUCCESS;
>  
> -	if (cg_find_unified_root(root, sizeof(root)))
> +	if (cg_find_unified_root(root, sizeof(root), NULL))
>  		ksft_exit_skip("cgroup v2 isn't mounted\n");
>  	for (i = 0; i < ARRAY_SIZE(tests); i++) {
>  		switch (tests[i].fn(root)) {
> diff --git a/tools/testing/selftests/cgroup/test_hugetlb_memcg.c b/tools/testing/selftests/cgroup/test_hugetlb_memcg.c
> index f0fefeb4cc24..856f9508ea56 100644
> --- a/tools/testing/selftests/cgroup/test_hugetlb_memcg.c
> +++ b/tools/testing/selftests/cgroup/test_hugetlb_memcg.c
> @@ -214,7 +214,7 @@ int main(int argc, char **argv)
>  		return ret;
>  	}
>  
> -	if (cg_find_unified_root(root, sizeof(root)))
> +	if (cg_find_unified_root(root, sizeof(root), NULL))
>  		ksft_exit_skip("cgroup v2 isn't mounted\n");
>  
>  	switch (test_hugetlb_memcg(root)) {
> diff --git a/tools/testing/selftests/cgroup/test_kill.c b/tools/testing/selftests/cgroup/test_kill.c
> index 6153690319c9..0e5bb6c7307a 100644
> --- a/tools/testing/selftests/cgroup/test_kill.c
> +++ b/tools/testing/selftests/cgroup/test_kill.c
> @@ -276,7 +276,7 @@ int main(int argc, char *argv[])
>  	char root[PATH_MAX];
>  	int i, ret = EXIT_SUCCESS;
>  
> -	if (cg_find_unified_root(root, sizeof(root)))
> +	if (cg_find_unified_root(root, sizeof(root), NULL))
>  		ksft_exit_skip("cgroup v2 isn't mounted\n");
>  	for (i = 0; i < ARRAY_SIZE(tests); i++) {
>  		switch (tests[i].fn(root)) {
> diff --git a/tools/testing/selftests/cgroup/test_kmem.c b/tools/testing/selftests/cgroup/test_kmem.c
> index c82f974b85c9..137506db0312 100644
> --- a/tools/testing/selftests/cgroup/test_kmem.c
> +++ b/tools/testing/selftests/cgroup/test_kmem.c
> @@ -420,7 +420,7 @@ int main(int argc, char **argv)
>  	char root[PATH_MAX];
>  	int i, ret = EXIT_SUCCESS;
>  
> -	if (cg_find_unified_root(root, sizeof(root)))
> +	if (cg_find_unified_root(root, sizeof(root), NULL))
>  		ksft_exit_skip("cgroup v2 isn't mounted\n");
>  
>  	/*
> diff --git a/tools/testing/selftests/cgroup/test_memcontrol.c b/tools/testing/selftests/cgroup/test_memcontrol.c
> index c7c9572003a8..b462416b3806 100644
> --- a/tools/testing/selftests/cgroup/test_memcontrol.c
> +++ b/tools/testing/selftests/cgroup/test_memcontrol.c
> @@ -1314,7 +1314,7 @@ int main(int argc, char **argv)
>  	char root[PATH_MAX];
>  	int i, proc_status, ret = EXIT_SUCCESS;
>  
> -	if (cg_find_unified_root(root, sizeof(root)))
> +	if (cg_find_unified_root(root, sizeof(root), NULL))
>  		ksft_exit_skip("cgroup v2 isn't mounted\n");
>  
>  	/*
> diff --git a/tools/testing/selftests/cgroup/test_zswap.c b/tools/testing/selftests/cgroup/test_zswap.c
> index f0e488ed90d8..ef7f39545317 100644
> --- a/tools/testing/selftests/cgroup/test_zswap.c
> +++ b/tools/testing/selftests/cgroup/test_zswap.c
> @@ -440,7 +440,7 @@ int main(int argc, char **argv)
>  	char root[PATH_MAX];
>  	int i, ret = EXIT_SUCCESS;
>  
> -	if (cg_find_unified_root(root, sizeof(root)))
> +	if (cg_find_unified_root(root, sizeof(root), NULL))
>  		ksft_exit_skip("cgroup v2 isn't mounted\n");
>  
>  	if (!zswap_configured())

-- 
BR,
Muhammad Usama Anjum

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ