From accf0bf77765aea30ab587c1dab8787c5ead1e00 Mon Sep 17 00:00:00 2001 From: Aviram Hassan Date: Mon, 22 Apr 2024 22:46:26 +0300 Subject: [PATCH] don't re-resolve when connecting to loopback on outgoing filter (#2390) --- changelog.d/2389.fixed.md | 1 + mirrord/layer/src/socket.rs | 9 ++++++++- 2 files changed, 9 insertions(+), 1 deletion(-) create mode 100644 changelog.d/2389.fixed.md diff --git a/changelog.d/2389.fixed.md b/changelog.d/2389.fixed.md new file mode 100644 index 00000000000..b2f73397603 --- /dev/null +++ b/changelog.d/2389.fixed.md @@ -0,0 +1 @@ +don't re-resolve when connecting to loopback on outgoing filter \ No newline at end of file diff --git a/mirrord/layer/src/socket.rs b/mirrord/layer/src/socket.rs index fdb64370ecd..1942134f17c 100644 --- a/mirrord/layer/src/socket.rs +++ b/mirrord/layer/src/socket.rs @@ -316,6 +316,14 @@ impl OutgoingSelector { /// 2. `address` is **NOT** in [`REMOTE_DNS_REVERSE_MAPPING`]: return the `address` as is; #[mirrord_layer_macro::instrument(level = "trace", ret)] fn get_local_address_to_connect(address: SocketAddr) -> HookResult { + // Aviram: I think this whole function and logic is weird but I really need to get + // https://github.com/metalbear-co/mirrord/issues/2389 fixed and I don't have time to + // fully understand or refactor, and the logic is sound (if it's loopback, just connect to + // it) + if address.ip().is_loopback() { + return Ok(address); + } + let cached = REMOTE_DNS_REVERSE_MAPPING .get(&address.ip()) .map(|entry| entry.value().clone()); @@ -324,7 +332,6 @@ impl OutgoingSelector { }; let _guard = DetourGuard::new(); - (hostname, address.port()) .to_socket_addrs()? .next()