mirror of https://github.com/openwrt/packages.git
conserver: free correct addrinfo to prevent crash.
When looping through addrinfo lists in AddrsMatch, keep a copy of the original addrinfo pointers to free instead of ending up at the terminating NULLs and trying to free those. OpenWRT uses musl in which freeaddrinfo(NULL) is not safe (which is fine, it's not required by the spec) so this fixes a segfault. Signed-off-by: Darren Tucker <dtucker@dtucker.net>pull/23525/head
parent
9e7739057f
commit
69b24ecf6f
|
@ -9,7 +9,7 @@ include $(TOPDIR)/rules.mk
|
|||
|
||||
PKG_NAME:=conserver
|
||||
PKG_VERSION:=8.2.6
|
||||
PKG_RELEASE:=2
|
||||
PKG_RELEASE:=3
|
||||
|
||||
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
|
||||
PKG_SOURCE_URL:=https://codeload.github.com/conserver/conserver/tar.gz/v$(PKG_VERSION)?
|
||||
|
|
|
@ -0,0 +1,36 @@
|
|||
--- a/conserver/consent.c
|
||||
+++ b/conserver/consent.c
|
||||
@@ -1269,7 +1269,7 @@ AddrsMatch(char *addr1, char *addr2)
|
||||
{
|
||||
#if USE_IPV6
|
||||
int error, ret = 0;
|
||||
- struct addrinfo *ai1, *ai2, hints;
|
||||
+ struct addrinfo *ai1, *ai2, *rp1, *rp2, hints;
|
||||
#else
|
||||
/* so, since we might use inet_addr, we're going to use
|
||||
* (in_addr_t)(-1) as a sign of an invalid ip address.
|
||||
@@ -1307,17 +1307,19 @@ AddrsMatch(char *addr1, char *addr2)
|
||||
goto done;
|
||||
}
|
||||
|
||||
- for (; ai1 != NULL; ai1 = ai1->ai_next) {
|
||||
- for (; ai2 != NULL; ai2 = ai2->ai_next) {
|
||||
- if (ai1->ai_addr->sa_family != ai2->ai_addr->sa_family)
|
||||
+ rp1 = ai1;
|
||||
+ rp2 = ai2;
|
||||
+ for (; rp1 != NULL; rp1 = rp1->ai_next) {
|
||||
+ for (; rp2 != NULL; rp2 = rp2->ai_next) {
|
||||
+ if (rp1->ai_addr->sa_family != rp2->ai_addr->sa_family)
|
||||
continue;
|
||||
|
||||
if (
|
||||
# if HAVE_MEMCMP
|
||||
- memcmp(&ai1->ai_addr, &ai2->ai_addr,
|
||||
+ memcmp(&rp1->ai_addr, &rp2->ai_addr,
|
||||
sizeof(struct sockaddr_storage))
|
||||
# else
|
||||
- bcmp(&ai1->ai_addr, &ai2->ai_addr,
|
||||
+ bcmp(&rp1->ai_addr, &rp2->ai_addr,
|
||||
sizeof(struct sockaddr_storage))
|
||||
# endif
|
||||
== 0) {
|
Loading…
Reference in New Issue