* [PATCH bpf] bpf: Reject negative optlen in cgroup getsockopt hook
@ 2026-07-26 7:01 Junseo Lim
2026-07-29 21:36 ` Emil Tsalapatis
0 siblings, 1 reply; 2+ messages in thread
From: Junseo Lim @ 2026-07-26 7:01 UTC (permalink / raw)
To: Alexei Starovoitov, Daniel Borkmann, Andrii Nakryiko,
Eduard Zingerman, Kumar Kartikeya Dwivedi, Martin KaFai Lau
Cc: Stanislav Fomichev, Song Liu, Yonghong Song, Jiri Olsa,
Emil Tsalapatis, bpf, linux-kernel, Sechang Lim, Junseo Lim
A cgroup getsockopt BPF program can shrink ctx->optlen after the
kernel getsockopt handler has run. The kernel-buffer variant, used by
TCP_ZEROCOPY_RECEIVE, only rejects values larger than the original
length.
If BPF writes a negative optlen, that value is accepted and propagated
back to the TCP getsockopt code. It can then be passed to
copy_to_sockptr() as a size_t and trigger the hardened usercopy
bytes > INT_MAX warning.
Reject negative ctx.optlen in __cgroup_bpf_run_filter_getsockopt_kern(),
matching the lower-bound validation already present in the sockptr-based
getsockopt hook.
Fixes: 9cacf81f8161 ("bpf: Remove extra lock_sock for TCP_ZEROCOPY_RECEIVE")
Signed-off-by: Junseo Lim <zirajs7@gmail.com>
---
Reproducer and warning:
https://gist.github.com/ZirAjs/a177ec6d8f2c8ed7d93edca6313a9255
Tested by building and booting the patched kernel. The reproducer
returns -EFAULT and no longer triggers the hardened usercopy warning.
kernel/bpf/cgroup.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/kernel/bpf/cgroup.c b/kernel/bpf/cgroup.c
index 4355ccb78a9c..c04a244fe2e6 100644
--- a/kernel/bpf/cgroup.c
+++ b/kernel/bpf/cgroup.c
@@ -2235,7 +2235,7 @@ int __cgroup_bpf_run_filter_getsockopt_kern(struct sock *sk, int level,
if (ret < 0)
return ret;
- if (ctx.optlen > *optlen)
+ if (ctx.optlen > *optlen || ctx.optlen < 0)
return -EFAULT;
/* BPF programs can shrink the buffer, export the modifications.
--
2.55.0
^ permalink raw reply related [flat|nested] 2+ messages in thread
* Re: [PATCH bpf] bpf: Reject negative optlen in cgroup getsockopt hook
2026-07-26 7:01 [PATCH bpf] bpf: Reject negative optlen in cgroup getsockopt hook Junseo Lim
@ 2026-07-29 21:36 ` Emil Tsalapatis
0 siblings, 0 replies; 2+ messages in thread
From: Emil Tsalapatis @ 2026-07-29 21:36 UTC (permalink / raw)
To: Junseo Lim, Alexei Starovoitov, Daniel Borkmann, Andrii Nakryiko,
Eduard Zingerman, Kumar Kartikeya Dwivedi, Martin KaFai Lau
Cc: Stanislav Fomichev, Song Liu, Yonghong Song, Jiri Olsa,
Emil Tsalapatis, bpf, linux-kernel, Sechang Lim
On Sun Jul 26, 2026 at 3:01 AM EDT, Junseo Lim wrote:
> A cgroup getsockopt BPF program can shrink ctx->optlen after the
> kernel getsockopt handler has run. The kernel-buffer variant, used by
> TCP_ZEROCOPY_RECEIVE, only rejects values larger than the original
> length.
>
> If BPF writes a negative optlen, that value is accepted and propagated
> back to the TCP getsockopt code. It can then be passed to
> copy_to_sockptr() as a size_t and trigger the hardened usercopy
> bytes > INT_MAX warning.
>
> Reject negative ctx.optlen in __cgroup_bpf_run_filter_getsockopt_kern(),
> matching the lower-bound validation already present in the sockptr-based
> getsockopt hook.
>
> Fixes: 9cacf81f8161 ("bpf: Remove extra lock_sock for TCP_ZEROCOPY_RECEIVE")
> Signed-off-by: Junseo Lim <zirajs7@gmail.com>
Reviewed-by: Emil Tsalapatis <emil@etsalapatis.com>
It'd be worth resending with a reproducer setting optlen to negative.
> ---
> Reproducer and warning:
> https://gist.github.com/ZirAjs/a177ec6d8f2c8ed7d93edca6313a9255
>
> Tested by building and booting the patched kernel. The reproducer
> returns -EFAULT and no longer triggers the hardened usercopy warning.
>
> kernel/bpf/cgroup.c | 2 +-
> 1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/kernel/bpf/cgroup.c b/kernel/bpf/cgroup.c
> index 4355ccb78a9c..c04a244fe2e6 100644
> --- a/kernel/bpf/cgroup.c
> +++ b/kernel/bpf/cgroup.c
> @@ -2235,7 +2235,7 @@ int __cgroup_bpf_run_filter_getsockopt_kern(struct sock *sk, int level,
> if (ret < 0)
> return ret;
>
> - if (ctx.optlen > *optlen)
> + if (ctx.optlen > *optlen || ctx.optlen < 0)
> return -EFAULT;
>
> /* BPF programs can shrink the buffer, export the modifications.
^ permalink raw reply [flat|nested] 2+ messages in thread
end of thread, other threads:[~2026-07-29 21:36 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-07-26 7:01 [PATCH bpf] bpf: Reject negative optlen in cgroup getsockopt hook Junseo Lim
2026-07-29 21:36 ` Emil Tsalapatis
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.