* [PATCH v3 0/5] binder: fix issues with mremap()
@ 2026-09-01 16:35 Carlos Llamas
2026-09-01 16:35 ` [PATCH v3 1/5] binder: set VM_DONTEXPAND Carlos Llamas
` (5 more replies)
0 siblings, 6 replies; 7+ messages in thread
From: Carlos Llamas @ 2026-09-01 16:35 UTC (permalink / raw)
Cc: kernel-team, linux-kernel, Suren Baghdasaryan, Carlos Llamas
This is a follow up series fixing some pre-existing issues found by
sashiko during a review of an unrelated patchset here:
https://sashiko.dev/#/patchset/20260813193433.3318288-1-surenb@google.com
The goal is to safely reject mremap() requests on binder's vma to
prevent pages from temporary leaking and accidental IPC tear-down.
--
v3:
- Switch to a range-check in vm_ops->close() and protect against
partial munmap() as Sashiko points out.
v2:
- Set VM_DONTEXPAND in [1/5] and [2/5] per Sashiko's feedback.
- Check vma->vm_start to prevent incorrect ->close() in [3/5] per
Sashiko's feedback.
https://lore.kernel.org/all/20260901030419.470246-1-cmllamas@google.com/
v1:
https://lore.kernel.org/all/20260831224145.169403-1-cmllamas@google.com/
Carlos Llamas (5):
binder: set VM_DONTEXPAND
rust_binder: set VM_DONTEXPAND
binder: check vma->vm_start in binder_vma_close()
binder: reject mremap()
rust_binder: reject mremap()
drivers/android/binder.c | 13 ++++++++++++-
drivers/android/binder/page_range.rs | 15 ++++++++++++---
drivers/android/binder/process.rs | 1 +
3 files changed, 25 insertions(+), 4 deletions(-)
--
2.55.0.966.g6673acef38-goog
^ permalink raw reply [flat|nested] 7+ messages in thread
* [PATCH v3 1/5] binder: set VM_DONTEXPAND
2026-09-01 16:35 [PATCH v3 0/5] binder: fix issues with mremap() Carlos Llamas
@ 2026-09-01 16:35 ` Carlos Llamas
2026-09-01 16:35 ` [PATCH v3 2/5] rust_binder: " Carlos Llamas
` (4 subsequent siblings)
5 siblings, 0 replies; 7+ messages in thread
From: Carlos Llamas @ 2026-09-01 16:35 UTC (permalink / raw)
To: Greg Kroah-Hartman, Arve Hjønnevåg, Todd Kjos,
Christian Brauner, Carlos Llamas, Alice Ryhl
Cc: kernel-team, linux-kernel, Suren Baghdasaryan, stable, Sashiko
Binder does not support expanding VMAs. It caches the original size
under alloc->buffer_size during mmap() and expanding the VMA would only
result in a wasted virtual range. Set the VM_DONTEXPAND flag to prevent
the vma from being expanded via mremap().
Cc: stable@vger.kernel.org
Fixes: 457b9a6f09f0 ("Staging: android: add binder driver")
Reported-by: Sashiko <sashiko-bot@kernel.org>
Closes: https://sashiko.dev/#/patchset/20260831224145.169403-1-cmllamas%40google.com?part=1
Signed-off-by: Carlos Llamas <cmllamas@google.com>
---
drivers/android/binder.c | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/drivers/android/binder.c b/drivers/android/binder.c
index 8f2ef1bd539f..1b492ed48ea6 100644
--- a/drivers/android/binder.c
+++ b/drivers/android/binder.c
@@ -6056,7 +6056,8 @@ static int binder_mmap(struct file *filp, struct vm_area_struct *vma)
proc->pid, vma->vm_start, vma->vm_end, "bad vm_flags", -EPERM);
return -EPERM;
}
- vm_flags_mod(vma, VM_DONTCOPY | VM_MIXEDMAP, VM_MAYWRITE);
+ vm_flags_mod(vma, VM_DONTCOPY | VM_MIXEDMAP | VM_DONTEXPAND,
+ VM_MAYWRITE);
vma->vm_ops = &binder_vm_ops;
vma->vm_private_data = proc;
--
2.55.0.966.g6673acef38-goog
^ permalink raw reply related [flat|nested] 7+ messages in thread
* [PATCH v3 2/5] rust_binder: set VM_DONTEXPAND
2026-09-01 16:35 [PATCH v3 0/5] binder: fix issues with mremap() Carlos Llamas
2026-09-01 16:35 ` [PATCH v3 1/5] binder: set VM_DONTEXPAND Carlos Llamas
@ 2026-09-01 16:35 ` Carlos Llamas
2026-09-01 16:35 ` [PATCH v3 3/5] binder: check vma->vm_start in binder_vma_close() Carlos Llamas
` (3 subsequent siblings)
5 siblings, 0 replies; 7+ messages in thread
From: Carlos Llamas @ 2026-09-01 16:35 UTC (permalink / raw)
To: Greg Kroah-Hartman, Arve Hjønnevåg, Todd Kjos,
Christian Brauner, Carlos Llamas, Alice Ryhl
Cc: kernel-team, linux-kernel, Suren Baghdasaryan, stable, Sashiko
Binder does not support expanding VMAs. It uses the original size to
create its RangeAllocator during mmap() and expanding the VMA would only
result in a wasted virtual range. Set the VM_DONTEXPAND flag to prevent
the vma from being expanded via mremap().
Cc: stable@vger.kernel.org
Fixes: eafedbc7c050 ("rust_binder: add Rust Binder driver")
Reported-by: Sashiko <sashiko-bot@kernel.org>
Closes: https://sashiko.dev/#/patchset/20260831224145.169403-1-cmllamas%40google.com?part=1
Signed-off-by: Carlos Llamas <cmllamas@google.com>
---
drivers/android/binder/process.rs | 1 +
1 file changed, 1 insertion(+)
diff --git a/drivers/android/binder/process.rs b/drivers/android/binder/process.rs
index 5372bfbd93b3..9038f3d13cfd 100644
--- a/drivers/android/binder/process.rs
+++ b/drivers/android/binder/process.rs
@@ -1786,6 +1786,7 @@ pub(crate) fn mmap(
vma.try_clear_maywrite().map_err(|_| EPERM)?;
vma.set_dontcopy();
vma.set_mixedmap();
+ vma.set_dontexpand();
// TODO: Set ops. We need to learn when the user unmaps so that we can stop using it.
this.create_mapping(vma)
--
2.55.0.966.g6673acef38-goog
^ permalink raw reply related [flat|nested] 7+ messages in thread
* [PATCH v3 3/5] binder: check vma->vm_start in binder_vma_close()
2026-09-01 16:35 [PATCH v3 0/5] binder: fix issues with mremap() Carlos Llamas
2026-09-01 16:35 ` [PATCH v3 1/5] binder: set VM_DONTEXPAND Carlos Llamas
2026-09-01 16:35 ` [PATCH v3 2/5] rust_binder: " Carlos Llamas
@ 2026-09-01 16:35 ` Carlos Llamas
2026-09-01 16:35 ` [PATCH v3 4/5] binder: reject mremap() Carlos Llamas
` (2 subsequent siblings)
5 siblings, 0 replies; 7+ messages in thread
From: Carlos Llamas @ 2026-09-01 16:35 UTC (permalink / raw)
To: Greg Kroah-Hartman, Arve Hjønnevåg, Todd Kjos,
Christian Brauner, Carlos Llamas, Alice Ryhl
Cc: kernel-team, linux-kernel, Suren Baghdasaryan, stable, Sashiko
Certain operations like a failed mremap() might trigger vm_ops->close()
on temporary mappings. To avoid tearing-down the main binder mapping on
these, let's verify that the VMA is within the expected address range.
Cc: stable@vger.kernel.org
Fixes: 457b9a6f09f0 ("Staging: android: add binder driver")
Reported-by: Sashiko <sashiko-bot@kernel.org>
Closes: https://sashiko.dev/#/patchset/20260831224145.169403-1-cmllamas%40google.com?part=1
Signed-off-by: Carlos Llamas <cmllamas@google.com>
---
drivers/android/binder.c | 4 ++++
1 file changed, 4 insertions(+)
diff --git a/drivers/android/binder.c b/drivers/android/binder.c
index 1b492ed48ea6..59ff436f1138 100644
--- a/drivers/android/binder.c
+++ b/drivers/android/binder.c
@@ -6018,6 +6018,10 @@ static void binder_vma_close(struct vm_area_struct *vma)
{
struct binder_proc *proc = vma->vm_private_data;
+ if (vma->vm_start < proc->alloc.vm_start ||
+ vma->vm_start >= (proc->alloc.vm_start + proc->alloc.buffer_size))
+ return;
+
binder_debug(BINDER_DEBUG_OPEN_CLOSE,
"%d close vm area %lx-%lx (%ld K) vma %lx pagep %lx\n",
proc->pid, vma->vm_start, vma->vm_end,
--
2.55.0.966.g6673acef38-goog
^ permalink raw reply related [flat|nested] 7+ messages in thread
* [PATCH v3 4/5] binder: reject mremap()
2026-09-01 16:35 [PATCH v3 0/5] binder: fix issues with mremap() Carlos Llamas
` (2 preceding siblings ...)
2026-09-01 16:35 ` [PATCH v3 3/5] binder: check vma->vm_start in binder_vma_close() Carlos Llamas
@ 2026-09-01 16:35 ` Carlos Llamas
2026-09-01 16:35 ` [PATCH v3 5/5] rust_binder: " Carlos Llamas
2026-09-01 20:41 ` [PATCH v3 0/5] binder: fix issues with mremap() Carlos Llamas
5 siblings, 0 replies; 7+ messages in thread
From: Carlos Llamas @ 2026-09-01 16:35 UTC (permalink / raw)
To: Greg Kroah-Hartman, Arve Hjønnevåg, Todd Kjos,
Christian Brauner, Carlos Llamas, Alice Ryhl
Cc: kernel-team, linux-kernel, Suren Baghdasaryan, stable, Sashiko
Binder does not support mremap() as it caches the mapping address in
alloc->vm_start. Moving the mapping breaks the IPC communication for the
process and can temporarily leak pages during a shrinker reclaim.
Fix this by explicitly rejecting the .mremap() operation.
Cc: stable@vger.kernel.org
Fixes: 457b9a6f09f0 ("Staging: android: add binder driver")
Reported-by: Sashiko <sashiko-bot@kernel.org>
Closes: https://sashiko.dev/#/patchset/20260813193433.3318288-1-surenb%40google.com?part=2
Signed-off-by: Carlos Llamas <cmllamas@google.com>
---
drivers/android/binder.c | 6 ++++++
1 file changed, 6 insertions(+)
diff --git a/drivers/android/binder.c b/drivers/android/binder.c
index 59ff436f1138..0e6d6f6923d2 100644
--- a/drivers/android/binder.c
+++ b/drivers/android/binder.c
@@ -6036,10 +6036,16 @@ VISIBLE_IF_KUNIT vm_fault_t binder_vm_fault(struct vm_fault *vmf)
}
EXPORT_SYMBOL_IF_KUNIT(binder_vm_fault);
+static int binder_mremap(struct vm_area_struct *vma)
+{
+ return -EINVAL;
+}
+
static const struct vm_operations_struct binder_vm_ops = {
.open = binder_vma_open,
.close = binder_vma_close,
.fault = binder_vm_fault,
+ .mremap = binder_mremap,
};
static int binder_mmap(struct file *filp, struct vm_area_struct *vma)
--
2.55.0.966.g6673acef38-goog
^ permalink raw reply related [flat|nested] 7+ messages in thread
* [PATCH v3 5/5] rust_binder: reject mremap()
2026-09-01 16:35 [PATCH v3 0/5] binder: fix issues with mremap() Carlos Llamas
` (3 preceding siblings ...)
2026-09-01 16:35 ` [PATCH v3 4/5] binder: reject mremap() Carlos Llamas
@ 2026-09-01 16:35 ` Carlos Llamas
2026-09-01 20:41 ` [PATCH v3 0/5] binder: fix issues with mremap() Carlos Llamas
5 siblings, 0 replies; 7+ messages in thread
From: Carlos Llamas @ 2026-09-01 16:35 UTC (permalink / raw)
To: Greg Kroah-Hartman, Arve Hjønnevåg, Todd Kjos,
Christian Brauner, Carlos Llamas, Alice Ryhl, Benno Lossin,
Gary Guo
Cc: kernel-team, linux-kernel, Suren Baghdasaryan, stable, Sashiko,
open list:RUST [PIN-INIT]:Keyword:bpin-initb|pin_initb|PinInit
Binder does not support mremap() as it caches the mapping address in
Inner::vma_addr. Moving the mapping breaks the IPC communication for the
process and can temporarily leak pages during a shrinker reclaim.
Fix this by explicitly rejecting the .mremap() operation.
Cc: stable@vger.kernel.org
Fixes: eafedbc7c050 ("rust_binder: add Rust Binder driver")
Reported-by: Sashiko <sashiko-bot@kernel.org>
Closes: https://sashiko.dev/#/patchset/20260813193433.3318288-1-surenb%40google.com?part=2
Signed-off-by: Carlos Llamas <cmllamas@google.com>
---
drivers/android/binder/page_range.rs | 15 ++++++++++++---
1 file changed, 12 insertions(+), 3 deletions(-)
diff --git a/drivers/android/binder/page_range.rs b/drivers/android/binder/page_range.rs
index 52ffbf3504e7..411efcc2116f 100644
--- a/drivers/android/binder/page_range.rs
+++ b/drivers/android/binder/page_range.rs
@@ -24,7 +24,7 @@
use kernel::{
bindings,
error::Result,
- ffi::{c_ulong, c_void},
+ ffi::{c_int, c_ulong, c_void},
mm::{virt, Mm, MmWithUser},
new_mutex, new_spinlock,
page::{Page, PAGE_SHIFT, PAGE_SIZE},
@@ -144,8 +144,17 @@ pub(crate) struct ShrinkablePageRange {
_pin: PhantomPinned,
}
-// We do not define any ops. For now, used only to check identity of vmas.
-static BINDER_VM_OPS: AssertSync<bindings::vm_operations_struct> = AssertSync(pin_init::zeroed());
+unsafe extern "C" fn binder_mremap(_: *mut bindings::vm_area_struct) -> c_int {
+ EINVAL.to_errno()
+}
+
+static BINDER_VM_OPS: AssertSync<bindings::vm_operations_struct> = {
+ let ops = bindings::vm_operations_struct {
+ mremap: Some(binder_mremap),
+ ..pin_init::zeroed()
+ };
+ AssertSync(ops)
+};
// To ensure that we do not accidentally install pages into or zap pages from the wrong vma, we
// check its vm_ops and private data before using it.
--
2.55.0.966.g6673acef38-goog
^ permalink raw reply related [flat|nested] 7+ messages in thread
* Re: [PATCH v3 0/5] binder: fix issues with mremap()
2026-09-01 16:35 [PATCH v3 0/5] binder: fix issues with mremap() Carlos Llamas
` (4 preceding siblings ...)
2026-09-01 16:35 ` [PATCH v3 5/5] rust_binder: " Carlos Llamas
@ 2026-09-01 20:41 ` Carlos Llamas
5 siblings, 0 replies; 7+ messages in thread
From: Carlos Llamas @ 2026-09-01 20:41 UTC (permalink / raw)
To: kernel-team, linux-kernel, Suren Baghdasaryan
On Tue, Sep 01, 2026 at 04:35:13PM +0000, Carlos Llamas wrote:
> This is a follow up series fixing some pre-existing issues found by
> sashiko during a review of an unrelated patchset here:
> https://sashiko.dev/#/patchset/20260813193433.3318288-1-surenb@google.com
>
> The goal is to safely reject mremap() requests on binder's vma to
> prevent pages from temporary leaking and accidental IPC tear-down.
>
> --
Dang! Sashiko keeps finding pre-existing issues. AFAICT, all these are
real issues. It's seems we also, need to reject partial range munmap().
This should be easy though via ->may_split().
I'll send out a v4 with this addition.
--
Carlos Llamas
^ permalink raw reply [flat|nested] 7+ messages in thread
end of thread, other threads:[~2026-09-01 20:41 UTC | newest]
Thread overview: 7+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-09-01 16:35 [PATCH v3 0/5] binder: fix issues with mremap() Carlos Llamas
2026-09-01 16:35 ` [PATCH v3 1/5] binder: set VM_DONTEXPAND Carlos Llamas
2026-09-01 16:35 ` [PATCH v3 2/5] rust_binder: " Carlos Llamas
2026-09-01 16:35 ` [PATCH v3 3/5] binder: check vma->vm_start in binder_vma_close() Carlos Llamas
2026-09-01 16:35 ` [PATCH v3 4/5] binder: reject mremap() Carlos Llamas
2026-09-01 16:35 ` [PATCH v3 5/5] rust_binder: " Carlos Llamas
2026-09-01 20:41 ` [PATCH v3 0/5] binder: fix issues with mremap() Carlos Llamas
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.