[PATCH v3 0/7] rust_binder : Implement dynamic debug logging mask

Jahnavi MN via B4 Relay posted 7 patches 1 week, 5 days ago
There is a newer version of this series
drivers/android/binder/debug.rs            |  76 +++++++++++++++++++
drivers/android/binder/freeze.rs           |  64 +++++++++++-----
drivers/android/binder/node.rs             |  24 ++++--
drivers/android/binder/process.rs          |  56 ++++++++++++--
drivers/android/binder/rust_binder_main.rs |  16 +++-
drivers/android/binder/rust_binderfs.c     |   3 +
drivers/android/binder/thread.rs           | 117 ++++++++++++++++++++---------
drivers/android/binder/transaction.rs      |  15 ++++
rust/kernel/task.rs                        |   7 ++
9 files changed, 309 insertions(+), 69 deletions(-)
[PATCH v3 0/7] rust_binder : Implement dynamic debug logging mask
Posted by Jahnavi MN via B4 Relay 1 week, 5 days ago
When a user-space application sends malformed data or makes a
lifecycle mistake, the driver rejects it with a generic error code
(like -EINVAL). Without internal logs, the driver acts as a
"black box," forcing developers to guess which check failed.

In the legacy C Binder driver, this issue is solved using a dynamic
debug_mask module parameter that toggles verbose logs for specific
subsystems. This series brings the same critical capability to the
Rust Binder driver to provide developers with clear, real-time
feedback.

Instead of rebuilds, reboots, or guessing:
- Developers can enable logs instantly on a running device by writing to 
  `/sys/module/rust_binder/parameters/debug_mask`.
- It prints the exact reason for failures (such as alignment errors, 
  mismatched call stacks, or invalid handle references) directly into 
  `dmesg`, reducing debugging time from hours to seconds.
- It protects system logs by keeping logging off by default and only 
  enabling it when developers are actively troubleshooting.

Based on top of:
https://git.kernel.org/pub/scm/linux/kernel/git/gregkh/char-misc.git

Signed-off-by: Jahnavi MN <jahnavimn@google.com>
---
Changes in v3:
- Rebase the entire series on top of the latest char-misc-testing tree.
- Define `rust_binder_debug_mask` in Rust as an `Atomic<u32>` and export it to
  C as `extern u32` to avoid raw volatile reads and FFI UB.
- Use `kernel::bits::bit_u32` instead of raw bit shifts.
- Simplify `binder_debug!` macro rules and remove the redundant `raw` helper.
- Wrap the raw mask in `DebugMasks` to use type-safe `.contains(mask)`.
- Link to v2: https://lore.kernel.org/r/20260710-rust_binder_debug_mask-v2-0-2846410e3ae6@google.com

Changes in v2:
- Defined the debug mask categories using bitflags (impl_flags) to
  resolve potential Undefined Behavior and match Rust idioms.
- Added a tgid helper to rust/kernel/task.rs to expose the task
  group ID and optimize default "PID:TID" prefixing.
- Implemented the BINDER_DEBUG_DEATH_NOTIFICATION mask to log OOM
  failures, lifecycle updates, and async delivery to user-space.
- Added pid fields to ThreadError, DeliverCode, and FreezeMessage
  to ensure cancellation logs show the correct process PID instead
  of background kworker PIDs.
- Removed duplicate PID printing across workqueue, transaction
  failure, and stack unwinding logs.
- Refactored log formatting (e.g. formatted BinderError with {:?},
  used "strong"/"weak" strings, and improved message wording).
- Fixed logic bugs (restored missing update_ref block, moved manager
  lookup warnings).
- Cleaned up spurious newlines, corrected indentations, and adjusted
  all commit titles to be shorter and more meaningful.
- Link to v1: https://lore.kernel.org/r/20260703-rust_binder_debug_mask-v1-0-9bdf12b5325c@google.com

---
Jahnavi MN (7):
      rust_binder: Add dynamic debug logging mask
      rust_binder: Implement BINDER_DEBUG_USER_ERROR for freezer-related operation
      rust_binder: Implement BINDER_DEBUG_USER_ERROR for refcounting and death notifications
      rust_binder: Implement BINDER_DEBUG_USER_ERROR for transaction parsing failures
      rust_binder: Implement BINDER_DEBUG_FAILED_TRANSACTION
      rust_binder: Implement BINDER_DEBUG_DEATH_NOTIFICATION
      rust_binder: Implement BINDER_DEBUG_DEAD_TRANSACTION

 drivers/android/binder/debug.rs            |  76 +++++++++++++++++++
 drivers/android/binder/freeze.rs           |  64 +++++++++++-----
 drivers/android/binder/node.rs             |  24 ++++--
 drivers/android/binder/process.rs          |  56 ++++++++++++--
 drivers/android/binder/rust_binder_main.rs |  16 +++-
 drivers/android/binder/rust_binderfs.c     |   3 +
 drivers/android/binder/thread.rs           | 117 ++++++++++++++++++++---------
 drivers/android/binder/transaction.rs      |  15 ++++
 rust/kernel/task.rs                        |   7 ++
 9 files changed, 309 insertions(+), 69 deletions(-)
---
base-commit: f8d269390cd2a7a9fb5a31f153e7c7b709defea0
change-id: 20260702-rust_binder_debug_mask-636737015624

Best regards,
-- 
Jahnavi MN <jahnavimn@google.com>
Re: [PATCH v3 0/7] rust_binder : Implement dynamic debug logging mask
Posted by Alice Ryhl 1 week, 3 days ago
On Mon, Jul 13, 2026 at 12:35:22PM +0000, Jahnavi MN via B4 Relay wrote:
> base-commit: f8d269390cd2a7a9fb5a31f153e7c7b709defea0

Greg, a quick practical question. This doesn't apply anymore because of
the merge commit, and it actually also has a conflict with the fix
"rust_binder: only print failure if error has source". (Both conflicts
are in the same chunk of code.)

The rebase of this series that I'm currently using for my development is
this one:
https://github.com/Darksonn/linux/commits/rust-binder-base/

That rebase happens to fix the conflict with the merge commit in a way
that implicitly fixes the same issue as "rust_binder: only print failure
if error has source". So with that rebase, the fix patch is only
relevant for 7.2 and the stable backports. (i.e. merge conflict fix is
to keep char-misc-next side)

Do you want a resend of this that looks like that?


As for my other series, the netlink series [1] applies cleanly on
char-misc-next both before and after applying the debug mask changes (or
at least, they cherry-pick cleanly after 'git am'ing on the original
base commit).

And the ratelimited printing [2] and synchronize_rcu() series [3] both
need new versions with changes, but I'd like to base them on top of the
debug mask and netlink patchsets.

Any concerns?

[1]: https://lore.kernel.org/r/20260707-binder-netlink-v7-0-42b40e4b1ac8@google.com/
[2]: https://lore.kernel.org/r/20260623-pr-ratelimited-v1-0-cc922f544dc0@google.com/
[3]: https://lore.kernel.org/all/20260707-upgrade-poll-v6-0-4b8fae7bf1d9@google.com/

Alice
Re: [PATCH v3 0/7] rust_binder : Implement dynamic debug logging mask
Posted by Greg Kroah-Hartman 1 week, 2 days ago
On Wed, Jul 15, 2026 at 12:16:38PM +0000, Alice Ryhl wrote:
> On Mon, Jul 13, 2026 at 12:35:22PM +0000, Jahnavi MN via B4 Relay wrote:
> > base-commit: f8d269390cd2a7a9fb5a31f153e7c7b709defea0
> 
> Greg, a quick practical question. This doesn't apply anymore because of
> the merge commit, and it actually also has a conflict with the fix
> "rust_binder: only print failure if error has source". (Both conflicts
> are in the same chunk of code.)
> 
> The rebase of this series that I'm currently using for my development is
> this one:
> https://github.com/Darksonn/linux/commits/rust-binder-base/
> 
> That rebase happens to fix the conflict with the merge commit in a way
> that implicitly fixes the same issue as "rust_binder: only print failure
> if error has source". So with that rebase, the fix patch is only
> relevant for 7.2 and the stable backports. (i.e. merge conflict fix is
> to keep char-misc-next side)
> 
> Do you want a resend of this that looks like that?

Yes please send a new series that I can actually apply.

> As for my other series, the netlink series [1] applies cleanly on
> char-misc-next both before and after applying the debug mask changes (or
> at least, they cherry-pick cleanly after 'git am'ing on the original
> base commit).

Are they ready to be applied?  If so, I'll pick them up.

> And the ratelimited printing [2] and synchronize_rcu() series [3] both
> need new versions with changes, but I'd like to base them on top of the
> debug mask and netlink patchsets.

No problems, just send those again too please.

thanks,

greg k-h
Re: [PATCH v3 0/7] rust_binder : Implement dynamic debug logging mask
Posted by Alice Ryhl 1 week, 2 days ago
On Thu, Jul 16, 2026 at 8:05 AM Greg Kroah-Hartman
<gregkh@linuxfoundation.org> wrote:
>
> On Wed, Jul 15, 2026 at 12:16:38PM +0000, Alice Ryhl wrote:
> > On Mon, Jul 13, 2026 at 12:35:22PM +0000, Jahnavi MN via B4 Relay wrote:
> > As for my other series, the netlink series [1] applies cleanly on
> > char-misc-next both before and after applying the debug mask changes (or
> > at least, they cherry-pick cleanly after 'git am'ing on the original
> > base commit).
>
> Are they ready to be applied?  If so, I'll pick them up.

Yes netlink is ready.

Alice