aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorGarrett D'Amore <garrett@damore.org>2023-09-14 01:29:55 -0700
committerGarrett D'Amore <garrett@damore.org>2023-09-14 02:01:11 -0700
commita54820ff0e1b74554c7f649e8386ee8c4ecd98f5 (patch)
tree1f78fe4d7768ea3f8c5d76f11df73d3c2d69905e /src
parent7f1ec4c26e1c92f79eb1ac21f03871919c65f29d (diff)
downloadnng-a54820ff0e1b74554c7f649e8386ee8c4ecd98f5.tar.gz
nng-a54820ff0e1b74554c7f649e8386ee8c4ecd98f5.tar.bz2
nng-a54820ff0e1b74554c7f649e8386ee8c4ecd98f5.zip
fixes #1675 undefined behavior in posix ipc_dialer_dial
(This also affects TCP, and fixed there.)
Diffstat (limited to 'src')
-rw-r--r--src/platform/posix/posix_ipcdial.c4
-rw-r--r--src/platform/posix/posix_tcpdial.c4
2 files changed, 6 insertions, 2 deletions
diff --git a/src/platform/posix/posix_ipcdial.c b/src/platform/posix/posix_ipcdial.c
index 464179a0..6cbd7c17 100644
--- a/src/platform/posix/posix_ipcdial.c
+++ b/src/platform/posix/posix_ipcdial.c
@@ -1,5 +1,5 @@
//
-// Copyright 2020 Staysail Systems, Inc. <info@staysail.tech>
+// Copyright 2023 Staysail Systems, Inc. <info@staysail.tech>
// Copyright 2018 Capitar IT Group BV <info@capitar.com>
// Copyright 2019 Devolutions <info@devolutions.net>
//
@@ -188,6 +188,8 @@ ipc_dialer_dial(void *arg, nni_aio *aio)
// This arranges for the fd to be in non-blocking mode, and adds the
// poll fd to the list.
if ((rv = nni_posix_pfd_init(&pfd, fd)) != 0) {
+ // the error label unlocks this
+ nni_mtx_lock(&d->mtx);
goto error;
}
diff --git a/src/platform/posix/posix_tcpdial.c b/src/platform/posix/posix_tcpdial.c
index d9b58210..0af72cfa 100644
--- a/src/platform/posix/posix_tcpdial.c
+++ b/src/platform/posix/posix_tcpdial.c
@@ -1,5 +1,5 @@
//
-// Copyright 2021 Staysail Systems, Inc. <info@staysail.tech>
+// Copyright 2023 Staysail Systems, Inc. <info@staysail.tech>
// Copyright 2018 Capitar IT Group BV <info@capitar.com>
// Copyright 2018 Devolutions <info@devolutions.net>
//
@@ -207,6 +207,8 @@ nni_tcp_dial(nni_tcp_dialer *d, const nni_sockaddr *sa, nni_aio *aio)
// poll fd to the list.
if ((rv = nni_posix_pfd_init(&pfd, fd)) != 0) {
(void) close(fd);
+ // the error label unlocks this
+ nni_mtx_lock(&d->mtx);
goto error;
}