]> git.ipfire.org Git - thirdparty/bind9.git/commitdiff
Use offsetof() instead of pointer arithmetics to get slabheader
authorOndřej Surý <ondrej@isc.org>
Wed, 17 Dec 2025 09:01:06 +0000 (10:01 +0100)
committerOndřej Surý <ondrej@isc.org>
Wed, 18 Feb 2026 13:29:16 +0000 (14:29 +0100)
In rdataset_getheader() a cast of the raw buffer to dns_slabheader_t and
pointer arithmetics was used to get the start of the slabheader
structure.  Use more correct offsetof(dns_slabheader_t, raw) to
calculate the correct start of the dns_slabheader_t from the flexible
member raw[].

lib/dns/rdataslab.c

index c56cd3b03bc67d65d2b7106e9e8c52abb1564ef2..64e955cad4e34603440039b8f081e983185e5a01 100644 (file)
@@ -801,8 +801,8 @@ rdataset_getownercase(const dns_rdataset_t *rdataset, dns_name_t *name) {
 
 static dns_slabheader_t *
 rdataset_getheader(const dns_rdataset_t *rdataset) {
-       dns_slabheader_t *header = (dns_slabheader_t *)rdataset->slab.raw;
-       return header - 1;
+       uint8_t *rawbuf = rdataset->slab.raw;
+       return (dns_slabheader_t *)(rawbuf - offsetof(dns_slabheader_t, raw));
 }
 
 dns_slabtop_t *