From 05749544d4b76bcb8edb385bf5776c3daf87bbc2 Mon Sep 17 00:00:00 2001 From: Martin Pulec Date: Mon, 3 Oct 2022 10:13:20 +0200 Subject: [PATCH] RTP UDP: ensure sockaddr_storage alignment it is currently aligned so just ensure --- src/rtp/net_udp.cpp | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/rtp/net_udp.cpp b/src/rtp/net_udp.cpp index 2646c97b9..f2542801a 100644 --- a/src/rtp/net_udp.cpp +++ b/src/rtp/net_udp.cpp @@ -82,6 +82,7 @@ using std::to_string; using std::unique_lock; #define DEFAULT_MAX_UDP_READER_QUEUE_LEN (1920/3*8*1080/1152) //< 10-bit FullHD frame divided by 1280 MTU packets (minus headers) +#define ALIGNED_SOCKADDR_STORAGE_OFF ((RTP_MAX_PACKET_LEN + alignof(sockaddr_storage) - 1) / alignof(sockaddr_storage) * alignof(sockaddr_storage)) static int resolve_address(socket_udp *s, const char *addr, uint16_t tx_port); static void *udp_reader(void *arg); @@ -1129,9 +1130,9 @@ static void *udp_reader(void *arg) if (FD_ISSET(s->local->should_exit_fd[0], &fds)) { break; } - uint8_t *packet = (uint8_t *) malloc(RTP_MAX_PACKET_LEN + sizeof(struct sockaddr_storage)); + uint8_t *packet = (uint8_t *) malloc(ALIGNED_SOCKADDR_STORAGE_OFF + sizeof(struct sockaddr_storage)); uint8_t *buffer = ((uint8_t *) packet) + RTP_PACKET_HEADER_SIZE; - auto src_addr = (struct sockaddr *)(void *)(packet + RTP_MAX_PACKET_LEN); + auto src_addr = (struct sockaddr *)(void *)(packet + ALIGNED_SOCKADDR_STORAGE_OFF); socklen_t addrlen = sizeof(struct sockaddr_storage); int size = recvfrom(s->local->rx_fd, (char *) buffer, RTP_MAX_PACKET_LEN - RTP_PACKET_HEADER_SIZE,