From: Andy Lutomirski <luto@amacapital.net>
To: tytso@mit.edu, David Herrmann <dh.herrmann@gmail.com>,
linux-kernel <linux-kernel@vger.kernel.org>,
Hugh Dickins <hughd@google.com>,
Alexander Viro <viro@zeniv.linux.org.uk>,
Karol Lewandowski <k.lewandowsk@samsung.com>,
Kay Sievers <kay@vrfy.org>, Daniel Mack <zonque@gmail.com>,
Lennart Poettering <lennart@poettering.net>,
John Stultz <john.stultz@linaro.org>,
Greg Kroah-Hartman <greg@kroah.com>, Tejun Heo <tj@kernel.org>,
Johannes Weiner <hannes@cmpxchg.org>,
"dri-devel@lists.freedesktop.org"
<dri-devel@lists.freedesktop.org>,
linux-fsdevel <linux-fsdevel@vger.kernel.org>,
linux-mm <linux-mm@kvack.org>,
Andrew Morton <akpm@linux-foundation.org>,
Linus Torvalds <torvalds@linux-foundation.org>,
Ryan Lortie <desrt@desrt.ca>,
"Michael Kerrisk (man-pages)" <mtk.manpages@gmail.com>
Subject: Re: [PATCH 0/6] File Sealing & memfd_create()
Date: Thu, 10 Apr 2014 12:14:27 -0700 [thread overview]
Message-ID: <5346ED93.9040500@amacapital.net> (raw)
In-Reply-To: <20140320163806.GA10440@thunk.org>
On 03/20/2014 09:38 AM, tytso@mit.edu wrote:
> On Thu, Mar 20, 2014 at 04:48:30PM +0100, David Herrmann wrote:
>> On Thu, Mar 20, 2014 at 4:32 PM, <tytso@mit.edu> wrote:
>>> Why not make sealing an attribute of the "struct file", and enforce it
>>> at the VFS layer? That way all file system objects would have access
>>> to sealing interface, and for memfd_shmem, you can't get another
>>> struct file pointing at the object, the security properties would be
>>> identical.
>>
>> Sealing as introduced here is an inode-attribute, not "struct file".
>> This is intentional. For instance, a gfx-client can get a read-only FD
>> via /proc/self/fd/ and pass it to the compositor so it can never
>> overwrite the contents (unless the compositor has write-access to the
>> inode itself, in which case it can just re-open it read-write).
>
> Hmm, good point. I had forgotten about the /proc/self/fd hole.
> Hmm... what if we have a SEAL_PROC which forces the permissions of
> /proc/self/fd to be 000?
This is the second time in a week that someone has asked for a way to
have a struct file (or struct inode or whatever) that can't be reopened
through /proc/pid/fd. This should be quite easy to implement as a
separate feature.
Actually, that feature would solve a major pet peeve of mine, I think: I
want something like memfd that allows me to keep the thing read-write
but that whomever I pass the fd to can't change. With this feature, I
could do:
fd_rw = memfd_create (or O_TMPFILE or whatever)
fd_ro = open(/proc/self/fd/fd_ro, O_RDONLY);
fcntl(fd_ro, F_RESTRICT, F_RESTRICT_REOPEN);
send fd_ro via SCM_RIGHTS.
To really make this work well, I also want to SEAL_SHRINK the inode so
that the receiver can verify that I'm not going to truncate the file out
from under it.
Bingo, fast and secure one-way IPC.
--Andy
--
To unsubscribe, send a message with 'unsubscribe linux-mm' in
the body to majordomo@kvack.org. For more info on Linux MM,
see: http://www.linux-mm.org/ .
Don't email: <a href=mailto:"dont@kvack.org"> email@kvack.org </a>
WARNING: multiple messages have this Message-ID (diff)
From: Andy Lutomirski <luto@amacapital.net>
To: tytso@mit.edu, David Herrmann <dh.herrmann@gmail.com>,
linux-kernel <linux-kernel@vger.kernel.org>,
Hugh Dickins <hughd@google.com>,
Alexander Viro <viro@zeniv.linux.org.uk>,
Karol Lewandowski <k.lewandowsk@samsung.com>,
Kay Sievers <kay@vrfy.org>, Daniel Mack <zonque@gmail.com>,
Lennart Poettering <lennart@poettering.net>,
John Stultz <john.stultz@linaro.org>,
Greg Kroah-Hartman <greg@kroah.com>, Tejun Heo <tj@kernel.org>,
Johannes Weiner <hannes@cmpxchg.org>,
"dri-devel@lists.freedesktop.org"
<dri-devel@lists.freedesktop.org>,
linux-fsdevel <linux-fsdevel@vger.kernel.org>,
linux-mm <linux-mm@kvack.org>,
Andrew Morton <akpm@linux-foundation.org>,
Linus Torvalds <torvalds@linux-foundation.org>,
Ryan Lortie <desrt@desrt.ca>,
"Michael Kerrisk (man-pages)" <mtk.manpages@gmail.com>
Subject: Re: [PATCH 0/6] File Sealing & memfd_create()
Date: Thu, 10 Apr 2014 12:14:27 -0700 [thread overview]
Message-ID: <5346ED93.9040500@amacapital.net> (raw)
In-Reply-To: <20140320163806.GA10440@thunk.org>
On 03/20/2014 09:38 AM, tytso@mit.edu wrote:
> On Thu, Mar 20, 2014 at 04:48:30PM +0100, David Herrmann wrote:
>> On Thu, Mar 20, 2014 at 4:32 PM, <tytso@mit.edu> wrote:
>>> Why not make sealing an attribute of the "struct file", and enforce it
>>> at the VFS layer? That way all file system objects would have access
>>> to sealing interface, and for memfd_shmem, you can't get another
>>> struct file pointing at the object, the security properties would be
>>> identical.
>>
>> Sealing as introduced here is an inode-attribute, not "struct file".
>> This is intentional. For instance, a gfx-client can get a read-only FD
>> via /proc/self/fd/ and pass it to the compositor so it can never
>> overwrite the contents (unless the compositor has write-access to the
>> inode itself, in which case it can just re-open it read-write).
>
> Hmm, good point. I had forgotten about the /proc/self/fd hole.
> Hmm... what if we have a SEAL_PROC which forces the permissions of
> /proc/self/fd to be 000?
This is the second time in a week that someone has asked for a way to
have a struct file (or struct inode or whatever) that can't be reopened
through /proc/pid/fd. This should be quite easy to implement as a
separate feature.
Actually, that feature would solve a major pet peeve of mine, I think: I
want something like memfd that allows me to keep the thing read-write
but that whomever I pass the fd to can't change. With this feature, I
could do:
fd_rw = memfd_create (or O_TMPFILE or whatever)
fd_ro = open(/proc/self/fd/fd_ro, O_RDONLY);
fcntl(fd_ro, F_RESTRICT, F_RESTRICT_REOPEN);
send fd_ro via SCM_RIGHTS.
To really make this work well, I also want to SEAL_SHRINK the inode so
that the receiver can verify that I'm not going to truncate the file out
from under it.
Bingo, fast and secure one-way IPC.
--Andy
next prev parent reply other threads:[~2014-04-10 19:14 UTC|newest]
Thread overview: 123+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-03-19 19:06 [PATCH 0/6] File Sealing & memfd_create() David Herrmann
2014-03-19 19:06 ` David Herrmann
2014-03-19 19:06 ` David Herrmann
2014-03-19 19:06 ` David Herrmann
2014-03-19 19:06 ` [PATCH 1/6] fs: fix i_writecount on shmem and friends David Herrmann
2014-03-19 19:06 ` David Herrmann
2014-03-19 19:06 ` David Herrmann
2014-03-19 19:06 ` David Herrmann
2014-03-19 19:06 ` [PATCH 2/6] shm: add sealing API David Herrmann
2014-03-19 19:06 ` David Herrmann
2014-03-19 19:06 ` David Herrmann
2014-03-19 19:06 ` David Herrmann
2014-03-19 19:06 ` [PATCH 3/6] shm: add memfd_create() syscall David Herrmann
2014-03-19 19:06 ` David Herrmann
2014-03-19 19:06 ` David Herrmann
2014-03-19 19:06 ` David Herrmann
2014-03-20 8:47 ` Cyrill Gorcunov
2014-03-20 8:47 ` Cyrill Gorcunov
2014-03-20 9:01 ` Pavel Emelyanov
2014-03-20 9:01 ` Pavel Emelyanov
2014-03-20 11:29 ` David Herrmann
2014-03-20 11:29 ` David Herrmann
2014-03-20 11:29 ` David Herrmann
2014-03-20 11:29 ` David Herrmann
2014-03-20 11:50 ` Pavel Emelyanov
2014-03-20 11:50 ` Pavel Emelyanov
2014-03-20 19:22 ` John Stultz
2014-03-20 19:22 ` John Stultz
2014-04-02 13:38 ` Konstantin Khlebnikov
2014-04-02 13:38 ` Konstantin Khlebnikov
2014-04-02 14:18 ` David Herrmann
2014-04-02 14:18 ` David Herrmann
2014-04-02 14:52 ` Konstantin Khlebnikov
2014-04-02 14:52 ` Konstantin Khlebnikov
2014-04-02 14:52 ` Konstantin Khlebnikov
2014-04-10 19:07 ` Andy Lutomirski
2014-04-10 19:07 ` Andy Lutomirski
2014-03-19 19:06 ` [PATCH 4/6] selftests: add memfd_create() + sealing tests David Herrmann
2014-03-19 19:06 ` David Herrmann
2014-03-19 19:06 ` [PATCH man-pages 5/6] fcntl.2: document SHMEM_SET/GET_SEALS commands David Herrmann
2014-03-19 19:06 ` David Herrmann
2014-03-19 19:06 ` David Herrmann
2014-03-19 19:06 ` David Herrmann
2014-03-19 19:06 ` [PATCH man-pages 6/6] memfd_create.2: add memfd_create() man-page David Herrmann
2014-03-19 19:06 ` David Herrmann
2014-03-19 19:06 ` David Herrmann
2014-03-19 19:06 ` David Herrmann
2014-03-20 2:55 ` [PATCH 0/6] File Sealing & memfd_create() Greg Kroah-Hartman
2014-03-20 2:55 ` Greg Kroah-Hartman
2014-03-20 2:55 ` Greg Kroah-Hartman
2014-03-20 2:55 ` Greg Kroah-Hartman
2014-03-20 3:49 ` Linus Torvalds
2014-03-20 3:49 ` Linus Torvalds
2014-03-20 8:07 ` David Herrmann
2014-03-20 8:07 ` David Herrmann
2014-03-20 8:07 ` David Herrmann
2014-03-20 8:07 ` David Herrmann
2014-03-20 14:41 ` One Thousand Gnomes
2014-03-20 14:41 ` One Thousand Gnomes
2014-03-20 14:41 ` One Thousand Gnomes
2014-03-20 15:12 ` David Herrmann
2014-03-20 15:12 ` David Herrmann
2014-03-20 15:12 ` David Herrmann
2014-03-20 15:12 ` David Herrmann
2014-03-20 15:26 ` One Thousand Gnomes
2014-03-20 15:26 ` One Thousand Gnomes
2014-03-20 15:26 ` One Thousand Gnomes
2014-03-20 15:32 ` tytso
2014-03-20 15:32 ` tytso
2014-03-20 15:39 ` One Thousand Gnomes
2014-03-20 15:48 ` David Herrmann
2014-03-20 15:48 ` David Herrmann
2014-03-20 16:38 ` tytso
2014-03-20 16:38 ` tytso
2014-04-10 19:14 ` Andy Lutomirski [this message]
2014-04-10 19:14 ` Andy Lutomirski
2014-04-10 20:32 ` Theodore Ts'o
2014-04-10 20:32 ` Theodore Ts'o
2014-04-10 20:37 ` Andy Lutomirski
2014-04-10 20:37 ` Andy Lutomirski
2014-04-10 20:49 ` David Herrmann
2014-04-10 20:49 ` David Herrmann
2014-04-10 21:16 ` Andy Lutomirski
2014-04-10 21:16 ` Andy Lutomirski
2014-04-10 22:57 ` David Herrmann
2014-04-10 22:57 ` David Herrmann
2014-04-10 22:57 ` David Herrmann
2014-04-10 22:57 ` David Herrmann
2014-04-10 23:05 ` Andy Lutomirski
2014-04-10 23:05 ` Andy Lutomirski
2014-04-10 23:16 ` David Herrmann
2014-04-10 23:16 ` David Herrmann
2014-04-10 23:32 ` Andy Lutomirski
2014-04-10 23:32 ` Andy Lutomirski
2014-04-20 15:03 ` Pavel Machek
2014-04-20 15:03 ` Pavel Machek
2014-06-17 9:48 ` Florian Weimer
2014-06-17 9:48 ` Florian Weimer
2014-06-17 9:48 ` Florian Weimer
2014-06-17 9:48 ` Florian Weimer
2014-06-17 16:21 ` Andy Lutomirski
2014-04-10 14:45 ` Colin Walters
2014-04-10 14:45 ` Colin Walters
2014-04-10 19:15 ` Andy Lutomirski
2014-04-10 19:15 ` Andy Lutomirski
2014-04-10 19:45 ` Colin Walters
2014-04-10 19:45 ` Colin Walters
2014-04-11 6:09 ` Alex Elsayed
2014-04-11 6:09 ` Alex Elsayed
2014-04-08 13:00 ` Florian Weimer
2014-04-08 13:00 ` Florian Weimer
2014-04-09 21:31 ` David Herrmann
2014-04-09 21:31 ` David Herrmann
2014-04-22 9:10 ` Florian Weimer
2014-04-22 9:10 ` Florian Weimer
2014-04-22 11:55 ` David Herrmann
2014-04-22 11:55 ` David Herrmann
2014-04-22 12:44 ` Florian Weimer
2014-04-22 12:44 ` Florian Weimer
2014-04-22 12:55 ` David Herrmann
2014-04-22 12:55 ` David Herrmann
2014-04-10 19:17 ` Andy Lutomirski
2014-04-10 19:17 ` Andy Lutomirski
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=5346ED93.9040500@amacapital.net \
--to=luto@amacapital.net \
--cc=akpm@linux-foundation.org \
--cc=desrt@desrt.ca \
--cc=dh.herrmann@gmail.com \
--cc=dri-devel@lists.freedesktop.org \
--cc=greg@kroah.com \
--cc=hannes@cmpxchg.org \
--cc=hughd@google.com \
--cc=john.stultz@linaro.org \
--cc=k.lewandowsk@samsung.com \
--cc=kay@vrfy.org \
--cc=lennart@poettering.net \
--cc=linux-fsdevel@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-mm@kvack.org \
--cc=mtk.manpages@gmail.com \
--cc=tj@kernel.org \
--cc=torvalds@linux-foundation.org \
--cc=tytso@mit.edu \
--cc=viro@zeniv.linux.org.uk \
--cc=zonque@gmail.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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.