aboutsummaryrefslogtreecommitdiffstats
path: root/src/receive.go
diff options
context:
space:
mode:
authorMathias Hall-Andersen <mathias@hall-andersen.dk>2018-01-26 22:52:32 +0100
committerMathias Hall-Andersen <mathias@hall-andersen.dk>2018-01-26 22:52:32 +0100
commitf73d2fb2d96bc3fbc8bc4cce452e3c19689de01e (patch)
tree52e392cf6313e7e9e5e87539fcb5e88817e47f37 /src/receive.go
parentFixed potential DoS issue (diff)
downloadwireguard-go-f73d2fb2d96bc3fbc8bc4cce452e3c19689de01e.tar.xz
wireguard-go-f73d2fb2d96bc3fbc8bc4cce452e3c19689de01e.zip
Added initial version of peer teardown
There is a double lock issue with device.Close which has yet to be resolved.
Diffstat (limited to '')
-rw-r--r--src/receive.go21
1 files changed, 15 insertions, 6 deletions
diff --git a/src/receive.go b/src/receive.go
index 0b87a3c..5ad7c4b 100644
--- a/src/receive.go
+++ b/src/receive.go
@@ -123,7 +123,7 @@ func (device *Device) RoutineReceiveIncoming(IP int, bind Bind) {
case ipv6.Version:
size, endpoint, err = bind.ReceiveIPv6(buffer[:])
default:
- return
+ panic("invalid IP version")
}
if err != nil {
@@ -184,9 +184,11 @@ func (device *Device) RoutineReceiveIncoming(IP int, bind Bind) {
// add to decryption queues
- device.addToDecryptionQueue(device.queue.decryption, elem)
- device.addToInboundQueue(peer.queue.inbound, elem)
- buffer = device.GetMessageBuffer()
+ if peer.isRunning.Get() {
+ device.addToDecryptionQueue(device.queue.decryption, elem)
+ device.addToInboundQueue(peer.queue.inbound, elem)
+ buffer = device.GetMessageBuffer()
+ }
continue
@@ -308,13 +310,20 @@ func (device *Device) RoutineHandshake() {
return
}
- // lookup peer and consume response
+ // lookup peer from index
entry := device.indices.Lookup(reply.Receiver)
+
if entry.peer == nil {
continue
}
- entry.peer.mac.ConsumeReply(&reply)
+
+ // consume reply
+
+ if peer := entry.peer; peer.isRunning.Get() {
+ peer.mac.ConsumeReply(&reply)
+ }
+
continue
case MessageInitiationType, MessageResponseType: