Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 9d90436e authored by Alexei Starovoitov's avatar Alexei Starovoitov
Browse files

Merge branch 'typedef-func_proto'



Yonghong Song says:

====================
The current btf implementation disallows the typedef of
a func_proto type. This actually is allowed per C standard.
This patch fixed btf verification to permit such types.
Patch #1 fixed the kernel side and Patch #2 fixed
the tools test_btf test.
====================

Signed-off-by: default avatarAlexei Starovoitov <ast@kernel.org>
parents 2fa53f89 32b750b9
Loading
Loading
Loading
Loading
+2 −1
Original line number Diff line number Diff line
@@ -1459,7 +1459,8 @@ static int btf_modifier_resolve(struct btf_verifier_env *env,

		/* "typedef void new_void", "const void"...etc */
		if (!btf_type_is_void(next_type) &&
		    !btf_type_is_fwd(next_type)) {
		    !btf_type_is_fwd(next_type) &&
		    !btf_type_is_func_proto(next_type)) {
			btf_verifier_log_type(env, v->t, "Invalid type_id");
			return -EINVAL;
		}
+3 −6
Original line number Diff line number Diff line
@@ -1881,13 +1881,12 @@ static struct btf_raw_test raw_tests[] = {
},

{
	.descr = "func proto (CONST=>TYPEDEF=>FUNC_PROTO)",
	.descr = "func proto (TYPEDEF=>FUNC_PROTO)",
	.raw_types = {
		BTF_TYPE_INT_ENC(0, BTF_INT_SIGNED, 0, 32, 4),	/* [1] */
		BTF_TYPE_INT_ENC(0, 0, 0, 32, 4),		/* [2] */
		BTF_CONST_ENC(4),				/* [3] */
		BTF_TYPEDEF_ENC(NAME_TBD, 5),			/* [4] */
		BTF_FUNC_PROTO_ENC(0, 2),			/* [5] */
		BTF_TYPEDEF_ENC(NAME_TBD, 4),			/* [3] */
		BTF_FUNC_PROTO_ENC(0, 2),			/* [4] */
			BTF_FUNC_PROTO_ARG_ENC(0, 1),
			BTF_FUNC_PROTO_ARG_ENC(0, 2),
		BTF_END_RAW,
@@ -1901,8 +1900,6 @@ static struct btf_raw_test raw_tests[] = {
	.key_type_id = 1,
	.value_type_id = 1,
	.max_entries = 4,
	.btf_load_err = true,
	.err_str = "Invalid type_id",
},

{