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>
This commit is contained in:
parent
8124032cbb
commit
48d1a01b2d
@ -404,26 +404,28 @@ struct cmsghdr {
|
||||
|
||||
/** @endcond */
|
||||
|
||||
#define SOCKADDR_ALIGN (4)
|
||||
|
||||
/** Generic sockaddr struct. Must be cast to proper type. */
|
||||
struct sockaddr {
|
||||
sa_family_t sa_family; /**< Address family */
|
||||
/** @cond INTERNAL_HIDDEN */
|
||||
char data[NET_SOCKADDR_MAX_SIZE - sizeof(sa_family_t)];
|
||||
/** @endcond */
|
||||
};
|
||||
} __aligned(SOCKADDR_ALIGN);
|
||||
|
||||
/** @cond INTERNAL_HIDDEN */
|
||||
|
||||
struct sockaddr_ptr {
|
||||
sa_family_t family;
|
||||
char data[NET_SOCKADDR_PTR_MAX_SIZE - sizeof(sa_family_t)];
|
||||
};
|
||||
} __aligned(SOCKADDR_ALIGN);
|
||||
|
||||
/* Same as sockaddr in our case */
|
||||
struct sockaddr_storage {
|
||||
sa_family_t ss_family;
|
||||
char data[NET_SOCKADDR_MAX_SIZE - sizeof(sa_family_t)];
|
||||
};
|
||||
} __aligned(SOCKADDR_ALIGN);
|
||||
|
||||
/* Socket address struct for UNIX domain sockets */
|
||||
struct sockaddr_un {
|
||||
|
||||
Loading…
Reference in New Issue
Block a user