[tarantool-patches] [PATCH 1/1] swim: check broadcast interfaces more rigorously

Vladislav Shpilevoy v.shpilevoy at tarantool.org
Wed May 8 19:42:14 MSK 2019


Appeared, that getifaddrs() standard function can return
addresses having IFF_BROADCAST flag, but at the same time not
having struct sockaddr *ifa_broadaddr pointer (NULL).

It led to a crash. The patch does additional check if the address
is NULL.
---
 src/lib/swim/swim_io.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/src/lib/swim/swim_io.c b/src/lib/swim/swim_io.c
index 107f47140..9558d0bb8 100644
--- a/src/lib/swim/swim_io.c
+++ b/src/lib/swim/swim_io.c
@@ -198,7 +198,7 @@ swim_bcast_task_next_addr(struct swim_bcast_task *task)
 		if ((flags & IFF_UP) == 0)
 			continue;
 
-		if ((flags & IFF_BROADCAST) != 0 &&
+		if ((flags & IFF_BROADCAST) != 0 && i->ifa_broadaddr != NULL &&
 		    i->ifa_broadaddr->sa_family == AF_INET) {
 			task->base.dst =
 				*(struct sockaddr_in *) i->ifa_broadaddr;
-- 
2.20.1 (Apple Git-117)





More information about the Tarantool-patches mailing list