From 576bed631fe94e249285598608c79e9010559f48 Mon Sep 17 00:00:00 2001 From: Andy Green Date: Sat, 26 Jun 2021 09:22:21 +0100 Subject: [PATCH] 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. --- lib/core-net/close.c | 28 +++++++++++++++++++++------- 1 file changed, 21 insertions(+), 7 deletions(-) diff --git a/lib/core-net/close.c b/lib/core-net/close.c index 9c0ec1f6b..9f9cdf828 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