From 9bc6ba0be9447c66d8f2b055a696ff12842c7863 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C5=82=20K=C4=99pie=C5=84?= Date: Tue, 15 May 2018 08:18:01 +0200 Subject: [PATCH] dns_rdataslab_merge(): use dns_rdata_compare() instead of compare_rdata() 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
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. --- lib/dns/rdataslab.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/lib/dns/rdataslab.c b/lib/dns/rdataslab.c index 3df852e425..a442fe9d29 100644 --- a/lib/dns/rdataslab.c +++ b/lib/dns/rdataslab.c @@ -796,7 +796,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;