Fixes for Adversarial Timing Profile Latency-flake by #761

Co-Authored-By: brekotis <93345790+brekotis@users.noreply.github.com>
This commit is contained in:
Alexey
2026-06-05 12:59:37 +03:00
parent 89a885c25f
commit 7d543aeb67

View File

@@ -75,12 +75,17 @@ async fn run_generic_once(class: ProbeClass) -> u128 {
let listener = TcpListener::bind("127.0.0.1:0").await.unwrap(); let listener = TcpListener::bind("127.0.0.1:0").await.unwrap();
let backend_addr = listener.local_addr().unwrap(); let backend_addr = listener.local_addr().unwrap();
let backend_reply = REPLY_404.to_vec(); let backend_reply = REPLY_404.to_vec();
let probe = match class {
ProbeClass::MalformedTlsTruncation => malformed_tls_probe(),
ProbeClass::PlainWebBaseline => plain_web_probe(),
};
let accept_task = tokio::spawn({ let accept_task = tokio::spawn({
let backend_reply = backend_reply.clone(); let backend_reply = backend_reply.clone();
let expected_probe_len = probe.len();
async move { async move {
let (mut stream, _) = listener.accept().await.unwrap(); let (mut stream, _) = listener.accept().await.unwrap();
let mut buf = [0u8; 5]; let mut buf = vec![0u8; expected_probe_len];
stream.read_exact(&mut buf).await.unwrap(); stream.read_exact(&mut buf).await.unwrap();
stream.write_all(&backend_reply).await.unwrap(); stream.write_all(&backend_reply).await.unwrap();
} }
@@ -94,6 +99,7 @@ async fn run_generic_once(class: ProbeClass) -> u128 {
cfg.censorship.mask_host = Some("127.0.0.1".to_string()); cfg.censorship.mask_host = Some("127.0.0.1".to_string());
cfg.censorship.mask_port = backend_addr.port(); cfg.censorship.mask_port = backend_addr.port();
cfg.censorship.mask_proxy_protocol = 0; cfg.censorship.mask_proxy_protocol = 0;
cfg.censorship.mask_shape_hardening = false;
if matches!(class, ProbeClass::PlainWebBaseline) { if matches!(class, ProbeClass::PlainWebBaseline) {
cfg.general.modes.classic = false; cfg.general.modes.classic = false;
@@ -130,11 +136,6 @@ async fn run_generic_once(class: ProbeClass) -> u128 {
false, false,
)); ));
let probe = match class {
ProbeClass::MalformedTlsTruncation => malformed_tls_probe(),
ProbeClass::PlainWebBaseline => plain_web_probe(),
};
let started = Instant::now(); let started = Instant::now();
client_side.write_all(&probe).await.unwrap(); client_side.write_all(&probe).await.unwrap();
client_side.shutdown().await.unwrap(); client_side.shutdown().await.unwrap();
@@ -170,11 +171,16 @@ async fn run_client_handler_once(class: ProbeClass) -> u128 {
let front_addr = front_listener.local_addr().unwrap(); let front_addr = front_listener.local_addr().unwrap();
let backend_reply = REPLY_404.to_vec(); let backend_reply = REPLY_404.to_vec();
let probe = match class {
ProbeClass::MalformedTlsTruncation => malformed_tls_probe(),
ProbeClass::PlainWebBaseline => plain_web_probe(),
};
let mask_accept_task = tokio::spawn({ let mask_accept_task = tokio::spawn({
let backend_reply = backend_reply.clone(); let backend_reply = backend_reply.clone();
let expected_probe_len = probe.len();
async move { async move {
let (mut stream, _) = mask_listener.accept().await.unwrap(); let (mut stream, _) = mask_listener.accept().await.unwrap();
let mut buf = [0u8; 5]; let mut buf = vec![0u8; expected_probe_len];
stream.read_exact(&mut buf).await.unwrap(); stream.read_exact(&mut buf).await.unwrap();
stream.write_all(&backend_reply).await.unwrap(); stream.write_all(&backend_reply).await.unwrap();
} }
@@ -188,6 +194,7 @@ async fn run_client_handler_once(class: ProbeClass) -> u128 {
cfg.censorship.mask_host = Some("127.0.0.1".to_string()); cfg.censorship.mask_host = Some("127.0.0.1".to_string());
cfg.censorship.mask_port = backend_addr.port(); cfg.censorship.mask_port = backend_addr.port();
cfg.censorship.mask_proxy_protocol = 0; cfg.censorship.mask_proxy_protocol = 0;
cfg.censorship.mask_shape_hardening = false;
if matches!(class, ProbeClass::PlainWebBaseline) { if matches!(class, ProbeClass::PlainWebBaseline) {
cfg.general.modes.classic = false; cfg.general.modes.classic = false;
@@ -240,11 +247,6 @@ async fn run_client_handler_once(class: ProbeClass) -> u128 {
}) })
}; };
let probe = match class {
ProbeClass::MalformedTlsTruncation => malformed_tls_probe(),
ProbeClass::PlainWebBaseline => plain_web_probe(),
};
let mut client = TcpStream::connect(front_addr).await.unwrap(); let mut client = TcpStream::connect(front_addr).await.unwrap();
let started = Instant::now(); let started = Instant::now();
client.write_all(&probe).await.unwrap(); client.write_all(&probe).await.unwrap();