diff options
| author | Greg Kroah-Hartman <gregkh@linuxfoundation.org> | 2026-06-09 12:32:51 +0200 |
|---|---|---|
| committer | Greg Kroah-Hartman <gregkh@linuxfoundation.org> | 2026-06-09 12:32:51 +0200 |
| commit | 73e7709d9919efeb8df2cedd7804734a3254a0bb (patch) | |
| tree | 2c9126ec1b1e76c38f6713b4b7e10d44b4d24847 /drivers/android/binder/transaction.rs | |
| parent | d0acb5202d0e33d23cbe6994424587fbb05a5360 (diff) | |
| parent | f53879e2e1e2fa053040e734c1ef8f386109a61b (diff) | |
Merge v7.0.12linux-rolling-stable
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Diffstat (limited to 'drivers/android/binder/transaction.rs')
| -rw-r--r-- | drivers/android/binder/transaction.rs | 11 |
1 files changed, 10 insertions, 1 deletions
diff --git a/drivers/android/binder/transaction.rs b/drivers/android/binder/transaction.rs index 75e6f5fbaaae..e1b578c87446 100644 --- a/drivers/android/binder/transaction.rs +++ b/drivers/android/binder/transaction.rs @@ -250,7 +250,8 @@ impl Transaction { /// Not used for replies. pub(crate) fn submit(self: DLArc<Self>) -> BinderResult { // Defined before `process_inner` so that the destructor runs after releasing the lock. - let mut _t_outdated; + let _t_outdated; + let _oneway_node; let oneway = self.flags & TF_ONE_WAY != 0; let process = self.to.clone(); @@ -267,6 +268,14 @@ impl Transaction { if let Some(t_outdated) = target_node.take_outdated_transaction(&self, &mut process_inner) { + let mut alloc_guard = t_outdated.allocation.lock(); + if let Some(alloc) = (*alloc_guard).as_mut() { + // Take the oneway node to prevent `Allocation::drop` from calling + // `pending_oneway_finished()`, which would be incorrect as this + // transaction is not being submitted. + _oneway_node = alloc.take_oneway_node(); + } + drop(alloc_guard); // Save the transaction to be dropped after locks are released. _t_outdated = t_outdated; } |
