$OpenBSD: patch-src_backend_libpq_hba_c,v 1.1 2015/02/17 12:43:08 jca Exp $
--- src/backend/libpq/hba.c.orig	Mon Feb 16 21:53:21 2015
+++ src/backend/libpq/hba.c	Mon Feb 16 23:08:38 2015
@@ -700,8 +700,13 @@ check_ip(SockAddr *raddr, struct sockaddr * addr, stru
 		struct sockaddr_storage addrcopy,
 					maskcopy;
 
-		memcpy(&addrcopy, &addr, sizeof(addrcopy));
-		memcpy(&maskcopy, &mask, sizeof(maskcopy));
+		memcpy(&addrcopy, addr, sizeof(struct sockaddr_in));
+		/*
+		 * On some OSes, if mask is obtained from eg. getifaddrs(3), sa_len
+		 * can vary wildly. We already know that addr->sa_family == AF_INET,
+		 * so just use sizeof(struct sockaddr_in).
+		 */
+		memcpy(&maskcopy, mask, sizeof(struct sockaddr_in));
 		pg_promote_v4_to_v6_addr(&addrcopy);
 		pg_promote_v4_to_v6_mask(&maskcopy);
 
