]> git.ipfire.org Git - thirdparty/wireguard-go.git/commitdiff
device: lock elem in autodraining queue before freeing
authorJason A. Donenfeld <Jason@zx2c4.com>
Tue, 9 Feb 2021 14:00:59 +0000 (15:00 +0100)
committerJason A. Donenfeld <Jason@zx2c4.com>
Tue, 9 Feb 2021 14:37:04 +0000 (15:37 +0100)
Without this, we wind up freeing packets that the encryption/decryption
queues still have, resulting in a UaF.

Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>
device/channels.go

index 8cd6aee3168b7822d37c34cd0a7df8b8c6ff1662..4bd60909792f2254d9e4e26ad95410e72715cba6 100644 (file)
@@ -89,6 +89,7 @@ func newAutodrainingInboundQueue(device *Device) chan *QueueInboundElement {
                                if elem == nil {
                                        continue
                                }
+                               elem.Lock()
                                device.PutMessageBuffer(elem.buffer)
                                device.PutInboundElement(elem)
                        default:
@@ -118,6 +119,7 @@ func newAutodrainingOutboundQueue(device *Device) chan *QueueOutboundElement {
                                if elem == nil {
                                        continue
                                }
+                               elem.Lock()
                                device.PutMessageBuffer(elem.buffer)
                                device.PutOutboundElement(elem)
                        default: