Re: linux-next: manual merge of the char-misc tree with the origin tree
From: Alice Ryhl
Date: Tue Jul 14 2026 - 08:46:51 EST
On Mon, Jul 13, 2026 at 03:08:06PM +0100, Mark Brown wrote:
> Hi all,
>
> Today's linux-next merge of the char-misc tree got conflicts in:
>
> drivers/android/binder/node.rs
> drivers/android/binder/process.rs
>
> between commits:
>
> 6849cabfd30fb ("rust_binder: reject context manager self-transaction")
> bc4a982889787 ("rust_binder: clear freeze listener on node removal")
>
> from the origin tree and commits:
>
> b9d17aa74ddd7 ("rust_binder: avoid allocating under node_refs for freeze listeners")
> 521eae8326a18 ("rust_binder: avoid dropping NodeRef in update_ref() under lock")
>
> from the char-misc tree.
>
> I fixed it up (see below) and can carry the fix as necessary. This
> is now fixed as far as linux-next is concerned, but any non trivial
> conflicts should be mentioned to your upstream maintainer when your tree
> is submitted for merging. You may also want to consider cooperating
> with the maintainer of the conflicting tree to minimise any particularly
> complex conflicts.
>
> I am really not at all confident in this merge.
Thanks for giving it a shot! I have a slightly different resolution
since some lines added by commit bc4a98288978 ("rust_binder: clear
freeze listener on node removal") need to be kept.
Please see below for the diff between my resolution and yours.
Alice
$ git diff linux-next/master drivers/android/binder
diff --git a/drivers/android/binder/process.rs b/drivers/android/binder/process.rs
index c5f745c85a02..0555c4bd503e 100644
--- a/drivers/android/binder/process.rs
+++ b/drivers/android/binder/process.rs
@@ -954,6 +954,8 @@ pub(crate) fn update_ref(
// increment references on itself.
let _to_free_by_handle;
let _to_free_by_node;
+ let _to_free_freeze_listener;
+ let _to_free_freeze_listener_cleanup;
let mut refs = self.node_refs.lock();
if let Some(info) = refs.by_handle.get_mut(&handle) {
if info.node_ref().update(inc, strong) {
@@ -971,6 +973,14 @@ pub(crate) fn update_ref(
unsafe { info.node_ref2().node.remove_node_info(info) };
let id = info.node_ref().node.global_id();
+
+ if let Some(freeze) = *info.freeze() {
+ if let Some(fl) = refs.freeze_listeners.remove(&freeze) {
+ _to_free_freeze_listener_cleanup = fl.on_process_cleanup(&self);
+ _to_free_freeze_listener = fl;
+ }
+ }
+
_to_free_by_handle = refs.by_handle.remove_node(&handle);
_to_free_by_node = refs.by_node.remove_node(&id);
refs.handle_is_present.release_id(handle as usize);