From 51b150c9aa138e853ddd75d2a56c7ff3ef9ac265 Mon Sep 17 00:00:00 2001 From: Mikhail Frolov Date: Sat, 3 May 2025 23:50:47 +0500 Subject: [PATCH] Kernel: Fixed bug #221 - accept does not fill sockaddr --- kernel/trunk/network/socket.inc | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/kernel/trunk/network/socket.inc b/kernel/trunk/network/socket.inc index 287e4ac19..441e3cc9f 100644 --- a/kernel/trunk/network/socket.inc +++ b/kernel/trunk/network/socket.inc @@ -668,6 +668,8 @@ socket_accept: DEBUGF DEBUG_NETWORK_VERBOSE, "SOCKET_accept: socknum=%u sockaddr=%x length=%u\n", ecx, edx, esi + push edx esi + call socket_num_to_ptr test eax, eax jz .invalid @@ -696,6 +698,24 @@ socket_accept: mov ebx, [ebx + APPDATA.tid] mov [eax + SOCKET.TID], ebx + pop esi edx + + test edx, edx + jz .skip_sockaddr + + mov word[edx], 0 ; unknown domain + cmp esi, 8 ; domain + port + ipv4 + jb .skip_sockaddr + + mov word[edx], AF_INET4 + mov esi, edx + mov edx, [eax + IP_SOCKET.RemoteIP] + mov [esi + sockaddr.ip], edx + + mov dx, [eax + TCP_SOCKET.RemotePort] + mov [esi + sockaddr.port], dx + +.skip_sockaddr: ; Return socket number to caller mov eax, [eax + SOCKET.Number] mov [esp + SYSCALL_STACK.eax], eax @@ -711,16 +731,19 @@ socket_accept: .wouldblock: mov dword[esp + SYSCALL_STACK.ebx], EWOULDBLOCK mov dword[esp + SYSCALL_STACK.eax], -1 + pop esi edx ret .invalid: mov dword[esp + SYSCALL_STACK.ebx], EINVAL mov dword[esp + SYSCALL_STACK.eax], -1 + pop esi edx ret .notsupp: mov dword[esp + SYSCALL_STACK.ebx], EOPNOTSUPP mov dword[esp + SYSCALL_STACK.eax], -1 + pop esi edx ret ;-----------------------------------------------------------------;