Thread (4 messages) 4 messages, 4 authors, 2024-09-03

Re: [PATCH net v5] bpf, net: Fix a potential race in do_sock_getsockopt()

From: Alexei Starovoitov <hidden>
Date: 2024-08-31 22:06:13
Also in: bpf, linux-mediatek, lkml, netdev

On Fri, Aug 30, 2024 at 8:29 PM Stanislav Fomichev [off-list ref] wrote:
On 08/30, Tze-nan Wu wrote:
quoted
There's a potential race when `cgroup_bpf_enabled(CGROUP_GETSOCKOPT)` is
false during the execution of `BPF_CGROUP_GETSOCKOPT_MAX_OPTLEN`, but
becomes true when `BPF_CGROUP_RUN_PROG_GETSOCKOPT` is called.
This inconsistency can lead to `BPF_CGROUP_RUN_PROG_GETSOCKOPT` receiving
an "-EFAULT" from `__cgroup_bpf_run_filter_getsockopt(max_optlen=0)`.
Scenario shown as below:

           `process A`                      `process B`
           -----------                      ------------
  BPF_CGROUP_GETSOCKOPT_MAX_OPTLEN
                                            enable CGROUP_GETSOCKOPT
  BPF_CGROUP_RUN_PROG_GETSOCKOPT (-EFAULT)

To resolve this, remove the `BPF_CGROUP_GETSOCKOPT_MAX_OPTLEN` macro and
directly uses `copy_from_sockptr` to ensure that `max_optlen` is always
set before `BPF_CGROUP_RUN_PROG_GETSOCKOPT` is invoked.

Fixes: 0d01da6afc54 ("bpf: implement getsockopt and setsockopt hooks")
Co-developed-by: Yanghui Li <redacted>
Signed-off-by: Yanghui Li <redacted>
Co-developed-by: Cheng-Jui Wang <redacted>
Signed-off-by: Cheng-Jui Wang <redacted>
Signed-off-by: Tze-nan Wu <redacted>
Acked-by: Stanislav Fomichev <sdf@fomichev.me>
Considering it's rc6 I was debating whether it's net/bpf or -next
material, but could argue either way.

Tze-nan,
if I recall you were saying it affects android boot ?
If so please describe such details in the commit log next time.

Acked-by: Alexei Starovoitov <ast@kernel.org>

Kuba,
feel free to take it into net if you think it's an appropriate fix.
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help