Browse Source

fastd: fix segmentation fault with musl >1.1.20

When compiled with musl >1.1.20, fastd will crash in case it can't
resolve a peers hostname. This is due to a changed implementation of
freeaddrinfo in musl 1.1.21 onwards.

This segfault is fixed by not calling freeaddrinfo in case the supplied
pointer is null.

Signed-off-by: David Bauer <mail@david-bauer.net>
lilik-openwrt-22.03
David Bauer 5 years ago
parent
commit
ed3c3e3c79
2 changed files with 36 additions and 1 deletions
  1. +1
    -1
      net/fastd/Makefile
  2. +35
    -0
      net/fastd/patches/0001-resolve-fix-segmentation-fault-with-musl-1.1.20.patch

+ 1
- 1
net/fastd/Makefile View File

@ -9,7 +9,7 @@ include $(TOPDIR)/rules.mk
PKG_NAME:=fastd PKG_NAME:=fastd
PKG_VERSION:=18 PKG_VERSION:=18
PKG_RELEASE:=2
PKG_RELEASE:=3
PKG_MAINTAINER:=Matthias Schiffer <mschiffer@universe-factory.net> PKG_MAINTAINER:=Matthias Schiffer <mschiffer@universe-factory.net>
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.xz PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.xz


+ 35
- 0
net/fastd/patches/0001-resolve-fix-segmentation-fault-with-musl-1.1.20.patch View File

@ -0,0 +1,35 @@
From 9710132c04cd378bd36f16a2a3d98d9c4c5fdbac Mon Sep 17 00:00:00 2001
From: David Bauer <mail@david-bauer.net>
Date: Thu, 25 Jul 2019 18:51:25 +0200
Subject: [PATCH] resolve: fix segmentation fault with musl >1.1.20
When compiled with musl >1.1.20, fastd will crash in case it can't
resolve a peers hostname. This is due to a changed implementation of
freeaddrinfo in musl 1.1.21 onwards.
This segfault is fixed by not calling freeaddrinfo in case the supplied
pointer is null.
Signed-off-by: David Bauer <mail@david-bauer.net>
---
src/resolve.c | 4 +++-
1 file changed, 3 insertions(+), 1 deletion(-)
diff --git a/src/resolve.c b/src/resolve.c
index 9bdfa1c..bfd2a59 100644
--- a/src/resolve.c
+++ b/src/resolve.c
@@ -104,7 +104,9 @@ static void * resolve_peer(void *varg) {
fastd_async_enqueue(ASYNC_TYPE_RESOLVE_RETURN, ret, sizeof(fastd_async_resolve_return_t) + n_addr*sizeof(fastd_peer_address_t));
- freeaddrinfo(res);
+ if (res)
+ freeaddrinfo(res);
+
free(arg->hostname);
free(arg);
--
2.20.1

Loading…
Cancel
Save