mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2025-01-06 05:13:18 +00:00
tcp: Fix -Wc23-extensions in tcp_options_write()
Clang warns (or errors with CONFIG_WERROR=y) when CONFIG_TCP_AO is set:
net/ipv4/tcp_output.c:663:2: error: label at end of compound statement is a C23 extension [-Werror,-Wc23-extensions]
663 | }
| ^
1 error generated.
On earlier releases (such as clang-11, the current minimum supported
version for building the kernel) that do not support C23, this was a
hard error unconditionally:
net/ipv4/tcp_output.c:663:2: error: expected statement
}
^
1 error generated.
While adding a semicolon after the label would resolve this, it is more
in line with the kernel as a whole to refactor this block into a
standalone function, which means the goto a label construct can just be
replaced with a return statement. Do so to resolve the warning.
Closes: https://github.com/ClangBuiltLinux/linux/issues/1953
Fixes: 1e03d32bea
("net/tcp: Add TCP-AO sign to outgoing packets")
Signed-off-by: Nathan Chancellor <nathan@kernel.org>
Reviewed-by: Dmitry Safonov <dima@arista.com>
Reviewed-by: Eric Dumazet <edumazet@google.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
c542b39b60
commit
7425627b2b
@ -601,6 +601,44 @@ static void bpf_skops_write_hdr_opt(struct sock *sk, struct sk_buff *skb,
|
||||
}
|
||||
#endif
|
||||
|
||||
static __be32 *process_tcp_ao_options(struct tcp_sock *tp,
|
||||
const struct tcp_request_sock *tcprsk,
|
||||
struct tcp_out_options *opts,
|
||||
struct tcp_key *key, __be32 *ptr)
|
||||
{
|
||||
#ifdef CONFIG_TCP_AO
|
||||
u8 maclen = tcp_ao_maclen(key->ao_key);
|
||||
|
||||
if (tcprsk) {
|
||||
u8 aolen = maclen + sizeof(struct tcp_ao_hdr);
|
||||
|
||||
*ptr++ = htonl((TCPOPT_AO << 24) | (aolen << 16) |
|
||||
(tcprsk->ao_keyid << 8) |
|
||||
(tcprsk->ao_rcv_next));
|
||||
} else {
|
||||
struct tcp_ao_key *rnext_key;
|
||||
struct tcp_ao_info *ao_info;
|
||||
|
||||
ao_info = rcu_dereference_check(tp->ao_info,
|
||||
lockdep_sock_is_held(&tp->inet_conn.icsk_inet.sk));
|
||||
rnext_key = READ_ONCE(ao_info->rnext_key);
|
||||
if (WARN_ON_ONCE(!rnext_key))
|
||||
return ptr;
|
||||
*ptr++ = htonl((TCPOPT_AO << 24) |
|
||||
(tcp_ao_len(key->ao_key) << 16) |
|
||||
(key->ao_key->sndid << 8) |
|
||||
(rnext_key->rcvid));
|
||||
}
|
||||
opts->hash_location = (__u8 *)ptr;
|
||||
ptr += maclen / sizeof(*ptr);
|
||||
if (unlikely(maclen % sizeof(*ptr))) {
|
||||
memset(ptr, TCPOPT_NOP, sizeof(*ptr));
|
||||
ptr++;
|
||||
}
|
||||
#endif
|
||||
return ptr;
|
||||
}
|
||||
|
||||
/* Write previously computed TCP options to the packet.
|
||||
*
|
||||
* Beware: Something in the Internet is very sensitive to the ordering of
|
||||
@ -629,37 +667,7 @@ static void tcp_options_write(struct tcphdr *th, struct tcp_sock *tp,
|
||||
opts->hash_location = (__u8 *)ptr;
|
||||
ptr += 4;
|
||||
} else if (tcp_key_is_ao(key)) {
|
||||
#ifdef CONFIG_TCP_AO
|
||||
u8 maclen = tcp_ao_maclen(key->ao_key);
|
||||
|
||||
if (tcprsk) {
|
||||
u8 aolen = maclen + sizeof(struct tcp_ao_hdr);
|
||||
|
||||
*ptr++ = htonl((TCPOPT_AO << 24) | (aolen << 16) |
|
||||
(tcprsk->ao_keyid << 8) |
|
||||
(tcprsk->ao_rcv_next));
|
||||
} else {
|
||||
struct tcp_ao_key *rnext_key;
|
||||
struct tcp_ao_info *ao_info;
|
||||
|
||||
ao_info = rcu_dereference_check(tp->ao_info,
|
||||
lockdep_sock_is_held(&tp->inet_conn.icsk_inet.sk));
|
||||
rnext_key = READ_ONCE(ao_info->rnext_key);
|
||||
if (WARN_ON_ONCE(!rnext_key))
|
||||
goto out_ao;
|
||||
*ptr++ = htonl((TCPOPT_AO << 24) |
|
||||
(tcp_ao_len(key->ao_key) << 16) |
|
||||
(key->ao_key->sndid << 8) |
|
||||
(rnext_key->rcvid));
|
||||
}
|
||||
opts->hash_location = (__u8 *)ptr;
|
||||
ptr += maclen / sizeof(*ptr);
|
||||
if (unlikely(maclen % sizeof(*ptr))) {
|
||||
memset(ptr, TCPOPT_NOP, sizeof(*ptr));
|
||||
ptr++;
|
||||
}
|
||||
out_ao:
|
||||
#endif
|
||||
ptr = process_tcp_ao_options(tp, tcprsk, opts, key, ptr);
|
||||
}
|
||||
if (unlikely(opts->mss)) {
|
||||
*ptr++ = htonl((TCPOPT_MSS << 24) |
|
||||
|
Loading…
Reference in New Issue
Block a user