All of lore.kernel.org
 help / color / mirror / Atom feed
From: Todd Kjos <tkjos@google.com>
To: Carlos Llamas <cmllamas@google.com>
Cc: "Greg Kroah-Hartman" <gregkh@linuxfoundation.org>,
	"Arve Hjønnevåg" <arve@android.com>,
	"Todd Kjos" <tkjos@android.com>,
	"Martijn Coenen" <maco@android.com>,
	"Joel Fernandes" <joel@joelfernandes.org>,
	"Christian Brauner" <brauner@kernel.org>,
	"Suren Baghdasaryan" <surenb@google.com>,
	"Liam R. Howlett" <Liam.Howlett@oracle.com>,
	linux-kernel@vger.kernel.org, kernel-team@android.com,
	"Jann Horn" <jannh@google.com>,
	stable@vger.kernel.org
Subject: Re: [PATCH] binder: validate alloc->mm in ->mmap() handler
Date: Fri, 4 Nov 2022 16:18:55 -0700	[thread overview]
Message-ID: <CAHRSSEy4tfkFtnxSXrgX5PhUdj2xf+yrfC7Zujf-mvt2ekJe+Q@mail.gmail.com> (raw)
In-Reply-To: <20221104231235.348958-1-cmllamas@google.com>

On Fri, Nov 4, 2022 at 4:12 PM Carlos Llamas <cmllamas@google.com> wrote:
>
> Since commit 1da52815d5f1 ("binder: fix alloc->vma_vm_mm null-ptr
> dereference") binder caches a pointer to the current->mm during open().
> This fixes a null-ptr dereference reported by syzkaller. Unfortunately,
> it also opens the door for a process to update its mm after the open(),
> (e.g. via execve) making the cached alloc->mm pointer invalid.
>
> Things get worse when the process continues to mmap() a vma. From this
> point forward, binder will attempt to find this vma using an obsolete
> alloc->mm reference. Such as in binder_update_page_range(), where the
> wrong vma is obtained via vma_lookup(), yet binder proceeds to happily
> insert new pages into it.
>
> To avoid this issue fail the ->mmap() callback if we detect a mismatch
> between the vma->vm_mm and the original alloc->mm pointer. This prevents
> alloc->vm_addr from getting set, so that any subsequent vma_lookup()
> calls fail as expected.
>
> Fixes: 1da52815d5f1 ("binder: fix alloc->vma_vm_mm null-ptr dereference")
> Reported-by: Jann Horn <jannh@google.com>
> Cc: <stable@vger.kernel.org> # 5.15+
> Signed-off-by: Carlos Llamas <cmllamas@google.com>

Acked-by: Todd Kjos <tkjos@google.com>

> ---
>  drivers/android/binder_alloc.c | 7 +++++++
>  1 file changed, 7 insertions(+)
>
> diff --git a/drivers/android/binder_alloc.c b/drivers/android/binder_alloc.c
> index 1c39cfce32fa..4ad42b0f75cd 100644
> --- a/drivers/android/binder_alloc.c
> +++ b/drivers/android/binder_alloc.c
> @@ -739,6 +739,12 @@ int binder_alloc_mmap_handler(struct binder_alloc *alloc,
>         const char *failure_string;
>         struct binder_buffer *buffer;
>
> +       if (unlikely(vma->vm_mm != alloc->mm)) {
> +               ret = -EINVAL;
> +               failure_string = "invalid vma->vm_mm";
> +               goto err_invalid_mm;
> +       }
> +
>         mutex_lock(&binder_alloc_mmap_lock);
>         if (alloc->buffer_size) {
>                 ret = -EBUSY;
> @@ -785,6 +791,7 @@ int binder_alloc_mmap_handler(struct binder_alloc *alloc,
>         alloc->buffer_size = 0;
>  err_already_mapped:
>         mutex_unlock(&binder_alloc_mmap_lock);
> +err_invalid_mm:
>         binder_alloc_debug(BINDER_DEBUG_USER_ERROR,
>                            "%s: %d %lx-%lx %s failed %d\n", __func__,
>                            alloc->pid, vma->vm_start, vma->vm_end,
> --
> 2.38.1.431.g37b22c650d-goog
>

      reply	other threads:[~2022-11-04 23:19 UTC|newest]

Thread overview: 2+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-11-04 23:12 [PATCH] binder: validate alloc->mm in ->mmap() handler Carlos Llamas
2022-11-04 23:18 ` Todd Kjos [this message]

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=CAHRSSEy4tfkFtnxSXrgX5PhUdj2xf+yrfC7Zujf-mvt2ekJe+Q@mail.gmail.com \
    --to=tkjos@google.com \
    --cc=Liam.Howlett@oracle.com \
    --cc=arve@android.com \
    --cc=brauner@kernel.org \
    --cc=cmllamas@google.com \
    --cc=gregkh@linuxfoundation.org \
    --cc=jannh@google.com \
    --cc=joel@joelfernandes.org \
    --cc=kernel-team@android.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=maco@android.com \
    --cc=stable@vger.kernel.org \
    --cc=surenb@google.com \
    --cc=tkjos@android.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.