linux-fsdevel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: "Matthew Wilcox (Oracle)" <willy@infradead.org>
To: linux-fsdevel@vger.kernel.org, linux-kernel@vger.kernel.org,
	Alexander Viro <viro@zeniv.linux.org.uk>
Cc: "Matthew Wilcox (Oracle)" <willy@infradead.org>,
	Denys Vlasenko <vda.linux@googlemail.com>,
	Kees Cook <keescook@chromium.org>,
	Eric Biederman <ebiederm@xmission.com>,
	Jann Horn <jannh@google.com>, Vlastimil Babka <vbabka@suse.cz>,
	"Liam R . Howlett" <Liam.Howlett@Oracle.com>
Subject: [PATCH] binfmt_elf: Take the mmap lock when walking the VMA list
Date: Mon, 31 Jan 2022 15:37:40 +0000	[thread overview]
Message-ID: <20220131153740.2396974-1-willy@infradead.org> (raw)

I'm not sure if the VMA list can change under us, but dump_vma_snapshot()
is very careful to take the mmap_lock in write mode.  We only need to
take it in read mode here as we do not care if the size of the stack
VMA changes underneath us.

If it can be changed underneath us, this is a potential use-after-free
for a multithreaded process which is dumping core.

Fixes: 2aa362c49c31 ("coredump: extend core dump note section to contain file names of mapped files")
Signed-off-by: Matthew Wilcox (Oracle) <willy@infradead.org>
Reviewed-by: Liam R. Howlett <Liam.Howlett@Oracle.com>
---
 fs/binfmt_elf.c | 3 +++
 1 file changed, 3 insertions(+)

diff --git a/fs/binfmt_elf.c b/fs/binfmt_elf.c
index 605017eb9349..dc2318355762 100644
--- a/fs/binfmt_elf.c
+++ b/fs/binfmt_elf.c
@@ -1651,6 +1651,7 @@ static int fill_files_note(struct memelfnote *note)
 	name_base = name_curpos = ((char *)data) + names_ofs;
 	remaining = size - names_ofs;
 	count = 0;
+	mmap_read_lock(mm);
 	for (vma = mm->mmap; vma != NULL; vma = vma->vm_next) {
 		struct file *file;
 		const char *filename;
@@ -1661,6 +1662,7 @@ static int fill_files_note(struct memelfnote *note)
 		filename = file_path(file, name_curpos, remaining);
 		if (IS_ERR(filename)) {
 			if (PTR_ERR(filename) == -ENAMETOOLONG) {
+				mmap_read_unlock(mm);
 				kvfree(data);
 				size = size * 5 / 4;
 				goto alloc;
@@ -1680,6 +1682,7 @@ static int fill_files_note(struct memelfnote *note)
 		*start_end_ofs++ = vma->vm_pgoff;
 		count++;
 	}
+	mmap_read_unlock(mm);
 
 	/* Now we know exact count of files, can store it */
 	data[0] = count;
-- 
2.34.1


             reply	other threads:[~2022-01-31 15:38 UTC|newest]

Thread overview: 28+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-01-31 15:37 Matthew Wilcox (Oracle) [this message]
2022-01-31 16:03 ` [PATCH] binfmt_elf: Take the mmap lock when walking the VMA list Eric W. Biederman
2022-01-31 16:13   ` Matthew Wilcox
2022-01-31 16:26     ` Eric W. Biederman
2022-01-31 16:35       ` Matthew Wilcox
2022-01-31 17:13         ` Jann Horn
2022-01-31 18:44           ` [PATCH 0/5] Fix fill_files_note Eric W. Biederman
2022-01-31 18:46             ` [PATCH 1/5] coredump: Move definition of struct coredump_params into coredump.h Eric W. Biederman
2022-02-01  1:54               ` kernel test robot
2022-02-01  4:07               ` kernel test robot
2022-01-31 18:46             ` [PATCH 2/5] coredump: Snapshot the vmas in do_coredump Eric W. Biederman
2022-02-01 18:32               ` Jann Horn
2022-02-02 15:41                 ` Eric W. Biederman
2022-01-31 18:46             ` [PATCH 3/5] coredump: Remove the WARN_ON in dump_vma_snapshot Eric W. Biederman
2022-02-01 18:35               ` Jann Horn
2022-01-31 18:47             ` [PATCH 4/5] coredump/elf: Pass coredump_params into fill_note_info Eric W. Biederman
2022-02-01 18:40               ` Jann Horn
2022-01-31 18:47             ` [PATCH 5/5] coredump: Use the vma snapshot in fill_files_note Eric W. Biederman
2022-02-01 19:02               ` Jann Horn
2022-02-02 14:46                 ` Eric W. Biederman
2022-01-31 20:57             ` [PATCH 0/5] Fix fill_files_note Kees Cook
2022-03-08 19:35             ` [GIT PULL] " Eric W. Biederman
2022-03-08 21:49               ` Kees Cook
2022-03-09 16:29                 ` Eric W. Biederman
2022-03-09 16:32                   ` Kees Cook
2022-03-09 20:27                     ` Eric W. Biederman
2022-03-09 21:45                       ` Kees Cook
2022-01-31 17:38         ` [PATCH] binfmt_elf: Take the mmap lock when walking the VMA list Eric W. Biederman

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=20220131153740.2396974-1-willy@infradead.org \
    --to=willy@infradead.org \
    --cc=Liam.Howlett@Oracle.com \
    --cc=ebiederm@xmission.com \
    --cc=jannh@google.com \
    --cc=keescook@chromium.org \
    --cc=linux-fsdevel@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=vbabka@suse.cz \
    --cc=vda.linux@googlemail.com \
    --cc=viro@zeniv.linux.org.uk \
    /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).