diff --git a/src/common/pick_address.cc b/src/common/pick_address.cc
index 2fd076808ac..c92f2c4bc02 100644
--- a/src/common/pick_address.cc
+++ b/src/common/pick_address.cc
@@ -638,15 +638,24 @@ bool is_addr_in_subnet(
 {
   const auto nets = get_str_list(networks);
   ceph_assert(!nets.empty());
-  const auto &net = nets.front();
-  struct ifaddrs ifa;
+
   unsigned ipv = CEPH_PICK_ADDRESS_IPV4;
   struct sockaddr_in public_addr;
-
-  ifa.ifa_next = nullptr;
-  ifa.ifa_addr = (struct sockaddr*)&public_addr;
   public_addr.sin_family = AF_INET;
-  inet_pton(AF_INET, addr.c_str(), &public_addr.sin_addr);
 
-  return matches_with_net(cct, ifa, net, ipv);
+  if(inet_pton(AF_INET, addr.c_str(), &public_addr.sin_addr) != 1) {
+    lderr(cct) << "unable to convert chosen address to string: " << addr << dendl;
+    return false;
+  }
+
+  for (const auto &net : nets) {
+    struct ifaddrs ifa;
+    memset(&ifa, 0, sizeof(ifa));
+    ifa.ifa_next = nullptr;
+    ifa.ifa_addr = (struct sockaddr*)&public_addr;
+    if(matches_with_net(cct, ifa, net, ipv)) {
+      return true;
+    }
+  }
+  return false;
 }