From Jérôme Duval <jerome.duval@xxxxxxxxx>:
Jérôme Duval has uploaded this change for review. (
https://review.haiku-os.org/c/haiku/+/2547 ;)
Change subject: kernel/fs: allow sendto to be called with a NULL address
......................................................................
kernel/fs: allow sendto to be called with a NULL address
POSIX says: If the socket is connection-mode, dest_addr shall be ignored.
---
M src/system/kernel/fs/socket.cpp
1 file changed, 8 insertions(+), 6 deletions(-)
git pull ssh://git.haiku-os.org:22/haiku refs/changes/47/2547/1
diff --git a/src/system/kernel/fs/socket.cpp b/src/system/kernel/fs/socket.cpp
index bbe0dd8..e4c02f4 100644
--- a/src/system/kernel/fs/socket.cpp
+++ b/src/system/kernel/fs/socket.cpp
@@ -1036,25 +1036,27 @@
if (data == NULL || !IS_USER_ADDRESS(data))
return B_BAD_ADDRESS;
- // TODO: If this is a connection-mode socket, the address parameter is
- // supposed to be ignored.
- if (userAddress == NULL || addressLength <= 0
+ if (addressLength <= 0
|| addressLength > MAX_SOCKET_ADDRESS_LENGTH) {
return B_BAD_VALUE;
}
// copy address from userland
char address[MAX_SOCKET_ADDRESS_LENGTH];
- if (!IS_USER_ADDRESS(userAddress)
+ if (userAddress != NULL) {
+ if (!IS_USER_ADDRESS(userAddress)
|| user_memcpy(address, userAddress, addressLength) !=
B_OK) {
- return B_BAD_ADDRESS;
+ return B_BAD_ADDRESS;
+ }
+ } else {
+ addressLength = 0;
}
// sendto()
SyscallRestartWrapper<ssize_t> result;
return result = common_sendto(socket, data, length, flags,
- (sockaddr*)address, addressLength, false);
+ userAddress != NULL ? (sockaddr*)address : NULL, addressLength,
false);
}
--
To view, visit https://review.haiku-os.org/c/haiku/+/2547
To unsubscribe, or for help writing mail filters, visit
https://review.haiku-os.org/settings
Gerrit-Project: haiku
Gerrit-Branch: master
Gerrit-Change-Id: Ic75de473173e3795066beeac9a9f2404418d94da
Gerrit-Change-Number: 2547
Gerrit-PatchSet: 1
Gerrit-Owner: Jérôme Duval <jerome.duval@xxxxxxxxx>
Gerrit-MessageType: newchange