mirror of
https://github.com/torvalds/linux.git
synced 2025-12-07 20:06:24 +00:00
net/tcp: Add tcp_parse_auth_options()
Introduce a helper that:
(1) shares the common code with TCP-MD5 header options parsing
(2) looks for hash signature only once for both TCP-MD5 and TCP-AO
(3) fails with -EEXIST if any TCP sign option is present twice, see
RFC5925 (2.2):
">> A single TCP segment MUST NOT have more than one TCP-AO in its
options sequence. When multiple TCP-AOs appear, TCP MUST discard
the segment."
Co-developed-by: Francesco Ruggeri <fruggeri@arista.com>
Signed-off-by: Francesco Ruggeri <fruggeri@arista.com>
Co-developed-by: Salam Noureddine <noureddine@arista.com>
Signed-off-by: Salam Noureddine <noureddine@arista.com>
Signed-off-by: Dmitry Safonov <dima@arista.com>
Acked-by: David Ahern <dsahern@kernel.org>
Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
committed by
David S. Miller
parent
1e03d32bea
commit
f7dca36fc5
@@ -152,7 +152,9 @@ int tcp_v6_parse_ao(struct sock *sk, int cmd, sockptr_t optval, int optlen);
|
||||
void tcp_ao_established(struct sock *sk);
|
||||
void tcp_ao_finish_connect(struct sock *sk, struct sk_buff *skb);
|
||||
void tcp_ao_connect_init(struct sock *sk);
|
||||
|
||||
void tcp_ao_syncookie(struct sock *sk, const struct sk_buff *skb,
|
||||
struct tcp_request_sock *treq,
|
||||
unsigned short int family);
|
||||
#else /* CONFIG_TCP_AO */
|
||||
|
||||
static inline int tcp_ao_transmit_skb(struct sock *sk, struct sk_buff *skb,
|
||||
@@ -185,4 +187,17 @@ static inline void tcp_ao_connect_init(struct sock *sk)
|
||||
}
|
||||
#endif
|
||||
|
||||
#if defined(CONFIG_TCP_MD5SIG) || defined(CONFIG_TCP_AO)
|
||||
int tcp_do_parse_auth_options(const struct tcphdr *th,
|
||||
const u8 **md5_hash, const u8 **ao_hash);
|
||||
#else
|
||||
static inline int tcp_do_parse_auth_options(const struct tcphdr *th,
|
||||
const u8 **md5_hash, const u8 **ao_hash)
|
||||
{
|
||||
*md5_hash = NULL;
|
||||
*ao_hash = NULL;
|
||||
return 0;
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif /* _TCP_AO_H */
|
||||
|
||||
Reference in New Issue
Block a user