Hmbown/CodeWhale · error · anyhow::Error

loaded-image mapping for updater marker has no pathname

Error message

loaded-image mapping for updater marker has no pathname

What it means

The /proc/self/maps row containing the updater marker has an empty pathname field. Like a zero inode, this means the mapping is not tied to a named file, so the updater has no path to replace and aborts instead of guessing.

Source

Thrown at crates/cli/src/update.rs:366

            .parse::<u64>()
            .context("loaded-image mapping has an invalid inode")?;
        let path = fields.collect::<Vec<_>>().join(" ");

        if permissions.as_bytes().get(2) != Some(&b'x') {
            bail!("loaded-image mapping for updater marker is not executable");
        }
        if inode == 0 {
            bail!("loaded-image mapping for updater marker has no file inode");
        }
        let (device_major, device_minor) = device
            .split_once(':')
            .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"))
}

View on GitHub (pinned to 0c42157ee5)

Solutions

  1. Run the binary from an ordinary installed file path so its executable mapping carries a pathname
  2. Disable single-file/in-memory execution wrappers for this CLI
  3. Report the environment and a /proc/self/maps excerpt if it persists
Defensive patterns

Strategy: try-catch

Try / catch

Catch and degrade gracefully: report that the loaded image has no pathname on this system and fall back to manual update instructions.

Prevention

When it happens

Trigger: Android self-update where the marker's maps row is anonymous or a nameless device mapping: [heap]-style anonymous regions, memfd images, or namespace setups that hide mapping names.

Common situations: Exec-from-memory launchers, proot or other translation layers, restricted mount namespaces where /proc/self/maps shows no path for the image.

Related errors


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