Re: [PATCH 3/6] mm: introduce secretmemfd system call to create "secret" memory areas
From: Arnd Bergmann <arnd@arndb.de>
Date: 2020-07-20 14:34:40
Also in:
linux-arch, linux-arm-kernel, linux-fsdevel, linux-mm, linux-riscv, lkml, nvdimm
On Mon, Jul 20, 2020 at 4:21 PM Mike Rapoport [off-list ref] wrote:
On Mon, Jul 20, 2020 at 01:30:13PM +0200, Arnd Bergmann wrote:quoted
On Mon, Jul 20, 2020 at 11:25 AM Mike Rapoport [off-list ref] wrote:quoted
From: Mike Rapoport <redacted> 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 <redacted>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