--- crypto/openssh/sshconnect.c +++ crypto/openssh/sshconnect.c @@ -68,6 +68,8 @@ #include "ssherr.h" #include "authfd.h" #include "kex.h" +#define MYLOOP_MASKLEN 24 +#define IN_MY_LOOP(i) (((in_addr_t)(i) & (0xFFFFFFFF << (32 - MYLOOP_MASKLEN))) == (127 << 24)) struct sshkey *previous_host_key = NULL; @@ -595,8 +597,7 @@ { switch (hostaddr->sa_family) { case AF_INET: - return (ntohl(((struct sockaddr_in *)hostaddr)-> - sin_addr.s_addr) >> 24) == IN_LOOPBACKNET; + return IN_MY_LOOP(ntohl(((struct sockaddr_in *)hostaddr)->sin_addr.s_addr)); case AF_INET6: return IN6_IS_ADDR_LOOPBACK( &(((struct sockaddr_in6 *)hostaddr)->sin6_addr));