BPF List
 help / color / mirror / Atom feed
* [PATCH] libbpf: add validation to BTF's variable type ID
@ 2022-09-29 16:05 Anne Macedo
  2022-09-30  2:32 ` John Fastabend
  0 siblings, 1 reply; 9+ messages in thread
From: Anne Macedo @ 2022-09-29 16:05 UTC (permalink / raw)
  To: bpf
  Cc: Alexei Starovoitov, Daniel Borkmann, Andrii Nakryiko,
	Martin KaFai Lau, Song Liu, Yonghong Song, John Fastabend,
	KP Singh, Stanislav Fomichev, Hao Luo, Jiri Olsa, Isabella Basso,
	Paul Moore, Anne Macedo

If BTF is corrupted, a SEGV may occur due to a null pointer dereference on
bpf_object__init_user_btf_map.

This patch adds a validation that checks whether the DATASEC's variable
type ID is null. If so, it raises a warning.

Reported by oss-fuzz project [1].

A similar patch for the same issue exists on [2]. However, the code is
unreachable when using oss-fuzz data.

[1] https://github.com/libbpf/libbpf/issues/484
[2] https://patchwork.kernel.org/project/netdevbpf/patch/20211103173213.1376990-3-andrii@kernel.org/

Reviewed-by: Isabella Basso <isabbasso@riseup.net>
Signed-off-by: Anne Macedo <annemacedo@linux.microsoft.com>
---
 tools/lib/bpf/libbpf.c | 4 ++++
 1 file changed, 4 insertions(+)

diff --git a/tools/lib/bpf/libbpf.c b/tools/lib/bpf/libbpf.c
index 184ce1684dcd..0c88612ab7c4 100644
--- a/tools/lib/bpf/libbpf.c
+++ b/tools/lib/bpf/libbpf.c
@@ -2464,6 +2464,10 @@ static int bpf_object__init_user_btf_map(struct bpf_object *obj,
 
 	vi = btf_var_secinfos(sec) + var_idx;
 	var = btf__type_by_id(obj->btf, vi->type);
+	if (!var || !btf_is_var(var)) {
+		pr_warn("map #%d: non-VAR type seen", var_idx);
+		return -EINVAL;
+	}
 	var_extra = btf_var(var);
 	map_name = btf__name_by_offset(obj->btf, var->name_off);
 
-- 
2.30.2


^ permalink raw reply related	[flat|nested] 9+ messages in thread

end of thread, other threads:[~2022-10-06 17:54 UTC | newest]

Thread overview: 9+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2022-09-29 16:05 [PATCH] libbpf: add validation to BTF's variable type ID Anne Macedo
2022-09-30  2:32 ` John Fastabend
2022-09-30 13:00   ` Anne Macedo
2022-09-30 22:38     ` Andrii Nakryiko
2022-10-03 21:26       ` Paul Moore
2022-10-05 22:42         ` Andrii Nakryiko
2022-10-06 17:01           ` Anne Macedo
2022-10-06 17:07             ` Andrii Nakryiko
2022-10-06 17:54               ` Anne Macedo

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox