summaryrefslogtreecommitdiff
path: root/tools
diff options
context:
space:
mode:
authorKui-Feng Lee <kuifeng@meta.com>2023-01-26 16:17:32 -0800
committerMartin KaFai Lau <martin.lau@kernel.org>2023-01-26 23:26:40 -0800
commit5416c9aea8323583e8696f0500b6142dfae80821 (patch)
treed5a11ee11600569fb81abefc6611c24180a79e4d /tools
parente8c8fd9b8393d7064152c8806f5ac446d760a23e (diff)
downloadlinux-5416c9aea8323583e8696f0500b6142dfae80821.tar.gz
linux-5416c9aea8323583e8696f0500b6142dfae80821.tar.bz2
linux-5416c9aea8323583e8696f0500b6142dfae80821.zip
bpf: Fix the kernel crash caused by bpf_setsockopt().
The kernel crash was caused by a BPF program attached to the "lsm_cgroup/socket_sock_rcv_skb" hook, which performed a call to `bpf_setsockopt()` in order to set the TCP_NODELAY flag as an example. Flags like TCP_NODELAY can prompt the kernel to flush a socket's outgoing queue, and this hook "lsm_cgroup/socket_sock_rcv_skb" is frequently triggered by softirqs. The issue was that in certain circumstances, when `tcp_write_xmit()` was called to flush the queue, it would also allow BH (bottom-half) to run. This could lead to our program attempting to flush the same socket recursively, which caused a `skbuff` to be unlinked twice. `security_sock_rcv_skb()` is triggered by `tcp_filter()`. This occurs before the sock ownership is checked in `tcp_v4_rcv()`. Consequently, if a bpf program runs on `security_sock_rcv_skb()` while under softirq conditions, it may not possess the lock needed for `bpf_setsockopt()`, thus presenting an issue. The patch fixes this issue by ensuring that a BPF program attached to the "lsm_cgroup/socket_sock_rcv_skb" hook is not allowed to call `bpf_setsockopt()`. The differences from v1 are - changing commit log to explain holding the lock of the sock, - emphasizing that TCP_NODELAY is not the only flag, and - adding the fixes tag. v1: https://lore.kernel.org/bpf/20230125000244.1109228-1-kuifeng@meta.com/ Signed-off-by: Kui-Feng Lee <kuifeng@meta.com> Fixes: 9113d7e48e91 ("bpf: expose bpf_{g,s}etsockopt to lsm cgroup") Link: https://lore.kernel.org/r/20230127001732.4162630-1-kuifeng@meta.com Signed-off-by: Martin KaFai Lau <martin.lau@kernel.org>
Diffstat (limited to 'tools')
0 files changed, 0 insertions, 0 deletions