]> git.ipfire.org Git - thirdparty/bind9.git/commitdiff
Always clean sig0name in msgresetsigs() and dns_message_renderreset()
authorMark Andrews <marka@isc.org>
Mon, 28 Sep 2020 02:54:17 +0000 (12:54 +1000)
committerPetr Špaček <pspacek@isc.org>
Sun, 7 Apr 2024 05:22:59 +0000 (05:22 +0000)
The fuzzing harness operates on dns_message_t in non-standard ways
and if 'sig0name' is non-NULL when msgresetsigs() and
dns_message_renderreset() are called it should be cleaned up.

(cherry picked from commit 450fab92b154e3e5c7d16c4771596e4e2f3e1532)

lib/dns/message.c

index 22aa552f3f61f2125899ad3a16ad666689c0d666..6fee6b155905fda4063695aa8883b66729e010df 100644 (file)
@@ -527,11 +527,10 @@ msgresetsigs(dns_message_t *msg, bool replying) {
                INSIST(dns_rdataset_isassociated(msg->sig0));
                dns_rdataset_disassociate(msg->sig0);
                isc_mempool_put(msg->rdspool, msg->sig0);
-               if (msg->sig0name != NULL) {
-                       dns_message_puttempname(msg, &msg->sig0name);
-               }
                msg->sig0 = NULL;
-               msg->sig0name = NULL;
+       }
+       if (msg->sig0name != NULL) {
+               dns_message_puttempname(msg, &msg->sig0name);
        }
 }
 
@@ -2517,6 +2516,9 @@ dns_message_renderreset(dns_message_t *msg) {
                dns_rdataset_disassociate(msg->tsig);
                dns_message_puttemprdataset(msg, &msg->tsig);
        }
+       if (msg->sig0name != NULL) {
+               dns_message_puttempname(msg, &msg->sig0name);
+       }
        if (msg->sig0 != NULL) {
                dns_rdataset_disassociate(msg->sig0);
                dns_message_puttemprdataset(msg, &msg->sig0);