Commit 1c5400eb authored by felipe's avatar felipe Committed by GitHub

fix(op-node): p2p ipnet struct validation (#10518)

* fix(op-node): p2p ipnet struct validation

* use s.log instead of global log
parent 861fbc06
...@@ -183,8 +183,19 @@ func TestP2PFull(t *testing.T) { ...@@ -183,8 +183,19 @@ func TestP2PFull(t *testing.T) {
require.Error(t, p2pClientA.BlockAddr(ctx, nil)) require.Error(t, p2pClientA.BlockAddr(ctx, nil))
require.Error(t, p2pClientA.UnblockAddr(ctx, nil)) require.Error(t, p2pClientA.UnblockAddr(ctx, nil))
require.Error(t, p2pClientA.BlockSubnet(ctx, nil)) require.Error(t, p2pClientA.BlockSubnet(ctx, nil))
require.Error(t, p2pClientA.BlockSubnet(ctx, &net.IPNet{}))
require.Error(t, p2pClientA.BlockSubnet(ctx, &net.IPNet{Mask: net.IPMask{255, 255, 0, 0}}))
require.Error(t, p2pClientA.BlockSubnet(ctx, &net.IPNet{IP: net.IP{0, 0, 0, 1}}))
require.NoError(t, p2pClientA.BlockSubnet(ctx, &net.IPNet{IP: net.IP{0, 0, 0, 1}, Mask: net.IPMask{255, 255, 0, 0}}))
require.Error(t, p2pClientA.UnblockSubnet(ctx, nil)) require.Error(t, p2pClientA.UnblockSubnet(ctx, nil))
require.Error(t, p2pClientA.UnblockSubnet(ctx, &net.IPNet{}))
require.Error(t, p2pClientA.UnblockSubnet(ctx, &net.IPNet{Mask: net.IPMask{255, 255, 0, 0}}))
require.Error(t, p2pClientA.UnblockSubnet(ctx, &net.IPNet{IP: net.IP{0, 0, 0, 1}}))
require.NoError(t, p2pClientA.UnblockSubnet(ctx, &net.IPNet{IP: net.IP{0, 0, 0, 1}, Mask: net.IPMask{255, 255, 0, 0}}))
require.Error(t, p2pClientA.BlockPeer(ctx, "")) require.Error(t, p2pClientA.BlockPeer(ctx, ""))
require.Error(t, p2pClientA.UnblockPeer(ctx, "")) require.Error(t, p2pClientA.UnblockPeer(ctx, ""))
require.Error(t, p2pClientA.ProtectPeer(ctx, "")) require.Error(t, p2pClientA.ProtectPeer(ctx, ""))
......
...@@ -248,7 +248,7 @@ func (s *APIBackend) DiscoveryTable(_ context.Context) ([]*enode.Node, error) { ...@@ -248,7 +248,7 @@ func (s *APIBackend) DiscoveryTable(_ context.Context) ([]*enode.Node, error) {
func (s *APIBackend) BlockPeer(_ context.Context, id peer.ID) error { func (s *APIBackend) BlockPeer(_ context.Context, id peer.ID) error {
recordDur := s.m.RecordRPCServerRequest("opp2p_blockPeer") recordDur := s.m.RecordRPCServerRequest("opp2p_blockPeer")
if err := id.Validate(); err != nil { if err := id.Validate(); err != nil {
log.Warn("invalid peer ID", "method", "BlockPeer", "peer", id, "err", err) s.log.Warn("invalid peer ID", "method", "BlockPeer", "peer", id, "err", err)
return ErrInvalidRequest return ErrInvalidRequest
} }
defer recordDur() defer recordDur()
...@@ -262,7 +262,7 @@ func (s *APIBackend) BlockPeer(_ context.Context, id peer.ID) error { ...@@ -262,7 +262,7 @@ func (s *APIBackend) BlockPeer(_ context.Context, id peer.ID) error {
func (s *APIBackend) UnblockPeer(_ context.Context, id peer.ID) error { func (s *APIBackend) UnblockPeer(_ context.Context, id peer.ID) error {
recordDur := s.m.RecordRPCServerRequest("opp2p_unblockPeer") recordDur := s.m.RecordRPCServerRequest("opp2p_unblockPeer")
if err := id.Validate(); err != nil { if err := id.Validate(); err != nil {
log.Warn("invalid peer ID", "method", "UnblockPeer", "peer", id, "err", err) s.log.Warn("invalid peer ID", "method", "UnblockPeer", "peer", id, "err", err)
return ErrInvalidRequest return ErrInvalidRequest
} }
defer recordDur() defer recordDur()
...@@ -288,7 +288,7 @@ func (s *APIBackend) ListBlockedPeers(_ context.Context) ([]peer.ID, error) { ...@@ -288,7 +288,7 @@ func (s *APIBackend) ListBlockedPeers(_ context.Context) ([]peer.ID, error) {
func (s *APIBackend) BlockAddr(_ context.Context, ip net.IP) error { func (s *APIBackend) BlockAddr(_ context.Context, ip net.IP) error {
recordDur := s.m.RecordRPCServerRequest("opp2p_blockAddr") recordDur := s.m.RecordRPCServerRequest("opp2p_blockAddr")
if ip == nil { if ip == nil {
log.Warn("invalid IP", "method", "BlockAddr") s.log.Warn("invalid IP", "method", "BlockAddr")
return ErrInvalidRequest return ErrInvalidRequest
} }
defer recordDur() defer recordDur()
...@@ -302,7 +302,7 @@ func (s *APIBackend) BlockAddr(_ context.Context, ip net.IP) error { ...@@ -302,7 +302,7 @@ func (s *APIBackend) BlockAddr(_ context.Context, ip net.IP) error {
func (s *APIBackend) UnblockAddr(_ context.Context, ip net.IP) error { func (s *APIBackend) UnblockAddr(_ context.Context, ip net.IP) error {
recordDur := s.m.RecordRPCServerRequest("opp2p_unblockAddr") recordDur := s.m.RecordRPCServerRequest("opp2p_unblockAddr")
if ip == nil { if ip == nil {
log.Warn("invalid IP", "method", "UnblockAddr") s.log.Warn("invalid IP", "method", "UnblockAddr")
return ErrInvalidRequest return ErrInvalidRequest
} }
defer recordDur() defer recordDur()
...@@ -327,8 +327,8 @@ func (s *APIBackend) ListBlockedAddrs(_ context.Context) ([]net.IP, error) { ...@@ -327,8 +327,8 @@ func (s *APIBackend) ListBlockedAddrs(_ context.Context) ([]net.IP, error) {
// Note: active connections to the IP subnet are not automatically closed. // Note: active connections to the IP subnet are not automatically closed.
func (s *APIBackend) BlockSubnet(_ context.Context, ipnet *net.IPNet) error { func (s *APIBackend) BlockSubnet(_ context.Context, ipnet *net.IPNet) error {
recordDur := s.m.RecordRPCServerRequest("opp2p_blockSubnet") recordDur := s.m.RecordRPCServerRequest("opp2p_blockSubnet")
if ipnet == nil { if ipnet == nil || ipnet.IP == nil || ipnet.Mask == nil {
log.Warn("invalid IPNet", "method", "BlockSubnet") s.log.Warn("invalid IPNet", "method", "BlockSubnet")
return ErrInvalidRequest return ErrInvalidRequest
} }
defer recordDur() defer recordDur()
...@@ -341,8 +341,8 @@ func (s *APIBackend) BlockSubnet(_ context.Context, ipnet *net.IPNet) error { ...@@ -341,8 +341,8 @@ func (s *APIBackend) BlockSubnet(_ context.Context, ipnet *net.IPNet) error {
func (s *APIBackend) UnblockSubnet(_ context.Context, ipnet *net.IPNet) error { func (s *APIBackend) UnblockSubnet(_ context.Context, ipnet *net.IPNet) error {
recordDur := s.m.RecordRPCServerRequest("opp2p_unblockSubnet") recordDur := s.m.RecordRPCServerRequest("opp2p_unblockSubnet")
if ipnet == nil { if ipnet == nil || ipnet.IP == nil || ipnet.Mask == nil {
log.Warn("invalid IPNet", "method", "UnblockSubnet") s.log.Warn("invalid IPNet", "method", "UnblockSubnet")
return ErrInvalidRequest return ErrInvalidRequest
} }
defer recordDur() defer recordDur()
...@@ -366,7 +366,7 @@ func (s *APIBackend) ListBlockedSubnets(_ context.Context) ([]*net.IPNet, error) ...@@ -366,7 +366,7 @@ func (s *APIBackend) ListBlockedSubnets(_ context.Context) ([]*net.IPNet, error)
func (s *APIBackend) ProtectPeer(_ context.Context, id peer.ID) error { func (s *APIBackend) ProtectPeer(_ context.Context, id peer.ID) error {
recordDur := s.m.RecordRPCServerRequest("opp2p_protectPeer") recordDur := s.m.RecordRPCServerRequest("opp2p_protectPeer")
if err := id.Validate(); err != nil { if err := id.Validate(); err != nil {
log.Warn("invalid peer ID", "method", "ProtectPeer", "peer", id, "err", err) s.log.Warn("invalid peer ID", "method", "ProtectPeer", "peer", id, "err", err)
return ErrInvalidRequest return ErrInvalidRequest
} }
defer recordDur() defer recordDur()
...@@ -381,7 +381,7 @@ func (s *APIBackend) ProtectPeer(_ context.Context, id peer.ID) error { ...@@ -381,7 +381,7 @@ func (s *APIBackend) ProtectPeer(_ context.Context, id peer.ID) error {
func (s *APIBackend) UnprotectPeer(_ context.Context, id peer.ID) error { func (s *APIBackend) UnprotectPeer(_ context.Context, id peer.ID) error {
recordDur := s.m.RecordRPCServerRequest("opp2p_unprotectPeer") recordDur := s.m.RecordRPCServerRequest("opp2p_unprotectPeer")
if err := id.Validate(); err != nil { if err := id.Validate(); err != nil {
log.Warn("invalid peer ID", "method", "UnprotectPeer", "peer", id, "err", err) s.log.Warn("invalid peer ID", "method", "UnprotectPeer", "peer", id, "err", err)
return ErrInvalidRequest return ErrInvalidRequest
} }
defer recordDur() defer recordDur()
...@@ -411,7 +411,7 @@ func (s *APIBackend) ConnectPeer(ctx context.Context, addr string) error { ...@@ -411,7 +411,7 @@ func (s *APIBackend) ConnectPeer(ctx context.Context, addr string) error {
func (s *APIBackend) DisconnectPeer(_ context.Context, id peer.ID) error { func (s *APIBackend) DisconnectPeer(_ context.Context, id peer.ID) error {
recordDur := s.m.RecordRPCServerRequest("opp2p_disconnectPeer") recordDur := s.m.RecordRPCServerRequest("opp2p_disconnectPeer")
if err := id.Validate(); err != nil { if err := id.Validate(); err != nil {
log.Warn("invalid peer ID", "method", "DisconnectPeer", "peer", id, "err", err) s.log.Warn("invalid peer ID", "method", "DisconnectPeer", "peer", id, "err", err)
return ErrInvalidRequest return ErrInvalidRequest
} }
defer recordDur() defer recordDur()
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment