Hmbown/CodeWhale · error · anyhow::Error
multiple /proc/self/maps rows contain the updater marker
Error message
multiple /proc/self/maps rows contain the updater marker
What it means
parse_android_image_mapping found two different /proc/self/maps rows whose address ranges both contain the updater marker address. Well-formed maps never have overlapping rows, so this indicates a kernel/loader anomaly or corrupted maps output, and the updater refuses to pick between them.
Source
Thrown at crates/cli/src/update.rs:378
.context("loaded-image mapping has an invalid device")?;
let device_major = u32::from_str_radix(device_major, 16)
.context("loaded-image mapping has an invalid device major number")?;
let device_minor = u32::from_str_radix(device_minor, 16)
.context("loaded-image mapping has an invalid device minor number")?;
if path.is_empty() {
bail!("loaded-image mapping for updater marker has no pathname");
}
let mapping = AndroidImageMapping {
start,
end,
device_major,
device_minor,
inode,
path: PathBuf::from(path),
};
if matching.replace(mapping).is_some() {
bail!("multiple /proc/self/maps rows contain the updater marker");
}
}
matching.ok_or_else(|| anyhow!("no /proc/self/maps row contains the updater marker"))
}
#[cfg(all(test, unix))]
fn resolve_android_loaded_executable_report(
maps: &str,
marker: u64,
dladdr_path: &Path,
) -> Result<PathBuf> {
Ok(android_loaded_executable_proof_report(maps, marker, dladdr_path)?.path)
}
#[cfg(any(target_os = "android", all(test, unix)))]
fn android_loaded_executable_proof_report(
maps: &str,View on GitHub (pinned to 0c42157ee5)
Solutions
- Retry the update after restarting the process
- Capture /proc/self/maps from the same session and attach it to a bug report
- Fall back to a manual update (download, verify SHA256, replace) while the issue is investigated
Defensive patterns
Strategy: try-catch
Try / catch
Catch the error, retry once after a fresh process start (maps are re-read), and if the second attempt fails, escalate to a bug report rather than looping.
Prevention
- Retry in a new process instance
- Collect /proc/selfmaps output at failure time for diagnostics
- Avoid kernels/emulators known to emit malformed maps
When it happens
Trigger: Android self-update when /proc/self/maps momentarily shows overlapping mappings for the image (races during mapping reorganization) or a kernel/emulator producing malformed maps text.
Common situations: Emulators or custom kernels with nonconforming /proc semantics; extremely rare on stock devices.
Related errors
- 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
- no /proc/self/maps row contains the updater marker
- Android dladdr could not locate the updater's loaded image
AI-assisted analysis of Hmbown/CodeWhale@0c42157ee5 (2026-08-20).
Data as JSON: /api/errors/44c9b65273b391ea.
Report an issue: GitHub.