From d081f61f0cd3bb922c7a0bb2fb83e70d8701799a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Axel=20D=C3=B6rfler?= Date: Fri, 1 Dec 2006 12:54:54 +0000 Subject: [PATCH] * The driver did not handle any non-networking opcodes - including B_SET_NONBLOCKING_IO and friends; the correct behaviour is to not let those opcodes go deeper in the stack (ie. when calling control() on the socket). * Fixed compilation with debugging output turned on. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@19410 a95241bf-73f2-0310-859d-f6bbb57e9c96 --- .../drivers/network/stack/kernel_stack.cpp | 19 +++++++++++-------- 1 file changed, 11 insertions(+), 8 deletions(-) diff --git a/src/add-ons/kernel/drivers/network/stack/kernel_stack.cpp b/src/add-ons/kernel/drivers/network/stack/kernel_stack.cpp index 79ce8b8deb..eedc54399b 100644 --- a/src/add-ons/kernel/drivers/network/stack/kernel_stack.cpp +++ b/src/add-ons/kernel/drivers/network/stack/kernel_stack.cpp @@ -238,15 +238,10 @@ static status_t net_stack_control(void *_cookie, uint32 op, void *data, size_t length) { net_stack_cookie *cookie = (net_stack_cookie *)_cookie; - status_t status = B_BAD_VALUE; + status_t status; TRACE("net_stack_control(%p, %s (0x%lX), %p, %ld)\n", - _cookie, opcode_name(op), op, data, len); - - if (op < NET_STACK_IOCTL_BASE || op > NET_STACK_IOCTL_END) { - // we only accept networking ioctl()s to get into our stack - return B_BAD_VALUE; - } + _cookie, opcode_name(op), op, data, length); if (cookie->socket == NULL) { switch (op) { @@ -266,6 +261,9 @@ net_stack_control(void *_cookie, uint32 op, void *data, size_t length) // in NET_STACK_ACCEPT opcode the cookie (aka the net_stack_cookie!) // of the file descriptor to use for the new accepted socket return user_memcpy(data, cookie, sizeof(void *)); + + default: + return B_BAD_VALUE; } } else { switch (op) { @@ -456,11 +454,16 @@ net_stack_control(void *_cookie, uint32 op, void *data, size_t length) } default: + if (op < NET_STACK_IOCTL_BASE || op > NET_STACK_IOCTL_END) { + // we only accept networking ioctl()s to get into our stack + return B_BAD_VALUE; + } + return sSocket->control(cookie->socket, op, data, length); } } - return status; + return B_BAD_VALUE; }