linux-mm.kvack.org archive mirror
 help / color / mirror / Atom feed
From: Kees Cook <keescook@chromium.org>
To: Suren Baghdasaryan <surenb@google.com>
Cc: "David Hildenbrand" <david@redhat.com>,
	"Michal Hocko" <mhocko@suse.com>, "Pavel Machek" <pavel@ucw.cz>,
	"Rasmus Villemoes" <linux@rasmusvillemoes.dk>,
	"John Hubbard" <jhubbard@nvidia.com>,
	"Andrew Morton" <akpm@linux-foundation.org>,
	"Colin Cross" <ccross@google.com>,
	"Sumit Semwal" <sumit.semwal@linaro.org>,
	"Dave Hansen" <dave.hansen@intel.com>,
	"Matthew Wilcox" <willy@infradead.org>,
	"Kirill A . Shutemov" <kirill.shutemov@linux.intel.com>,
	"Vlastimil Babka" <vbabka@suse.cz>,
	"Johannes Weiner" <hannes@cmpxchg.org>,
	"Jonathan Corbet" <corbet@lwn.net>,
	"Al Viro" <viro@zeniv.linux.org.uk>,
	"Randy Dunlap" <rdunlap@infradead.org>,
	"Kalesh Singh" <kaleshsingh@google.com>,
	"Peter Xu" <peterx@redhat.com>,
	rppt@kernel.org, "Peter Zijlstra" <peterz@infradead.org>,
	"Catalin Marinas" <catalin.marinas@arm.com>,
	vincenzo.frascino@arm.com,
	"Chinwen Chang (張錦文)" <chinwen.chang@mediatek.com>,
	"Axel Rasmussen" <axelrasmussen@google.com>,
	"Andrea Arcangeli" <aarcange@redhat.com>,
	"Jann Horn" <jannh@google.com>,
	apopple@nvidia.com, "Yu Zhao" <yuzhao@google.com>,
	"Will Deacon" <will@kernel.org>,
	fenghua.yu@intel.com, thunder.leizhen@huawei.com,
	"Hugh Dickins" <hughd@google.com>,
	feng.tang@intel.com, "Jason Gunthorpe" <jgg@ziepe.ca>,
	"Roman Gushchin" <guro@fb.com>,
	"Thomas Gleixner" <tglx@linutronix.de>,
	krisman@collabora.com, "Chris Hyser" <chris.hyser@oracle.com>,
	"Peter Collingbourne" <pcc@google.com>,
	"Eric W. Biederman" <ebiederm@xmission.com>,
	"Jens Axboe" <axboe@kernel.dk>,
	legion@kernel.org, "Rolf Eike Beer" <eb@emlix.com>,
	"Cyrill Gorcunov" <gorcunov@gmail.com>,
	"Muchun Song" <songmuchun@bytedance.com>,
	"Viresh Kumar" <viresh.kumar@linaro.org>,
	"Thomas Cedeno" <thomascedeno@google.com>,
	sashal@kernel.org, cxfcosmos@gmail.com,
	LKML <linux-kernel@vger.kernel.org>,
	linux-fsdevel@vger.kernel.org, linux-doc@vger.kernel.org,
	linux-mm <linux-mm@kvack.org>,
	kernel-team <kernel-team@android.com>
Subject: Re: [PATCH v10 3/3] mm: add anonymous vma name refcounting
Date: Fri, 15 Oct 2021 10:45:06 -0700	[thread overview]
Message-ID: <202110151002.059B2EAF@keescook> (raw)
In-Reply-To: <CAJuCfpG=fNMDuYUo8UwjB-kDzR2gxmRmTJCqgojfPe6RULwc4A@mail.gmail.com>

On Fri, Oct 15, 2021 at 09:30:09AM -0700, Suren Baghdasaryan wrote:
> On Fri, Oct 15, 2021 at 1:04 AM David Hildenbrand <david@redhat.com> wrote:
> >
> > On 14.10.21 22:16, Suren Baghdasaryan wrote:
> > > [...]
> > > 3. Leaves an fd exposed, even briefly, which may lead to unexpected
> > > flaws (e.g. anything using mmap MAP_SHARED could allow exposures or
> > > overwrites). Even MAP_PRIVATE, if an attacker writes into the file
> > > after ftruncate() and before mmap(), can cause private memory to be
> > > initialized with unexpected data.
> >
> > I don't quite follow. Can you elaborate what exactly the issue here is?
> > We use a temporary fd, yes, but how is that a problem?
> >
> > Any attacker can just write any random memory memory in the address
> > space, so I don't see the issue.
> 
> It feels to me that introducing another handle to the memory region is
> a potential attack vector but I'm not a security expert. Maybe Kees
> can assess this better?

This case is kind of just an extension of "we don't need an fd, we need
a name". There is a lot of resulting baggage suddenly added to using
anonymous VMA (fork overhead to deal with the fds, etc), but for me, this
particular situation above is what really demonstrates the "unexpected
side-effects" of trying to swap an anonymous mmap for a memfd: there is
now an _external handle_ attached to memory that doesn't pass through
any of the existing security boundaries normally associated with process
memory (i.e. ptrace). Here's the example race:

victim process			attacker process (same uid)
memfd_create(name, flags);
	-> /proc/$pid/fd/3
ftruncate(3, size);
				open("/proc/$victim/fd/3", O_RDWR)
					-> 3
				mmap(NULL, size,
				     PROT_READ | PROT_WRITE | PROT_EXEC,
				     MAP_SHARED, 3, 0);
					-> addr
				memset(addr, 0xFF, size);

mmap(NULL, size, prot,
     MAP_PRIVATE, 3, 0);
	-> addr
close(3);

surprise, addr[0] != 0x00

And again, yes, we could program defensively, but it's a surprising
situation with new corner cases that haven't been present for years of
Just Using Anon VMAs. :) I would be worried about other vectors we
haven't imagined yet.

So, I think between both the overhead of files and the expanded attack
surface make memfd unsuited for this use-case.

-Kees

-- 
Kees Cook


  parent reply	other threads:[~2021-10-15 17:45 UTC|newest]

Thread overview: 80+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-10-01 20:56 [PATCH v10 1/3] mm: rearrange madvise code to allow for reuse Suren Baghdasaryan
2021-10-01 20:56 ` [PATCH v10 2/3] mm: add a field to store names for private anonymous memory Suren Baghdasaryan
2021-10-01 23:08   ` Andrew Morton
2021-10-02  0:52     ` Suren Baghdasaryan
2021-10-04 16:21       ` Suren Baghdasaryan
2021-10-07  2:39         ` Andrew Morton
2021-10-07  2:50           ` Suren Baghdasaryan
2021-10-01 20:56 ` [PATCH v10 3/3] mm: add anonymous vma name refcounting Suren Baghdasaryan
2021-10-05 18:42   ` Pavel Machek
2021-10-05 19:14     ` Suren Baghdasaryan
2021-10-05 19:21       ` Kees Cook
2021-10-05 20:04       ` Pavel Machek
2021-10-05 20:43         ` Suren Baghdasaryan
2021-10-06  6:57           ` John Hubbard
2021-10-06  8:27             ` Michal Hocko
2021-10-06  9:27               ` David Hildenbrand
2021-10-06 15:01                 ` Suren Baghdasaryan
2021-10-06 15:07                   ` David Hildenbrand
2021-10-06 15:20                     ` Suren Baghdasaryan
2021-10-07  2:29                       ` Andrew Morton
2021-10-07  2:46                         ` Suren Baghdasaryan
2021-10-07  2:53                           ` Andrew Morton
2021-10-07  3:01                             ` Suren Baghdasaryan
2021-10-07  7:27                               ` David Hildenbrand
2021-10-07  7:33                       ` David Hildenbrand
2021-10-07 15:42                         ` Suren Baghdasaryan
2021-10-06 17:58                   ` Pavel Machek
2021-10-06 18:18                     ` Suren Baghdasaryan
2021-10-07  8:10                       ` Michal Hocko
2021-10-07  8:41                         ` Pavel Machek
2021-10-07  8:47                         ` Rasmus Villemoes
2021-10-07 10:15                           ` Pavel Machek
2021-10-07 16:04                             ` Suren Baghdasaryan
2021-10-07 16:40                               ` Michal Hocko
2021-10-07 16:58                                 ` Suren Baghdasaryan
2021-10-07 17:31                                   ` Michal Hocko
2021-10-07 17:50                                     ` Suren Baghdasaryan
2021-10-07 18:12                                       ` Kees Cook
2021-10-07 18:50                                         ` Suren Baghdasaryan
2021-10-07 19:02                                           ` John Hubbard
2021-10-07 21:32                                             ` Suren Baghdasaryan
2021-10-08  1:04                                               ` Liam Howlett
2021-10-08  7:25                                             ` Rasmus Villemoes
2021-10-08  7:43                                               ` David Hildenbrand
2021-10-08 21:13                                                 ` Kees Cook
2021-10-08  6:34                                         ` Michal Hocko
2021-10-08 14:14                                           ` Dave Hansen
2021-10-08 14:57                                             ` Michal Hocko
2021-10-08 16:10                                               ` Suren Baghdasaryan
2021-10-08 20:58                                           ` Kees Cook
2021-10-11  8:36                                             ` Michal Hocko
2021-10-12  1:18                                               ` Suren Baghdasaryan
2021-10-12  1:20                                                 ` Suren Baghdasaryan
2021-10-12  3:00                                                   ` Johannes Weiner
2021-10-12  5:36                                                     ` Suren Baghdasaryan
2021-10-12 18:26                                                       ` Johannes Weiner
2021-10-12 18:52                                                         ` Suren Baghdasaryan
2021-10-12 20:41                                                           ` Johannes Weiner
2021-10-12 20:59                                                             ` Suren Baghdasaryan
2021-10-12  7:36                                                   ` Michal Hocko
2021-10-12 16:50                                                     ` Suren Baghdasaryan
2021-10-12  7:43                                                 ` David Hildenbrand
2021-10-12 17:01                                                   ` Suren Baghdasaryan
2021-10-14 20:16                                                     ` Suren Baghdasaryan
2021-10-15  8:03                                                       ` David Hildenbrand
2021-10-15 16:30                                                         ` Suren Baghdasaryan
2021-10-15 16:39                                                           ` David Hildenbrand
2021-10-15 18:33                                                             ` Suren Baghdasaryan
2021-10-15 17:45                                                           ` Kees Cook [this message]
2021-10-07  7:59                   ` Michal Hocko
2021-10-07 15:45                     ` Suren Baghdasaryan
2021-10-07 16:37                       ` Michal Hocko
2021-10-07 16:43                         ` Suren Baghdasaryan
2021-10-07 17:25                           ` Michal Hocko
2021-10-07 17:30                             ` Suren Baghdasaryan
2021-10-04  7:03 ` [PATCH v10 1/3] mm: rearrange madvise code to allow for reuse Rolf Eike Beer
2021-10-04 16:18   ` Suren Baghdasaryan
2021-10-05 21:00     ` Liam Howlett
2021-10-05 21:30       ` Suren Baghdasaryan
2021-10-06 17:33         ` Liam Howlett

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=202110151002.059B2EAF@keescook \
    --to=keescook@chromium.org \
    --cc=aarcange@redhat.com \
    --cc=akpm@linux-foundation.org \
    --cc=apopple@nvidia.com \
    --cc=axboe@kernel.dk \
    --cc=axelrasmussen@google.com \
    --cc=catalin.marinas@arm.com \
    --cc=ccross@google.com \
    --cc=chinwen.chang@mediatek.com \
    --cc=chris.hyser@oracle.com \
    --cc=corbet@lwn.net \
    --cc=cxfcosmos@gmail.com \
    --cc=dave.hansen@intel.com \
    --cc=david@redhat.com \
    --cc=eb@emlix.com \
    --cc=ebiederm@xmission.com \
    --cc=feng.tang@intel.com \
    --cc=fenghua.yu@intel.com \
    --cc=gorcunov@gmail.com \
    --cc=guro@fb.com \
    --cc=hannes@cmpxchg.org \
    --cc=hughd@google.com \
    --cc=jannh@google.com \
    --cc=jgg@ziepe.ca \
    --cc=jhubbard@nvidia.com \
    --cc=kaleshsingh@google.com \
    --cc=kernel-team@android.com \
    --cc=kirill.shutemov@linux.intel.com \
    --cc=krisman@collabora.com \
    --cc=legion@kernel.org \
    --cc=linux-doc@vger.kernel.org \
    --cc=linux-fsdevel@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-mm@kvack.org \
    --cc=linux@rasmusvillemoes.dk \
    --cc=mhocko@suse.com \
    --cc=pavel@ucw.cz \
    --cc=pcc@google.com \
    --cc=peterx@redhat.com \
    --cc=peterz@infradead.org \
    --cc=rdunlap@infradead.org \
    --cc=rppt@kernel.org \
    --cc=sashal@kernel.org \
    --cc=songmuchun@bytedance.com \
    --cc=sumit.semwal@linaro.org \
    --cc=surenb@google.com \
    --cc=tglx@linutronix.de \
    --cc=thomascedeno@google.com \
    --cc=thunder.leizhen@huawei.com \
    --cc=vbabka@suse.cz \
    --cc=vincenzo.frascino@arm.com \
    --cc=viresh.kumar@linaro.org \
    --cc=viro@zeniv.linux.org.uk \
    --cc=will@kernel.org \
    --cc=willy@infradead.org \
    --cc=yuzhao@google.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;
as well as URLs for NNTP newsgroup(s).