diff --git a/pkg/devutil/devutil.go b/pkg/devutil/devutil.go index 85f1294fa..edc1478d4 100644 --- a/pkg/devutil/devutil.go +++ b/pkg/devutil/devutil.go @@ -30,11 +30,12 @@ import ( type GoferClient struct { clientFD lisafs.ClientFD hostFD int + contName string } // NewGoferClient establishes the LISAFS connection to the dev gofer server. -// It takes ownership of fd. -func NewGoferClient(ctx context.Context, fd int) (*GoferClient, error) { +// It takes ownership of fd. contName is the owning container name. +func NewGoferClient(ctx context.Context, contName string, fd int) (*GoferClient, error) { ctx.UninterruptibleSleepStart(false) defer ctx.UninterruptibleSleepFinish(false) @@ -63,6 +64,11 @@ func (g *GoferClient) Close() { } } +// ContainerName returns the name of the container that owns this gofer. +func (g *GoferClient) ContainerName() string { + return g.contName +} + // DirentNames returns names of all the dirents for /dev on the gofer. func (g *GoferClient) DirentNames(ctx context.Context) ([]string, error) { if g.hostFD >= 0 { diff --git a/pkg/sentry/devices/nvproxy/frontend.go b/pkg/sentry/devices/nvproxy/frontend.go index f6c6323f6..31f3cacfa 100644 --- a/pkg/sentry/devices/nvproxy/frontend.go +++ b/pkg/sentry/devices/nvproxy/frontend.go @@ -66,8 +66,9 @@ func (dev *frontendDevice) Open(ctx context.Context, mnt *vfs.Mount, vfsd *vfs.D return nil, err } fd := &frontendFD{ - dev: dev, - hostFD: int32(hostFD), + dev: dev, + containerName: devClient.ContainerName(), + hostFD: int32(hostFD), } if err := fd.vfsfd.Init(fd, opts.Flags, mnt, vfsd, &vfs.FileDescriptionOptions{ UseDentryMetadata: true, @@ -94,12 +95,12 @@ type frontendFD struct { vfs.DentryMetadataFileDescriptionImpl vfs.NoLockFD - dev *frontendDevice - hostFD int32 - memmapFile frontendFDMemmapFile - - queue waiter.Queue + dev *frontendDevice + containerName string + hostFD int32 + memmapFile frontendFDMemmapFile + queue waiter.Queue haveMmapContext atomic.Bool // clients are handles of clients owned by this frontendFD. clients is diff --git a/pkg/sentry/devices/nvproxy/uvm.go b/pkg/sentry/devices/nvproxy/uvm.go index e06d168d6..b0a85ca25 100644 --- a/pkg/sentry/devices/nvproxy/uvm.go +++ b/pkg/sentry/devices/nvproxy/uvm.go @@ -53,8 +53,9 @@ func (dev *uvmDevice) Open(ctx context.Context, mnt *vfs.Mount, vfsd *vfs.Dentry return nil, err } fd := &uvmFD{ - dev: dev, - hostFD: int32(hostFD), + dev: dev, + containerName: devClient.ContainerName(), + hostFD: int32(hostFD), } if err := fd.vfsfd.Init(fd, opts.Flags, mnt, vfsd, &vfs.FileDescriptionOptions{ UseDentryMetadata: true, @@ -79,9 +80,10 @@ type uvmFD struct { vfs.DentryMetadataFileDescriptionImpl vfs.NoLockFD - dev *uvmDevice - hostFD int32 - memmapFile uvmFDMemmapFile + dev *uvmDevice + containerName string + hostFD int32 + memmapFile uvmFDMemmapFile queue waiter.Queue } diff --git a/pkg/sentry/kernel/kernel.go b/pkg/sentry/kernel/kernel.go index 9074702b4..ccfc9e18b 100644 --- a/pkg/sentry/kernel/kernel.go +++ b/pkg/sentry/kernel/kernel.go @@ -1977,7 +1977,7 @@ func (k *Kernel) GetUserCounters(uid auth.KUID) *UserCounters { // AddDevGofer initializes the dev gofer connection and starts tracking it. // It takes ownership of goferFD. func (k *Kernel) AddDevGofer(contName string, goferFD int) error { - client, err := devutil.NewGoferClient(k.SupervisorContext(), goferFD) + client, err := devutil.NewGoferClient(k.SupervisorContext(), contName, goferFD) if err != nil { return err }