[Bug 260393] Page Fault tcp_output/tcp_input
- Go to: [ bottom of page ] [ top of archives ] [ this month ]
Date: Tue, 21 Dec 2021 23:40:26 UTC
https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=260393 --- Comment #36 from Hans Petter Selasky <hselasky@FreeBSD.org> --- Hi, I wonder if we need to subtract 1 from tp->snd_max, when TF_SENTFIN is set? t_state = 8 #define TCPS_LAST_ACK 8 /* had fin and close; await FIN ACK */ t_flags = 554697333 = 0x21100275 #define TF_SENTFIN 0x00000010 /* have sent FIN */ I remember we did a similar fix some while back for SACK: /* * Exclude FIN sequence space in * the hole for the rescue retransmission, * and also don't create a hole, if only * the ACK for a FIN is outstanding. */ tcp_seq highdata = tp->snd_max; if (tp->t_flags & TF_SENTFIN) highdata--; Now in this piece of code leading up do the sbdrop() of 1 byte: if (tlen == 0) { if (SEQ_GT(th->th_ack, tp->snd_una) && SEQ_LEQ(th->th_ack, tp->snd_max) && !IN_RECOVERY(tp->t_flags) && (to.to_flags & TOF_SACK) == 0 && TAILQ_EMPTY(&tp->snd_holes)) { The SEQ_LEQ is compared against the wrong snd_max ? SEQ_LEQ(th->th_ack, tp->snd_max) --HPS -- You are receiving this mail because: You are the assignee for the bug.