Blame SOURCES/0008-dlm-clear-out-addrs-before-calling-into-corosync_cft.patch

4d4aa8
From 54a5a6b7137c9f6e969bde8f0245a5bc3465536c Mon Sep 17 00:00:00 2001
4d4aa8
From: Christine Caulfield <ccaulfie@redhat.com>
4d4aa8
Date: Tue, 9 Sep 2014 09:29:01 +0100
4d4aa8
Subject: [PATCH 8/8] dlm: clear out addrs before calling into
4d4aa8
 corosync_cft_get_node_addrs()
4d4aa8
4d4aa8
The corosync_cfg_get_node_addrs() call does not fill the whole of the
4d4aa8
addrs field passed in, specifically it only writes the the address
4d4aa8
family and IP address, leaving the port number untouched.
4d4aa8
4d4aa8
If the port number contains junk, then that can get passed into the
4d4aa8
kernel by dlm_controld where it is subsequently used in the comparison
4d4aa8
that checks for valid cluster nodes in a connection. If this happens
4d4aa8
then an otherwise valid connection can be rejected and the dlm will
4d4aa8
hang.
4d4aa8
4d4aa8
I've seen this quite often on s390 but I don't see any reason why it
4d4aa8
might not also be causing intermittent connection problems on other
4d4aa8
archs.
4d4aa8
4d4aa8
Signed-off-by: Christine Caulfield <ccaulfie@redhat.com>
4d4aa8
---
4d4aa8
 dlm_controld/member.c | 1 +
4d4aa8
 1 file changed, 1 insertion(+)
4d4aa8
4d4aa8
diff --git a/dlm_controld/member.c b/dlm_controld/member.c
4d4aa8
index d4031ee7a948..10351ec41d6d 100644
4d4aa8
--- a/dlm_controld/member.c
4d4aa8
+++ b/dlm_controld/member.c
4d4aa8
@@ -132,6 +132,7 @@ static void quorum_callback(quorum_handle_t h, uint32_t quorate,
4d4aa8
 
4d4aa8
 	quorum_node_count = 0;
4d4aa8
 	memset(&quorum_nodes, 0, sizeof(quorum_nodes));
4d4aa8
+	memset(&addrs, 0, sizeof(addrs));
4d4aa8
 
4d4aa8
 	for (i = 0; i < node_list_entries; i++)
4d4aa8
 		quorum_nodes[quorum_node_count++] = node_list[i];
4d4aa8
-- 
4d4aa8
1.8.3.1
4d4aa8