⎇ c22d2480b93b7802be8e8ea5a0075b8175c4fedc
crates/shared/ente-incarnate/src/error.rs
Ñawpa willay
Pi imata llamkarqan
ch'uya
1use std::path::PathBuf;
2
3#[derive(Debug, thiserror::Error)]
4pub enum IncarnateError {
5 #[error("namespace `{ns}` requires CAP_SYS_ADMIN or CLONE_NEWUSER (neither available)")]
6 NamespaceCapMissing { ns: &'static str },
7
8 #[error("user namespaces blocked by sysctl kernel.unprivileged_userns_clone=0")]
9 UserNsDisabledBySysctl,
10
11 #[error("user namespaces restricted by LSM (apparmor/selinux)")]
12 UserNsRestrictedByLsm,
13
14 #[error("cgroup path `{path}` is not writable (delegation missing?)")]
15 CgroupNotWritable { path: PathBuf },
16
17 #[error("payload is not executable in this incarnation path (Wasm/Virtual not supported here)")]
18 NonExecutablePayload,
19
20 #[error("clone(2) failed: {0}")]
21 Clone(#[source] nix::errno::Errno),
22
23 #[error("pipe2(2) failed: {0}")]
24 Pipe(#[source] nix::errno::Errno),
25
26 #[error("post-clone setup: {0}")]
27 PostClone(#[source] anyhow::Error),
28
29 #[error(transparent)]
30 Io(#[from] std::io::Error),
31
32 #[error("invalid argv: contains NUL byte")]
33 InvalidArgv,
34}
35
36/// Cuando `strict_caps = false`, errores no-fatales se reportan como
37/// `Degradation` y la encarnación continúa con menos aislamiento del pedido.
38#[derive(Debug, Clone)]
39pub enum Degradation {
40 NamespaceSkipped { ns: &'static str },
41 CgroupSkipped { path: PathBuf, reason: String },
42 CpuAffinitySkipped { reason: String },
43 UidMapFailed { reason: String },
44}