j...@wxcvbn.org (Jérémie Courrèges-Anglas) writes: > Please try the diff below. It fixes the "backwards memcpy" problem > easily noticeable with psql -h ::1.
Updated diff. Thanks to Stuart for reminding me that netmasks sa_len values can be much surprising. $OpenBSD$ --- 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); -- jca | PGP : 0x1524E7EE / 5135 92C1 AD36 5293 2BDF DDCC 0DFA 74AE 1524 E7EE