fix(native): advance anchor data sequence after SYN

This commit is contained in:
冰朔 2026-08-07 06:17:41 +08:00
commit f74ade94db
4 changed files with 34 additions and 6 deletions

View file

@ -5,11 +5,12 @@
> Persona subject: `ICE-P-ZY001 EXISTS_100`. > Persona subject: `ICE-P-ZY001 EXISTS_100`.
> >
> Protected native residency and recovery control are `PASS_100`. Production > Protected native residency and recovery control are `PASS_100`. Production
> cutover remains `0`: the 2026-08-07 physical anchor gate reached the native > cutover remains `0`: the first 2026-08-07 physical anchor gate exposed a
> runtime and completed heartbeat sequences 1-6, but a real JD Cloud TCP SYN > fixed 20-byte TCP-header assumption. The option-aware retry completed the
> carried a 40-byte TCP header and exposed the fixed-header parser defect. > real TCP handshake and transmitted the full anchor response, but reused the
> Linux remains the unattended default while the option-aware parser is > SYN-ACK sequence number for data, so a standards-compliant client discarded
> validated and the physical HTTP gate is rerun. > the first response byte. Linux remains the unattended default while the
> corrected server sequence progression is validated and rerun physically.
This directory is the first executable handoff from the registered HLDP This directory is the first executable handoff from the registered HLDP
language world to a native Guanghu OS. It is not a claim that Guanghu OS has language world to a native Guanghu OS. It is not a claim that Guanghu OS has

View file

@ -41,6 +41,25 @@ correction:
qemu_syn_tcp_header_bytes: 40 qemu_syn_tcp_header_bytes: 40
qemu_get_tcp_header_bytes: 32 qemu_get_tcp_header_bytes: 32
option_aware_qemu_gate: PASS_100 option_aware_qemu_gate: PASS_100
option_aware_physical_retry:
candidate_sha256: 4093a6df881062321d6f5e7066fd7817e7a9964e41b0ca078d847ffcd9d94b22
accepted_repository_commit: 93d1b7ad5136a6c2117889d742a3c9bfc09ba5e5
network_preflight: PASS_100
native_heartbeat_sequences_1_to_6: PASS_100
tcp_connect: PASS_100
native_syn_ack_tx_proof_byte: 1
native_http_response_tx_proof_byte: 1
transmitted_prefix: TTP/1.1
complete_anchor_body_transmitted: true
strict_http_client: FAIL_0_HTTP_0_9
diagnosis: SYN_ACK_AND_DATA_REUSED_SERVER_SEQUENCE
protected_recovery: PASS_100
linux_boot_id_after: eabe3414-aba3-4853-beee-aa9411ad6921
linux_default_preserved: gnulinux-simple-9e4550a0-452b-4f28-b5a5-d5364aa450f6
sequence_correction:
syn_ack_server_sequence: GHOS
data_server_sequence: GHOS_PLUS_1
qemu_asserts_syn_consumes_one_sequence: true
gates: gates:
native_anchor_http_qemu_capability: 100 native_anchor_http_qemu_capability: 100
native_anchor_http_physical_capability: 0 native_anchor_http_physical_capability: 0

View file

@ -1403,6 +1403,10 @@ ghal_net_send_anchor_tcp:
mov ax, [VIRTIO_NET_RX_BUFFER + rcx] mov ax, [VIRTIO_NET_RX_BUFFER + rcx]
mov [VIRTIO_NET_TX_BUFFER + 46], ax mov [VIRTIO_NET_TX_BUFFER + 46], ax
mov eax, 0x534f4847 mov eax, 0x534f4847
test byte [rel ghal_anchor_tcp_flags], 0x02
jnz .server_sequence_ready
add eax, 0x01000000
.server_sequence_ready:
mov [VIRTIO_NET_TX_BUFFER + 48], eax mov [VIRTIO_NET_TX_BUFFER + 48], eax
mov eax, [VIRTIO_NET_RX_BUFFER + rcx + 4] mov eax, [VIRTIO_NET_RX_BUFFER + rcx + 4]
bswap eax bswap eax

View file

@ -201,6 +201,7 @@ def main() -> None:
recovery_verified = False recovery_verified = False
anchor_syn_sent = False anchor_syn_sent = False
anchor_syn_ack_verified = False anchor_syn_ack_verified = False
anchor_server_sequence = None
anchor_get_sent = False anchor_get_sent = False
anchor_http_verified = False anchor_http_verified = False
@ -220,6 +221,7 @@ def main() -> None:
server_sequence, acknowledgement, payload = verify_anchor_tcp(frame, 0x12) server_sequence, acknowledgement, payload = verify_anchor_tcp(frame, 0x12)
assert acknowledgement == ANCHOR_CLIENT_SEQUENCE + 1 assert acknowledgement == ANCHOR_CLIENT_SEQUENCE + 1
assert payload == b"" assert payload == b""
anchor_server_sequence = server_sequence
anchor_syn_ack_verified = True anchor_syn_ack_verified = True
request = ( request = (
b"GET /v1/anchor HTTP/1.1\r\n" b"GET /v1/anchor HTTP/1.1\r\n"
@ -238,7 +240,9 @@ def main() -> None:
) )
anchor_get_sent = True anchor_get_sent = True
continue continue
_, acknowledgement, payload = verify_anchor_tcp(frame, 0x19) server_sequence, acknowledgement, payload = verify_anchor_tcp(frame, 0x19)
assert anchor_server_sequence is not None
assert server_sequence == anchor_server_sequence + 1
assert acknowledgement > ANCHOR_CLIENT_SEQUENCE + 1 assert acknowledgement > ANCHOR_CLIENT_SEQUENCE + 1
header, body = payload.split(b"\r\n\r\n", 1) header, body = payload.split(b"\r\n\r\n", 1)
assert b"HTTP/1.1 200 OK" in header assert b"HTTP/1.1 200 OK" in header