@@ -1814,7 +1814,7 @@ struct bpf_struct_ops_arg_info {
};
struct bpf_struct_ops_desc {
- struct bpf_struct_ops *st_ops;
+ const struct bpf_struct_ops *st_ops;
const struct btf_type *type;
const struct btf_type *value_type;
@@ -519,7 +519,7 @@ struct bpf_verifier_log;
#if defined(CONFIG_BPF_JIT) && defined(CONFIG_BPF_SYSCALL)
struct bpf_struct_ops;
-int __register_bpf_struct_ops(struct bpf_struct_ops *st_ops);
+int __register_bpf_struct_ops(const struct bpf_struct_ops *st_ops);
const struct bpf_struct_ops_desc *bpf_struct_ops_find_value(struct btf *btf, u32 value_id);
const struct bpf_struct_ops_desc *bpf_struct_ops_find(struct btf *btf, u32 type_id);
#else
@@ -314,7 +314,7 @@ int bpf_struct_ops_desc_init(struct bpf_struct_ops_desc *st_ops_desc,
struct btf *btf,
struct bpf_verifier_log *log)
{
- struct bpf_struct_ops *st_ops = st_ops_desc->st_ops;
+ const struct bpf_struct_ops *st_ops = st_ops_desc->st_ops;
struct bpf_struct_ops_arg_info *arg_info;
const struct btf_member *member;
const struct btf_type *t;
@@ -9155,7 +9155,7 @@ bool btf_type_ids_nocast_alias(struct bpf_verifier_log *log,
#ifdef CONFIG_BPF_JIT
static int
-btf_add_struct_ops(struct btf *btf, struct bpf_struct_ops *st_ops,
+btf_add_struct_ops(struct btf *btf, const struct bpf_struct_ops *st_ops,
struct bpf_verifier_log *log)
{
struct btf_struct_ops_tab *tab, *new_tab;
@@ -9242,7 +9242,7 @@ bpf_struct_ops_find(struct btf *btf, u32 type_id)
return NULL;
}
-int __register_bpf_struct_ops(struct bpf_struct_ops *st_ops)
+int __register_bpf_struct_ops(const struct bpf_struct_ops *st_ops)
{
struct bpf_verifier_log *log;
struct btf *btf;
The BPF core does not need to modify instances of struct bpf_struct_ops anymore. Reflect this in the API so users can move their instances into read-only memory. Signed-off-by: Thomas Weißschuh <linux@weissschuh.net> --- include/linux/bpf.h | 2 +- include/linux/btf.h | 2 +- kernel/bpf/bpf_struct_ops.c | 2 +- kernel/bpf/btf.c | 4 ++-- 4 files changed, 5 insertions(+), 5 deletions(-)