hrev54099 adds 1 changeset to branch 'master'
old head: a67bbcb79971bbf40f2e3183e58075e37b993486
new head: 04fac889f75b32790b39753276f33b6b756fc779
overview:
https://git.haiku-os.org/haiku/log/?qt=range&q=04fac889f75b+%5Ea67bbcb79971
----------------------------------------------------------------------------
04fac889f75b: net_socket: getpeername now only works on connected socket
Per POSIX.1-2008, getpeername() shall fails if the socket is not
connected.
With this change, it's no longer possible to retrieve the peer from
connectionless protocols such as UDP, even if a peer is assigned to them
via connect(). The same behavior can be replicated among
POSIX-compatible operating systems such as Linux.
Fixes #15081
Change-Id: Ia5631971200959a3d3815332ff1969c4b4dd289b
Reviewed-on: https://review.haiku-os.org/c/haiku/+/2421
Reviewed-by: Jérôme Duval <jerome.duval@xxxxxxxxx>
Reviewed-by: Adrien Destugues <pulkomandy@xxxxxxxxx>
[ Leorize <leorize+oss@xxxxxxxxxxx> ]
----------------------------------------------------------------------------
Revision: hrev54099
Commit: 04fac889f75b32790b39753276f33b6b756fc779
URL: https://git.haiku-os.org/haiku/commit/?id=04fac889f75b
Author: Leorize <leorize+oss@xxxxxxxxxxx>
Date: Wed Mar 25 19:15:25 2020 UTC
Committer: waddlesplash <waddlesplash@xxxxxxxxx>
Commit-Date: Tue Apr 28 00:44:24 2020 UTC
Ticket: https://dev.haiku-os.org/ticket/15081
----------------------------------------------------------------------------
1 file changed, 3 insertions(+), 2 deletions(-)
src/add-ons/kernel/network/stack/net_socket.cpp | 5 +++--
----------------------------------------------------------------------------
diff --git a/src/add-ons/kernel/network/stack/net_socket.cpp
b/src/add-ons/kernel/network/stack/net_socket.cpp
index 414acc5e2c..d38cf648ba 100644
--- a/src/add-ons/kernel/network/stack/net_socket.cpp
+++ b/src/add-ons/kernel/network/stack/net_socket.cpp
@@ -1054,10 +1054,11 @@ socket_connect(net_socket* socket, const struct
sockaddr* address,
int
-socket_getpeername(net_socket* socket, struct sockaddr* address,
+socket_getpeername(net_socket* _socket, struct sockaddr* address,
socklen_t* _addressLength)
{
- if (socket->peer.ss_len == 0)
+ net_socket_private* socket = (net_socket_private*)_socket;
+ if (!socket->is_connected || socket->peer.ss_len == 0)
return ENOTCONN;
memcpy(address, &socket->peer, min_c(*_addressLength,
socket->peer.ss_len));