|
|
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 |
|