Fix: macOS Ventura process name match

This commit is contained in:
gVisor bot 2022-10-27 11:25:18 +08:00
parent dd7e2237e9
commit aa87a74727

View file

@ -3,6 +3,8 @@ package process
import ( import (
"encoding/binary" "encoding/binary"
"net/netip" "net/netip"
"strconv"
"strings"
"syscall" "syscall"
"unsafe" "unsafe"
@ -15,6 +17,22 @@ const (
proccallnumpidinfo = 0x2 proccallnumpidinfo = 0x2
) )
var structSize = func() int {
value, _ := syscall.Sysctl("kern.osproductversion")
major, _, _ := strings.Cut(value, ".")
n, _ := strconv.ParseInt(major, 10, 64)
switch true {
case n >= 13:
return 408
default:
// from darwin-xnu/bsd/netinet/in_pcblist.c:get_pcblist_n
// size/offset are round up (aligned) to 8 bytes in darwin
// rup8(sizeof(xinpcb_n)) + rup8(sizeof(xsocket_n)) +
// 2 * rup8(sizeof(xsockbuf_n)) + rup8(sizeof(xsockstat_n))
return 384
}
}()
func resolveSocketByNetlink(network string, ip netip.Addr, srcPort int) (int32, int32, error) { func resolveSocketByNetlink(network string, ip netip.Addr, srcPort int) (int32, int32, error) {
return 0, 0, ErrPlatformNotSupport return 0, 0, ErrPlatformNotSupport
} }
@ -38,12 +56,7 @@ func findProcessName(network string, ip netip.Addr, port int) (int32, string, er
} }
buf := []byte(value) buf := []byte(value)
itemSize := structSize
// from darwin-xnu/bsd/netinet/in_pcblist.c:get_pcblist_n
// size/offset are round up (aligned) to 8 bytes in darwin
// rup8(sizeof(xinpcb_n)) + rup8(sizeof(xsocket_n)) +
// 2 * rup8(sizeof(xsockbuf_n)) + rup8(sizeof(xsockstat_n))
itemSize := 384
if network == TCP { if network == TCP {
// rup8(sizeof(xtcpcb_n)) // rup8(sizeof(xtcpcb_n))
itemSize += 208 itemSize += 208