commit a2caf0477a51840f266f7f026bf3fdf6da81f8b2
Author: David Fifield <[email protected]>
Date:   Thu Dec 12 22:29:20 2013 -0800

    Put a timeout on waiting for SOCKS requests.
    
    This is just to stymie attacks or bugs that have a client keeping a TCP
    connectino open forever.
---
 socks.go |   12 ++++++++++++
 1 file changed, 12 insertions(+)

diff --git a/socks.go b/socks.go
index bd57f40..7a2b1c8 100644
--- a/socks.go
+++ b/socks.go
@@ -6,6 +6,7 @@ import (
        "fmt"
        "io"
        "net"
+       "time"
 )
 
 const (
@@ -16,6 +17,9 @@ const (
        socksRequestRejected = 0x5b
 )
 
+// Put a sanity timeout on how long we wait for a SOCKS request.
+const socksRequestTimeout = 5 * time.Second
+
 // SocksRequest describes a SOCKS request.
 type SocksRequest struct {
        // The endpoint requested by the client as a "host:port" string.
@@ -108,11 +112,19 @@ func (ln *SocksListener) AcceptSocks() (*SocksConn, 
error) {
        }
        conn := new(SocksConn)
        conn.Conn = c
+       err = conn.SetDeadline(time.Now().Add(socksRequestTimeout))
+       if err != nil {
+               return nil, err
+       }
        conn.Req, err = readSocks4aConnect(conn)
        if err != nil {
                conn.Close()
                return nil, err
        }
+       err = conn.SetDeadline(time.Time{})
+       if err != nil {
+               return nil, err
+       }
        return conn, nil
 }
 

_______________________________________________
tor-commits mailing list
[email protected]
https://lists.torproject.org/cgi-bin/mailman/listinfo/tor-commits

Reply via email to