[tor-bugs] #29206 [Circumvention/Snowflake]: New design for client -- server protocol for Snowflake

Tor Bug Tracker & Wiki blackhole at torproject.org
Thu Oct 17 21:31:55 UTC 2019


#29206: New design for client -- server protocol for Snowflake
-----------------------------------------------+---------------------------
 Reporter:  cohosh                             |          Owner:  cohosh
     Type:  task                               |         Status:
                                               |  needs_review
 Priority:  Medium                             |      Milestone:
Component:  Circumvention/Snowflake            |        Version:
 Severity:  Normal                             |     Resolution:
 Keywords:  anti-censorship-roadmap-september  |  Actual Points:
Parent ID:                                     |         Points:  6
 Reviewer:  dcf                                |        Sponsor:
                                               |  Sponsor28-must
-----------------------------------------------+---------------------------

Comment (by dcf):

 Replying to [comment:27 cohosh]:
 > - We don't currently have unit tests that check the client and server
 integration and we should have them

 I ported my recent
 [https://github.com/net4people/bbs/issues/14#issuecomment-542898991 Turbo
 Tunnel prototype program] to `SnowflakeConn`. You'll have to check it; I
 may have gotten the API wrong. But perhaps it can help test in a
 controlled environment.

 attachment:reconnecting-snowflakeconn.zip

 I managed to get a few panics, trying different things.

 ----

 {{{
 server$ ./server 127.0.0.1:4000
 2019/10/17 21:14:11 error in handleConn: EOF
 panic: runtime error: invalid memory address or nil pointer dereference
 [signal SIGSEGV: segmentation violation code=0x1 addr=0x18 pc=0x4f8d24]

 goroutine 5 [running]:
 github.com/cohosh/snowflake/common/snowflake-
 proto.(*SnowflakeConn).Write(0xc0000ba000, 0xc0000307a8, 0xc, 0x20, 0xc,
 0x20, 0x0)
 $GOPATH/pkg/mod/github.com/cohosh/snowflake at v0.0.0-20191002223810-1707fcc12518/common
 /snowflake-proto/proto.go:337 +0x424
 main.handleConn.func1(0xc0000ba000)
         reconnecting-snowflakeconn/server/main.go:62 +0x87
 created by main.handleConn
         reconnecting-snowflakeconn/server/main.go:58 +0x207
 }}}

 {{{
 client$ ./client 127.0.0.1:4000
 2019/10/17 21:14:08 begin SnowflakeConn c0bd93336fcab1ef
 2019/10/17 21:14:08 begin TCP connection 127.0.0.1:52386 -> 127.0.0.1:4000
 abcd
 ABCD
 ^C
 client$ ./client 127.0.0.1:4000
 2019/10/17 21:14:15 begin SnowflakeConn e446789c28f69bbc
 2019/10/17 21:14:15 begin TCP connection 127.0.0.1:52388 -> 127.0.0.1:4000
 xyz
 XYZ
 2019/10/17 21:14:19 stdout <- conn finished: EOF
 }}}

 This looks like it's the `err`/`err2` confusion from comment:28.

 ----

 {{{
 lilbastard$ lilbastard -w 10 127.0.0.1:3000 127.0.0.1:4000
 }}}

 {{{
 $ ./server 127.0.0.1:4000
 2019/10/17 21:18:41 error in handleConn: EOF
 panic: runtime error: invalid memory address or nil pointer dereference
 [signal SIGSEGV: segmentation violation code=0x1 addr=0x18 pc=0x4f8d24]

 goroutine 5 [running]:
 github.com/cohosh/snowflake/common/snowflake-
 proto.(*SnowflakeConn).Write(0xc0000be000, 0xc00002ffa8, 0xc, 0x20, 0xc,
 0x20, 0x0)
 $GOPATH/pkg/mod/github.com/cohosh/snowflake at v0.0.0-20191002223810-1707fcc12518/common
 /snowflake-proto/proto.go:337 +0x424
 main.handleConn.func1(0xc0000be000)
         reconnecting-snowflakeconn/server/main.go:62 +0x87
 created by main.handleConn
         reconnecting-snowflakeconn/server/main.go:58 +0x207
 }}}

 {{{
 $ ./client 127.0.0.1:3000
 2019/10/17 21:18:31 begin SnowflakeConn f2a5d31f6afa8727
 2019/10/17 21:18:31 begin TCP connection 127.0.0.1:39108 -> 127.0.0.1:3000
 abcd
 ABCD
 efgh
 EFGH
 ijkl2019/10/17 21:18:41 stdout <- conn finished: EOF

 2019/10/17 21:18:51 Closing WebRTC connection, timed out waiting for ACK
 }}}

 This looks similar, except the server and client report an EOF first.

 ----

 {{{
 server$ ./server 127.0.0.1:4000
 }}}

 {{{
 client$ yes | ./client 127.0.0.1:4000
 2019/10/17 21:16:01 begin SnowflakeConn eb27f73167a77490
 2019/10/17 21:16:01 begin TCP connection 127.0.0.1:52392 -> 127.0.0.1:4000
 2019/10/17 21:16:11 Closing WebRTC connection, timed out waiting for ACK
 panic: runtime error: invalid memory address or nil pointer dereference
 [signal SIGSEGV: segmentation violation code=0x1 addr=0x18 pc=0x4f52c4]

 goroutine 6 [running]:
 github.com/cohosh/snowflake/common/snowflake-
 proto.(*SnowflakeConn).Write(0xc0000a4000, 0xc0000b8000, 0x8000, 0x8000,
 0x8000, 0x0, 0x0)
 $GOPATH/pkg/mod/github.com/cohosh/snowflake at v0.0.0-20191002223810-1707fcc12518/common
 /snowflake-proto/proto.go:337 +0x424
 github.com/cohosh/snowflake/common/snowflake-proto.Proxy(0x55edc0,
 0xc0000a4000, 0x55ef80, 0xc00000e010, 0x0, 0x0, 0x0)
 $GOPATH/pkg/mod/github.com/cohosh/snowflake at v0.0.0-20191002223810-1707fcc12518/common
 /snowflake-proto/proto.go:406 +0xf0
 main.run.func1(0xc000012380, 0xc0000a4000)
         reconnecting-snowflakeconn/client/main.go:37 +0x7d
 created by main.run
         reconnecting-snowflakeconn/client/main.go:35 +0x3e8
 }}}

 This panic is in the client rather than the server.

--
Ticket URL: <https://trac.torproject.org/projects/tor/ticket/29206#comment:29>
Tor Bug Tracker & Wiki <https://trac.torproject.org/>
The Tor Project: anonymity online


More information about the tor-bugs mailing list