lists.openwall.net | lists / announce owl-users owl-dev john-users john-dev passwdqc-users yescrypt popa3d-users / oss-security kernel-hardening musl sabotage tlsify passwords / crypt-dev xvendor / Bugtraq Full-Disclosure linux-kernel linux-netdev linux-ext4 linux-hardening linux-cve-announce PHC | |
Open Source and information security mailing list archives
| ||
|
Message-Id: <20250509211820.36880-14-chia-yu.chang@nokia-bell-labs.com> Date: Fri, 9 May 2025 23:18:18 +0200 From: chia-yu.chang@...ia-bell-labs.com To: horms@...nel.org, dsahern@...nel.org, kuniyu@...zon.com, bpf@...r.kernel.org, netdev@...r.kernel.org, dave.taht@...il.com, pabeni@...hat.com, jhs@...atatu.com, kuba@...nel.org, stephen@...workplumber.org, xiyou.wangcong@...il.com, jiri@...nulli.us, davem@...emloft.net, edumazet@...gle.com, andrew+netdev@...n.ch, donald.hunter@...il.com, ast@...erby.net, liuhangbin@...il.com, shuah@...nel.org, linux-kselftest@...r.kernel.org, ij@...nel.org, ncardwell@...gle.com, koen.de_schepper@...ia-bell-labs.com, g.white@...lelabs.com, ingemar.s.johansson@...csson.com, mirja.kuehlewind@...csson.com, cheshire@...le.com, rs.ietf@....at, Jason_Livingood@...cast.com, vidhi_goel@...le.com Cc: Chia-Yu Chang <chia-yu.chang@...ia-bell-labs.com> Subject: [PATCH v6 net-next 13/15] tcp: accecn: AccECN ACE field multi-wrap heuristic From: Ilpo Järvinen <ij@...nel.org> Armed with ceb delta from option, delivered bytes, and delivered packets it is possible to estimate how many times ACE field wrapped. This calculation is necessary only if more than one wrap is possible. Without SACK, delivered bytes and packets are not always trustworthy in which case TCP falls back to the simpler no-or-all wraps ceb algorithm. Signed-off-by: Ilpo Järvinen <ij@...nel.org> Signed-off-by: Chia-Yu Chang <chia-yu.chang@...ia-bell-labs.com> --- net/ipv4/tcp_input.c | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/net/ipv4/tcp_input.c b/net/ipv4/tcp_input.c index f206c1a93a56..deced87f31f8 100644 --- a/net/ipv4/tcp_input.c +++ b/net/ipv4/tcp_input.c @@ -748,6 +748,24 @@ static u32 __tcp_accecn_process(struct sock *sk, const struct sk_buff *skb, d_ceb = tp->delivered_ecn_bytes[INET_ECN_CE - 1] - old_ceb; if (!d_ceb) return delta; + + if ((delivered_pkts >= (TCP_ACCECN_CEP_ACE_MASK + 1) * 2) && + (tcp_is_sack(tp) || + ((1 << inet_csk(sk)->icsk_ca_state) & + (TCPF_CA_Open | TCPF_CA_CWR)))) { + u32 est_d_cep; + + if (delivered_bytes <= d_ceb) + return safe_delta; + + est_d_cep = DIV_ROUND_UP_ULL((u64)d_ceb * + delivered_pkts, + delivered_bytes); + return min(safe_delta, + delta + + (est_d_cep & ~TCP_ACCECN_CEP_ACE_MASK)); + } + if (d_ceb > delta * tp->mss_cache) return safe_delta; if (d_ceb < -- 2.34.1
Powered by blists - more mailing lists