Files
twx-linux/include/linux
Daniel Borkmann 1253e34a54 bpf: Fix ringbuf memory type confusion when passing to helpers
commit a672b2e36a upstream.

The bpf_ringbuf_submit() and bpf_ringbuf_discard() have ARG_PTR_TO_ALLOC_MEM
in their bpf_func_proto definition as their first argument, and thus both expect
the result from a prior bpf_ringbuf_reserve() call which has a return type of
RET_PTR_TO_ALLOC_MEM_OR_NULL.

While the non-NULL memory from bpf_ringbuf_reserve() can be passed to other
helpers, the two sinks (bpf_ringbuf_submit(), bpf_ringbuf_discard()) right now
only enforce a register type of PTR_TO_MEM.

This can lead to potential type confusion since it would allow other PTR_TO_MEM
memory to be passed into the two sinks which did not come from bpf_ringbuf_reserve().

Add a new MEM_ALLOC composable type attribute for PTR_TO_MEM, and enforce that:

 - bpf_ringbuf_reserve() returns NULL or PTR_TO_MEM | MEM_ALLOC
 - bpf_ringbuf_submit() and bpf_ringbuf_discard() only take PTR_TO_MEM | MEM_ALLOC
   but not plain PTR_TO_MEM arguments via ARG_PTR_TO_ALLOC_MEM
 - however, other helpers might treat PTR_TO_MEM | MEM_ALLOC as plain PTR_TO_MEM
   to populate the memory area when they use ARG_PTR_TO_{UNINIT_,}MEM in their
   func proto description

Fixes: 457f44363a ("bpf: Implement BPF ring buffer and verifier support for it")
Reported-by: Alexei Starovoitov <ast@kernel.org>
Signed-off-by: Daniel Borkmann <daniel@iogearbox.net>
Acked-by: John Fastabend <john.fastabend@gmail.com>
Acked-by: Alexei Starovoitov <ast@kernel.org>
Signed-off-by: Edward Liaw <edliaw@google.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
2024-04-27 17:05:23 +02:00
..
2024-01-25 14:52:51 -08:00
2023-12-20 15:17:37 +01:00
2024-04-10 16:19:29 +02:00
2024-04-10 16:19:07 +02:00
2024-04-10 16:18:55 +02:00
2024-04-10 16:18:46 +02:00
2023-11-20 11:08:16 +01:00
2024-04-10 16:18:40 +02:00
2024-04-10 16:19:00 +02:00
2023-08-26 14:23:39 +02:00
2024-01-25 14:52:33 -08:00
2024-02-23 08:54:47 +01:00
2023-11-28 16:56:21 +00:00
2023-10-19 23:05:33 +02:00
2023-10-19 23:05:33 +02:00
2023-12-13 18:36:35 +01:00