diff --git a/quic/core/crypto/crypto_server_test.cc b/quic/core/crypto/crypto_server_test.cc
index 7fadbbd..753bd60 100644
--- a/quic/core/crypto/crypto_server_test.cc
+++ b/quic/core/crypto/crypto_server_test.cc
@@ -59,21 +59,19 @@
 struct TestParams {
   friend std::ostream& operator<<(std::ostream& os, const TestParams& p) {
     os << "  versions: "
-       << ParsedQuicVersionVectorToString(p.supported_versions)
-       << " } allow_sni_without_dots: " << p.allow_sni_without_dots;
+       << ParsedQuicVersionVectorToString(p.supported_versions) << " }";
     return os;
   }
 
   // Versions supported by client and server.
   ParsedQuicVersionVector supported_versions;
-  bool allow_sni_without_dots;
 };
 
 // Used by ::testing::PrintToStringParamName().
 std::string PrintToString(const TestParams& p) {
   std::string rv = ParsedQuicVersionVectorToString(p.supported_versions);
   std::replace(rv.begin(), rv.end(), ',', '_');
-  return absl::StrCat(rv, "_allow_sni_without_dots_", p.allow_sni_without_dots);
+  return rv;
 }
 
 // Constructs various test permutations.
@@ -83,9 +81,7 @@
   // Start with all versions, remove highest on each iteration.
   ParsedQuicVersionVector supported_versions = AllSupportedVersions();
   while (!supported_versions.empty()) {
-    for (bool allow_sni_without_dots : {false, true}) {
-      params.push_back({supported_versions, allow_sni_without_dots});
-    }
+    params.push_back({supported_versions});
     supported_versions.erase(supported_versions.begin());
   }
 
@@ -109,8 +105,6 @@
         signed_config_(new QuicSignedServerConfig),
         chlo_packet_size_(kDefaultMaxPacketSize) {
     supported_versions_ = GetParam().supported_versions;
-    SetQuicReloadableFlag(quic_and_tls_allow_sni_without_dots,
-                          GetParam().allow_sni_without_dots);
     config_.set_enable_serving_sct(true);
 
     client_version_ = supported_versions_.front();
@@ -387,9 +381,6 @@
     "127.0.0.1",
     "ffee::1",
   };
-  if (!GetParam().allow_sni_without_dots) {
-    badSNIs.push_back("foo");
-  }
   // clang-format on
 
   for (const std::string& bad_sni : badSNIs) {
@@ -402,12 +393,11 @@
     CheckRejectReasons(kRejectReasons, ABSL_ARRAYSIZE(kRejectReasons));
   }
 
-  if (GetParam().allow_sni_without_dots) {
-    CryptoHandshakeMessage msg = crypto_test_utils::CreateCHLO(
-        {{"PDMD", "X509"}, {"SNI", "foo"}, {"VER\0", client_version_string_}},
-        kClientHelloMinimumSize);
-    ShouldSucceed(msg);
-  }
+  // Check that SNIs without dots are allowed
+  CryptoHandshakeMessage msg = crypto_test_utils::CreateCHLO(
+      {{"PDMD", "X509"}, {"SNI", "foo"}, {"VER\0", client_version_string_}},
+      kClientHelloMinimumSize);
+  ShouldSucceed(msg);
 }
 
 TEST_P(CryptoServerTest, DefaultCert) {
diff --git a/quic/core/quic_flags_list.h b/quic/core/quic_flags_list.h
index 661e8fb..8048bc7 100644
--- a/quic/core/quic_flags_list.h
+++ b/quic/core/quic_flags_list.h
@@ -19,8 +19,6 @@
 QUIC_FLAG(FLAGS_quic_restart_flag_quic_testonly_default_true, true)
 // Fix QUIC BBRv2\'s bandwidth_lo modes to better approximate packet conservation.
 QUIC_FLAG(FLAGS_quic_reloadable_flag_quic_bbr2_fix_bw_lo_mode2, true)
-// If true, GFE will consider SNI values which do not contain dots (instead of throwing them away - see b/176998377).
-QUIC_FLAG(FLAGS_quic_reloadable_flag_quic_and_tls_allow_sni_without_dots, true)
 // If true, QUIC will default enable MTU discovery at server, with a target of 1450 bytes.
 QUIC_FLAG(FLAGS_quic_reloadable_flag_quic_enable_mtu_discovery_at_server, false)
 // If true, QuicGsoBatchWriter will support release time if it is available and the process has the permission to do so.
diff --git a/quic/platform/api/quic_hostname_utils_test.cc b/quic/platform/api/quic_hostname_utils_test.cc
index 788cb2d..398f44a 100644
--- a/quic/platform/api/quic_hostname_utils_test.cc
+++ b/quic/platform/api/quic_hostname_utils_test.cc
@@ -19,10 +19,7 @@
   // IP as SNI.
   EXPECT_FALSE(QuicHostnameUtils::IsValidSNI("192.168.0.1"));
   // SNI without any dot.
-  SetQuicReloadableFlag(quic_and_tls_allow_sni_without_dots, true);
   EXPECT_TRUE(QuicHostnameUtils::IsValidSNI("somedomain"));
-  SetQuicReloadableFlag(quic_and_tls_allow_sni_without_dots, false);
-  EXPECT_FALSE(QuicHostnameUtils::IsValidSNI("somedomain"));
   // Invalid by RFC2396 but unfortunately domains of this form exist.
   EXPECT_TRUE(QuicHostnameUtils::IsValidSNI("some_domain.com"));
   // An empty string must be invalid otherwise the QUIC client will try sending
