Re: [PATCH RFC 0/5] mm: process_vm_mmap() -- syscall for duplication a process mapping

From: Michal Hocko
Date: Thu May 16 2019 - 09:55:06 EST


On Thu 16-05-19 15:30:34, Michal Hocko wrote:
> [You are defining a new user visible API, please always add linux-api
> mailing list - now done]
>
> On Wed 15-05-19 18:11:15, Kirill Tkhai wrote:
[...]
> > The proposed syscall aims to introduce an interface, which
> > supplements currently existing process_vm_writev() and
> > process_vm_readv(), and allows to solve the problem with
> > anonymous memory transfer. The above example may be rewritten as:
> >
> > void *buf;
> >
> > buf = mmap(NULL, n * PAGE_SIZE, PROT_READ|PROT_WRITE,
> > MAP_PRIVATE|MAP_ANONYMOUS, ...);
> > recv(sock, buf, n * PAGE_SIZE, 0);
> >
> > /* Sign of @pid is direction: "from @pid task to current" or vice versa. */
> > process_vm_mmap(-pid, buf, n * PAGE_SIZE, remote_addr, PVMMAP_FIXED);
> > munmap(buf, n * PAGE_SIZE);

AFAIU this means that you actually want to do an mmap of an anonymous
memory with a COW semantic to the remote process right? How does the
remote process find out where and what has been mmaped? What if the
range collides? This sounds quite scary to me TBH. Why cannot you simply
use shared memory for that?
--
Michal Hocko
SUSE Labs