Sfoglia il codice sorgente

Kernel: Stub out the SO_DEBUG SOL_SOCKET-level option

Idan Horowitz 3 anni fa
parent
commit
a0e2fedc20

+ 2 - 0
Kernel/API/POSIX/sys/socket.h

@@ -101,6 +101,7 @@ enum {
     SO_PEERCRED,
     SO_RCVBUF,
     SO_SNDBUF,
+    SO_DEBUG,
     SO_REUSEADDR,
     SO_BINDTODEVICE,
     SO_KEEPALIVE,
@@ -113,6 +114,7 @@ enum {
 #define SO_TYPE SO_TYPE
 #define SO_ERROR SO_ERROR
 #define SO_PEERCRED SO_PEERCRED
+#define SO_DEBUG SO_DEBUG
 #define SO_REUSEADDR SO_REUSEADDR
 #define SO_BINDTODEVICE SO_BINDTODEVICE
 #define SO_KEEPALIVE SO_KEEPALIVE

+ 10 - 0
Kernel/Net/Socket.cpp

@@ -103,6 +103,9 @@ ErrorOr<void> Socket::setsockopt(int level, int option, Userspace<const void*> u
         m_bound_interface = move(device);
         return {};
     }
+    case SO_DEBUG:
+        // NOTE: This is supposed to toggle collection of debugging information on/off, we don't have any right now, so this is a no-op.
+        return {};
     case SO_KEEPALIVE:
         // FIXME: Obviously, this is not a real keepalive.
         return {};
@@ -198,6 +201,13 @@ ErrorOr<void> Socket::getsockopt(OpenFileDescription&, int level, int option, Us
         TRY(copy_to_user(static_ptr_cast<int*>(value), &m_type));
         size = sizeof(int);
         return copy_to_user(value_size, &size);
+    case SO_DEBUG:
+        // NOTE: This is supposed to toggle collection of debugging information on/off, we don't have any right now, so we just claim it's always off.
+        if (size < sizeof(int))
+            return EINVAL;
+        TRY(memset_user(value.unsafe_userspace_ptr(), 0, sizeof(int)));
+        size = sizeof(int);
+        return copy_to_user(value_size, &size);
     default:
         dbgln("setsockopt({}) at SOL_SOCKET not implemented.", option);
         return ENOPROTOOPT;

+ 2 - 0
Meta/CMake/all_the_debug_macros.cmake

@@ -231,3 +231,5 @@ set(WSSCREEN_DEBUG ON)
 # set(BOCHS_DEBUG_PORT)
 # False positive: IFF_DEBUG is an ioctl flag
 # set(IFF_DEBUG)
+# False positive: SO_DEBUG is a socket option
+# set(SO_DEBUG)