mirror of
https://kernel.googlesource.com/pub/scm/linux/kernel/git/stable/linux-stable.git
synced 2025-09-29 17:50:53 +10:00
bpf, docs: Document existing macros instead of deprecated
The BTF_TYPE_SAFE_NESTED macro was replaced by the BTF_TYPE_SAFE_TRUSTED,
BTF_TYPE_SAFE_RCU, and BTF_TYPE_SAFE_RCU_OR_NULL macros. Fix the docs
correspondingly.
Fixes: 6fcd486b3a
("bpf: Refactor RCU enforcement in the verifier.")
Signed-off-by: Anton Protopopov <aspsk@isovalent.com>
Signed-off-by: Daniel Borkmann <daniel@iogearbox.net>
Acked-by: Yonghong Song <yhs@fb.com>
Link: https://lore.kernel.org/bpf/20230622095424.1024244-1-aspsk@isovalent.com
This commit is contained in:
parent
2404dd01b5
commit
fbc5669de6
@ -227,23 +227,49 @@ absolutely no ABI stability guarantees.
|
|||||||
|
|
||||||
As mentioned above, a nested pointer obtained from walking a trusted pointer is
|
As mentioned above, a nested pointer obtained from walking a trusted pointer is
|
||||||
no longer trusted, with one exception. If a struct type has a field that is
|
no longer trusted, with one exception. If a struct type has a field that is
|
||||||
guaranteed to be valid as long as its parent pointer is trusted, the
|
guaranteed to be valid (trusted or rcu, as in KF_RCU description below) as long
|
||||||
``BTF_TYPE_SAFE_NESTED`` macro can be used to express that to the verifier as
|
as its parent pointer is valid, the following macros can be used to express
|
||||||
follows:
|
that to the verifier:
|
||||||
|
|
||||||
|
* ``BTF_TYPE_SAFE_TRUSTED``
|
||||||
|
* ``BTF_TYPE_SAFE_RCU``
|
||||||
|
* ``BTF_TYPE_SAFE_RCU_OR_NULL``
|
||||||
|
|
||||||
|
For example,
|
||||||
|
|
||||||
.. code-block:: c
|
.. code-block:: c
|
||||||
|
|
||||||
BTF_TYPE_SAFE_NESTED(struct task_struct) {
|
BTF_TYPE_SAFE_TRUSTED(struct socket) {
|
||||||
|
struct sock *sk;
|
||||||
|
};
|
||||||
|
|
||||||
|
or
|
||||||
|
|
||||||
|
.. code-block:: c
|
||||||
|
|
||||||
|
BTF_TYPE_SAFE_RCU(struct task_struct) {
|
||||||
const cpumask_t *cpus_ptr;
|
const cpumask_t *cpus_ptr;
|
||||||
|
struct css_set __rcu *cgroups;
|
||||||
|
struct task_struct __rcu *real_parent;
|
||||||
|
struct task_struct *group_leader;
|
||||||
};
|
};
|
||||||
|
|
||||||
In other words, you must:
|
In other words, you must:
|
||||||
|
|
||||||
1. Wrap the trusted pointer type in the ``BTF_TYPE_SAFE_NESTED`` macro.
|
1. Wrap the valid pointer type in a ``BTF_TYPE_SAFE_*`` macro.
|
||||||
|
|
||||||
2. Specify the type and name of the trusted nested field. This field must match
|
2. Specify the type and name of the valid nested field. This field must match
|
||||||
the field in the original type definition exactly.
|
the field in the original type definition exactly.
|
||||||
|
|
||||||
|
A new type declared by a ``BTF_TYPE_SAFE_*`` macro also needs to be emitted so
|
||||||
|
that it appears in BTF. For example, ``BTF_TYPE_SAFE_TRUSTED(struct socket)``
|
||||||
|
is emitted in the ``type_is_trusted()`` function as follows:
|
||||||
|
|
||||||
|
.. code-block:: c
|
||||||
|
|
||||||
|
BTF_TYPE_EMIT(BTF_TYPE_SAFE_TRUSTED(struct socket));
|
||||||
|
|
||||||
|
|
||||||
2.4.5 KF_SLEEPABLE flag
|
2.4.5 KF_SLEEPABLE flag
|
||||||
-----------------------
|
-----------------------
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user