Initialize POSIX queues' registry after creating a new IPCNamespace.

Updates #136
This commit is contained in:
Zyad A. Ali
2021-09-28 20:43:52 +02:00
parent 229c01552e
commit 2c0d07959e
3 changed files with 13 additions and 0 deletions
+2
View File
@@ -92,6 +92,8 @@ func (i *IPCNamespace) InitPosixQueues(ctx context.Context, vfsObj *vfs.VirtualF
}
// PosixQueues returns the posix message queue registry for this namespace.
//
// Precondition: i.InitPosixQueues must have been called.
func (i *IPCNamespace) PosixQueues() *mq.Registry {
return i.posixQueues
}
+5
View File
@@ -401,6 +401,11 @@ func (k *Kernel) Init(args InitKernelArgs) error {
return fmt.Errorf("failed to initialize VFS: %v", err)
}
err := k.rootIPCNamespace.InitPosixQueues(ctx, &k.vfs, auth.CredentialsFromContext(ctx))
if err != nil {
return fmt.Errorf("failed to create mqfs filesystem: %v", err)
}
pipeFilesystem, err := pipefs.NewFilesystem(&k.vfs)
if err != nil {
return fmt.Errorf("failed to create pipefs filesystem: %v", err)
+6
View File
@@ -103,6 +103,9 @@ func (t *Task) Clone(args *linux.CloneArgs) (ThreadID, *SyscallControl, error) {
ipcns := t.IPCNamespace()
if args.Flags&linux.CLONE_NEWIPC != 0 {
ipcns = NewIPCNamespace(userns)
if VFS2Enabled {
ipcns.InitPosixQueues(t, t.k.VFS(), creds)
}
} else {
ipcns.IncRef()
}
@@ -464,6 +467,9 @@ func (t *Task) Unshare(flags int32) error {
// namespace"
t.ipcns.DecRef(t)
t.ipcns = NewIPCNamespace(creds.UserNamespace)
if VFS2Enabled {
t.ipcns.InitPosixQueues(t, t.k.VFS(), creds)
}
}
var oldFDTable *FDTable
if flags&linux.CLONE_FILES != 0 {