]> git.decadent.org.uk Git - nfs-utils.git/blobdiff - utils/gssd/context_mit.c
gssd: Fix double free when exporting lucid context
[nfs-utils.git] / utils / gssd / context_mit.c
index f9cbb0297d4997b4d043aea377314fc8afa59326..fad67569f47accdc6adc49bb0a59a025c5dd9973 100644 (file)
@@ -152,9 +152,9 @@ typedef struct gss_union_ctx_id_t {
 } gss_union_ctx_id_desc, *gss_union_ctx_id_t;
 
 int
-serialize_krb5_ctx(gss_ctx_id_t ctx, gss_buffer_desc *buf, int32_t *endtime)
+serialize_krb5_ctx(gss_ctx_id_t *ctx, gss_buffer_desc *buf, int32_t *endtime)
 {
-       krb5_gss_ctx_id_t kctx = ((gss_union_ctx_id_t)ctx)->internal_ctx_id;
+       krb5_gss_ctx_id_t kctx = ((gss_union_ctx_id_t)(*ctx))->internal_ctx_id;
        char *p, *end;
        static int constant_zero = 0;
        static int constant_one = 1;
@@ -191,6 +191,8 @@ serialize_krb5_ctx(gss_ctx_id_t ctx, gss_buffer_desc *buf, int32_t *endtime)
                if (WRITE_BYTES(&p, end, kctx->signalg)) goto out_err;
                if (WRITE_BYTES(&p, end, kctx->sealalg)) goto out_err;
                if (WRITE_BYTES(&p, end, kctx->endtime)) goto out_err;
+               if (endtime)
+                       *endtime = kctx->endtime;
                word_seq_send = kctx->seq_send;
                if (WRITE_BYTES(&p, end, word_seq_send)) goto out_err;
                if (write_oid(&p, end, kctx->mech_used)) goto out_err;