WSL2-Linux-Kernel/drivers/android
Carlos Llamas d276fb4a7e binder: validate alloc->mm in ->mmap() handler
[ Upstream commit 3ce00bb7e9 ]

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>
Signed-off-by: Sasha Levin <sashal@kernel.org>
2022-12-02 17:41:00 +01:00
..
Kconfig treewide: replace '---help---' in Kconfig files with 'help' 2020-06-14 01:57:21 +09:00
Makefile treewide: Add SPDX license identifier - Makefile/Kconfig 2019-05-21 10:50:46 +02:00
binder.c binder: fix UAF of ref->proc caused by race condition 2022-09-08 12:28:04 +02:00
binder_alloc.c binder: validate alloc->mm in ->mmap() handler 2022-12-02 17:41:00 +01:00
binder_alloc.h android: binder: stop saving a pointer to the VMA 2022-08-17 14:23:58 +02:00
binder_alloc_selftest.c android: binder: stop saving a pointer to the VMA 2022-08-17 14:23:58 +02:00
binder_internal.h binder: fix redefinition of seq_file attributes 2022-08-17 14:23:50 +02:00
binder_trace.h binder: add trace at free transaction. 2020-11-11 08:20:44 +01:00
binderfs.c binder: fix redefinition of seq_file attributes 2022-08-17 14:23:50 +02:00