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) ```
This commit is contained in:
parent
18df5fb017
commit
7b3bae217e
|
@ -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);
|
||||
|
|
Loading…
Reference in a new issue