]> git.ipfire.org Git - thirdparty/wireguard-go.git/commitdiff
uapi: skip peers with invalid keys
authorJason A. Donenfeld <Jason@zx2c4.com>
Mon, 5 Aug 2019 14:57:41 +0000 (16:57 +0200)
committerJason A. Donenfeld <Jason@zx2c4.com>
Mon, 5 Aug 2019 14:57:41 +0000 (16:57 +0200)
device/peer.go
device/uapi.go

index 256e4f55b7e7a63451d0a5b8ac7f6f13a4600e0d..91d975aa34832fafabef66c6cc91df3e97b7bccf 100644 (file)
@@ -68,7 +68,6 @@ type Peer struct {
 }
 
 func (device *Device) NewPeer(pk NoisePublicKey) (*Peer, error) {
-
        if device.isClosed.Get() {
                return nil, errors.New("device closed")
        }
@@ -103,20 +102,28 @@ func (device *Device) NewPeer(pk NoisePublicKey) (*Peer, error) {
        if ok {
                return nil, errors.New("adding existing peer")
        }
-       device.peers.keyMap[pk] = peer
 
        // pre-compute DH
 
        handshake := &peer.handshake
        handshake.mutex.Lock()
-       handshake.remoteStatic = pk
        handshake.precomputedStaticStatic = device.staticIdentity.privateKey.sharedSecret(pk)
+       ssIsZero := isZero(handshake.precomputedStaticStatic[:])
+       handshake.remoteStatic = pk
        handshake.mutex.Unlock()
 
        // reset endpoint
 
        peer.endpoint = nil
 
+       // conditionally add
+
+       if !ssIsZero {
+               device.peers.keyMap[pk] = peer
+       } else {
+               return nil, nil
+       }
+
        // start peer
 
        if peer.device.isUp.Get() {
index 99cb4214545dc52b3915d81c8141b9d00223c76e..efa757be4396551efedbf311ed440d848df5e0b7 100644 (file)
@@ -243,7 +243,12 @@ func (device *Device) IpcSetOperation(socket *bufio.Reader) *IPCError {
                                                logError.Println("Failed to create new peer:", err)
                                                return &IPCError{ipc.IpcErrorInvalid}
                                        }
-                                       logDebug.Println(peer, "- UAPI: Created")
+                                       if peer == nil {
+                                               dummy = true
+                                               peer = &Peer{}
+                                       } else {
+                                               logDebug.Println(peer, "- UAPI: Created")
+                                       }
                                }
 
                        case "remove":