From: Chia-Yu Chang <[email protected]>

According to Section 3.2.2.1 of AccECN spec (RFC9768), if the Server
is in AccECN mode and in SYN-RCVD state, and if it receives a value of
zero on a pure ACK with SYN=0 and no SACK blocks, for the rest of the
connection the Server MUST NOT set ECT on outgoing packets and MUST
NOT respond to AccECN feedback. Nonetheless, as a Data Receiver it
MUST NOT disable AccECN feedback.

Signed-off-by: Chia-Yu Chang <[email protected]>
Acked-by: Paolo Abeni <[email protected]>

---
v3:
- Remove unnecessary brackets.
---
 include/net/tcp_ecn.h | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

diff --git a/include/net/tcp_ecn.h b/include/net/tcp_ecn.h
index 796c613b5ef3..49e0b865fe02 100644
--- a/include/net/tcp_ecn.h
+++ b/include/net/tcp_ecn.h
@@ -175,7 +175,9 @@ static inline void tcp_accecn_third_ack(struct sock *sk,
        switch (ace) {
        case 0x0:
                /* Invalid value */
-               tcp_accecn_fail_mode_set(tp, TCP_ACCECN_ACE_FAIL_RECV);
+               if (!TCP_SKB_CB(skb)->sacked)
+                       tcp_accecn_fail_mode_set(tp, TCP_ACCECN_ACE_FAIL_RECV |
+                                                    TCP_ACCECN_OPT_FAIL_RECV);
                break;
        case 0x7:
        case 0x5:
-- 
2.34.1


Reply via email to