Browse Source

totemudpu: Remove MSGHDR conditionals

The ucast_sendmsg and mcast_sendmsg functions already initialize
msghdr using memset, making the conditional zeroing of some fields
redundant.

This commit adds a similar memset to net_deliver_fn and
totemudpu_recv_mcast_empty to ensure msghdr is always fully
initialized. All conditional initializations are then removed.

This simplifies the code and improves safety by preventing the
use of uninitialized stack data within the msghdr struct.

Signed-off-by: Jan Friesse <jfriesse@redhat.com>
Reviewed-by: Christine Caulfield <ccaulfie@redhat.com>
Jan Friesse 3 tháng trước cách đây
mục cha
commit
62aa3085b4
1 tập tin đã thay đổi với 3 bổ sung75 xóa
  1. 3 75
      exec/totemudpu.c

+ 3 - 75
exec/totemudpu.c

@@ -277,21 +277,6 @@ static inline void ucast_sendmsg (
 	msg_ucast.msg_namelen = addrlen;
 	msg_ucast.msg_namelen = addrlen;
 	msg_ucast.msg_iov = (void *)&iovec;
 	msg_ucast.msg_iov = (void *)&iovec;
 	msg_ucast.msg_iovlen = 1;
 	msg_ucast.msg_iovlen = 1;
-#ifdef HAVE_MSGHDR_CONTROL
-	msg_ucast.msg_control = 0;
-#endif
-#ifdef HAVE_MSGHDR_CONTROLLEN
-	msg_ucast.msg_controllen = 0;
-#endif
-#ifdef HAVE_MSGHDR_FLAGS
-	msg_ucast.msg_flags = 0;
-#endif
-#ifdef HAVE_MSGHDR_ACCRIGHTS
-	msg_ucast.msg_accrights = NULL;
-#endif
-#ifdef HAVE_MSGHDR_ACCRIGHTSLEN
-	msg_ucast.msg_accrightslen = 0;
-#endif
 
 
 	if (instance->netif_bind_state == BIND_STATE_REGULAR) {
 	if (instance->netif_bind_state == BIND_STATE_REGULAR) {
 		send_sock = instance->token_socket;
 		send_sock = instance->token_socket;
@@ -346,25 +331,11 @@ static inline void mcast_sendmsg (
 
 
 			totemip_totemip_to_sockaddr_convert(&member->member,
 			totemip_totemip_to_sockaddr_convert(&member->member,
 				instance->totem_interface->ip_port, &sockaddr, &addrlen);
 				instance->totem_interface->ip_port, &sockaddr, &addrlen);
+			memset(&msg_mcast, 0, sizeof(msg_mcast));
 			msg_mcast.msg_name = &sockaddr;
 			msg_mcast.msg_name = &sockaddr;
 			msg_mcast.msg_namelen = addrlen;
 			msg_mcast.msg_namelen = addrlen;
 			msg_mcast.msg_iov = (void *)&iovec;
 			msg_mcast.msg_iov = (void *)&iovec;
 			msg_mcast.msg_iovlen = 1;
 			msg_mcast.msg_iovlen = 1;
-		#ifdef HAVE_MSGHDR_CONTROL
-			msg_mcast.msg_control = 0;
-		#endif
-		#ifdef HAVE_MSGHDR_CONTROLLEN
-			msg_mcast.msg_controllen = 0;
-		#endif
-		#ifdef HAVE_MSGHDR_FLAGS
-			msg_mcast.msg_flags = 0;
-		#endif
-		#ifdef HAVE_MSGHDR_ACCRIGHTS
-			msg_mcast.msg_accrights = NULL;
-		#endif
-		#ifdef HAVE_MSGHDR_ACCRIGHTSLEN
-			msg_mcast.msg_accrightslen = 0;
-		#endif
 
 
 			/*
 			/*
 			 * Transmit multicast message
 			 * Transmit multicast message
@@ -393,21 +364,6 @@ static inline void mcast_sendmsg (
 		msg_mcast.msg_namelen = 0;
 		msg_mcast.msg_namelen = 0;
 		msg_mcast.msg_iov = (void *)&iovec;
 		msg_mcast.msg_iov = (void *)&iovec;
 		msg_mcast.msg_iovlen = 1;
 		msg_mcast.msg_iovlen = 1;
-	#ifdef HAVE_MSGHDR_CONTROL
-		msg_mcast.msg_control = 0;
-	#endif
-	#ifdef HAVE_MSGHDR_CONTROLLEN
-		msg_mcast.msg_controllen = 0;
-	#endif
-	#ifdef HAVE_MSGHDR_FLAGS
-		msg_mcast.msg_flags = 0;
-	#endif
-	#ifdef HAVE_MSGHDR_ACCRIGHTS
-		msg_mcast.msg_accrights = NULL;
-	#endif
-	#ifdef HAVE_MSGHDR_ACCRIGHTSLEN
-		msg_mcast.msg_accrightslen = 0;
-	#endif
 
 
 		res = sendmsg (instance->local_loop_sock[1], &msg_mcast,
 		res = sendmsg (instance->local_loop_sock[1], &msg_mcast,
 			MSG_NOSIGNAL);
 			MSG_NOSIGNAL);
@@ -484,25 +440,11 @@ static int net_deliver_fn (
 	/*
 	/*
 	 * Receive datagram
 	 * Receive datagram
 	 */
 	 */
+	memset(&msg_recv, 0, sizeof(msg_recv));
 	msg_recv.msg_name = &system_from;
 	msg_recv.msg_name = &system_from;
 	msg_recv.msg_namelen = sizeof (struct sockaddr_storage);
 	msg_recv.msg_namelen = sizeof (struct sockaddr_storage);
 	msg_recv.msg_iov = iovec;
 	msg_recv.msg_iov = iovec;
 	msg_recv.msg_iovlen = 1;
 	msg_recv.msg_iovlen = 1;
-#ifdef HAVE_MSGHDR_CONTROL
-	msg_recv.msg_control = 0;
-#endif
-#ifdef HAVE_MSGHDR_CONTROLLEN
-	msg_recv.msg_controllen = 0;
-#endif
-#ifdef HAVE_MSGHDR_FLAGS
-	msg_recv.msg_flags = 0;
-#endif
-#ifdef HAVE_MSGHDR_ACCRIGHTS
-	msg_recv.msg_accrights = NULL;
-#endif
-#ifdef HAVE_MSGHDR_ACCRIGHTSLEN
-	msg_recv.msg_accrightslen = 0;
-#endif
 
 
 	bytes_received = recvmsg (fd, &msg_recv, MSG_NOSIGNAL | MSG_DONTWAIT);
 	bytes_received = recvmsg (fd, &msg_recv, MSG_NOSIGNAL | MSG_DONTWAIT);
 	if (bytes_received == -1) {
 	if (bytes_received == -1) {
@@ -1180,25 +1122,11 @@ extern int totemudpu_recv_mcast_empty (
 	/*
 	/*
 	 * Receive datagram
 	 * Receive datagram
 	 */
 	 */
+	memset(&msg_recv, 0, sizeof(msg_recv));
 	msg_recv.msg_name = &system_from;
 	msg_recv.msg_name = &system_from;
 	msg_recv.msg_namelen = sizeof (struct sockaddr_storage);
 	msg_recv.msg_namelen = sizeof (struct sockaddr_storage);
 	msg_recv.msg_iov = &instance->totemudpu_iov_recv;
 	msg_recv.msg_iov = &instance->totemudpu_iov_recv;
 	msg_recv.msg_iovlen = 1;
 	msg_recv.msg_iovlen = 1;
-#ifdef HAVE_MSGHDR_CONTROL
-	msg_recv.msg_control = 0;
-#endif
-#ifdef HAVE_MSGHDR_CONTROLLEN
-	msg_recv.msg_controllen = 0;
-#endif
-#ifdef HAVE_MSGHDR_FLAGS
-	msg_recv.msg_flags = 0;
-#endif
-#ifdef HAVE_MSGHDR_ACCRIGHTS
-	msg_recv.msg_accrights = NULL;
-#endif
-#ifdef HAVE_MSGHDR_ACCRIGHTSLEN
-	msg_recv.msg_accrightslen = 0;
-#endif
 
 
 	for (i = 0; i < 2; i++) {
 	for (i = 0; i < 2; i++) {
 		sock = -1;
 		sock = -1;