From 5acf7ec1ffc65db6a2e4a17cfa738e3d98dbb6a3 Mon Sep 17 00:00:00 2001 From: Sage Weil Date: Fri, 25 Jan 2019 14:12:27 -0600 Subject: [PATCH] msg/async: never fill out port in myaddr if we didn't bind If we are a client and didn't bind, then we should not fill in the port for our address. The one the peer sent us is just the random port our outgoing connection happened to land on! Signed-off-by: Sage Weil --- src/msg/async/AsyncMessenger.cc | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/src/msg/async/AsyncMessenger.cc b/src/msg/async/AsyncMessenger.cc index c8403130d4207..cbb3972792384 100644 --- a/src/msg/async/AsyncMessenger.cc +++ b/src/msg/async/AsyncMessenger.cc @@ -886,6 +886,9 @@ bool AsyncMessenger::learned_addr(const entity_addr_t &peer_addr_for_me) if (my_addrs->empty()) { auto a = peer_addr_for_me; a.set_nonce(nonce); + if (!did_bind) { + a.set_port(0); + } set_myaddrs(entity_addrvec_t(a)); ldout(cct,10) << __func__ << " had no addrs" << dendl; } else { @@ -895,7 +898,11 @@ bool AsyncMessenger::learned_addr(const entity_addr_t &peer_addr_for_me) if (a.get_family() == peer_addr_for_me.get_family()) { entity_addr_t t = peer_addr_for_me; t.set_type(a.get_type()); - t.set_port(a.get_port()); + if (!did_bind) { + t.set_port(0); + } else { + t.set_port(a.get_port()); + } t.set_nonce(a.get_nonce()); ldout(cct,10) << __func__ << " " << a << " -> " << t << dendl; a = t; -- 2.39.5