Re: [PATCH bpf v2 4/4] bpf: Fix documentation of th_len in bpf_tcp_{gen,check}_syncookie
From: Maxim Mikityanskiy <hidden>
Date: 2022-01-31 13:38:20
Also in:
bpf
From: Maxim Mikityanskiy <hidden>
Date: 2022-01-31 13:38:20
Also in:
bpf
On 2022-01-26 11:45, Lorenz Bauer wrote:
On Mon, 24 Jan 2022 at 15:13, Maxim Mikityanskiy [off-list ref] wrote:quoted
bpf_tcp_gen_syncookie and bpf_tcp_check_syncookie expect the full length of the TCP header (with all extensions). Fix the documentation that says it should be sizeof(struct tcphdr).I don't understand this change, sorry. Are you referring to the fact that the check is len < sizeof(*th) instead of len != sizeof(*th)? Your commit message makes me think that the helpers will access data in the extension headers, which isn't true as far as I can tell.
Yes, they will. See bpf_tcp_gen_syncookie -> tcp_v4_get_syncookie ->
tcp_get_syncookie_mss -> tcp_parse_mss_option, which iterates over the
TCP options ("extensions" wasn't the best word I used here). Moreover,
bpf_tcp_gen_syncookie even checks that th_len == th->doff * 4.
Although bpf_tcp_check_syncookie doesn't need the TCP options and
doesn't enforce them to be passed, it's still allowed.
That would be a problem in fact, since it could be used to read memory that the verifier hasn't deemed safe.
It's safe, because bpf_tcp_gen_syncookie reads up to th_len, which is ARG_CONST_SIZE for the TCP header.