Commit
63e58ad048e4 added multi-round client support for
GSS_S_CONTINUE_NEEDED and deliberately copied tkeyname before resetting
the message. Commit
f4084ff54378 ("minor tkey-related fixups") removed
that copy while converting the TKEY struct initialization.
The dns_message_reset() API documents that names must not be used
after reset, so using the name at 'tkeyname' is a use-after-free bug.
Bring back the original code which makes a local copy of 'tkeyname'
before calling the dns_message_reset() function.
dns_name_clone(DNS_TSIG_GSSAPI_NAME, &tkey.algorithm);
+ /*
+ * 'tkeyname' gets destroyed by dns_message_reset(), create a
+ * local copy of it for buildquery().
+ */
+ dns_fixedname_t fixed;
+ dns_fixedname_init(&fixed);
+ dns_name_copy(tkeyname, dns_fixedname_name(&fixed));
+ tkeyname = dns_fixedname_name(&fixed);
+
dns_message_reset(qmsg, DNS_MESSAGE_INTENTRENDER);
CHECK(buildquery(qmsg, tkeyname, &tkey));
return DNS_R_CONTINUE;