Hello, On Mon, Aug 09, 2021 at 01:17:27PM +0200, Alexander Bluhm wrote: > On Fri, Aug 06, 2021 at 05:22:18PM +0200, Alexandr Nedvedicky wrote: > > > Although I did not obverve it, there seems to be the same problem > > > for snd_wl1 and rcv_up. For rcv_up I copied the comparison with > > > rcv_nxt from urgent processing to keep future urgent data. > > Over the weekend I thought about the SEQ_GT(tp->rcv_nxt, tp->rcv_up) > check. I think FreeBSD is right and we don't need it. > > In the regular case we may receive a retransmit of an old packet. > This check preserves the rcv_up from packets that we received earlier > but with higher sequence number. But in the header prediction code > we know that TAILQ_EMPTY(&tp->t_segq). So the current packet is > the most recent one and we can blindly take its rcv_nxt as urgent > pointer. > > So maybe we want take the simplified diff below.
I agree here. > > > can you also share some details about testing you have done? > > (tool + command line options) > > That is quite tricky. I do not have a simple test case for that. > One of our OpenBSD based product guarantees unidirectional traffic. > We habe a userland process that receives the data, sends it to > another OpenBSD machine. There it goes to socket splicing and > finaly it ends in a Linux FTP server. > > some magic -> user land sending process --> socket splicing --> Linux FTP > > I suspect that with all the machines and processes involved, we > have strange timing and run into the race. > looks like one has to be (un)lucky enough to trigger the session stale. I think it's worth to get it in. OK sashan