summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorGarrett D'Amore <garrett@damore.org>2023-11-26 09:53:40 -0800
committerGarrett D'Amore <garrett@damore.org>2023-11-26 09:53:40 -0800
commit759a2e9d65bd093ac9740d2cf0aa38a0212c5c23 (patch)
treeeab1df58753bc40e89cfdcf25a9963a928ddd2ec /src
parent003f0556a61f3e7225f4f0d0087bdf08af5b632a (diff)
downloadnng-759a2e9d65bd093ac9740d2cf0aa38a0212c5c23.tar.gz
nng-759a2e9d65bd093ac9740d2cf0aa38a0212c5c23.tar.bz2
nng-759a2e9d65bd093ac9740d2cf0aa38a0212c5c23.zip
fixes #1713 SP pipe_send leaks message if aio is canceled
Diffstat (limited to 'src')
-rw-r--r--src/sp/transport/inproc/inproc.c6
-rw-r--r--src/sp/transport/ipc/ipc.c4
-rw-r--r--src/sp/transport/tcp/tcp.c6
-rw-r--r--src/sp/transport/tls/tls.c6
-rw-r--r--src/sp/transport/ws/websocket.c6
-rw-r--r--src/sp/transport/zerotier/zerotier.c6
6 files changed, 29 insertions, 5 deletions
diff --git a/src/sp/transport/inproc/inproc.c b/src/sp/transport/inproc/inproc.c
index 2ab8b0b9..978b6679 100644
--- a/src/sp/transport/inproc/inproc.c
+++ b/src/sp/transport/inproc/inproc.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 2018 Devolutions <info@devolutions.net>
//
@@ -207,6 +207,10 @@ inproc_pipe_send(void *arg, nni_aio *aio)
int rv;
if (nni_aio_begin(aio) != 0) {
+ // No way to give the message back to the protocol, so
+ // we just discard it silently to prevent it from leaking.
+ nni_msg_free(nni_aio_get_msg(aio));
+ nni_aio_set_msg(aio, NULL);
return;
}
diff --git a/src/sp/transport/ipc/ipc.c b/src/sp/transport/ipc/ipc.c
index df27ad23..a8fc954b 100644
--- a/src/sp/transport/ipc/ipc.c
+++ b/src/sp/transport/ipc/ipc.c
@@ -518,6 +518,10 @@ ipc_pipe_send(void *arg, nni_aio *aio)
int rv;
if (nni_aio_begin(aio) != 0) {
+ // No way to give the message back to the protocol, so
+ // we just discard it silently to prevent it from leaking.
+ nni_msg_free(nni_aio_get_msg(aio));
+ nni_aio_set_msg(aio, NULL);
return;
}
nni_mtx_lock(&p->mtx);
diff --git a/src/sp/transport/tcp/tcp.c b/src/sp/transport/tcp/tcp.c
index d6050d45..ba6c546c 100644
--- a/src/sp/transport/tcp/tcp.c
+++ b/src/sp/transport/tcp/tcp.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 2019 Devolutions <info@devolutions.net>
//
@@ -512,6 +512,10 @@ tcptran_pipe_send(void *arg, nni_aio *aio)
int rv;
if (nni_aio_begin(aio) != 0) {
+ // No way to give the message back to the protocol, so
+ // we just discard it silently to prevent it from leaking.
+ nni_msg_free(nni_aio_get_msg(aio));
+ nni_aio_set_msg(aio, NULL);
return;
}
nni_mtx_lock(&p->mtx);
diff --git a/src/sp/transport/tls/tls.c b/src/sp/transport/tls/tls.c
index 4db9170d..e34a3ab2 100644
--- a/src/sp/transport/tls/tls.c
+++ b/src/sp/transport/tls/tls.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 2019 Devolutions <info@devolutions.net>
//
@@ -498,6 +498,10 @@ tlstran_pipe_send(void *arg, nni_aio *aio)
int rv;
if (nni_aio_begin(aio) != 0) {
+ // No way to give the message back to the protocol, so
+ // we just discard it silently to prevent it from leaking.
+ nni_msg_free(nni_aio_get_msg(aio));
+ nni_aio_set_msg(aio, NULL);
return;
}
nni_mtx_lock(&p->mtx);
diff --git a/src/sp/transport/ws/websocket.c b/src/sp/transport/ws/websocket.c
index 7cf9949f..a46ea58b 100644
--- a/src/sp/transport/ws/websocket.c
+++ b/src/sp/transport/ws/websocket.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>
//
@@ -158,6 +158,10 @@ wstran_pipe_send(void *arg, nni_aio *aio)
int rv;
if (nni_aio_begin(aio) != 0) {
+ // No way to give the message back to the protocol, so
+ // we just discard it silently to prevent it from leaking.
+ nni_msg_free(nni_aio_get_msg(aio));
+ nni_aio_set_msg(aio, NULL);
return;
}
nni_mtx_lock(&p->mtx);
diff --git a/src/sp/transport/zerotier/zerotier.c b/src/sp/transport/zerotier/zerotier.c
index 5658fb18..f3de3504 100644
--- a/src/sp/transport/zerotier/zerotier.c
+++ b/src/sp/transport/zerotier/zerotier.c
@@ -1,6 +1,6 @@
//
+// Copyright 2023 Staysail Systems, Inc. <info@staysail.tech>
// Copyright 2021 Capitar IT Group BV <info@capitar.com>
-// Copyright 2020 Staysail Systems, Inc. <info@staysail.tech>
//
// This software is supplied under the terms of the MIT License, a
// copy of which should be located in the distribution where this
@@ -1821,6 +1821,10 @@ zt_pipe_send(void *arg, nni_aio *aio)
nni_msg *m;
if (nni_aio_begin(aio) != 0) {
+ // No way to give the message back to the protocol, so
+ // we just discard it silently to prevent it from leaking.
+ nni_msg_free(nni_aio_get_msg(aio));
+ nni_aio_set_msg(aio, NULL);
return;
}
if ((m = nni_aio_get_msg(aio)) == NULL) {