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

  1. Reinstall the binary at a plain, non-aliased filesystem path and retry
  2. Remove bind mounts or symlink layers that alias the install directory
  3. 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

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


AI-assisted analysis of Hmbown/CodeWhale@0c42157ee5 (2026-08-20). Data as JSON: /api/errors/3b95d3a2d9024b79. Report an issue: GitHub.