]> git.ipfire.org Git - thirdparty/wireguard-go.git/commit
device: make RoutineReadFromTUN keep encryption queue alive
authorJosh Bleecher Snyder <josh@tailscale.com>
Tue, 9 Feb 2021 17:53:00 +0000 (09:53 -0800)
committerJosh Bleecher Snyder <josh@tailscale.com>
Tue, 9 Feb 2021 17:53:00 +0000 (09:53 -0800)
commit4eab21a7b7192dc806a3d60c46827866fc8942fe
treefba61d85d5c4b8d16e050af626ff180b3193eb0b
parent30b96ba083e4ef61051f125770b50bd278712539
device: make RoutineReadFromTUN keep encryption queue alive

RoutineReadFromTUN can trigger a call to SendStagedPackets.
SendStagedPackets attempts to protect against sending
on the encryption queue by checking peer.isRunning and device.isClosed.
However, those are subject to TOCTOU bugs.

If that happens, we get this:

goroutine 1254 [running]:
golang.zx2c4.com/wireguard/device.(*Peer).SendStagedPackets(0xc000798300)
        .../wireguard-go/device/send.go:321 +0x125
golang.zx2c4.com/wireguard/device.(*Device).RoutineReadFromTUN(0xc000014780)
        .../wireguard-go/device/send.go:271 +0x21c
created by golang.zx2c4.com/wireguard/device.NewDevice
        .../wireguard-go/device/device.go:315 +0x298

Fix this with a simple, big hammer: Keep the encryption queue
alive as long as it might be written to.

Signed-off-by: Josh Bleecher Snyder <josh@tailscale.com>
device/device.go
device/send.go