From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on inbox.vuxu.org X-Spam-Level: X-Spam-Status: No, score=-2.1 required=5.0 tests=DKIM_INVALID,DKIM_SIGNED, HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI,RCVD_IN_DNSWL_MED, RCVD_IN_MSPIKE_H3,RCVD_IN_MSPIKE_WL,SUBJ_OBFU_PUNCT_FEW autolearn=ham autolearn_force=no version=3.4.2 Received: from mother.openwall.net (mother.openwall.net [195.42.179.200]) by inbox.vuxu.org (OpenSMTPD) with SMTP id 9e2060f8 for ; Thu, 27 Feb 2020 10:17:47 +0000 (UTC) Received: (qmail 23932 invoked by uid 550); 27 Feb 2020 10:17:46 -0000 Mailing-List: contact musl-help@lists.openwall.com; run by ezmlm Precedence: bulk List-Post: List-Help: List-Unsubscribe: List-Subscribe: List-ID: Reply-To: musl@lists.openwall.com Received: (qmail 23902 invoked from network); 27 Feb 2020 10:17:45 -0000 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bell-sw-com.20150623.gappssmtp.com; s=20150623; h=from:subject:to:message-id:date:user-agent:mime-version :content-transfer-encoding:content-language; bh=kc/z4wn4QwKa0lE0fuHMn5Fi8Mzv+a2bG9GSyD/+B94=; b=Ec5WoPEXSMp1p2SP4MkqSCrnvy7wXFntiyNE5rCkiKUi0winucNPwQ7RHTp0rxFzt4 GMoi0928Wrg3aFGiGecCaaLvQG8PIN6ZySSmNU7QMNOjPAnGigybhBS7PM4DtquVBg01 Mhg02cQHxWMKQC/z4ruE93/8vmDHGhfnpUvbnxYJUf1A+aYFJB3Lp5e3tbrT6dnA7i92 pF5rBHFKq/6MShQzJyNFYS7Yfvk+yXWWANxKXJTzBR6FTtPhe3q4Ow1wMP5kdgmBaYRJ +n2RhprMzAJqJXpZUwI6HhWwiRtB5Fp5W1BzrWvDbxIztbkWp1rQoFPwyad1Cwd2erLv znWA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:subject:to:message-id:date:user-agent :mime-version:content-transfer-encoding:content-language; bh=kc/z4wn4QwKa0lE0fuHMn5Fi8Mzv+a2bG9GSyD/+B94=; b=VIqFA1CsqEbcp2WMEmorQysgYPCcp1rO6uXIfyanfS7kF5EfvrahpLdeF9LfASKq5P 6Of3DHcejWx5wiXtiGgsbnmsQU4T26waUlgiiwQFph1/ipicecY8poZHPpE2W41LYX6W IUdsVBN2R7Wkb+I7l8krFV1Vds2GWQ/EafHFj+pgNIixrWl1En48FGbWwfHG0kueI0Up BbUeK8gr5R53yiu6QIFlEhJ3s6Xo7/VoJlMzQ+Cac1U8G9JjhJ2uG3hIlgPC2bPyrS19 JVvfTFvgYsa0rO4NnoVqES27XyZd863uwmBhO4oCJ/QS/ol/63zrQkBWZqDap9rlGbv9 S0xA== X-Gm-Message-State: ANhLgQ2OZUjl4BZcRAOG5XquPWW03hsLri6K/UDmqFdhdslx/BJKjQED gJKf9ADLqNsAvIa7flp1DJAG/ikWMk0= X-Google-Smtp-Source: ADFU+vs+7zkv+WhCw32QAB6pWYU1HAppZo9U7uFD2BF3iik6u1jBRIUe23Y3JaCOhhkiXOGHVVQdPw== X-Received: by 2002:a2e:8898:: with SMTP id k24mr2279629lji.36.1582798653587; Thu, 27 Feb 2020 02:17:33 -0800 (PST) From: Alexander Scherbatiy To: musl@lists.openwall.com Message-ID: <89b25567-5887-80ee-bfac-58b25e7a9b45@bell-sw.com> Date: Thu, 27 Feb 2020 13:17:20 +0300 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101 Thunderbird/68.4.1 MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8; format=flowed Content-Transfer-Encoding: 8bit Content-Language: en-US Subject: [musl] getaddrinfo(3) with AI_V4MAPPED and AI_ALL flags Hello, When I call getaddrinfo() with different families, SOCK_STREAM socktype, IPPROTO_TCP protocol, and AI_PASSIVE flag the result is the same on the Alpine Linux 3.11.3 and Ubuntu 19.10 (the code sample is below): ---------------- family: AF_UNSPEC, flags: AI_PASSIVE AF_INET  IPv4 addr '0.0.0.0' AF_INET6 IPv6 addr '::' family: AF_INET,   flags: AI_PASSIVE AF_INET  IPv4 addr '0.0.0.0' family: AF_INET6,  flags: AI_PASSIVE AF_INET6 IPv6 addr '::' ---------------- When I use getaddrinfo() with AF_INET6 family and additional AI_V4MAPPED | AI_ALL (return both IPv6 and IPv4-mapped IPv6 addresses) flags the result on Ubuntu contains only IPv6 '::' address: ---------------- family: AF_INET6,  flags: AI_PASSIVE | AI_V4MAPPED | AI_ALL AF_INET6 IPv6 addr '::' ---------------- whereas the result on Alpine Linux contains both IPv4-mapped IPv6 addresses '::ffff:0.0.0.0' and  IPv6 '::' ---------------- family: AF_INET6,  flags: AI_PASSIVE | AI_V4MAPPED | AI_ALL AF_INET6 IPv6 addr '::ffff:0.0.0.0' AF_INET6 IPv6 addr '::' ---------------- Is it expected behavior? I use Alpine Linux 3.11.3 from docker with musl libc (x86_64). Thanks, Alexander. Code sample: -------------  addr_info.c ----------- #include #include #include #include #include void sockaddr_show(struct sockaddr *sa) {     int family = sa->sa_family;     if (family == AF_INET) {         char buff[INET_ADDRSTRLEN];         struct sockaddr_in server_addr = *((struct sockaddr_in*) sa);         inet_ntop(AF_INET, &server_addr.sin_addr, buff, INET_ADDRSTRLEN);         printf("AF_INET  IPv4 addr '%s'\n", buff);     } else if (family == AF_INET6) {         char buff[INET_ADDRSTRLEN];         struct sockaddr_in6 server_addr = *((struct sockaddr_in6*) sa);         inet_ntop(AF_INET6, &server_addr.sin6_addr, buff, INET6_ADDRSTRLEN);         printf("AF_INET6 IPv6 addr '%s'\n", buff);     } else {         printf("family: %d\n", family);     } } void show_addr_info(int family, int flags) {     char* hostname = NULL;     char* service = "33833";     struct addrinfo hints;     struct addrinfo *result, *rp;     memset (&hints, 0, sizeof(hints));     hints.ai_family = family;     hints.ai_socktype = SOCK_STREAM;     hints.ai_protocol = IPPROTO_TCP;     hints.ai_flags = flags;     int res = getaddrinfo(hostname, service, &hints, &result);     for (rp = result; rp != NULL; rp = rp->ai_next) {         sockaddr_show(rp->ai_addr);     }     printf("\n"); } int main(void) {     printf("family: AF_UNSPEC, flags: AI_PASSIVE\n");     show_addr_info(AF_UNSPEC, AI_PASSIVE);     printf("family: AF_INET,   flags: AI_PASSIVE\n");     show_addr_info(AF_INET,   AI_PASSIVE);     printf("family: AF_INET6,  flags: AI_PASSIVE\n");     show_addr_info(AF_INET6,  AI_PASSIVE);     printf("family: AF_INET6,  flags: AI_PASSIVE | AI_V4MAPPED | AI_ALL\n");     show_addr_info(AF_INET6,  AI_PASSIVE | AI_V4MAPPED | AI_ALL);     return EXIT_SUCCESS; } --------------------------------