Project homepage Mailing List  Warmcat.com  API Docs  Github Mirror 
{"schema":"libjg2-1", "vpath":"/git/", "avatar":"/git/avatar/", "alang":"", "gen_ut":1753170005, "reponame":"libwebsockets", "desc":"libwebsockets lightweight C networking library", "owner": { "name": "Andy Green", "email": "andy@warmcat.com", "md5": "c50933ca2aa61e0fe2c43d46bb6b59cb" },"url":"https://libwebsockets.org/repo/libwebsockets", "f":3, "items": [ {"schema":"libjg2-1", "cid":"1f0c2909cbd7699828d211e0abaf4683", "commit": {"type":"commit", "time": 1629097655, "time_ofs": 60, "oid_tree": { "oid": "93d8cda65f3287e900fd99f5600307d0525d07ea", "alias": []}, "oid":{ "oid": "ca16a07a9baa1214d5e2fc6fee26250bea274135", "alias": []}, "msg": "ss: unpick failed create using destroy", "sig_commit": { "git_time": { "time": 1629097655, "offset": 60 }, "name": "Andy Green", "email": "andy@warmcat.com", "md5": "c50933ca2aa61e0fe2c43d46bb6b59cb" }, "sig_author": { "git_time": { "time": 1628746354, "offset": 60 }, "name": "Jed Lu", "email": "jianlu@amazon.com", "md5": "ce74f834db5eb16ad715cc95ced04f1f" }}, "body": "ss: unpick failed create using destroy\n\nThe late_bail discrete unpick flow is missing some pieces compared\nto lws_ss_destroy. Unify the creation fail flow to also use\nlws_ss_destroy so everything in one place.\n\nMake lws_ss_destroy() not issue any states if the creation flow\ndidn't get as far as issuing CREATING.\n" , "diff": "diff --git a/lib/secure-streams/secure-streams.c b/lib/secure-streams/secure-streams.c\nindex 53c36a8..7cfb993 100644\n--- a/lib/secure-streams/secure-streams.c\n+++ b/lib/secure-streams/secure-streams.c\n@@ -1132,7 +1132,7 @@ lws_ss_create(struct lws_context *context, int tsi, const lws_ss_info_t *ssi,\n \t\t\t\t\t\t (lws_smd_class_t)ssi-\u003emanual_initial_tx_credit,\n \t\t\t\t\t\t lws_smd_ss_cb);\n \t\tif (!h-\u003eu.smd.smd_peer)\n-\t\t\tgoto late_bail;\n+\t\t\tgoto fail_creation;\n \t\tlwsl_cx_info(context, \u0022registered SS SMD\u0022);\n \t}\n #endif\n@@ -1159,7 +1159,7 @@ lws_ss_create(struct lws_context *context, int tsi, const lws_ss_info_t *ssi,\n \t\t\tif (!vho) {\n \t\t\t\tlwsl_err(\u0022%s: no vhost %s\u005cn\u0022, __func__,\n \t\t\t\t\t\t\u0026h-\u003epolicy-\u003eendpoint[1]);\n-\t\t\t\tgoto late_bail;\n+\t\t\t\tgoto fail_creation;\n \t\t\t}\n \n \t\t\tgoto extant;\n@@ -1183,7 +1183,7 @@ lws_ss_create(struct lws_context *context, int tsi, const lws_ss_info_t *ssi,\n \n \t\tif (!ss_pcols[h-\u003epolicy-\u003eprotocol]) {\n \t\t\tlwsl_err(\u0022%s: unsupp protocol\u0022, __func__);\n-\t\t\tgoto late_bail;\n+\t\t\tgoto fail_creation;\n \t\t}\n \n \t\t*ppp++ \u003d ss_pcols[h-\u003epolicy-\u003eprotocol]-\u003eprotocol;\n@@ -1217,7 +1217,7 @@ lws_ss_create(struct lws_context *context, int tsi, const lws_ss_info_t *ssi,\n \t\t\tvho \u003d lws_create_vhost(context, \u0026i);\n \t\tif (!vho) {\n \t\t\tlwsl_cx_err(context, \u0022failed to create vh\u0022);\n-\t\t\tgoto late_bail;\n+\t\t\tgoto fail_creation;\n \t\t}\n \n extant:\n@@ -1231,7 +1231,7 @@ extant:\n \t\tr \u003d lws_ss_event_helper(h, LWSSSCS_CREATING);\n \t\tlwsl_cx_info(context, \u0022CREATING returned status %d\u0022, (int)r);\n \t\tif (r \u003d\u003d LWSSSSRET_DESTROY_ME)\n-\t\t\tgoto late_bail;\n+\t\t\tgoto fail_creation;\n \n \t\tlwsl_cx_notice(context, \u0022created server %s\u0022,\n \t\t\t\th-\u003epolicy-\u003estreamtype);\n@@ -1254,31 +1254,14 @@ extant:\n \n \tif (!lws_ss_policy_ref_trust_store(context, h-\u003epolicy, 1 /* do the ref */)) {\n \t\tlwsl_err(\u0022%s: unable to get vhost / trust store\u005cn\u0022, __func__);\n-\t\tgoto late_bail;\n+\t\tgoto fail_creation;\n \t}\n #endif\n \n \tr \u003d lws_ss_event_helper(h, LWSSSCS_CREATING);\n \tlwsl_ss_info(h, \u0022CREATING returned status %d\u0022, (int)r);\n-\tif (r \u003d\u003d LWSSSSRET_DESTROY_ME) {\n-\n-#if defined(LWS_WITH_SERVER) || defined(LWS_WITH_SYS_SMD)\n-late_bail:\n-#endif\n-\n-\t\tif (ppss)\n-\t\t\t*ppss \u003d NULL;\n-\n-\t\tlws_pt_lock(pt, __func__);\n-\t\tlws_dll2_remove(\u0026h-\u003elist);\n-\t\tlws_pt_unlock(pt);\n-\n-\t\tlws_fi_destroy(\u0026h-\u003efic);\n-\t\t__lws_lc_untag(context, \u0026h-\u003elc);\n-\t\tlws_free(h);\n-\n-\t\treturn 1;\n-\t}\n+\tif (r \u003d\u003d LWSSSSRET_DESTROY_ME)\n+\t\tgoto fail_creation;\n \n #if defined(LWS_WITH_SYS_SMD)\n \tif (!(ssi-\u003eflags \u0026 LWSSSINFLAGS_PROXIED) \u0026\u0026\n@@ -1307,17 +1290,23 @@ late_bail:\n \t\t\tbreak;\n \t\tcase LWSSSSRET_TX_DONT_SEND:\n \t\tcase LWSSSSRET_DISCONNECT_ME:\n-\t\t\tif (lws_ss_backoff(h) \u003d\u003d LWSSSSRET_DESTROY_ME) {\n-\t\t\t\tlws_ss_destroy(\u0026h);\n-\t\t\t\treturn 1;\n-\t\t\t}\n+\t\t\tif (lws_ss_backoff(h) \u003d\u003d LWSSSSRET_DESTROY_ME)\n+\t\t\t\tgoto fail_creation;\n \t\t\tbreak;\n \t\tcase LWSSSSRET_DESTROY_ME:\n-\t\t\tlws_ss_destroy(\u0026h);\n-\t\t\treturn 1;\n+\t\t\tgoto fail_creation;\n \t\t}\n \n \treturn 0;\n+\n+fail_creation:\n+\n+\tif (ppss)\n+\t\t*ppss \u003d NULL;\n+\n+\tlws_ss_destroy(\u0026h);\n+\n+\treturn 1;\n }\n \n void *\n@@ -1404,10 +1393,19 @@ lws_ss_destroy(lws_ss_handle_t **ppss)\n \t\tv \u003d lws_get_vhost_by_name(h-\u003econtext, h-\u003epolicy-\u003estreamtype);\n #endif\n \n-\tif (h-\u003ess_dangling_connected)\n-\t\t(void)lws_ss_event_helper(h, LWSSSCS_DISCONNECTED);\n+\t/*\n+\t * Since we also come here to unpick create, it's possible we failed\n+\t * the creation before issuing any states, even CREATING. We should\n+\t * only issue cleanup states on destroy if we previously got as far as\n+\t * issuing CREATING.\n+\t */\n \n-\t(void)lws_ss_event_helper(h, LWSSSCS_DESTROYING);\n+\tif (h-\u003eprev_ss_state) {\n+\t\tif (h-\u003ess_dangling_connected)\n+\t\t\t(void)lws_ss_event_helper(h, LWSSSCS_DISCONNECTED);\n+\n+\t\t(void)lws_ss_event_helper(h, LWSSSCS_DESTROYING);\n+\t}\n \n \tlws_pt_unlock(pt);\n \n@@ -1418,6 +1416,7 @@ lws_ss_destroy(lws_ss_handle_t **ppss)\n \t\tlwsl_info(\u0022%s: pmd %p\u005cn\u0022, __func__, pmd);\n \t\tif (pmd-\u003evalue_on_lws_heap)\n \t\t\tlws_free_set_NULL(pmd-\u003evalue__may_own_heap);\n+\n \t\tpmd \u003d pmd-\u003enext;\n \t}\n \n@@ -1425,14 +1424,18 @@ lws_ss_destroy(lws_ss_handle_t **ppss)\n \t{\n \n \t\tlws_ss_metadata_t *imd;\n+\t \n \t\tpmd \u003d h-\u003einstant_metadata;\n+\n \t\twhile (pmd) {\n \t\t\timd \u003d pmd;\n \t\t\tpmd \u003d pmd-\u003enext;\n+\n \t\t\tlwsl_info(\u0022%s: instant md %p\u005cn\u0022, __func__, imd);\n \t\t\tlws_free(imd);\n \t\t}\n \t\th-\u003einstant_metadata \u003d NULL;\n+\n \t\tif (h-\u003eimd_ac)\n \t\t\tlwsac_free(\u0026h-\u003eimd_ac);\n \t}\n@@ -1485,7 +1488,7 @@ lws_ss_destroy(lws_ss_handle_t **ppss)\n \n \t__lws_lc_untag(h-\u003econtext, \u0026h-\u003elc);\n \n-\tlws_explicit_bzero((void *)h, sizeof(*h));\n+\tlws_explicit_bzero((void *)h, sizeof(*h) + h-\u003einfo.user_alloc);\n \n \tlws_free_set_NULL(h);\n }\n","s":{"c":1753170005,"u": 6329}} ],"g": 7768,"chitpc": 0,"ehitpc": 0,"indexed":0 , "ab": 0, "si": 0, "db":0, "di":0, "sat":0, "lfc": "0000"}