Hmbown/CodeWhale · error · anyhow::Error
Android {authority} reported non-absolute loaded-image path
Error message
Android {authority} reported non-absolute loaded-image path `{}` What it means
validate_android_reported_path rejected a loaded-image path because it is not absolute. Both dladdr's dli_fname and /proc/self/maps paths are expected to be absolute; a relative one means the process runs under a transformed filesystem view (chroot/proot) or the loader produced a nonconforming path, and the updater refuses to resolve it ambiguously.
Source
Thrown at crates/cli/src/update.rs:449
"Android loaded image `{}` is not an executable regular file; refusing to select an update target",
resolved_mapping.display()
);
}
validate_android_mapping_identity(&mapping, &resolved_mapping)?;
Ok(AndroidExecutableProof {
path: resolved_mapping,
device_major: mapping.device_major,
device_minor: mapping.device_minor,
inode: mapping.inode,
proof_kind: AndroidExecutableProofKind::DladdrAndProcMaps,
})
}
#[cfg(any(target_os = "android", all(test, unix)))]
fn validate_android_reported_path(authority: &str, path: &Path) -> Result<()> {
if !path.is_absolute() {
bail!(
"Android {authority} reported non-absolute loaded-image path `{}`",
path.display()
);
}
if path.to_string_lossy().ends_with(" (deleted)") {
bail!(
"Android {authority} reported deleted loaded image `{}`",
path.display()
);
}
if is_android_linker_name(path) {
bail!(
"Android {authority} identifies runtime linker `{}`; refusing to use the linker as an update target",
path.display()
);
}
Ok(())
}View on GitHub (pinned to 0c42157ee5)
Solutions
- Run the CLI and its self-update outside chroot/proot, on the normal Android filesystem
- If a container is required, update by replacing the binary from outside the container
- Report the relative path from the message together with the sandbox setup
Defensive patterns
Strategy: try-catch
Try / catch
Catch the error, detect the chroot/proot context, and either re-run outside the transformed root or perform a manual binary replacement.
Prevention
- Run self-update on the host filesystem, not inside chroot/proot
- Update containers by rebuilding or replacing files from outside
- Prefer documented install locations on the normal Android filesystem
When it happens
Trigger: Android self-update inside a chroot/proot sandbox or with loaders that record paths relative to an altered root, making the reported image path relative.
Common situations: proot-based Linux distros on Android, chrooted development environments, custom containers.
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/7bcafa7dbf386f64.
Report an issue: GitHub.