From: Ondřej Surý Date: Fri, 29 Jan 2021 12:16:38 +0000 (+0100) Subject: Assigning uint64_t from buffer might be misaligned in netmgr tests X-Git-Tag: v9.17.11~14^2 X-Git-Url: http://git.ipfire.org/gitweb/?a=commitdiff_plain;h=a55bdb28f9004a2db49b3389efe09d99d93c256d;p=thirdparty%2Fbind9.git Assigning uint64_t from buffer might be misaligned in netmgr tests Resolve possible 8-byte unaligned access when assigning the magic value from the received buffer. --- diff --git a/lib/isc/tests/tcp_quota_test.c b/lib/isc/tests/tcp_quota_test.c index 17bec56f241..737c3c1d1fa 100644 --- a/lib/isc/tests/tcp_quota_test.c +++ b/lib/isc/tests/tcp_quota_test.c @@ -259,7 +259,7 @@ tcp_connect_read_cb(isc_nmhandle_t *handle, isc_result_t eresult, atomic_fetch_add(&creads, 1); - magic = *(uint64_t *)tcp_buffer_storage; + memmove(&magic, tcp_buffer_storage, sizeof(magic)); assert_true(magic == stop_magic || magic == send_magic); tcp_buffer_length -= sizeof(magic); @@ -650,7 +650,7 @@ tcp_listen_read_cb(isc_nmhandle_t *handle, isc_result_t eresult, if (tcp_buffer_length >= sizeof(magic)) { isc_nm_pauseread(handle); - magic = *(uint64_t *)tcp_buffer_storage; + memmove(&magic, tcp_buffer_storage, sizeof(magic)); assert_true(magic == stop_magic || magic == send_magic); tcp_buffer_length -= sizeof(magic); diff --git a/lib/isc/tests/tcp_test.c b/lib/isc/tests/tcp_test.c index 7e911fe9480..dc6aa5dcb82 100644 --- a/lib/isc/tests/tcp_test.c +++ b/lib/isc/tests/tcp_test.c @@ -287,7 +287,7 @@ tcp_connect_read_cb(isc_nmhandle_t *handle, isc_result_t eresult, while (tcp_buffer_length >= sizeof(magic)) { atomic_fetch_add(&creads, 1); - magic = *(uint64_t *)tcp_buffer_storage; + memmove(&magic, tcp_buffer_storage, sizeof(magic)); assert_true(magic == stop_magic || magic == send_magic); tcp_buffer_length -= sizeof(magic); @@ -957,7 +957,7 @@ tcp_listen_read_cb(isc_nmhandle_t *handle, isc_result_t eresult, tcp_buffer_length += region->length; while (tcp_buffer_length >= sizeof(magic)) { - magic = *(uint64_t *)tcp_buffer_storage; + memmove(&magic, tcp_buffer_storage, sizeof(magic)); assert_true(magic == stop_magic || magic == send_magic); tcp_buffer_length -= sizeof(magic); diff --git a/lib/isc/tests/tcpdns_test.c b/lib/isc/tests/tcpdns_test.c index f576fe8bd0c..ecd68c4cf1a 100644 --- a/lib/isc/tests/tcpdns_test.c +++ b/lib/isc/tests/tcpdns_test.c @@ -328,7 +328,7 @@ tcpdns_connect_read_cb(isc_nmhandle_t *handle, isc_result_t eresult, atomic_fetch_add(&creads, 1); - magic = *(uint64_t *)region->base; + memmove(&magic, region->base, sizeof(magic)); assert_true(magic == stop_magic || magic == send_magic); @@ -478,7 +478,7 @@ tcpdns_listen_read_cb(isc_nmhandle_t *handle, isc_result_t eresult, assert_int_equal(region->length, sizeof(magic)); - magic = *(uint64_t *)region->base; + memmove(&magic, region->base, sizeof(magic)); assert_true(magic == stop_magic || magic == send_magic); if (magic == send_magic) { diff --git a/lib/isc/tests/tlsdns_test.c b/lib/isc/tests/tlsdns_test.c index b7bef12cca9..45da4302709 100644 --- a/lib/isc/tests/tlsdns_test.c +++ b/lib/isc/tests/tlsdns_test.c @@ -341,7 +341,7 @@ tlsdns_connect_read_cb(isc_nmhandle_t *handle, isc_result_t eresult, atomic_fetch_add(&creads, 1); - magic = *(uint64_t *)region->base; + memmove(&magic, region->base, sizeof(magic)); assert_true(magic == stop_magic || magic == send_magic); @@ -493,7 +493,7 @@ tlsdns_listen_read_cb(isc_nmhandle_t *handle, isc_result_t eresult, assert_int_equal(region->length, sizeof(magic)); - magic = *(uint64_t *)region->base; + memmove(&magic, region->base, sizeof(magic)); assert_true(magic == stop_magic || magic == send_magic); if (magic == send_magic) { diff --git a/lib/isc/tests/udp_test.c b/lib/isc/tests/udp_test.c index 00210a18e9e..f78bcf9ec7b 100644 --- a/lib/isc/tests/udp_test.c +++ b/lib/isc/tests/udp_test.c @@ -285,7 +285,7 @@ udp_listen_recv_cb(isc_nmhandle_t *handle, isc_result_t eresult, assert_int_equal(region->length, sizeof(send_magic)); atomic_fetch_add(&sreads, 1); - magic = *(uint64_t *)region->base; + memmove(&magic, region->base, sizeof(magic)); assert_true(magic == stop_magic || magic == send_magic); isc_nm_send(handle, region, udp_listen_send_cb, NULL); @@ -552,7 +552,7 @@ udp_connect_recv_cb(isc_nmhandle_t *handle, isc_result_t eresult, atomic_fetch_add(&creads, 1); - magic = *(uint64_t *)region->base; + memmove(&magic, region->base, sizeof(magic)); assert_true(magic == stop_magic || magic == send_magic);