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] [day] [month] [year] [list]
Message-ID: <cab1d59c-4dac-4a5b-8dfa-43c2ac03b675@linux.dev>
Date: Mon, 10 Feb 2025 08:41:00 -0800
From: Yonghong Song <yonghong.song@...ux.dev>
To: Sebastian Andrzej Siewior <bigeasy@...utronix.de>,
 cgroups@...r.kernel.org, linux-kernel@...r.kernel.org
Cc: Michal Koutný <mkoutny@...e.com>,
 "Paul E. McKenney" <paulmck@...nel.org>, Boqun Feng <boqun.feng@...il.com>,
 Greg Kroah-Hartman <gregkh@...uxfoundation.org>,
 Hillf Danton <hdanton@...a.com>, Johannes Weiner <hannes@...xchg.org>,
 Marco Elver <elver@...gle.com>, Tejun Heo <tj@...nel.org>,
 tglx@...utronix.de, Andrii Nakryiko <andrii@...nel.org>,
 Eduard Zingerman <eddyz87@...il.com>, Mykola Lysenko <mykolal@...com>,
 bpf@...r.kernel.org
Subject: Re: [PATCH v7 5/6] kernfs: Use RCU to access kernfs_node::parent.



On 2/10/25 12:43 AM, Sebastian Andrzej Siewior wrote:
> On 2025-02-03 14:50:22 [+0100], To cgroups@...r.kernel.org wrote:
>> kernfs_rename_lock is used to obtain stable kernfs_node::{name|parent}
>> pointer. This is a preparation to access kernfs_node::parent under RCU
>> and ensure that the pointer remains stable under the RCU lifetime
>> guarantees.
> …
>
> The robot complained that the selftests for bpf broke. As it turns out,
> the tests access kernfs_node::{parent|name} and after the rename
> ::parent is gone so it does not compile.
> If there are no objections, I would merge this into 5/6 and repost.
> "test_progs -a test_profiler" passes.
>
> diff --git a/tools/testing/selftests/bpf/progs/profiler.inc.h b/tools/testing/selftests/bpf/progs/profiler.inc.h
> index 8bd1ebd7d6afd..a4f518ee5f4de 100644
> --- a/tools/testing/selftests/bpf/progs/profiler.inc.h
> +++ b/tools/testing/selftests/bpf/progs/profiler.inc.h
> @@ -223,7 +223,7 @@ static INLINE void* read_full_cgroup_path(struct kernfs_node* cgroup_node,
>   		if (bpf_cmp_likely(filepart_length, <=, MAX_PATH)) {
>   			payload += filepart_length;
>   		}
> -		cgroup_node = BPF_CORE_READ(cgroup_node, parent);
> +		cgroup_node = BPF_CORE_READ(cgroup_node, __parent);
>   	}
>   	return payload;
>   }
> @@ -300,6 +300,7 @@ static INLINE void* populate_cgroup_info(struct cgroup_data_t* cgroup_data,
>   	cgroup_data->cgroup_proc_length = 0;
>   	cgroup_data->cgroup_full_length = 0;
>   
> +	bpf_rcu_read_lock();
>   	size_t cgroup_root_length =
>   		bpf_probe_read_kernel_str(payload, MAX_PATH,
>   					  BPF_CORE_READ(root_kernfs, name));
> @@ -323,6 +324,7 @@ static INLINE void* populate_cgroup_info(struct cgroup_data_t* cgroup_data,
>   		cgroup_data->cgroup_full_length = payload_end_pos - payload;
>   		payload = payload_end_pos;
>   	}
> +	bpf_rcu_read_unlock();

All programs calling this function populate_cgroup_info() is not sleepable program
so the whole prog is protected by rcu and there is no need for above
bpf_rcu_read_{lock,unlock}().

>   
>   	return (void*)payload;
>   }


Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ