Skip to content

Ensure all ptrace() and /proc/<pid> IO is through an interface#167

Closed
marti4d wants to merge 1 commit into
rust-minidump:mainfrom
marti4d:puppet
Closed

Ensure all ptrace() and /proc/<pid> IO is through an interface#167
marti4d wants to merge 1 commit into
rust-minidump:mainfrom
marti4d:puppet

Conversation

@marti4d

@marti4d marti4d commented Dec 25, 2025

Copy link
Copy Markdown
Collaborator

When Android Isolated Process is enabled, every process exists in its own ephemeral UID and SELinux context. That will essentially block ptrace() and I/O to /proc/<pid>, which means minidump-writer currently can't be used to dump Isolated Processes.

This change refactors existing code to do all forbidden operations through a trait, ProcessInspector, that currently only has one implementation - DirectInspector - which calls the APIs directly (like the current implementation does).

In the next change, we will add another implementation of ProcessInspector - remote::InspectorInvoker and its other half remote::InspectorExecutor - That will allow minidump-writer to send ptrace() and /proc/<pid> I/O requests to a remote process that does have the required permissions.

Fixes #166

When Android Isolated Process is enabled, every process exists in its
own ephemeral UID and SELinux context. That will essentially block
`ptrace()` and I/O to `/proc/<pid>`, which means minidump-writer
currently can't be used to dump Isolated Processes.

This change refactors existing code to do all forbidden operations
through a trait, `ProcessInspector`, that currently only has one
implementation - `DirectInspector` - which calls the APIs directly
(like the current implementation does).

In the next change, we will add another implementation of
`ProcessInspector` - `remote::InspectorInvoker` and its other half
`remote::InspectorExecutor` - That will allow minidump-writer to
send `ptrace()` and `/proc/<pid>` I/O requests to a remote process
that does have the required permissions.

@gabrielesvelto gabrielesvelto left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This looks like a refactoring of the existing code but without introducing the new proxy-based ProcessInspector. These changes look fine the way they are but did you forget adding the new implementation to the PR?

Comment on lines +78 to +80
// TODO - Does this ptrace(PTRACE_GETREGS) and ptrace(PTRACE_GETFPREGS) stuff need to be
// abstracted too? Breakpad doesn't do it, but it seems like the type of thing that
// should be stopped by Isolated Processes...

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yes, given the isolation is around the uid/gid then these calls should also fail unless they're proxy-ed.

Comment thread src/linux/dso_debug.rs
}

pub fn write_dso_debug_stream(
process_inspector: &mut dyn ProcessInspector,

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I noticed you're declaring this argument as mutable here and in several other places, but from what I can tell it doesn't need to be mutable. Surprisingly clippy doesn't complain 🤷. Is this because of the proxy-ed reader?

@afranchuk

Copy link
Copy Markdown
Contributor

@marti4d is there more work to do here? I'd like to get it in so that #168 can be applied on top.

@marti4d marti4d closed this May 7, 2026
@marti4d marti4d deleted the puppet branch May 15, 2026 14:57
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Minidump-Writer won't work in an Android Isolated Process

3 participants