Bug 211085 - No response from TCP connection in ESTALISHED state if sending data segment with unacceptable ACK
Summary: No response from TCP connection in ESTALISHED state if sending data segment w...
Status: NEW
Alias: None
Product: Networking
Classification: Unclassified
Component: IPV4 (show other bugs)
Hardware: All Linux
: P1 normal
Assignee: Stephen Hemminger
URL:
Keywords:
Depends on:
Blocks:
 
Reported: 2021-01-08 08:17 UTC by alexander
Modified: 2021-01-08 08:17 UTC (History)
0 users

See Also:
Kernel Version: 5.4.24 and upstream
Subsystem:
Regression: No
Bisected commit-id:


Attachments

Description alexander 2021-01-08 08:17:40 UTC
We're currently failing to pass the TCP_UNACCEPTABLE_04 test from TCP/IP tests of TC8 ECU and Network Test specification (Open Alliance). The Test specification is freely available on the Internet.
TCP_UNACCEPTABLE_04 validates the behavior of RFC793 'Chapter 3.4.  Establishing a connection / Reset Generation (3)' (Page 36) and 'Chapter 9 - Event Processing / SEGMENT ARRIVES / Otherwise / Check ACK field' (Page 71) 
which pointed out that sending an unacceptable ACK in ESTALISHED state for example ACK acks a data segment not yet sent should be answered with an ACK (from RFC793 - '...must elicit only an empty acknowledgment segment containing 
the current send-sequence number and an acknowledgment indicating the next sequence number expected to be received...'). After that the segment needs to be discarded. 
Unfortunately the segment is only discarded and not confirmed by ACK. I did some research in the TCP/IP stack and found the code which is responsible for discarding the ACK. 
It's in 'net/ipv4/tcp_input.c' in function tcp_ack currently on line 3727 of upstream kernel.

>>/* If the ack includes data we haven't sent yet, discard
>> * this segment (RFC793 Section 3.9).
>> */
>>if (after(ack, tp->snd_nxt))
>>        return -1;

Validation was done on DUT target with Kernel 5.4.24.

Let me if you need further informations.

Note You need to log in before you can comment on or make changes to this bug.