]> git.ipfire.org Git - thirdparty/bind9.git/commitdiff
dns_rdataslab_merge(): use dns_rdata_compare() instead of compare_rdata()
authorMichał Kępień <michal@isc.org>
Tue, 15 May 2018 06:18:01 +0000 (08:18 +0200)
committerMichał Kępień <michal@isc.org>
Tue, 15 May 2018 07:32:19 +0000 (09:32 +0200)
compare_rdata() was meant to be used as a qsort() callback.  Meanwhile,
dns_rdataslab_merge() calls compare_rdata() for a pair of dns_rdata_t
structures rather than a pair of struct xrdata structures, which is
harmless, but triggers an ubsan warning:

    rdataslab.c:84:33: runtime error: member access within address <address> with insufficient space for an object of type 'const struct xrdata'

Use dns_rdata_compare() instead of compare_rdata() to prevent the
warning from being triggered.

(cherry picked from commit 9bc6ba0be9447c66d8f2b055a696ff12842c7863)

lib/dns/rdataslab.c

index ffada7fdb9a17466fdcc50e02f7a719e5aa9e950..6615abc9ab8b401a6f5d20bcb889df2c2f5a24d9 100644 (file)
@@ -798,7 +798,8 @@ dns_rdataslab_merge(unsigned char *oslab, unsigned char *nslab,
                else if (nadded == ncount)
                        fromold = ISC_TRUE;
                else
-                       fromold = ISC_TF(compare_rdata(&ordata, &nrdata) < 0);
+                       fromold = ISC_TF(dns_rdata_compare(&ordata,
+                                                          &nrdata) < 0);
                if (fromold) {
 #if DNS_RDATASET_FIXED
                        offsettable[oorder] = tcurrent - offsetbase;