MCPcopy Index your code
hub / github.com/subtrace/subtrace / handleGetpeername

Method handleGetpeername

cmd/run/engine/process/handle.go:546–576  ·  view source on GitHub ↗

handleGetpeername handles the getpeername(2) syscall to emulate the external connection's peer address.

(n *seccomp.Notif, fd int, addrPtr uintptr, addrSizePtr uintptr)

Source from the content-addressed store, hash-verified

544// handleGetpeername handles the getpeername(2) syscall to emulate the external
545// connection's peer address.
546func (p *Process) handleGetpeername(n *seccomp.Notif, fd int, addrPtr uintptr, addrSizePtr uintptr) error {
547 s, ok := p.getSocket(fd)
548 if !ok {
549 return n.Skip()
550 }
551
552 peer, errno, err := s.PeerAddr()
553 if err != nil {
554 return fmt.Errorf("get peer addr: %w", err)
555 }
556 if errno != 0 {
557 return n.Return(0, errno)
558 }
559
560 if !peer.IsValid() {
561 return n.Return(0, unix.ENOTCONN)
562 }
563
564 if s.Inode.Domain == unix.AF_INET6 && peer.Addr().Is4() {
565 peer = netip.AddrPortFrom(netip.AddrFrom16(peer.Addr().As16()), peer.Port())
566 }
567
568 if addrPtr == 0 || addrSizePtr == 0 {
569 return n.Return(0, unix.EFAULT)
570 }
571 errno, err = p.vmWriteSockaddr(n, peer, addrPtr, addrSizePtr)
572 if err != nil {
573 return fmt.Errorf("write peer addr: %w", err)
574 }
575 return n.Return(0, errno)
576}
577
578var Handlers [1024]func(*Process, *seccomp.Notif) error
579

Callers 1

initFunction · 0.80

Calls 6

getSocketMethod · 0.95
vmWriteSockaddrMethod · 0.95
SkipMethod · 0.80
PeerAddrMethod · 0.80
ReturnMethod · 0.80
AddrMethod · 0.80

Tested by

no test coverage detected