wireguard-go-awg2-lx/device
Alex Valiushko 15b912c1c0
device: fix TOCTOU race during session state update (#77)
API introduced in a927a66e has two cases of state determination
happening out of critical section for the state value:

(1) expiredSession loads sessionExpiresNano, then releases all locks
and calls noteSessionState(Expired). So a concurrent refresh that
lands in that gap gets clobbered by a stale Expired -- and sticks
until the next re-key.

(2) Likewise in noteSessionHandshakeStopped, hasKeyMaterial check
happens out of the session state lock and races with ZeroAndFlushAll.

Both lead to a wrong state emitted via the device.sessionState.fn,
but are otherwise benign.

This moves the expiry timestamp under a lock to address the former,
and provides a noteSessionStateLocked helper for the latter.
Also changes API semantics to serialize events per-peer, to avoid
sharing a single lock for all timestamps.

Updates tailscale/corp#42874

Signed-off-by: Alex Valiushko <alexvaliushko@tailscale.com>
Change-Id: Iee2cdf135375519e58a8e84362349d966a6a6964
2026-08-04 19:18:01 +08:00
..
allowedips.go device: refactor container locking for lock-order clarity 2026-08-04 19:18:01 +08:00
channels.go device: convert runtime.SetFinalizer to AddCleanup (#71) 2026-08-04 19:18:01 +08:00
constants.go Apply Tailscale bind send headroom 2026-05-17 20:36:35 +08:00
cookie.go global: bump copyright notice 2025-05-05 15:05:35 +02:00
device.go device: fix TOCTOU race during session state update (#77) 2026-08-04 19:18:01 +08:00
devicestate_string.go device: remove deviceStateNew 2021-02-09 15:39:19 +01:00
indextable.go global: bump copyright notice 2025-05-05 15:05:35 +02:00
ip.go global: bump copyright notice 2025-05-05 15:05:35 +02:00
keypair.go Rename module 2026-05-17 20:09:28 +08:00
logger.go global: bump copyright notice 2025-05-05 15:05:35 +02:00
mobilequirks.go global: bump copyright notice 2025-05-05 15:05:35 +02:00
noise-helpers.go global: bump copyright notice 2025-05-05 15:05:35 +02:00
noise-protocol.go device: fix some lock ordering violations, add a test for a deadlock we hit 2026-08-04 19:18:01 +08:00
noise-types.go global: bump copyright notice 2025-05-05 15:05:35 +02:00
peer.go device: fix TOCTOU race during session state update (#77) 2026-08-04 19:18:01 +08:00
pools.go device: refactor container locking for lock-order clarity 2026-08-04 19:18:01 +08:00
queueconstants_android.go Rename module 2026-05-17 20:09:28 +08:00
queueconstants_default.go Rename module 2026-05-17 20:09:28 +08:00
queueconstants_ios.go global: bump copyright notice 2025-05-05 15:05:35 +02:00
queueconstants_windows.go global: bump copyright notice 2025-05-05 15:05:35 +02:00
receive.go device: refactor container locking for lock-order clarity 2026-08-04 19:18:01 +08:00
send.go device: refactor container locking for lock-order clarity 2026-08-04 19:18:01 +08:00
sticky_default.go Rename module 2026-05-17 20:09:28 +08:00
sticky_linux.go Rename module 2026-05-17 20:09:28 +08:00
timers.go device: fix TOCTOU race during session state update (#77) 2026-08-04 19:18:01 +08:00
tun.go Rename module 2026-05-17 20:09:28 +08:00
uapi.go Rename module 2026-05-17 20:09:28 +08:00