Skip to content

Commit 48d1a01

Browse files
rlubosdanieldegrasse
authored andcommitted
net: sockets: Specify alignment for sockaddr* structs
To avoid misalignment errors when casting between sockaddr_storage/sockaddr and specialied sockaddr_* variants, specify alignment for the former to match the alignment of the others. The issue was reported by UBSAN: utils.c:802:8: runtime error: member access within misaligned address 0xf4aff186 for type 'struct sockaddr_in6', which requires 4 byte alignment Signed-off-by: Robert Lubos <robert.lubos@nordicsemi.no>
1 parent 8124032 commit 48d1a01

File tree

1 file changed

+5
-3
lines changed

1 file changed

+5
-3
lines changed

include/zephyr/net/net_ip.h

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -404,26 +404,28 @@ struct cmsghdr {
404404

405405
/** @endcond */
406406

407+
#define SOCKADDR_ALIGN (4)
408+
407409
/** Generic sockaddr struct. Must be cast to proper type. */
408410
struct sockaddr {
409411
sa_family_t sa_family; /**< Address family */
410412
/** @cond INTERNAL_HIDDEN */
411413
char data[NET_SOCKADDR_MAX_SIZE - sizeof(sa_family_t)];
412414
/** @endcond */
413-
};
415+
} __aligned(SOCKADDR_ALIGN);
414416

415417
/** @cond INTERNAL_HIDDEN */
416418

417419
struct sockaddr_ptr {
418420
sa_family_t family;
419421
char data[NET_SOCKADDR_PTR_MAX_SIZE - sizeof(sa_family_t)];
420-
};
422+
} __aligned(SOCKADDR_ALIGN);
421423

422424
/* Same as sockaddr in our case */
423425
struct sockaddr_storage {
424426
sa_family_t ss_family;
425427
char data[NET_SOCKADDR_MAX_SIZE - sizeof(sa_family_t)];
426-
};
428+
} __aligned(SOCKADDR_ALIGN);
427429

428430
/* Socket address struct for UNIX domain sockets */
429431
struct sockaddr_un {

0 commit comments

Comments
 (0)