diff options
author | Andy Green <andy@warmcat.com> | 2021-06-26 09:22:21 +0100 |
---|---|---|
committer | Andy Green <andy@warmcat.com> | 2021-06-26 13:03:13 +0100 |
commit | 576bed631fe94e249285598608c79e9010559f48 (patch) | |
tree | d83316e578f948a56c75532f5d7bd72cccd9d5cc /lib/core-net | |
parent | 9e8eb28c72eca7edfdbd8c8ec26eff9c68363eb5 (diff) | |
download | libwebsockets-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.c | 28 |
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 |