aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichael Tuexen <tuexen@FreeBSD.org>2021-12-01 15:20:17 +0000
committerMichael Tuexen <tuexen@FreeBSD.org>2021-12-10 10:38:31 +0000
commit6a5487e34b13f9b7e184a4cca23b715a76f2a375 (patch)
tree0468d3553ad082413a5470b7fce4af7d1e450ed0
parent70d91ea04cd5569ffd279e1f7088fe2bb3dbd390 (diff)
downloadsrc-6a5487e34b13f9b7e184a4cca23b715a76f2a375.tar.gz
src-6a5487e34b13f9b7e184a4cca23b715a76f2a375.zip
libc sctp: fix sctp_getladdrs() when reporting no addresses
Section 9.5 of RFC 6458 (SCTP Socket API) requires that sctp_getladdrs() returns 0 in case the socket is unbound. This is the cause of reporting 0 addresses. So don't indicate an error, just report this case as required. PR: 260117 MFC after: 1 week (cherry picked from commit 071966e874ed472bdac031b7e89d08bacf8bbbc4)
-rw-r--r--lib/libc/net/sctp_sys_calls.c8
1 files changed, 4 insertions, 4 deletions
diff --git a/lib/libc/net/sctp_sys_calls.c b/lib/libc/net/sctp_sys_calls.c
index 3249eeaa4c4e..615b14ede5aa 100644
--- a/lib/libc/net/sctp_sys_calls.c
+++ b/lib/libc/net/sctp_sys_calls.c
@@ -462,10 +462,6 @@ sctp_getladdrs(int sd, sctp_assoc_t id, struct sockaddr **raddrs)
&size_of_addresses, &opt_len) != 0) {
return (-1);
}
- if (size_of_addresses == 0) {
- errno = ENOTCONN;
- return (-1);
- }
opt_len = (socklen_t)((size_t)size_of_addresses + sizeof(struct sctp_getaddresses));
addrs = calloc(1, (size_t)opt_len);
if (addrs == NULL) {
@@ -479,6 +475,10 @@ sctp_getladdrs(int sd, sctp_assoc_t id, struct sockaddr **raddrs)
free(addrs);
return (-1);
}
+ if (size_of_addresses == 0) {
+ free(addrs);
+ return (0);
+ }
*raddrs = &addrs->addr[0].sa;
cnt = 0;
sa = &addrs->addr[0].sa;