From: Nadav Amit <namit@vmware.com>
To: Axel Rasmussen <axelrasmussen@google.com>
Cc: Peter Xu <peterx@redhat.com>,
Andrew Morton <akpm@linux-foundation.org>,
Alexander Viro <viro@zeniv.linux.org.uk>,
Charan Teja Reddy <charante@codeaurora.org>,
Dave Hansen <dave.hansen@linux.intel.com>,
"Dmitry V . Levin" <ldv@altlinux.org>,
Gleb Fotengauer-Malinovskiy <glebfm@altlinux.org>,
Hugh Dickins <hughd@google.com>, Jan Kara <jack@suse.cz>,
Jonathan Corbet <corbet@lwn.net>,
Mel Gorman <mgorman@techsingularity.net>,
Mike Kravetz <mike.kravetz@oracle.com>,
Mike Rapoport <rppt@kernel.org>, Shuah Khan <shuah@kernel.org>,
Suren Baghdasaryan <surenb@google.com>,
Vlastimil Babka <vbabka@suse.cz>, zhangyi <yi.zhang@huawei.com>,
"linux-doc@vger.kernel.org" <linux-doc@vger.kernel.org>,
linux-fsdevel <linux-fsdevel@vger.kernel.org>,
LKML <linux-kernel@vger.kernel.org>,
Linux MM <linux-mm@kvack.org>,
Linuxkselftest <linux-kselftest@vger.kernel.org>
Subject: Re: [PATCH v3 2/6] userfaultfd: add /dev/userfaultfd for fine grained access control
Date: Wed, 15 Jun 2022 16:47:06 +0000 [thread overview]
Message-ID: <5C19AED5-C2A9-4AD9-A2E3-757751568496@vmware.com> (raw)
In-Reply-To: <CAJHvVche7ZKOpO=8PY2frtJ5nHyzo=Yt+qT1OmYg8ZOUujkPfA@mail.gmail.com>
On Jun 14, 2022, at 5:55 PM, Axel Rasmussen <axelrasmussen@google.com> wrote:
> ⚠ External Email
>
> On Mon, Jun 13, 2022 at 5:10 PM Nadav Amit <namit@vmware.com> wrote:
>> On Jun 13, 2022, at 3:38 PM, Axel Rasmussen <axelrasmussen@google.com> wrote:
>>
>>> On Mon, Jun 13, 2022 at 3:29 PM Peter Xu <peterx@redhat.com> wrote:
>>>> On Mon, Jun 13, 2022 at 02:55:40PM -0700, Andrew Morton wrote:
>>>>> On Wed, 1 Jun 2022 14:09:47 -0700 Axel Rasmussen <axelrasmussen@google.com> wrote:
>>>>>
>>>>>> To achieve this, add a /dev/userfaultfd misc device. This device
>>>>>> provides an alternative to the userfaultfd(2) syscall for the creation
>>>>>> of new userfaultfds. The idea is, any userfaultfds created this way will
>>>>>> be able to handle kernel faults, without the caller having any special
>>>>>> capabilities. Access to this mechanism is instead restricted using e.g.
>>>>>> standard filesystem permissions.
>>>>>
>>>>> The use of a /dev node isn't pretty. Why can't this be done by
>>>>> tweaking sys_userfaultfd() or by adding a sys_userfaultfd2()?
>>>
>>> I think for any approach involving syscalls, we need to be able to
>>> control access to who can call a syscall. Maybe there's another way
>>> I'm not aware of, but I think today the only mechanism to do this is
>>> capabilities. I proposed adding a CAP_USERFAULTFD for this purpose,
>>> but that approach was rejected [1]. So, I'm not sure of another way
>>> besides using a device node.
>>>
>>> One thing that could potentially make this cleaner is, as one LWN
>>> commenter pointed out, we could have open() on /dev/userfaultfd just
>>> return a new userfaultfd directly, instead of this multi-step process
>>> of open /dev/userfaultfd, NEW ioctl, then you get a userfaultfd. When
>>> I wrote this originally it wasn't clear to me how to get that to
>>> happen - open() doesn't directly return the result of our custom open
>>> function pointer, as far as I can tell - but it could be investigated.
>>
>> If this direction is pursued, I think that it would be better to set it as
>> /proc/[pid]/userfaultfd, which would allow remote monitors (processes) to
>> hook into userfaultfd of remote processes. I have a patch for that which
>> extends userfaultfd syscall, but /proc/[pid]/userfaultfd may be cleaner.
>
> Hmm, one thing I'm unsure about -
>
> If a process is able to control another process' memory like this,
> then this seems like exactly what CAP_SYS_PTRACE is intended to deal
> with, right? So I'm not sure this case is directly related to the one
> I'm trying to address.
>
> This also seems distinct to me versus the existing way you'd do this,
> which is open a userfaultfd and register a shared memory region, and
> then fork(). Now you can control your child's memory with userfaultfd.
> But, attaching to some other, previously-unrelated process with
> /proc/[pid]/userfaultfd seems like a clear case for CAP_SYS_PTRACE.
I agree about CAP_SYS_PTRACE. I just know that if the /dev approach is
taken, there would be even more pushback for userfaultfd2.
Whatever.
next prev parent reply other threads:[~2022-06-15 16:47 UTC|newest]
Thread overview: 23+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-06-01 21:09 [PATCH v3 0/6] " Axel Rasmussen
2022-06-01 21:09 ` [PATCH v3 1/6] selftests: vm: add hugetlb_shared userfaultfd test to run_vmtests.sh Axel Rasmussen
2022-06-01 21:09 ` [PATCH v3 2/6] userfaultfd: add /dev/userfaultfd for fine grained access control Axel Rasmussen
2022-06-13 21:55 ` Andrew Morton
2022-06-13 22:29 ` Peter Xu
2022-06-13 22:38 ` Axel Rasmussen
2022-06-13 23:23 ` Jonathan Corbet
2022-06-14 20:23 ` Axel Rasmussen
2022-06-14 0:10 ` Nadav Amit
2022-06-15 0:55 ` Axel Rasmussen
2022-06-15 16:47 ` Nadav Amit [this message]
2022-06-14 19:09 ` Peter Xu
2022-06-15 0:53 ` Axel Rasmussen
2022-06-01 21:09 ` [PATCH v3 3/6] userfaultfd: selftests: modify selftest to use /dev/userfaultfd Axel Rasmussen
2022-06-14 19:25 ` Peter Xu
2022-06-01 21:09 ` [PATCH v3 4/6] userfaultfd: update documentation to describe /dev/userfaultfd Axel Rasmussen
2022-06-14 4:19 ` Mike Rapoport
2022-06-14 19:36 ` Peter Xu
2022-06-01 21:09 ` [PATCH v3 5/6] userfaultfd: selftests: make /dev/userfaultfd testing configurable Axel Rasmussen
2022-06-14 19:43 ` Peter Xu
2022-06-15 22:25 ` Nadav Amit
2022-06-01 21:09 ` [PATCH v3 6/6] selftests: vm: add /dev/userfaultfd test cases to run_vmtests.sh Axel Rasmussen
2022-06-14 19:43 ` Peter Xu
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=5C19AED5-C2A9-4AD9-A2E3-757751568496@vmware.com \
--to=namit@vmware.com \
--cc=akpm@linux-foundation.org \
--cc=axelrasmussen@google.com \
--cc=charante@codeaurora.org \
--cc=corbet@lwn.net \
--cc=dave.hansen@linux.intel.com \
--cc=glebfm@altlinux.org \
--cc=hughd@google.com \
--cc=jack@suse.cz \
--cc=ldv@altlinux.org \
--cc=linux-doc@vger.kernel.org \
--cc=linux-fsdevel@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-kselftest@vger.kernel.org \
--cc=linux-mm@kvack.org \
--cc=mgorman@techsingularity.net \
--cc=mike.kravetz@oracle.com \
--cc=peterx@redhat.com \
--cc=rppt@kernel.org \
--cc=shuah@kernel.org \
--cc=surenb@google.com \
--cc=vbabka@suse.cz \
--cc=viro@zeniv.linux.org.uk \
--cc=yi.zhang@huawei.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox