toxyl / ossh

... is a dirty mix of honey and tar, delivered by a fake SSH server.
Other
2 stars 1 forks source link

fatal error: concurrent map writes #14

Closed toxyl closed 2 years ago

toxyl commented 2 years ago
fatal error: concurrent map writes
goroutine 832520 [running]:
runtime.throw({0x7bc07c?, 0xc004bd5890?})
        /home/tox/sdk/go1.18/src/runtime/panic.go:992 +0x71 fp=0xc0059bf7d0 sp=0xc0059bf7a0 pc=0x4339d1
runtime.mapassign_faststr(0x7634a0, 0xc0001ac690, {0xc004bd5890, 0xe})
        /home/tox/sdk/go1.18/src/runtime/map_faststr.go:295 +0x38b fp=0xc0059bf838 sp=0xc0059bf7d0 pc=0x412e2b
main.(*OSSHServer).authHandler(0xc0001a9b90, {0x84fb60, 0xc0028c04e0}, {0xc000f60908, 0x6})
        /home/tox/go/src/github.com/toxyl/ossh/server.go:467 +0x5c9 fp=0xc0059bf918 sp=0xc0059bf838 pc=0x724fa9
main.(*OSSHServer).authHandler-fm({0x84fb60?, 0xc0028c04e0?}, {0xc000f60908?, 0xc003158080?})
        <autogenerated>:1 +0x45 fp=0xc0059bf950 sp=0xc0059bf918 pc=0x727ea5
github.com/gliderlabs/ssh.(*Server).config.func1({0x84eb60?, 0xc003158080?}, {0xc000aef46c, 0x6, 0xc005917720?})
        /root/go/pkg/mod/github.com/gliderlabs/ssh@v0.3.3/server.go:138 +0x8d fp=0xc0059bf9a8 sp=0xc0059bf950 pc=0x70e60d
golang.org/x/crypto/ssh.(*connection).serverAuthenticate(0xc003158080, 0xc006781380)
        /root/go/pkg/mod/golang.org/x/crypto@v0.0.0-20220411220226-7b82a4e95df4/ssh/server.go:480 +0x51f fp=0xc0059bfd68 sp=0xc0059bf9a8 pc=0x6fe71f
golang.org/x/crypto/ssh.(*connection).serverHandshake(0xc003158080, 0xc006781380)
        /root/go/pkg/mod/golang.org/x/crypto@v0.0.0-20220411220226-7b82a4e95df4/ssh/server.go:278 +0x51e fp=0xc0059bfe38 sp=0xc0059bfd68 pc=0x6fd1fe
golang.org/x/crypto/ssh.NewServerConn({0x84f658, 0xc003377880}, 0xc0067808f0)
        /root/go/pkg/mod/golang.org/x/crypto@v0.0.0-20220411220226-7b82a4e95df4/ssh/server.go:206 +0x134 fp=0xc0059bfed0 sp=0xc0059bfe38 pc=0x6fc9b4
github.com/gliderlabs/ssh.(*Server).HandleConn(0xc0000d8120, {0x84f708, 0xc004a2c920})
        /root/go/pkg/mod/github.com/gliderlabs/ssh@v0.3.3/server.go:281 +0x1ed fp=0xc0059bffb8 sp=0xc0059bfed0 pc=0x70f3ed
github.com/gliderlabs/ssh.(*Server).Serve.func3()
        /root/go/pkg/mod/github.com/gliderlabs/ssh@v0.3.3/server.go:258 +0x2e fp=0xc0059bffe0 sp=0xc0059bffb8 pc=0x70f10e
runtime.goexit()
        /home/tox/sdk/go1.18/src/runtime/asm_amd64.s:1571 +0x1 fp=0xc0059bffe8 sp=0xc0059bffe0 pc=0x4628a1
created by github.com/gliderlabs/ssh.(*Server).Serve
        /root/go/pkg/mod/github.com/gliderlabs/ssh@v0.3.3/server.go:258 +0x245
goroutine 1 [IO wait]:
internal/poll.runtime_pollWait(0x7fd52f25f8e8, 0x72)
        /home/tox/sdk/go1.18/src/runtime/netpoll.go:302 +0x89
internal/poll.(*pollDesc).wait(0xc000012100?, 0xc000022a00?, 0x0)
        /home/tox/sdk/go1.18/src/internal/poll/fd_poll_runtime.go:83 +0x32
internal/poll.(*pollDesc).waitRead(...)
        /home/tox/sdk/go1.18/src/internal/poll/fd_poll_runtime.go:88
internal/poll.(*FD).Accept(0xc000012100)
        /home/tox/sdk/go1.18/src/internal/poll/fd_unix.go:614 +0x22c
net.(*netFD).accept(0xc000012100)
        /home/tox/sdk/go1.18/src/net/fd_unix.go:172 +0x35
net.(*TCPListener).accept(0xc00000c090)
        /home/tox/sdk/go1.18/src/net/tcpsock_posix.go:139 +0x28
net.(*TCPListener).Accept(0xc00000c090)
        /home/tox/sdk/go1.18/src/net/tcpsock.go:288 +0x3d
github.com/gliderlabs/ssh.(*Server).Serve(0xc0000d8120, {0x84e1e8?, 0xc00000c090})
        /root/go/pkg/mod/github.com/gliderlabs/ssh@v0.3.3/server.go:237 +0x1bd
github.com/gliderlabs/ssh.(*Server).ListenAndServe(0xc0000d8120)
        /root/go/pkg/mod/github.com/gliderlabs/ssh@v0.3.3/server.go:338 +0x6a
main.(*OSSHServer).Start(0xc0001a9b90)
        /home/tox/go/src/github.com/toxyl/ossh/server.go:521 +0xea
main.main()
        /home/tox/go/src/github.com/toxyl/ossh/main.go:8 +0x45
goroutine 38 [sleep, 1 minutes]:
time.Sleep(0xdf8475800)
        /home/tox/sdk/go1.18/src/runtime/time.go:194 +0x12e
main.NewOSSHServer.func1()
        /home/tox/go/src/github.com/toxyl/ossh/server.go:561 +0x45
created by main.NewOSSHServer
        /home/tox/go/src/github.com/toxyl/ossh/server.go:559 +0x1e5
goroutine 826446 [chan receive, 34 minutes]:
github.com/gliderlabs/ssh.(*Server).HandleConn(0xc0000d8120, {0x84f708, 0xc0002248a8})
        /root/go/pkg/mod/github.com/gliderlabs/ssh@v0.3.3/server.go:296 +0x3ea
created by github.com/gliderlabs/ssh.(*Server).Serve
        /root/go/pkg/mod/github.com/gliderlabs/ssh@v0.3.3/server.go:258 +0x245
goroutine 823899 [select, 51 minutes]:
golang.org/x/crypto/ssh.(*handshakeTransport).kexLoop(0xc004f2b340)
        /root/go/pkg/mod/golang.org/x/crypto@v0.0.0-20220411220226-7b82a4e95df4/ssh/handshake.go:268 +0x47d
created by golang.org/x/crypto/ssh.newServerTransport
        /root/go/pkg/mod/golang.org/x/crypto@v0.0.0-20220411220226-7b82a4e95df4/ssh/handshake.go:143 +0x136
goroutine 827671 [sync.Cond.Wait, 28 minutes]:
sync.runtime_notifyListWait(0xc0058ced90, 0x0)
        /home/tox/sdk/go1.18/src/runtime/sema.go:513 +0x13d
sync.(*Cond).Wait(0x70f940?)
        /home/tox/sdk/go1.18/src/sync/cond.go:56 +0x8c
golang.org/x/crypto/ssh.(*mux).Wait(0xc0015ddc70)
        /root/go/pkg/mod/golang.org/x/crypto@v0.0.0-20220411220226-7b82a4e95df4/ssh/mux.go:110 +0x99
golang.org/x/crypto/ssh.NewClient.func1()
        /root/go/pkg/mod/golang.org/x/crypto@v0.0.0-20220411220226-7b82a4e95df4/ssh/client.go:62 +0x2a
created by golang.org/x/crypto/ssh.NewClient
        /root/go/pkg/mod/golang.org/x/crypto@v0.0.0-20220411220226-7b82a4e95df4/ssh/client.go:61 +0x176
goroutine 831075 [IO wait, 4 minutes]:
internal/poll.runtime_pollWait(0x7fd52f0e68b0, 0x72)
        /home/tox/sdk/go1.18/src/runtime/netpoll.go:302 +0x89
internal/poll.(*pollDesc).wait(0xc003630880?, 0xc0018f6000?, 0x0)
        /home/tox/sdk/go1.18/src/internal/poll/fd_poll_runtime.go:83 +0x32
internal/poll.(*pollDesc).waitRead(...)
        /home/tox/sdk/go1.18/src/internal/poll/fd_poll_runtime.go:88
internal/poll.(*FD).Read(0xc003630880, {0xc0018f6000, 0x1000, 0x1000})
        /home/tox/sdk/go1.18/src/internal/poll/fd_unix.go:167 +0x25a
net.(*netFD).Read(0xc003630880, {0xc0018f6000?, 0xa58000?, 0xa58000?})
        /home/tox/sdk/go1.18/src/net/fd_posix.go:55 +0x29
net.(*conn).Read(0xc0036221e8, {0xc0018f6000?, 0x5bb489?, 0xc0038e3b00?})
        /home/tox/sdk/go1.18/src/net/net.go:183 +0x45
github.com/gliderlabs/ssh.(*serverConn).Read(0xc003a05980, {0xc0018f6000, 0x1000, 0x1000})
        /root/go/pkg/mod/github.com/gliderlabs/ssh@v0.3.3/conn.go:28 +0x52
bufio.(*Reader).Read(0xc0001919e0, {0xc002d23230, 0x4, 0x40cade?})
        /home/tox/sdk/go1.18/src/bufio/bufio.go:236 +0x1b4
io.ReadAtLeast({0x84c4c0, 0xc0001919e0}, {0xc002d23230, 0x4, 0x4}, 0x4)
        /home/tox/sdk/go1.18/src/io/io.go:331 +0x9a
io.ReadFull(...)
...
dylandreimerink commented 2 years ago

We have to guard the maps in https://github.com/Toxyl/ossh/blob/master/server.go#L25 with a mutex to avoid the issue.

toxyl commented 2 years ago

Yup, I'll do that along with the webinterface, since I might make some changes to the Stats as well.