MCPcopy
hub / github.com/google/gvisor / pidFDOpen

Method pidFDOpen

pkg/sentry/kernel/pidfd.go:109–129  ·  view source on GitHub ↗
(pid *pid, isThread bool, nonBlock bool)

Source from the content-addressed store, hash-verified

107}
108
109func (t *Task) pidFDOpen(pid *pid, isThread bool, nonBlock bool) (*vfs.FileDescription, error) {
110 f := &pidFD{
111 isThread: isThread,
112 pid: pid,
113 }
114
115 vd := t.Kernel().VFS().NewAnonVirtualDentry("[pidfd]")
116 defer vd.DecRef(t)
117 var flags uint32
118 if nonBlock {
119 flags |= linux.O_NONBLOCK
120 }
121
122 err := f.vfsFD.Init(f, flags, t.Credentials(), vd.Mount(), vd.Dentry(), &vfs.FileDescriptionOptions{
123 UseDentryMetadata: true,
124 })
125 if err != nil {
126 return nil, err
127 }
128 return &f.vfsFD, nil
129}
130
131// PIDFDGetFD helps implement the Linux syscall pidfd_getfd(2).
132func (t *Task) PIDFDGetFD(pidfd int32, targetfd int32, flags uint32) (uintptr, error) {

Callers 2

PIDFDOpenMethod · 0.95
newTaskMethod · 0.80

Calls 8

KernelMethod · 0.95
CredentialsMethod · 0.95
NewAnonVirtualDentryMethod · 0.80
VFSMethod · 0.80
DecRefMethod · 0.65
InitMethod · 0.65
MountMethod · 0.65
DentryMethod · 0.45

Tested by

no test coverage detected