gss: honor allocated_ctx in gss_{exchange,query}_meta_data
authorLuke Howard <lukeh@padl.com>
Thu, 16 Apr 2020 07:20:43 +0000 (07:20 +0000)
committerLuke Howard <lukeh@padl.com>
Thu, 16 Apr 2020 07:22:37 +0000 (17:22 +1000)
The NegoEx gss_{exchange,query}_meta_data functions set allocated_ctx but never
did anything with it. Use it to determine whether we should free the context
handle on error.

lib/gssapi/mech/gssspi_exchange_meta_data.c
lib/gssapi/mech/gssspi_query_meta_data.c

index 1a83bf6cd36f4699d90866a25d4f64f6aa08937e..fa98cbd7337f5987f7e0d4017f7079fe6c249930 100644 (file)
@@ -104,7 +104,7 @@ gssspi_exchange_meta_data(
        _gss_mg_error(m, *minor_status);
 
 cleanup:
-    if (major_status != GSS_S_COMPLETE || ctx->gc_ctx == GSS_C_NO_CONTEXT)
+    if (allocated_ctx && major_status != GSS_S_COMPLETE)
        gss_delete_sec_context(&junk, (gss_ctx_id_t *)&ctx, GSS_C_NO_BUFFER);
 
     *context_handle = (gss_ctx_id_t) ctx;
index daf679af99f6638311b168d3863ec146eae7101c..490bbc9f01ed8e3bb7d63d1e8eba93695fad8427 100644 (file)
@@ -106,7 +106,7 @@ gssspi_query_meta_data(
        _gss_mg_error(m, *minor_status);
 
 cleanup:
-    if (major_status != GSS_S_COMPLETE || ctx->gc_ctx == GSS_C_NO_CONTEXT)
+    if (allocated_ctx && major_status != GSS_S_COMPLETE)
        gss_delete_sec_context(&junk, (gss_ctx_id_t *)&ctx, GSS_C_NO_BUFFER);
 
     *context_handle = (gss_ctx_id_t) ctx;