MCPcopy
hub / github.com/subtrace/subtrace / vmWriteSockaddr

Method vmWriteSockaddr

cmd/run/engine/process/vm.go:208–253  ·  view source on GitHub ↗

vmWriteSockaddr writes a sockaddr struct and its length to the process' memory at ptr. It panics if addr is invalid or if ptr/sizePtr is NULL.

(n *seccomp.Notif, addr netip.AddrPort, ptr uintptr, sizePtr uintptr)

Source from the content-addressed store, hash-verified

206// vmWriteSockaddr writes a sockaddr struct and its length to the process'
207// memory at ptr. It panics if addr is invalid or if ptr/sizePtr is NULL.
208func (p *Process) vmWriteSockaddr(n *seccomp.Notif, addr netip.AddrPort, ptr uintptr, sizePtr uintptr) (syscall.Errno, error) {
209 if !addr.IsValid() {
210 panic("invalid AddrPort")
211 }
212 if ptr == 0 || sizePtr == 0 {
213 panic(fmt.Sprintf("NULL: ptr=%x, sizePtr=%x", ptr, sizePtr))
214 }
215
216 avail, errno, err := p.vmReadUint32(n, sizePtr)
217 if errno != 0 || err != nil {
218 return errno, err
219 }
220 if avail < 0 {
221 return unix.EINVAL, nil
222 }
223
224 var sa linux.SockAddr
225 switch {
226 case addr.Addr().Is6() || addr.Addr().Is4In6():
227 sa = &linux.SockAddrInet6{
228 Family: unix.AF_INET6,
229 Addr: linux.Inet6Addr(addr.Addr().As16()),
230 Port: htons(addr.Port()),
231 }
232 case addr.Addr().Is4():
233 sa = &linux.SockAddrInet{
234 Family: unix.AF_INET,
235 Addr: linux.InetAddr(addr.Addr().As4()),
236 Port: htons(addr.Port()),
237 }
238 }
239
240 b := make([]byte, sa.SizeBytes(), sa.SizeBytes())
241 sa.MarshalBytes(b)
242 if uint32(sa.SizeBytes()) > avail {
243 b = b[:avail]
244 }
245
246 if errno, err := p.vmWriteBytes(n, ptr, b); errno != 0 || err != nil {
247 return errno, err
248 }
249 if errno, err := p.vmWriteUint32(n, sizePtr, uint32(sa.SizeBytes())); errno != 0 || err != nil {
250 return errno, err
251 }
252 return 0, nil
253}

Callers 3

handleAcceptMethod · 0.95
handleGetsocknameMethod · 0.95
handleGetpeernameMethod · 0.95

Calls 6

vmReadUint32Method · 0.95
vmWriteBytesMethod · 0.95
vmWriteUint32Method · 0.95
htonsFunction · 0.85
AddrMethod · 0.80
SizeBytesMethod · 0.45

Tested by

no test coverage detected