aboutsummaryrefslogtreecommitdiff
path: root/lib/core-net
diff options
context:
space:
mode:
authorAndy Green <andy@warmcat.com>2021-06-26 09:22:21 +0100
committerAndy Green <andy@warmcat.com>2021-06-26 13:03:13 +0100
commit576bed631fe94e249285598608c79e9010559f48 (patch)
treed83316e578f948a56c75532f5d7bd72cccd9d5cc /lib/core-net
parent9e8eb28c72eca7edfdbd8c8ec26eff9c68363eb5 (diff)
downloadlibwebsockets-576bed631fe94e249285598608c79e9010559f48.tar.gz
sspc: close: differentiate between ss and sspc at final wsi close
A second chunk of ss / sspc handling did not get cleaned up along with the other patch from a few weeks ago, it wrongly treats sspc the same as ss. This can cause the wrong thing to be zeroed down, 64-bit and 32-bit builds end up with different victims. This patch makes it understand the difference and treat them accordingly, same as the main for_ss handling.
Diffstat (limited to 'lib/core-net')
-rw-r--r--lib/core-net/close.c28
1 files changed, 21 insertions, 7 deletions
diff --git a/lib/core-net/close.c b/lib/core-net/close.c
index 9c0ec1f6..9f9cdf82 100644
--- a/lib/core-net/close.c
+++ b/lib/core-net/close.c
@@ -214,14 +214,28 @@ __lws_free_wsi(struct lws *wsi)
#if defined(LWS_WITH_SECURE_STREAMS)
if (wsi->for_ss) {
- /*
- * Make certain it is disconnected from the ss by now
- */
- lws_ss_handle_t *h = (lws_ss_handle_t *)wsi->a.opaque_user_data;
- if (h) {
- h->wsi = NULL;
- wsi->a.opaque_user_data = NULL;
+#if defined(LWS_WITH_SECURE_STREAMS_PROXY_API)
+ if (wsi->client_bound_sspc) {
+ lws_sspc_handle_t *h = (lws_sspc_handle_t *)
+ wsi->a.opaque_user_data;
+ if (h) {
+ h->cwsi = NULL;
+ wsi->a.opaque_user_data = NULL;
+ }
+ } else
+#endif
+ {
+ /*
+ * Make certain it is disconnected from the ss by now
+ */
+ lws_ss_handle_t *h = (lws_ss_handle_t *)
+ wsi->a.opaque_user_data;
+
+ if (h) {
+ h->wsi = NULL;
+ wsi->a.opaque_user_data = NULL;
+ }
}
}
#endif