diff --git a/src/kdc/dispatch.c b/src/kdc/dispatch.c index 77415af82d..36786457f9 100644 --- a/src/kdc/dispatch.c +++ b/src/kdc/dispatch.c @@ -92,11 +92,12 @@ dispatch(krb5_data *pkt, const krb5_fulladdr *from, krb5_data **response) /* * setup_server_realm() sets up the global realm-specific data * pointer. + * process_as_req frees the request if it is called */ if (!(retval = setup_server_realm(as_req->server))) { retval = process_as_req(as_req, pkt, from, response); } - krb5_free_kdc_req(kdc_context, as_req); + else krb5_free_kdc_req(kdc_context, as_req); } } else diff --git a/src/kdc/do_as_req.c b/src/kdc/do_as_req.c index ded72e4a80..d99b5b6884 100644 --- a/src/kdc/do_as_req.c +++ b/src/kdc/do_as_req.c @@ -691,6 +691,7 @@ process_as_req(krb5_kdc_req *request, krb5_data *req_pkt, krb5_free_data_contents(kdc_context, &e_data); kdc_free_rstate(state); + krb5_free_kdc_req(kdc_context, request); assert(did_log != 0); return errcode; }