From b5bc0d394376e77782565d57a0689f541f888d40 Mon Sep 17 00:00:00 2001
From: Wolfgang Welz <welzwo@gmail.com>
Date: Wed, 22 Jan 2020 10:57:11 +0100
Subject: [PATCH] Do not allow loopback connections

---
 packages/gossip/errors.go  | 1 +
 packages/gossip/manager.go | 6 ++++++
 2 files changed, 7 insertions(+)

diff --git a/packages/gossip/errors.go b/packages/gossip/errors.go
index 85e43340..554e3861 100644
--- a/packages/gossip/errors.go
+++ b/packages/gossip/errors.go
@@ -6,6 +6,7 @@ var (
 	ErrNotStarted        = errors.New("manager not started")
 	ErrClosed            = errors.New("manager closed")
 	ErrNotANeighbor      = errors.New("peer is not a neighbor")
+	ErrLoopback          = errors.New("loopback connection not allowed")
 	ErrDuplicateNeighbor = errors.New("peer already connected")
 	ErrInvalidPacket     = errors.New("invalid packet")
 )
diff --git a/packages/gossip/manager.go b/packages/gossip/manager.go
index 03bcb475..683cd24c 100644
--- a/packages/gossip/manager.go
+++ b/packages/gossip/manager.go
@@ -78,6 +78,9 @@ func (m *Manager) LocalAddr() net.Addr {
 
 // AddOutbound tries to add a neighbor by connecting to that peer.
 func (m *Manager) AddOutbound(p *peer.Peer) error {
+	if p.ID() == m.local.ID() {
+		return ErrLoopback
+	}
 	var srv *server.TCP
 	m.mu.RLock()
 	if m.srv == nil {
@@ -91,6 +94,9 @@ func (m *Manager) AddOutbound(p *peer.Peer) error {
 
 // AddInbound tries to add a neighbor by accepting an incoming connection from that peer.
 func (m *Manager) AddInbound(p *peer.Peer) error {
+	if p.ID() == m.local.ID() {
+		return ErrLoopback
+	}
 	var srv *server.TCP
 	m.mu.RLock()
 	if m.srv == nil {
-- 
GitLab