diff --git a/include/internal/quic_channel.h b/include/internal/quic_channel.h
index bdc48e5084..91366ec7cc 100644
--- a/include/internal/quic_channel.h
+++ b/include/internal/quic_channel.h
@@ -276,6 +276,8 @@ void ossl_quic_channel_raise_net_error(QUIC_CHANNEL *ch);
 /* For use by QUIC_PORT only. */
 void ossl_quic_channel_on_stateless_reset(QUIC_CHANNEL *ch);
 
+void ossl_quic_channel_inject(QUIC_CHANNEL *ch, QUIC_URXE *e);
+
 /*
  * Queries and Accessors
  * =====================
diff --git a/ssl/quic/quic_channel.c b/ssl/quic/quic_channel.c
index c363b3bdde..ebbc3e86a1 100644
--- a/ssl/quic/quic_channel.c
+++ b/ssl/quic/quic_channel.c
@@ -3029,6 +3029,11 @@ static void ch_save_err_state(QUIC_CHANNEL *ch)
     OSSL_ERR_STATE_save(ch->err_state);
 }
 
+void ossl_quic_channel_inject(QUIC_CHANNEL *ch, QUIC_URXE *e)
+{
+    ossl_qrx_inject_urxe(ch->qrx, e);
+}
+
 void ossl_quic_channel_on_stateless_reset(QUIC_CHANNEL *ch)
 {
     QUIC_TERMINATE_CAUSE tcause = {0};
diff --git a/ssl/quic/quic_port.c b/ssl/quic/quic_port.c
index 91240c3c0e..b99089e42b 100644
--- a/ssl/quic/quic_port.c
+++ b/ssl/quic/quic_port.c
@@ -444,7 +444,15 @@ static void port_default_packet_handler(QUIC_URXE *e, void *arg,
     QUIC_PORT *port = arg;
     PACKET pkt;
     QUIC_PKT_HDR hdr;
-    QUIC_CHANNEL *new_ch = NULL;
+    QUIC_CHANNEL *ch = NULL, *new_ch = NULL;
+
+    if (dcid != NULL
+        && ossl_quic_lcidm_lookup(port->lcidm, dcid, NULL,
+                                  (void **)&ch)) {
+        assert(ch != NULL);
+        ossl_quic_channel_inject(ch, e);
+        return;
+    }
 
     if (port_try_handle_stateless_reset(port, e))
         goto undesirable;