Hmbown/CodeWhale · error · anyhow::Error
Android loaded-image authorities disagree: dladdr resolved t
Error message
Android loaded-image authorities disagree: dladdr resolved to {}, but /proc/self/maps resolved to {} What it means
The two Android authorities disagreed: dladdr's path and the /proc/self/maps row path canonicalize to different files. Because replacing the wrong file on Android is destructive, the updater requires both authorities to agree on the exact file before selecting an update target.
Source
Thrown at crates/cli/src/update.rs:417
) -> Result<AndroidExecutableProof> {
let mapping = parse_android_image_mapping(maps, marker)?;
validate_android_reported_path("dladdr", dladdr_path)?;
validate_android_reported_path("/proc/self/maps", &mapping.path)?;
let resolved_dladdr = dladdr_path.canonicalize().with_context(|| {
format!(
"failed to canonicalize Android dladdr path {}",
dladdr_path.display()
)
})?;
let resolved_mapping = mapping.path.canonicalize().with_context(|| {
format!(
"failed to canonicalize Android loaded-image mapping {}",
mapping.path.display()
)
})?;
if resolved_dladdr != resolved_mapping {
bail!(
"Android loaded-image authorities disagree: dladdr resolved to {}, but /proc/self/maps resolved to {}",
resolved_dladdr.display(),
resolved_mapping.display()
);
}
if is_android_linker_name(&resolved_mapping) {
bail!(
"Android loaded-image authorities resolved to runtime linker {}; refusing to use the linker as an update target",
resolved_mapping.display()
);
}
if !is_executable_file(&resolved_mapping) {
bail!(
"Android loaded image `{}` is not an executable regular file; refusing to select an update target",
resolved_mapping.display()
);
}
View on GitHub (pinned to 0c42157ee5)
Solutions
- Reinstall the binary at a plain, non-aliased filesystem path and retry
- Remove bind mounts or symlink layers that alias the install directory
- Report the two paths from the message along with mount info (cat /proc/mounts) for the affected directory
Defensive patterns
Strategy: try-catch
Try / catch
Catch the disagreement error and print both canonicalized paths plus a hint to check mounts/symlinks on the install directory; do not pick either path automatically.
Prevention
- Install the binary at a plain path with no bind mounts or symlink layers
- Keep the install directory outside alias-prone locations
- Compare the message's two paths to spot the aliasing culprit
When it happens
Trigger: Android self-update where the same image is reachable through two different canonical paths: bind mounts, symlinked install dirs, mount namespaces (Termux, app sandboxes), or chroots that make dladdr's link-map path and the maps path resolve differently.
Common situations: Binaries installed under bind-mounted or symlinked directories, proot/chroot environments, devices where /data or /apex aliasing changes canonicalization.
Related errors
- Android dladdr could not locate the updater's loaded image
- Android dladdr returned an empty loaded-image path
- loaded-image mapping for updater marker is not executable
- loaded-image mapping for updater marker has no file inode
- loaded-image mapping for updater marker has no pathname
AI-assisted analysis of Hmbown/CodeWhale@0c42157ee5 (2026-08-20).
Data as JSON: /api/errors/3b95d3a2d9024b79.
Report an issue: GitHub.