summaryrefslogtreecommitdiff
path: root/sys/netinet/tcp_input.c
AgeCommit message (Collapse)Author
2000-07-27be proactive about unspecified IPv6 source address. pcb layer usesJun-ichiro itojun Hagino
unspecified address (::) to mean "unbounded" or "unconnected", and can be confused by packets from outside. use of :: as source is not documented well in IPv6 specification. not sure if it presents a real threat. the worst case scenario is a DoS against TCP listening socket: - outsider transmit TCP SYN with :: as IPv6 source - receiving side creates TCP control block with: local address = my addres remote address = :: (meaning "unconnected") state = SYN_RCVD note that SYN ACK will not be sent due to ip6_output() filter. this stays until it timeouts. - the TCP control block prevents listening TCP control block from being contacted (DoS).
2000-07-11compute correct window scale when recvpipe option is set in route; basedNiels Provos
on diff from "Pete Kazmier" <pete@kazmier.com>
2000-07-09be more cautious about tcp option length field. drop bogus ones earlier.Jun-ichiro itojun Hagino
not sure if there is a real threat or not, but it seems that there's possibility for overrun/underrun (like non-NOP option with optlen > cnt).
2000-07-06Move domain.h above so this compiles again.Federico G. Schwindt
Remove netinet.h within ifdef INET6; this is already included.
2000-07-06- more icmp6/ip6 stats.Jun-ichiro itojun Hagino
- protect IPv6 ND from being hosed (due to neighbor unreachability detection hint) by wrong tcp traffic. still not sure if there's real attack, but it is good to be cautious. - avoid bitfield for router renumbering header decl. - implement packet-per-sec limitation for icmp6 errors, turn interval limit off (it is not very useful due to unix timer resolution).
2000-07-06completely remove ipv4 mapped cases from tcp_input().Jun-ichiro itojun Hagino
cleanup (indentation, v4-or-v6 conditions)
2000-07-05more cleanup for IPv4 mapped address support. there seem to be someJun-ichiro itojun Hagino
inconsistency in corner cases (from NRL I believe). todd (fries) and I have seen panic, with the following call chain: ip6_input -> tcp_input -> tcp_respond -> ip_input -> bang! more cleanups should be done, to decrease complexity. for example, INP_IPV6_MAPPED should be nuked.
2000-05-15Add comment on input MSS calculation based on previous PMTUD results,Angelos D. Keromytis
as per TCP-imply IETF WG draft(s). The correct approach is to just use the relevant interface's MTU.
2000-04-28actually m_adj tries to drop tcp header part. it is better toJun-ichiro itojun Hagino
touch tcp header before m_adj, than the other way around. (no behavior change with the current m_adj code, new code is safer against any future m_adj changes)
2000-04-27mbuf is freed by sbappend(), move the references to th up. found by art@Niels Provos
2000-04-14for layer 3 protocols that does not support path MTU discoveryJun-ichiro itojun Hagino
(I mean, IPv4) do not try to use rmx_mtu on routing table. this symptom was introduced by rmx_mtu initialization (necessary for IPv6 path MTU discovery) in net/route.c. now prior behavior is recovered. From: Hugh Graham <hugh@openbsd.org> there are several question about mssdflt semantics, though: Question 1: with the current code, mssdflt does not override rmx_mtu value (mssdflt overrides interface mtu only). should we override rmx_mtu by mssdflt as well? Question 2: with the current code, mssdflt overrides mss computed from if mtu, only when the destination is IPv4 non-local. is it safe enough? we may want to use mssdflt, whenever we are uncertain. mss = if mtu - hdrsiz; if (IPv4 non-local destination) mss = min(mss, mssdflt);
2000-02-21TCP SACK fixes via Tom Henderson (tomh@cs.berkeley.edu):Niels Provos
- tcp_sack_adjust() was completely rewritten, since it was erroneously referencing receiver side sequence numbers and comparing with sender side sequence numbers (thanks to Arun Desai (adesai@cisco.com) who discovered the problem) - in tcp_output(), moved assignment of sendalot=0 to the piece of code immediately following the search for sack-eligible retransmissions (bug identified by Arun Desai). - tcp_input() was not clearing t_dupacks if fewer than three dupacks arrived between acks of new data. (bug identified by Gaurav Banga (gaurav@netapp.com))
1999-12-21option TCP_NEWRENO goes away, its the default case for TCP_SACK ifNiels Provos
SACK is disabled for the connection or via sysctl
1999-12-21be paranoid about malicious use of v4 mapped addr on v6 packet.Jun-ichiro itojun Hagino
malicious party may try to use v4 mapped addr as source/dest to confuse tcp/udp layer, or to bypass security checks, for example, naive stack can mistakingly think a packet with src = ::ffff:127.0.0.1 is from local node. (sync with kame)
1999-12-15never go into persist mode if there are still segments to be retransmitted.Niels Provos
set retransmit timer again if it was cleared, that can happen in SACK when there are no elligble SACK holes to be retransmitted and the receiver window is full.
1999-12-14sack.end may not be > tp->snd_max but can be equal.Niels Provos
1999-12-08bring in KAME IPv6 code, dated 19991208.Jun-ichiro itojun Hagino
replaces NRL IPv6 layer. reuses NRL pcb layer. no IPsec-on-v6 support. see sys/netinet6/{TODO,IMPLEMENTATION} for more details. GENERIC configuration should work fine as before. GENERIC.v6 works fine as well, but you'll need KAME userland tools to play with IPv6 (will be bringed into soon).
1999-11-15Fix tcp retransmit/persist timers, provos@ OK.Hugh Graham
Adapted from NetBSD: Fix a retransmission bug introduced by the Brakmo and Peterson RTO estimation changes. Under some circumstances it would return a value of 0, while the old Van Jacobson RTO code would return a minimum of 3. This would result in 12 retransmissions, each 1 second apart. This takes care of those instances, and ensures that t_rttmin is used everywhere as a lower bound.
1999-11-04Add comment about gettdb() and spl level.Hakan Olsson
1999-09-01increase tcp_iss incrementNiels Provos
1999-08-31correctly update window informationNiels Provos
1999-08-27more SACK hole validity testing; fix a tcp seq arithmetic bug. cmetz and me.Niels Provos
1999-08-06back out all recent changes, which continue to be a source for nasty bugsTheo de Raadt
1999-07-28Moved the m_data/m_len shave of IP and TCP headers back to its originalcmetz
location, as attempts to do it differently have caused too many problems.
1999-07-22Reintroduce rev 1.41 which brings us TCP signatures again, but this timeNiklas Hallqvist
hopefully without random kernel data corruption.
1999-07-18use proper CTheo de Raadt
1999-07-17revert tcp_input.c to before 07/01/1999 - this seems to solve the mysteriousNiels Provos
data corruptions and panics that people have experienced. by reverting we loose tcp signatures and ipv6 cleanups, the code looked correct to me.
1999-07-13correct non-STDC caseTheo de Raadt
1999-07-06Added support for TCP MD5 option (RFC 2385).cmetz
1999-07-06Fixed compilation problems when INET6 is enabled.cmetz
1999-07-03indentTheo de Raadt
1999-07-02Significant cleanups in the way TCP is made to handle multiple networkcmetz
protocols. "struct tcpiphdr" is now gone from much of the code, as are separate pointers for ti and ti6. The result is fewer variables, which is generally a good thing. Simple if(is_ipv6) ... else ... tests are gone in favor of a switch(protocol family), which allows future new protocols to be added easily. This also makes it possible for someone so inclined to re-implement TUBA (TCP over CLNP?) and do it right instead of the kluged way it was done in 4.4. The TCP header template is now referenced through a mbuf rather than done through a data pointer and dtom()ed as needed. This is partly because dtom() is evil and partly because max_linkhdr + IPv6 + TCP + MSS/TS/SACK opts won't fit inside a packet header mbuf, so we need to grab a cluster for that (which the code now does, if needed).
1999-06-11removed TCPCOOKIE support.pattonme
1999-05-24instead of dropping out of window SYNs, send an ACK and drop afterwards.Niels Provos
fixes a problem with NFS over TCP reported by Jason Thorpe, fix from klm@netbsd.org
1999-04-21From Tom Henderson <tomh@cs.berkeley.edu>:Niels Provos
Fixed a sequence wraparound bug in the snd_recover variable discovered in very large (multiple GByte) transfers (in loss free conditions, snd_recover was not sufficiently tracking snd_una). Thanks to Mark Smith for finding this. Fixed a bug in tcp_newreno that was preventing retransmission of data due to partial acks. (Discovered by Jayanth Vijayaraghavan)
1999-03-27add SADB_X_BINDSA to pfkey allowing incoming SAs to refer to an outgoingNiels Provos
SA to be used, use this SA in ip_output if available. allow mobile road warriors for bind SAs with wildcard dst and src addresses. check IPSEC AUTH and ESP level when receiving packets, drop them if protection is insufficient. add stats to show dropped packets because of insufficient IPSEC protection. -- phew. this was all done in canada. dugsong and linh provided the ride and company.
1999-02-15when allocating sack blocks check for failing malloc(), if it failsNiels Provos
just ignore the sack block + fix misleading comment. tomh@CS.Berkeley.EDU
1999-02-09correct rst handling should not consult ack field hereHugh Graham
1999-02-08init incr tcp iss from snd_nxt, not rcv_nxt; 4.4Theo de Raadt
1999-02-05indentTheo de Raadt
1999-01-27fix NEWRENO behaviour, the newreo code assumed that the send socket buffer hasNiels Provos
already been cleared of the acked data, though it was called before any sbdrop() call and always called tcp_output() with 0 index in the send socket buffer and thus causing data corruption. so do not set snd_una to th_ack.
1999-01-27reordered FIN segments caused early termination, bug introduced by ipv6 ↵Niklas Hallqvist
integration
1999-01-15IN_MULTICAST takes network order addressesNiklas Hallqvist
1999-01-11Make TCP_SACK compile with new netinetNiklas Hallqvist
1999-01-11netinet merge of NRL stuff. some indent and shrinkage needed; NRL/cmetzTheo de Raadt
1999-01-07in_pcblookup() now takes ptr to both ip address argumentsTheo de Raadt
1998-11-25more min vs. ulmin/lmin fixesTodd C. Miller
1998-11-17NewReno, SACK and FACK support for TCP, adapted from code for BSDINiels Provos
by Hari Balakrishnan (hari@lcs.mit.edu), Tom Henderson (tomh@cs.berkeley.edu) and Venkat Padmanabhan (padmanab@cs.berkeley.edu) as part of the Daedalus research group at the University of California, (http://daedalus.cs.berkeley.edu). [I was able to do this on time spent at the Center for Information Technology Integration (citi.umich.edu)]
1998-10-28- fix three bugs pointed out in Stevens, i.a. updating timestamps correctlyNiels Provos
- fix a 4.4bsd-lite2 bug, when tcp options are present the maximum segment size is not updated correctly, so that fast recovery forces out a segment which is split in two segments by tcp_output(), the fix is adpated from FreeBSD, the effective mss is recorded after option negotiation in 3way handshake. [I was able to fix this on time spent at Center for Information Technology Integration (citi.umich.edu)]
1998-06-27indentTheo de Raadt