Skip to content

Go DLL with net package cause random panic #54644

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Closed
kosmosec opened this issue Aug 24, 2022 · 1 comment
Closed

Go DLL with net package cause random panic #54644

kosmosec opened this issue Aug 24, 2022 · 1 comment

Comments

@kosmosec
Copy link

What version of Go are you using (go version)?

$ go version
go version go1.17 windows/amd64

Does this issue reproduce with the latest release?

Yes

What operating system and processor architecture are you using (go env)?

go env Output
$ go env
set GO111MODULE=
set GOARCH=amd64
set GOBIN=
set GOCACHE=C:\Users\tomek\AppData\Local\go-build
set GOENV=C:\Users\tomek\AppData\Roaming\go\env
set GOEXE=.exe
set GOEXPERIMENT=
set GOFLAGS=
set GOHOSTARCH=amd64
set GOHOSTOS=windows
set GOINSECURE=
set GOMODCACHE=C:\Users\tomek\go\pkg\mod
set GONOPROXY=
set GONOSUMDB=
set GOOS=windows
set GOPATH=C:\Users\tomek\go
set GOPRIVATE=
set GOPROXY=https://proxy.golang.org,direct
set GOROOT=C:\Program Files\Go
set GOSUMDB=sum.golang.org
set GOTMPDIR=
set GOTOOLDIR=C:\Program Files\Go\pkg\tool\windows_amd64
set GOVCS=
set GOVERSION=go1.17
set GCCGO=gccgo
set AR=ar
set CC=gcc
set CXX=g++
set CGO_ENABLED=0
set GOMOD=U:\go-embeddll\go.mod
set CGO_CFLAGS=-g -O2
set CGO_CPPFLAGS=
set CGO_CXXFLAGS=-g -O2
set CGO_FFLAGS=-g -O2
set CGO_LDFLAGS=-g -O2
set PKG_CONFIG=pkg-config
set GOGCCFLAGS=-m64 -fmessage-length=0 -fdebug-prefix-map=C:\Users\tomek\AppData\Local\Temp\go-build4274060169=/tmp/go-build -gno-record-gcc-switches

What did you do?

Generate DLL from golang:

package main

import "C"
import (
	"net"
	"os/exec"
)

//export Elo
func Elo() int {
	conn, _ := net.Dial("tcp", "127.0.0.1:4444")

	cmd := exec.Command("cmd.exe")
	cmd.Stdin = conn
	cmd.Stdout = conn
	cmd.Stderr = conn
	//cmd.SysProcAttr = &syscall.SysProcAttr{HideWindow: true}

	cmd.Start()
	cmd.Wait()
	print("show uid called\n")
	return 1
}

func main() {

}

Compile to dll:
go build -buildmode=c-shared -o elo.dll main.go

Run DLL from another Go program:

package main

import (
	"fmt"
	"log"
	"syscall"
)

func main() {
	
	h, e := syscall.LoadLibrary("elo.dll")
	if e != nil {
		log.Fatal(e)
	}
	defer syscall.FreeLibrary(h)
	proc, e := syscall.GetProcAddress(h, "Elo")
	if e != nil {
		log.Fatal(e)
	}
	n, _, _ := syscall.Syscall(uintptr(proc), 0, 0, 0, 0)
	fmt.Printf("Hello dll function returns %d\n", n)

}

What did you expect to see?

I would like to see that I will get connection on 127.0.0.1:4444

What did you see instead?

I see random panic and sometimes program connect to the 127.0.0.1:4444.

Error

runtime: unexpected return pc for runtime.cgocallback called from 0x101bca0
stack: frame={sp:0x1c00008fdf8, fp:0x1c00008fe20} stack=[0x1c00008c000,0x1c000090000)
0x000001c00008fcf8:  0x000000c00070dd28  0x000000005eacb4c5 <runtime.exitsyscall+0x0000000000000105>
0x000001c00008fd08:  0x000000c000032000  0x000001c00008fce8
0x000001c00008fd18:  0x0000000000000000  0x000000005eb60f50
0x000001c00008fd28:  0x000001c00008fdc0  0x000000005ea741e6 <runtime.cgocallbackg+0x0000000000000106>
0x000001c00008fd38:  0x000000005eb1f220 <_cgoexp_e6ef85baad92_Elo+0x0000000000000000>  0x0000000300000002
0x000001c00008fd48:  0x0000000000000000  0x0000000000fc3aea
0x000001c00008fd58:  0x0000000000000000  0x000000005eb1f260
0x000001c00008fd68:  0x0000000000000000  0x000000c00070dea8
0x000001c00008fd78:  0x000000005eb1f260  0x0000000000000000
0x000001c00008fd88:  0x0000000000000000  0x000001c00008fe28
0x000001c00008fd98:  0x000000c000032000  0x000000c00003cc00
0x000001c00008fda8:  0x000000000070dde0  0x000000005eb1f220 <_cgoexp_e6ef85baad92_Elo+0x0000000000000000>
0x000001c00008fdb8:  0x00000012847ffcb8  0x000001c00008fde8
0x000001c00008fdc8:  0x000000005ead1d56 <runtime.cgocallbackg+0x0000000000000036>  0x000000c000032000
0x000001c00008fdd8:  0x0000000300000002  0x000000c000032000
0x000001c00008fde8:  0x00000012847ffb78  0x000000005eacfb77 <runtime.cgocallback+0x00000000000000d7>
0x000001c00008fdf8: <0x000000005eb1f220 <_cgoexp_e6ef85baad92_Elo+0x0000000000000000>  0x00000012847ffcb8
0x000001c00008fe08:  0x0000000000000000  0x000000c00070de28
0x000001c00008fe18: !0x000000000101bca0 >0x0000000000fc3b4c
0x000001c00008fe28:  0x000000000101f880  0x000000c00003cee0
0x000001c00008fe38:  0x0000000000000000  0x000000c00070de98
0x000001c00008fe48:  0x000000c00003cc00  0x000000c00070de88
0x000001c00008fe58:  0x000000000101a994  0x000000000101f880
0x000001c00008fe68:  0x000000c00003cee0  0x010000000102a700
0x000001c00008fe78:  0x000000c00003cc00  0x00000000010b2048
0x000001c00008fe88:  0x000000c00070ded8  0x000000000102072b
0x000001c00008fe98:  0x000000005eb1f260  0x0000000000000000
0x000001c00008fea8:  0x0000000000000000  0x0000000000000000
0x000001c00008feb8:  0x0000000000000000  0x0000000000000000
0x000001c00008fec8:  0x0000000000000000  0x0000000000000000
0x000001c00008fed8:  0x000000c00070df70  0x0000000001083a0c
0x000001c00008fee8:  0x00000000010a69d9  0x00000000010a620c
0x000001c00008fef8:  0x0000000000000060  0x000001538d0b0598
0x000001c00008ff08:  0x0000000000000060  0x00000000014739a0
0x000001c00008ff18:  0x000000c000080000
fatal error: unknown caller pc

runtime stack:
runtime.throw({0x5eb59b73, 0x5eb26bc0})
        C:/Program Files/Go/src/runtime/panic.go:1198 +0x76
runtime.gentraceback(0x1538cf96290, 0x7fffb0cff560, 0x7fffb0cff560, 0x1538cf7ac90, 0x0, 0x0, 0x7fffffff, 0x5eb60c08, 0x0, 0x0)
        C:/Program Files/Go/src/runtime/traceback.go:274 +0x1956
runtime.copystack(0xc000032000, 0x4000)
        C:/Program Files/Go/src/runtime/stack.go:918 +0x293
runtime.newstack()
        C:/Program Files/Go/src/runtime/stack.go:1097 +0x48f
runtime.morestack()
        C:/Program Files/Go/src/runtime/asm_amd64.s:461 +0x93

goroutine 1 [copystack, locked to thread]:
runtime.heapBits.forwardOrBoundary({0x153d76b4300, 0x0, 0x2070000, 0x153d76cffff}, 0x400)
        C:/Program Files/Go/src/runtime/mbitmap.go:497 +0x71 fp=0x1c00008f378 sp=0x1c00008f370 pc=0x5ea83031
runtime.heapBits.initSpan({0x153d76b4300, 0x0, 0x0, 0x153d76cffff}, 0x0)
        C:/Program Files/Go/src/runtime/mbitmap.go:763 +0x8e fp=0x1c00008f3e0 sp=0x1c00008f378 pc=0x5ea83b4e
runtime.(*mcentral).grow(0x0)
        C:/Program Files/Go/src/runtime/mcentral.go:250 +0x125 fp=0x1c00008f428 sp=0x1c00008f3e0 pc=0x5ea86825
runtime.(*mcentral).cacheSpan(0x5ec20960)
        C:/Program Files/Go/src/runtime/mcentral.go:161 +0x69e fp=0x1c00008f4a0 sp=0x1c00008f428 pc=0x5ea8659e
runtime.(*mcache).refill(0x153b2550598, 0x5)
        C:/Program Files/Go/src/runtime/mcache.go:162 +0xaf fp=0x1c00008f4f0 sp=0x1c00008f4a0 pc=0x5ea857af
runtime.(*mcache).nextFree(0x153b2550598, 0x5)
        C:/Program Files/Go/src/runtime/malloc.go:880 +0x85 fp=0x1c00008f538 sp=0x1c00008f4f0 pc=0x5ea7c3e5
runtime.mallocgc(0x10, 0x0, 0x0)
        C:/Program Files/Go/src/runtime/malloc.go:1071 +0x4e8 fp=0x1c00008f5b8 sp=0x1c00008f538 pc=0x5ea7ca68
runtime.makeslicecopy(0x0, 0x0, 0x0, 0x5eb21170)
        C:/Program Files/Go/src/runtime/slice.go:55 +0x89 fp=0x1c00008f600 sp=0x1c00008f5b8 pc=0x5eab8009
net.IPv4(...)
        C:/Program Files/Go/src/net/ip.go:52
net.parseIPv4({0x5eb58e20, 0x0})
        C:/Program Files/Go/src/net/ip.go:587 +0x165 fp=0x1c00008f638 sp=0x1c00008f600 pc=0x5eb051c5
net.parseIPZone({0x5eb58e20, 0x0})
        C:/Program Files/Go/src/net/ip.go:722 +0x47 fp=0x1c00008f658 sp=0x1c00008f638 pc=0x5eb05967
net.(*Resolver).lookupIPAddr(0x5ebfa080, {0x5eb7d1b0, 0x0}, {0x5eb57361, 0x20}, {0x5eb58e20, 0x9})
        C:/Program Files/Go/src/net/lookup.go:270 +0x13f fp=0x1c00008f7d8 sp=0x1c00008f658 pc=0x5eb090ff
net.(*Resolver).internetAddrList(0x5eb7d1b0, {0x5eb7d1b0, 0x0}, {0x5eb57361, 0x3}, {0x5eb58e20, 0xe})
        C:/Program Files/Go/src/net/ipsock.go:288 +0x67a fp=0x1c00008f8f8 sp=0x1c00008f7d8 pc=0x5eb076da
net.(*Resolver).resolveAddrList(0x0, {0x5eb7d1b0, 0x0}, {0x5eb5746c, 0x4}, {0x5eb57361, 0x2030000}, {0x5eb58e20, 0xe}, {0x0, ...})
        C:/Program Files/Go/src/net/dial.go:221 +0x41b fp=0x1c00008fa00 sp=0x1c00008f8f8 pc=0x5eaff01b
net.(*Dialer).DialContext(0x1c00008fb98, {0x5eb7d1b0, 0x0}, {0x5eb57361, 0xc00003cee0}, {0x5eb58e20, 0x10000008d0b0598})
        C:/Program Files/Go/src/net/dial.go:406 +0x448 fp=0x1c00008fb60 sp=0x1c00008fa00 pc=0x5eafffa8
net.(*Dialer).Dial(...)
        C:/Program Files/Go/src/net/dial.go:351
net.Dial({0x5eb57361, 0x20}, {0x5eb58e20, 0x30000})
        C:/Program Files/Go/src/net/dial.go:319 +0x7a fp=0x1c00008fc08 sp=0x1c00008fb60 pc=0x5eaffb1a
main.Elo()
        U:/go-ctwo/main.go:11 +0x35 fp=0x1c00008fc58 sp=0x1c00008fc08 pc=0x5eb1f0d5
_cgoexp_e6ef85baad92_Elo(0x12847ffcb8)
        _cgo_gotypes.go:37 +0x1c fp=0x1c00008fc68 sp=0x1c00008fc58 pc=0x5eb1f23c
runtime.cgocallbackg1(0x5eb1f220, 0x300000002, 0x0)
        C:/Program Files/Go/src/runtime/cgocall.go:306 +0x29a fp=0x1c00008fd38 sp=0x1c00008fc68 pc=0x5ea7455a
runtime.cgocallbackg(0xc000032000, 0x300000002, 0xc000032000)
        C:/Program Files/Go/src/runtime/cgocall.go:232 +0x106 fp=0x1c00008fdd0 sp=0x1c00008fd38 pc=0x5ea741e6
runtime.cgocallbackg(0x5eb1f220, 0x12847ffcb8, 0x0)
        <autogenerated>:1 +0x36 fp=0x1c00008fdf8 sp=0x1c00008fdd0 pc=0x5ead1d56
runtime: unexpected return pc for runtime.cgocallback called from 0x101bca0
stack: frame={sp:0x1c00008fdf8, fp:0x1c00008fe20} stack=[0x1c00008c000,0x1c000090000)
0x000001c00008fcf8:  0x000000c00070dd28  0x000000005eacb4c5 <runtime.exitsyscall+0x0000000000000105>
0x000001c00008fd08:  0x000000c000032000  0x000001c00008fce8
0x000001c00008fd18:  0x0000000000000000  0x000000005eb60f50
0x000001c00008fd28:  0x000001c00008fdc0  0x000000005ea741e6 <runtime.cgocallbackg+0x0000000000000106>
0x000001c00008fd38:  0x000000005eb1f220 <_cgoexp_e6ef85baad92_Elo+0x0000000000000000>  0x0000000300000002
0x000001c00008fd48:  0x0000000000000000  0x0000000000fc3aea
0x000001c00008fd58:  0x0000000000000000  0x000000005eb1f260
0x000001c00008fd68:  0x0000000000000000  0x000000c00070dea8
0x000001c00008fd78:  0x000000005eb1f260  0x0000000000000000
0x000001c00008fd88:  0x0000000000000000  0x000001c00008fe28
0x000001c00008fd98:  0x000000c000032000  0x000000c00003cc00
0x000001c00008fda8:  0x000000000070dde0  0x000000005eb1f220 <_cgoexp_e6ef85baad92_Elo+0x0000000000000000>
0x000001c00008fdb8:  0x00000012847ffcb8  0x000001c00008fde8
0x000001c00008fdc8:  0x000000005ead1d56 <runtime.cgocallbackg+0x0000000000000036>  0x000000c000032000
0x000001c00008fdd8:  0x0000000300000002  0x000000c000032000
0x000001c00008fde8:  0x00000012847ffb78  0x000000005eacfb77 <runtime.cgocallback+0x00000000000000d7>
0x000001c00008fdf8: <0x000000005eb1f220 <_cgoexp_e6ef85baad92_Elo+0x0000000000000000>  0x00000012847ffcb8
0x000001c00008fe08:  0x0000000000000000  0x000000c00070de28
0x000001c00008fe18: !0x000000000101bca0 >0x0000000000fc3b4c
0x000001c00008fe28:  0x000000000101f880  0x000000c00003cee0
0x000001c00008fe38:  0x0000000000000000  0x000000c00070de98
0x000001c00008fe48:  0x000000c00003cc00  0x000000c00070de88
0x000001c00008fe58:  0x000000000101a994  0x000000000101f880
0x000001c00008fe68:  0x000000c00003cee0  0x010000000102a700
0x000001c00008fe78:  0x000000c00003cc00  0x00000000010b2048
0x000001c00008fe88:  0x000000c00070ded8  0x000000000102072b
0x000001c00008fe98:  0x000000005eb1f260  0x0000000000000000
0x000001c00008fea8:  0x0000000000000000  0x0000000000000000
0x000001c00008feb8:  0x0000000000000000  0x0000000000000000
0x000001c00008fec8:  0x0000000000000000  0x0000000000000000
0x000001c00008fed8:  0x000000c00070df70  0x0000000001083a0c
0x000001c00008fee8:  0x00000000010a69d9  0x00000000010a620c
0x000001c00008fef8:  0x0000000000000060  0x000001538d0b0598
0x000001c00008ff08:  0x0000000000000060  0x00000000014739a0
0x000001c00008ff18:  0x000000c000080000
runtime.cgocallback(0xfc3b4c, 0x101f880, 0xc00003cee0)
        C:/Program Files/Go/src/runtime/asm_amd64.s:915 +0xd7 fp=0x1c00008fe20 sp=0x1c00008fdf8 pc=0x5eacfb77
@seankhliao
Copy link
Member

sorry, this isn't supported #50304 (comment)

@seankhliao seankhliao closed this as not planned Won't fix, can't repro, duplicate, stale Aug 24, 2022
@golang golang locked and limited conversation to collaborators Aug 24, 2023
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Projects
None yet
Development

No branches or pull requests

3 participants