android: binder: stop saving a pointer to the VMA
Do not record a pointer to a VMA outside of the mmap_lock for later use. This is unsafe and there are a number of failure paths *after* the recorded VMA pointer may be freed during setup. There is no callback to the driver to clear the saved pointer from generic mm code. Furthermore, the VMA pointer may become stale if any number of VMA operations end up freeing the VMA so saving it was fragile to being with. Instead, change the binder_alloc struct to record the start address of the VMA and use vma_lookup() to get the vma when needed. Add lockdep mmap_lock checks on updates to the vma pointer to ensure the lock is held and depend on that lock for synchronization of readers and writers - which was already the case anyways, so the smp_wmb()/smp_rmb() was not necessary. [akpm@linux-foundation.org: fix drivers/android/binder_alloc_selftest.c] Link: https://lkml.kernel.org/r/20220621140212.vpkio64idahetbyf@revolver Fixes: da1b9564 ("android: binder: fix the race mmap and alloc_new_buf_locked") Reported-by:<syzbot+58b51ac2b04e388ab7b0@syzkaller.appspotmail.com> Signed-off-by:
Liam R. Howlett <Liam.Howlett@oracle.com> Cc: Minchan Kim <minchan@kernel.org> Cc: Christian Brauner (Microsoft) <brauner@kernel.org> Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org> Cc: Hridya Valsaraju <hridya@google.com> Cc: Joel Fernandes <joel@joelfernandes.org> Cc: Martijn Coenen <maco@android.com> Cc: Suren Baghdasaryan <surenb@google.com> Cc: Todd Kjos <tkjos@android.com> Cc: Matthew Wilcox (Oracle) <willy@infradead.org> Signed-off-by:
Andrew Morton <akpm@linux-foundation.org>
-
mentioned in commit e3fc07b3
-
mentioned in commit bb398422
-
mentioned in commit cbe09517
-
mentioned in commit dc30d33a
-
mentioned in commit b684150a
-
mentioned in commit b094b047
-
mentioned in commit 0270aeeb
-
mentioned in commit acd8193f
-
mentioned in commit dc467787
-
mentioned in commit 2fd357bf
-
mentioned in commit 0dcd69ac
-
mentioned in commit 673a27d5
-
mentioned in commit 1b6575b6
-
mentioned in commit accd5f17
-
mentioned in commit 18dcade5
-
mentioned in commit ff1b18f1
-
mentioned in commit d458eff2
-
mentioned in commit 15ec5032
-
mentioned in commit bbf70e00
-
mentioned in commit fa37bc68
-
mentioned in commit d7bc9ab3
-
mentioned in commit 1ca75597
-
mentioned in commit 557d712d
-
mentioned in commit dfc879c5
-
mentioned in commit 548161ec
-
mentioned in commit 50745c47
-
mentioned in commit d1045a63
-
mentioned in commit 9a1bc349
-
mentioned in commit 34380825