diff mbox series

bpf: avoid possible null deref in btf_ext_output [PR target/117447]

Message ID 20241107180859.51740-1-david.faust@oracle.com
State New
Headers show
Series bpf: avoid possible null deref in btf_ext_output [PR target/117447] | expand

Commit Message

David Faust Nov. 7, 2024, 6:08 p.m. UTC
The BPF-specific .BTF.ext section is always generated for BPF programs
if -gbtf is specified, and generating it requires BTF information and
assumes that the BTF info has already been generated.

Compiling non-C languages to BPF is not supported, nor is generating
CTF/BTF for non-C.  But, compiling another language like C++ to BPF
with -gbtf specified meant that we would try to generate the .BTF.ext
section anyway, and then ICE because no BTF information was available.

Add a check to bail out of btf_ext_output if the TU CTFC does not exist,
meaning no BTF info is available.

Tested on x86_64-linux-gnu host for bpf-unknown-none.

gcc/
	PR target/117447
	* config/bpf/btfext-out.cc (btf_ext_output): Bail if TU CTFC is null.
---
 gcc/config/bpf/btfext-out.cc | 3 +++
 1 file changed, 3 insertions(+)

Comments

Jose E. Marchesi Nov. 7, 2024, 6:54 p.m. UTC | #1
Hi Faust.
Thanks for the patch.  OK for master.

> The BPF-specific .BTF.ext section is always generated for BPF programs
> if -gbtf is specified, and generating it requires BTF information and
> assumes that the BTF info has already been generated.
>
> Compiling non-C languages to BPF is not supported, nor is generating
> CTF/BTF for non-C.  But, compiling another language like C++ to BPF
> with -gbtf specified meant that we would try to generate the .BTF.ext
> section anyway, and then ICE because no BTF information was available.
>
> Add a check to bail out of btf_ext_output if the TU CTFC does not exist,
> meaning no BTF info is available.
>
> Tested on x86_64-linux-gnu host for bpf-unknown-none.
>
> gcc/
> 	PR target/117447
> 	* config/bpf/btfext-out.cc (btf_ext_output): Bail if TU CTFC is null.
> ---
>  gcc/config/bpf/btfext-out.cc | 3 +++
>  1 file changed, 3 insertions(+)
>
> diff --git a/gcc/config/bpf/btfext-out.cc b/gcc/config/bpf/btfext-out.cc
> index ca6241aa52e..760b2b59ff6 100644
> --- a/gcc/config/bpf/btfext-out.cc
> +++ b/gcc/config/bpf/btfext-out.cc
> @@ -611,6 +611,9 @@ btf_ext_init (void)
>  void
>  btf_ext_output (void)
>  {
> +  if (!ctf_get_tu_ctfc ())
> +    return;
> +
>    output_btfext_header ();
>    output_btfext_func_info (btf_ext);
>    if (TARGET_BPF_CORE)
diff mbox series

Patch

diff --git a/gcc/config/bpf/btfext-out.cc b/gcc/config/bpf/btfext-out.cc
index ca6241aa52e..760b2b59ff6 100644
--- a/gcc/config/bpf/btfext-out.cc
+++ b/gcc/config/bpf/btfext-out.cc
@@ -611,6 +611,9 @@  btf_ext_init (void)
 void
 btf_ext_output (void)
 {
+  if (!ctf_get_tu_ctfc ())
+    return;
+
   output_btfext_header ();
   output_btfext_func_info (btf_ext);
   if (TARGET_BPF_CORE)