Skip to content

Commit c9c111e

Browse files
committed
refactor: adapt runtime to optional config fields and harden device setup
- Access hooks/capabilities/env through optional wrappers - Use rlimit enum directly instead of string lookup - Replace to_string with to_string_view for namespace types - Validate bind mount source/destination type match - Reopen root fd after mounting to "/" to avoid stale fd - Simplify device creation: remove EPERM fallback, use uid/gid 0 - Loop dev symlinks via array with error_code, tolerate existing - Validate namespace path type matches expected - Resolve relative mount sources early in container constructor
1 parent 40c591f commit c9c111e

3 files changed

Lines changed: 177 additions & 171 deletions

File tree

src/linyaps_box/command/exec.cpp

Lines changed: 16 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ auto linyaps_box::command::exec(const struct exec_options &options) -> int
2323
option.proc.args = options.command;
2424
option.proc.terminal = options.tty;
2525
option.proc.no_new_privileges = options.no_new_privs;
26-
option.proc.env = options.envs.value_or(std::vector<std::string>{ });
26+
option.proc.env = options.envs;
2727
option.preserve_fds = options.preserve_fds;
2828

2929
if (option.proc.terminal && options.console_socket) {
@@ -33,11 +33,20 @@ auto linyaps_box::command::exec(const struct exec_options &options) -> int
3333
#ifdef LINYAPS_BOX_ENABLE_CAP
3434
if (options.caps) {
3535
const auto &caps = options.caps.value();
36-
auto transform_cap = [&caps](std::vector<cap_value_t> &cap_set) {
36+
if (!option.proc.capabilities) {
37+
option.proc.capabilities.emplace();
38+
}
39+
40+
auto transform_cap = [&caps](std::optional<std::vector<cap_value_t>> &cap_set) {
41+
if (!cap_set) {
42+
cap_set.emplace();
43+
}
44+
45+
cap_set->reserve(caps.size());
3746
std::transform(
3847
caps.cbegin(),
3948
caps.cend(),
40-
std::back_inserter(cap_set),
49+
std::back_inserter(*cap_set),
4150
[](const std::string &cap) {
4251
cap_value_t val{ 0 };
4352
if (cap_from_name(cap.c_str(), &val) < 0) {
@@ -48,10 +57,10 @@ auto linyaps_box::command::exec(const struct exec_options &options) -> int
4857
});
4958
};
5059

51-
transform_cap(option.proc.capabilities.effective);
52-
transform_cap(option.proc.capabilities.ambient);
53-
transform_cap(option.proc.capabilities.bounding);
54-
transform_cap(option.proc.capabilities.permitted);
60+
transform_cap(option.proc.capabilities->effective);
61+
transform_cap(option.proc.capabilities->ambient);
62+
transform_cap(option.proc.capabilities->bounding);
63+
transform_cap(option.proc.capabilities->permitted);
5564
}
5665
#endif
5766

0 commit comments

Comments
 (0)