On Mon, Jul 20, 2020 at 4:21 PM Mike Rapoport <rppt@xxxxxxxxxx> wrote: > On Mon, Jul 20, 2020 at 01:30:13PM +0200, Arnd Bergmann wrote: > > On Mon, Jul 20, 2020 at 11:25 AM Mike Rapoport <rppt@xxxxxxxxxx> wrote: > > > > > > From: Mike Rapoport <rppt@xxxxxxxxxxxxx> > > > > > > Introduce "secretmemfd" system call with the ability to create memory areas > > > visible only in the context of the owning process and not mapped not only > > > to other processes but in the kernel page tables as well. > > > > > > The user will create a file descriptor using the secretmemfd system call > > > where flags supplied as a parameter to this system call will define the > > > desired protection mode for the memory associated with that file > > > descriptor. Currently there are two protection modes: > > > > > > * exclusive - the memory area is unmapped from the kernel direct map and it > > > is present only in the page tables of the owning mm. > > > * uncached - the memory area is present only in the page tables of the > > > owning mm and it is mapped there as uncached. > > > > > > For instance, the following example will create an uncached mapping (error > > > handling is omitted): > > > > > > fd = secretmemfd(SECRETMEM_UNCACHED); > > > ftruncate(fd, MAP_SIZE); > > > ptr = mmap(NULL, MAP_SIZE, PROT_READ | PROT_WRITE, MAP_SHARED, > > > fd, 0); > > > > > > Signed-off-by: Mike Rapoport <rppt@xxxxxxxxxxxxx> > > > > I wonder if this should be more closely related to dmabuf file > > descriptors, which > > are already used for a similar purpose: sharing access to secret memory areas > > that are not visible to the OS but can be shared with hardware through device > > drivers that can import a dmabuf file descriptor. > > TBH, I didn't think about dmabuf, but my undestanding is that is this > case memory areas are not visible to the OS because they are on device > memory rather than normal RAM and when dmabuf is backed by the normal > RAM, the memory is visible to the OS. No, dmabuf is normally about normal RAM that is shared between multiple devices, the idea is that you can have one driver allocate a buffer in RAM and export it to user space through a file descriptor. The application can then go and mmap() it or pass it into one or more other drivers. This can be used e.g. for sharing a buffer between a video codec and the gpu, or between a crypto engine and another device that accesses unencrypted data while software can only observe the encrypted version. Arnd