acrn-kernel/drivers/android
Carlos Llamas 3ce00bb7e9 binder: validate alloc->mm in ->mmap() handler
Since commit 1da52815d5 ("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: 1da52815d5 ("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>
Link: https://lore.kernel.org/r/20221104231235.348958-1-cmllamas@google.com
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
2022-11-09 15:41:27 +01:00
..
Kconfig
Makefile
binder.c Scheduler changes for v6.1: 2022-10-10 09:10:28 -07:00
binder_alloc.c binder: validate alloc->mm in ->mmap() handler 2022-11-09 15:41:27 +01:00
binder_alloc.h binder: fix binder_alloc kernel-doc warnings 2022-09-06 17:02:06 +02:00
binder_alloc_selftest.c android: binder: stop saving a pointer to the VMA 2022-07-29 18:07:13 -07:00
binder_internal.h binder: fix redefinition of seq_file attributes 2022-07-08 15:44:19 +02:00
binder_trace.h
binderfs.c binderfs: rework superblock destruction 2022-09-01 16:18:49 +02:00