-
Notifications
You must be signed in to change notification settings - Fork 15
Open
Description
Compiler: go version go1.24.5 linux/amd64
OS: Ubuntu 24.04
Kernel: 6.8.0-63-generic
Snippet:
package main
import (
"net"
"github.com/gogf/greuse"
)
func main() {
dialer := net.Dialer{
Control: greuse.Control,
}
dialer.Dial("unix", "/tmp/1.sock")
}Error:
$ go run main.go
panic: operation not supported
goroutine 1 [running]:
github.com/gogf/greuse.Control.func1(0x3)
/home/ubuntu/go/pkg/mod/github.com/gogf/[email protected]/greuse_unix.go:23 +0xce
internal/poll.(*FD).RawControl(0xc00006b600?, 0x4149e5?)
/usr/local/go/src/internal/poll/fd_posix.go:61 +0xe2
net.(*rawConn).Control(0xc00005a050, 0x46a919?)
/usr/local/go/src/net/rawconn.go:32 +0x36
github.com/gogf/greuse.Control({0x423c1c?, 0xc00006b668?}, {0x4149e5?, 0x8?}, {0x5240c0, 0xc00005a050})
/home/ubuntu/go/pkg/mod/github.com/gogf/[email protected]/greuse_unix.go:16 +0x77
net.(*sysDialer).dialUnix.func1({0x41b4d6?, 0x5ebe80?}, {0x4f859e?, 0x414005?}, {0x4f9399?, 0x14?}, {0x5240c0?, 0xc00005a050?})
/usr/local/go/src/net/unixsock_posix.go:161 +0x43
net.(*netFD).dial(0xc0000a6000, {0x5240f0, 0x5eb060}, {0x0, 0x0}, {0x524508, 0xc000076040}, 0xc00006b8f8)
/usr/local/go/src/net/sock_posix.go:102 +0x28d
net.socket({0x5240f0, 0x5eb060}, {0x4f859e, 0x4}, 0x1, 0x1, 0x0?, 0x0, {0x0, 0x0}, ...)
/usr/local/go/src/net/sock_posix.go:70 +0x29b
net.unixSocket({0x5240f0?, 0x5eb060?}, {0x4f859e?, 0x4?}, {0x524508?, 0x0?}, {0x524508?, 0xc000076040?}, {0x4f85be, 0x4}, ...)
/usr/local/go/src/net/unixsock_posix.go:45 +0x308
net.(*sysDialer).dialUnix(0x0?, {0x5240f0?, 0x5eb060?}, 0x0?, 0x0?)
/usr/local/go/src/net/unixsock_posix.go:164 +0x91
net.(*sysDialer).dialSingle(0xc0000a4000, {0x5240f0, 0x5eb060}, {0x523ee0, 0xc000076040})
/usr/local/go/src/net/dial.go:731 +0x214
net.(*sysDialer).dialSerial(0xc0000a4000, {0x5240f0, 0x5eb060}, {0xc000014090?, 0x1, 0x1c?})
/usr/local/go/src/net/dial.go:686 +0x24e
net.(*sysDialer).dialParallel(0x0?, {0x5240f0?, 0x5eb060?}, {0xc000014090?, 0x5eb060?, 0x4f85be?}, {0x0?, 0x4f859e?, 0xc00006be18?})
/usr/local/go/src/net/dial.go:587 +0x3a7
net.(*Dialer).DialContext(0xc00006beb0, {0x5240f0, 0x5eb060}, {0x4f859e, 0x4}, {0x4f9399, 0xb})
/usr/local/go/src/net/dial.go:578 +0x6ac
net.(*Dialer).Dial(...)
/usr/local/go/src/net/dial.go:504
main.main()
/home/ubuntu/x/main.go:13 +0x74
exit status 2
This is caused by greuse package improperly calling SO_REUSEPORT on AF_UNIX sockets.
It should only call SO_REUSEADDR on AF_UNIX sockets.
SO_REUSEPORT wasn't allowed on AF_UNIX sockets in the first place, but a recent kernel change exposed this bug:
amazonlinux/amazon-linux-2023#901 (comment)
Metadata
Metadata
Assignees
Labels
No labels