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

  1. Retry the update after restarting the process
  2. Capture /proc/self/maps from the same session and attach it to a bug report
  3. 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

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


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