On Tue, Aug 9, 2022 at 2:18 PM Jason Gunthorpe <jgg@xxxxxxxxxx> wrote: > On Tue, Aug 09, 2022 at 10:32:27AM +0200, Arnd Bergmann wrote: > > On Tue, Aug 9, 2022 at 10:04 AM Christoph Hellwig <hch@xxxxxxxxxxxxx> wrote: > > > > I think for devices with hardware MMU contexts you actually want to > > bind the context to a 'mm_struct', and then ensure that the context > > is only ever used from a process that shares this mm_struct, > > regardless of who else has access to the same file or inode. > > I can't think of a security justification for this. > > If process A stuffs part of its address space into the device and > passes the FD to process B which can then access that addresss space, > how is it any different from process A making a tmpfs, mmaping it, and > passing it to process B which can then access that address space? > > IMHO the 'struct file' is the security domain and a process must be > careful to only allow FDs to be created that meet its security needs. > > The kernel should not be involved in security here any further than > using the standard FD security mechanisms. > > Who is to say there isn't a meaningful dual process use case for the > accelerator? We see dual-process designs regularly in networking > accelerators. I think there is a lot of value in keeping things simple here, to make sure users and developers don't make a mess of it. If the accelerator has access to the memory of one process but I run it from another process, I lose the benefits of the shared page tables, but gain a lot of the complexity that I think the 'single-opener' logic was trying (without success) to avoid. E.g. attaching a debugger to single-step through the accelerator code would then involve at least four address spaces: - the addresses of the debugger - the addresses local to the accelerator - addresses in the shared address space of the process that owns the memory - addresses in the process that owns the accelerator context which is at least one more than I'd like to deal with. This is somewhat different for accelerators that have coherent access to a process address space and only access explicitly shared buffers. On these you could more easily allow sharing the file descriptor between any number of processes. Arnd