diff options
| author | Michael Biebl <biebl@debian.org> | 2022-06-17 22:03:19 +0200 |
|---|---|---|
| committer | Michael Biebl <biebl@debian.org> | 2022-06-17 22:03:19 +0200 |
| commit | f7c750061dab327e638c0129cfafd5b2215b3a2e (patch) | |
| tree | 228879a9047dcc8c06e11964fe23b3b73cf5fc70 /src/libnm-glib-aux | |
| parent | 87d61411bb3453587d21487da04fcf770fee7d55 (diff) | |
New upstream version 1.38.2 upstream/1.38.2
Diffstat (limited to 'src/libnm-glib-aux')
| -rw-r--r-- | src/libnm-glib-aux/nm-shared-utils.c | 10 | ||||
| -rw-r--r-- | src/libnm-glib-aux/nm-shared-utils.h | 2 | ||||
| -rw-r--r-- | src/libnm-glib-aux/tests/test-shared-general.c | 8 |
3 files changed, 15 insertions, 5 deletions
diff --git a/src/libnm-glib-aux/nm-shared-utils.c b/src/libnm-glib-aux/nm-shared-utils.c index ad99a6b9..e6ee04d7 100644 --- a/src/libnm-glib-aux/nm-shared-utils.c +++ b/src/libnm-glib-aux/nm-shared-utils.c @@ -37,6 +37,13 @@ const void *const _NM_PTRARRAY_EMPTY[1] = {NULL}; const NMIPAddr nm_ip_addr_zero = {}; +/* We use _nm_alignas(NMIPAddr) to ensure that fields for in_addr_t and + * struct in6_addr have all the same alignment. Ensure that this is suitable. */ +G_STATIC_ASSERT(_nm_alignof(in_addr_t) <= _nm_alignof(NMIPAddr)); +G_STATIC_ASSERT(_nm_alignof(struct in_addr) <= _nm_alignof(NMIPAddr)); +G_STATIC_ASSERT(_nm_alignof(struct in6_addr) <= _nm_alignof(NMIPAddr)); +G_STATIC_ASSERT(_nm_alignof(NMEtherAddr) <= _nm_alignof(NMIPAddr)); + /* this initializes a struct in_addr/in6_addr and allows for untrusted * arguments (like unsuitable @addr_family or @src_len). It's almost safe * in the sense that it verifies input arguments strictly. Also, it @@ -126,6 +133,9 @@ nm_ip_addr_set_from_variant(int addr_family, gpointer dst, GVariant *variant, in G_STATIC_ASSERT(ETH_ALEN == sizeof(struct ether_addr)); G_STATIC_ASSERT(ETH_ALEN == 6); +G_STATIC_ASSERT(ETH_ALEN == sizeof(NMEtherAddr)); + +G_STATIC_ASSERT(_nm_alignof(struct ether_addr) <= _nm_alignof(NMEtherAddr)); /*****************************************************************************/ diff --git a/src/libnm-glib-aux/nm-shared-utils.h b/src/libnm-glib-aux/nm-shared-utils.h index daefa068..52cf1d4c 100644 --- a/src/libnm-glib-aux/nm-shared-utils.h +++ b/src/libnm-glib-aux/nm-shared-utils.h @@ -216,7 +216,7 @@ nm_ether_addr_equal(const NMEtherAddr *a, const NMEtherAddr *b) typedef struct { union { - guint8 addr_ptr[1]; + guint8 addr_ptr[sizeof(struct in6_addr)]; in_addr_t addr4; struct in_addr addr4_struct; struct in6_addr addr6; diff --git a/src/libnm-glib-aux/tests/test-shared-general.c b/src/libnm-glib-aux/tests/test-shared-general.c index 46689947..e7fd2b6b 100644 --- a/src/libnm-glib-aux/tests/test-shared-general.c +++ b/src/libnm-glib-aux/tests/test-shared-general.c @@ -23,10 +23,10 @@ G_STATIC_ASSERT(NM_AF_INET_SIZE == sizeof(in_addr_t)); G_STATIC_ASSERT(NM_AF_INET_SIZE == sizeof(struct in_addr)); G_STATIC_ASSERT(NM_AF_INET6_SIZE == sizeof(struct in6_addr)); -G_STATIC_ASSERT(4 == _nm_alignof(in_addr_t)); -G_STATIC_ASSERT(4 == _nm_alignof(struct in_addr)); -G_STATIC_ASSERT(4 == _nm_alignof(struct in6_addr)); -G_STATIC_ASSERT(4 == _nm_alignof(NMIPAddr)); +G_STATIC_ASSERT(_nm_alignof(in_addr_t) <= _nm_alignof(NMIPAddr)); +G_STATIC_ASSERT(_nm_alignof(struct in_addr) <= _nm_alignof(NMIPAddr)); +G_STATIC_ASSERT(_nm_alignof(struct in6_addr) <= _nm_alignof(NMIPAddr)); +G_STATIC_ASSERT(_nm_alignof(NMEtherAddr) <= _nm_alignof(NMIPAddr)); /*****************************************************************************/ |