From: Yu Watanabe Date: Thu, 12 Jul 2018 04:37:01 +0000 (+0900) Subject: resolve: use structured initializer X-Git-Tag: v240~985^2 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=7b3bae217e3d425cc3d3803fbe080710e2e0434e;p=thirdparty%2Fsystemd.git resolve: use structured initializer This fixes the following valgrind warning: ``` Syscall param sendmsg(msg.msg_name) points to uninitialised byte(s) at 0x6189CC1: sendmsg (in /usr/lib64/libpthread-2.27.so) by 0x153082: dns_stream_writev (resolved-dns-stream.c:235) by 0x153343: dns_stream_tls_writev (resolved-dns-stream.c:299) by 0x5B30343: ??? (in /usr/lib64/libgnutls.so.30.20.2) by 0x5B3158F: ??? (in /usr/lib64/libgnutls.so.30.20.2) by 0x5B33190: ??? (in /usr/lib64/libgnutls.so.30.20.2) by 0x5B36307: ??? (in /usr/lib64/libgnutls.so.30.20.2) by 0x5B37D47: gnutls_handshake (in /usr/lib64/libgnutls.so.30.20.2) by 0x154591: dns_stream_connect_tls (resolved-dns-stream.c:596) by 0x13A889: dns_transaction_emit_tcp (resolved-dns-transaction.c:676) by 0x13D901: dns_transaction_go (resolved-dns-transaction.c:1761) by 0x1330C8: dns_query_candidate_go (resolved-dns-query.c:156) Address 0xa9ac268 is 312 bytes inside a block of size 592 alloc'd at 0x4C30B06: calloc (vg_replace_malloc.c:711) by 0x1541F8: dns_stream_new (resolved-dns-stream.c:545) by 0x13A662: dns_transaction_emit_tcp (resolved-dns-transaction.c:642) by 0x13D901: dns_transaction_go (resolved-dns-transaction.c:1761) by 0x1330C8: dns_query_candidate_go (resolved-dns-query.c:156) by 0x134E16: dns_query_go (resolved-dns-query.c:757) by 0x11F3FB: bus_method_resolve_hostname (resolved-bus.c:353) by 0x4F947A7: method_callbacks_run (bus-objects.c:402) by 0x4F97266: object_find_and_run (bus-objects.c:1260) by 0x4F978B1: bus_process_object (bus-objects.c:1376) by 0x4FAF82C: process_message (sd-bus.c:2661) by 0x4FAFA1B: process_running (sd-bus.c:2703) ``` --- diff --git a/src/resolve/resolved-dns-scope.c b/src/resolve/resolved-dns-scope.c index 38ea7fea0ac..5ceb9544102 100644 --- a/src/resolve/resolved-dns-scope.c +++ b/src/resolve/resolved-dns-scope.c @@ -324,36 +324,54 @@ static int dns_scope_socket( ifindex = dns_server_ifindex(server); - sa.sa.sa_family = server->family; - if (server->family == AF_INET) { - sa.in.sin_port = htobe16(port); - sa.in.sin_addr = server->address.in; + switch (server->family) { + case AF_INET: + sa = (union sockaddr_union) { + .in.sin_family = server->family, + .in.sin_port = htobe16(port), + .in.sin_addr = server->address.in, + }; salen = sizeof(sa.in); - } else if (server->family == AF_INET6) { - sa.in6.sin6_port = htobe16(port); - sa.in6.sin6_addr = server->address.in6; - sa.in6.sin6_scope_id = ifindex; + break; + case AF_INET6: + sa = (union sockaddr_union) { + .in6.sin6_family = server->family, + .in6.sin6_port = htobe16(port), + .in6.sin6_addr = server->address.in6, + .in6.sin6_scope_id = ifindex, + }; salen = sizeof(sa.in6); - } else + break; + default: return -EAFNOSUPPORT; + } } else { assert(family != AF_UNSPEC); assert(address); - sa.sa.sa_family = family; ifindex = s->link ? s->link->ifindex : 0; - if (family == AF_INET) { - sa.in.sin_port = htobe16(port); - sa.in.sin_addr = address->in; + switch (family) { + case AF_INET: + sa = (union sockaddr_union) { + .in.sin_family = family, + .in.sin_port = htobe16(port), + .in.sin_addr = address->in, + }; salen = sizeof(sa.in); - } else if (family == AF_INET6) { - sa.in6.sin6_port = htobe16(port); - sa.in6.sin6_addr = address->in6; - sa.in6.sin6_scope_id = ifindex; + break; + case AF_INET6: + sa = (union sockaddr_union) { + .in6.sin6_family = family, + .in6.sin6_port = htobe16(port), + .in6.sin6_addr = address->in6, + .in6.sin6_scope_id = ifindex, + }; salen = sizeof(sa.in6); - } else + break; + default: return -EAFNOSUPPORT; + } } fd = socket(sa.sa.sa_family, type|SOCK_CLOEXEC|SOCK_NONBLOCK, 0);