mirror of
https://github.com/RGBCube/serenity
synced 2025-05-31 04:48:14 +00:00
Kernel: Don't increment ACK number without SYN, FIN, or data
This commit is contained in:
parent
749719b4d0
commit
706e04d340
1 changed files with 5 additions and 5 deletions
|
@ -437,7 +437,7 @@ void handle_tcp(const IPv4Packet& ipv4_packet)
|
||||||
socket->set_setup_state(Socket::SetupState::Completed);
|
socket->set_setup_state(Socket::SetupState::Completed);
|
||||||
return;
|
return;
|
||||||
case TCPFlags::ACK | TCPFlags::RST:
|
case TCPFlags::ACK | TCPFlags::RST:
|
||||||
socket->set_ack_number(tcp_packet.sequence_number() + payload_size + 1);
|
socket->set_ack_number(tcp_packet.sequence_number() + payload_size);
|
||||||
socket->send_tcp_packet(TCPFlags::ACK);
|
socket->send_tcp_packet(TCPFlags::ACK);
|
||||||
socket->set_state(TCPSocket::State::Closed);
|
socket->set_state(TCPSocket::State::Closed);
|
||||||
socket->set_error(TCPSocket::Error::RSTDuringConnect);
|
socket->set_error(TCPSocket::Error::RSTDuringConnect);
|
||||||
|
@ -454,7 +454,7 @@ void handle_tcp(const IPv4Packet& ipv4_packet)
|
||||||
case TCPSocket::State::SynReceived:
|
case TCPSocket::State::SynReceived:
|
||||||
switch (tcp_packet.flags()) {
|
switch (tcp_packet.flags()) {
|
||||||
case TCPFlags::ACK:
|
case TCPFlags::ACK:
|
||||||
socket->set_ack_number(tcp_packet.sequence_number() + payload_size + 1);
|
socket->set_ack_number(tcp_packet.sequence_number() + payload_size);
|
||||||
socket->set_state(TCPSocket::State::Established);
|
socket->set_state(TCPSocket::State::Established);
|
||||||
if (socket->direction() == TCPSocket::Direction::Outgoing) {
|
if (socket->direction() == TCPSocket::Direction::Outgoing) {
|
||||||
socket->set_setup_state(Socket::SetupState::Completed);
|
socket->set_setup_state(Socket::SetupState::Completed);
|
||||||
|
@ -478,7 +478,7 @@ void handle_tcp(const IPv4Packet& ipv4_packet)
|
||||||
case TCPSocket::State::LastAck:
|
case TCPSocket::State::LastAck:
|
||||||
switch (tcp_packet.flags()) {
|
switch (tcp_packet.flags()) {
|
||||||
case TCPFlags::ACK:
|
case TCPFlags::ACK:
|
||||||
socket->set_ack_number(tcp_packet.sequence_number() + payload_size + 1);
|
socket->set_ack_number(tcp_packet.sequence_number() + payload_size);
|
||||||
socket->set_state(TCPSocket::State::Closed);
|
socket->set_state(TCPSocket::State::Closed);
|
||||||
return;
|
return;
|
||||||
default:
|
default:
|
||||||
|
@ -490,7 +490,7 @@ void handle_tcp(const IPv4Packet& ipv4_packet)
|
||||||
case TCPSocket::State::FinWait1:
|
case TCPSocket::State::FinWait1:
|
||||||
switch (tcp_packet.flags()) {
|
switch (tcp_packet.flags()) {
|
||||||
case TCPFlags::ACK:
|
case TCPFlags::ACK:
|
||||||
socket->set_ack_number(tcp_packet.sequence_number() + payload_size + 1);
|
socket->set_ack_number(tcp_packet.sequence_number() + payload_size);
|
||||||
socket->set_state(TCPSocket::State::FinWait2);
|
socket->set_state(TCPSocket::State::FinWait2);
|
||||||
return;
|
return;
|
||||||
case TCPFlags::FIN:
|
case TCPFlags::FIN:
|
||||||
|
@ -518,7 +518,7 @@ void handle_tcp(const IPv4Packet& ipv4_packet)
|
||||||
case TCPSocket::State::Closing:
|
case TCPSocket::State::Closing:
|
||||||
switch (tcp_packet.flags()) {
|
switch (tcp_packet.flags()) {
|
||||||
case TCPFlags::ACK:
|
case TCPFlags::ACK:
|
||||||
socket->set_ack_number(tcp_packet.sequence_number() + payload_size + 1);
|
socket->set_ack_number(tcp_packet.sequence_number() + payload_size);
|
||||||
socket->set_state(TCPSocket::State::TimeWait);
|
socket->set_state(TCPSocket::State::TimeWait);
|
||||||
return;
|
return;
|
||||||
default:
|
default:
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue