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

Reply via email to