Browse Source

Kernel: Don't increment ACK number without SYN, FIN, or data

Conrad Pankoff 6 years ago
parent
commit
706e04d340
1 changed files with 5 additions and 5 deletions
  1. 5 5
      Kernel/Net/NetworkTask.cpp

+ 5 - 5
Kernel/Net/NetworkTask.cpp

@@ -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: