diff options
author | Rich Felker <dalias@aerifal.cx> | 2019-02-20 17:51:22 -0500 |
---|---|---|
committer | Rich Felker <dalias@aerifal.cx> | 2019-02-20 17:51:22 -0500 |
commit | 224d938c5e538ac37f84c6e9a01bd2095aa7081a (patch) | |
tree | c504ba01a156b537be6d61b2312386f33fcf8041 | |
parent | 9d44b6460ab603487dab4d916342d9ba4467e6b9 (diff) | |
download | musl-224d938c5e538ac37f84c6e9a01bd2095aa7081a.tar.gz musl-224d938c5e538ac37f84c6e9a01bd2095aa7081a.tar.xz musl-224d938c5e538ac37f84c6e9a01bd2095aa7081a.zip |
fix invalid free of partial addrinfo list with multiple services
the backindex stored by getaddrinfo to allow freeaddrinfo to perform partial-free wrongly used the address result index, rather than the output slot index, and thus was only valid when they were equal (nservs==1). patch based on report with proposed fix by Markus Wichmann.
-rw-r--r-- | src/network/getaddrinfo.c | 2 |
1 files changed, 1 insertions, 1 deletions
diff --git a/src/network/getaddrinfo.c b/src/network/getaddrinfo.c index 5ae8cbfb..209970ad 100644 --- a/src/network/getaddrinfo.c +++ b/src/network/getaddrinfo.c @@ -104,7 +104,7 @@ int getaddrinfo(const char *restrict host, const char *restrict serv, const stru } for (k=i=0; i<naddrs; i++) for (j=0; j<nservs; j++, k++) { - out[k].slot = i; + out[k].slot = k; out[k].ai = (struct addrinfo){ .ai_family = addrs[i].family, .ai_socktype = ports[j].socktype, |