Quellcode durchsuchen

Kernel: Handle SHUT_RDWR in Socket::shutdown

We were previously assuming that the how value was a bitfield, but that
is not the case, so we must explicitly check for SHUT_RDWR when
deciding on the read and write shutdowns.
Idan Horowitz vor 3 Jahren
Ursprung
Commit
020c898290
1 geänderte Dateien mit 6 neuen und 4 gelöschten Zeilen
  1. 6 4
      Kernel/Net/Socket.cpp

+ 6 - 4
Kernel/Net/Socket.cpp

@@ -256,12 +256,14 @@ ErrorOr<void> Socket::shutdown(int how)
         return set_so_error(ENOTCONN);
     if (m_role == Role::Listener)
         return set_so_error(ENOTCONN);
-    if (!m_shut_down_for_writing && (how & SHUT_WR))
+    if (!m_shut_down_for_writing && (how == SHUT_WR || how == SHUT_RDWR)) {
         shut_down_for_writing();
-    if (!m_shut_down_for_reading && (how & SHUT_RD))
+        m_shut_down_for_writing = true;
+    }
+    if (!m_shut_down_for_reading && (how == SHUT_RD || how == SHUT_RDWR)) {
         shut_down_for_reading();
-    m_shut_down_for_reading |= (how & SHUT_RD) != 0;
-    m_shut_down_for_writing |= (how & SHUT_WR) != 0;
+        m_shut_down_for_reading = true;
+    }
     return {};
 }