From 5e4d5a436edd8aec03f04d641988670cb9d22d65 Mon Sep 17 00:00:00 2001 From: Andreas Kling Date: Thu, 21 Apr 2022 16:24:47 +0200 Subject: [PATCH] Kernel: Allow sys$bind() on local sockets with short socket address Previously, we required local socket addresses to be exactly sizeof(sockaddr_un). There was no real reason for this, so let's not enforce it. --- Kernel/Net/LocalSocket.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Kernel/Net/LocalSocket.cpp b/Kernel/Net/LocalSocket.cpp index 8de56c6545..1bae224909 100644 --- a/Kernel/Net/LocalSocket.cpp +++ b/Kernel/Net/LocalSocket.cpp @@ -124,11 +124,11 @@ void LocalSocket::get_peer_address(sockaddr* address, socklen_t* address_size) ErrorOr LocalSocket::bind(Userspace user_address, socklen_t address_size) { VERIFY(setup_state() == SetupState::Unstarted); - if (address_size != sizeof(sockaddr_un)) + if (address_size > sizeof(sockaddr_un)) return set_so_error(EINVAL); sockaddr_un address = {}; - SOCKET_TRY(copy_from_user(&address, user_address, sizeof(sockaddr_un))); + SOCKET_TRY(copy_from_user(&address, user_address, address_size)); if (address.sun_family != AF_LOCAL) return set_so_error(EINVAL);