Skip to content

feat: implement UTS namespace support#936

Closed
fzg-23 wants to merge 1 commit into
rcore-os:devfrom
fzg-23:feature/uts-namespace
Closed

feat: implement UTS namespace support#936
fzg-23 wants to merge 1 commit into
rcore-os:devfrom
fzg-23:feature/uts-namespace

Conversation

@fzg-23

@fzg-23 fzg-23 commented May 25, 2026

Copy link
Copy Markdown
Contributor
  • Add UtNamespace type with nodename/domainname fields
  • Add uts_ns field to ProcessData for per-process namespace
  • Implement sys_unshare to handle CLONE_NEWUTS
  • Implement sys_sethostname to write to process's uts_ns
  • Implement sys_uname to read from process's uts_ns
  • Add dispatch entries for unshare/sethostname/setdomainname
  • Update clone to handle CLONE_NEWUTS namespace inheritance
  • Add test case for UTS namespace isolation

- Add UtNamespace type with nodename/domainname fields
- Add uts_ns field to ProcessData for per-process namespace
- Implement sys_unshare to handle CLONE_NEWUTS
- Implement sys_sethostname to write to process's uts_ns
- Implement sys_uname to read from process's uts_ns
- Add dispatch entries for unshare/sethostname/setdomainname
- Update clone to handle CLONE_NEWUTS namespace inheritance
- Add test case for UTS namespace isolation
@luodeb
luodeb self-requested a review May 25, 2026 08:26

@mai-team-app mai-team-app Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

审查总结

本 PR 实现了 UTS namespace 的基本支持,包括:

  • 新增 UtNamespace 类型,包含 nodename/domainname 字段
  • ProcessData 中添加 uts_ns 字段(SpinNoIrq<Arc<SpinNoIrq<UtNamespace>>>),支持进程间共享 namespace
  • 实现 sys_unshare(CLONE_NEWUTS) 创建独立的 UTS namespace
  • 实现 sys_sethostname/sys_setdomainname 写入进程所属 namespace
  • 修改 sys_uname 从进程 namespace 读取 nodename/domainname
  • 更新 clone 路径,处理 CLONE_NEWUTS 的 namespace 继承/复制逻辑
  • 添加 bug-unshare-uts 测试用例,覆盖 unshare、sethostname/setdomainname 往返、fork 继承、共享 namespace 传播等场景

代码质量

整体实现结构清晰,遵循项目现有模式:

  • UtNamespace 定义在 task/namespace.rs,与 ProcessData 放在同一模块
  • sys_unshare 放在 syscall/task/namespace.rs,与其他 syscall 分离
  • sys_uname/sys_sethostname/sys_setdomainname 放在 syscall/sys.rs,符合现有布局
  • 使用 Arc 实现 namespace 共享,语义正确
  • SpinNoIrq 的锁定顺序一致(先外层后内层),不会死锁
  • sys_uname 中将 SpinNoIrq 锁的释放与用户态内存访问分离,避免 IRQ 禁用问题

验证结果

检查项 结果
cargo xtask clippy --package starry-kernel (13 个 feature 组合) ✅ 全部通过
cargo fmt --check ❌ 3 处格式问题
CI: Check formatting / run_host ❌ failure
CI: Run sync-lint / run_container ⚠️ cancelled (级联)
CI: 其余检查 ⚠️ skipped

阻塞问题

格式问题cargo fmt --check 在 3 处失败:

  1. os/StarryOS/kernel/src/syscall/task/clone.rs:250 — 行过长,需换行
  2. os/StarryOS/kernel/src/syscall/task/namespace.rs:1use 语句后缺少空行
  3. os/StarryOS/kernel/src/task/namespace.rs:6ROOT_UTS_NS 定义行过长

请运行 cargo fmt 修复上述格式问题后重新提交。

非阻塞观察

  1. sys_unshare 缺少权限检查:Linux 中 unshare(CLONE_NEWUTS) 需要 CAP_SYS_ADMIN,当前实现未检查任何权限。考虑到 StarryOS 的能力系统尚未完全实现,这是一个可接受的简化,但建议后续补充。

  2. 测试质量良好bug-unshare-uts 测试覆盖了 6 个场景(unshare 成功、拒绝不支持的 flag、sethostname 往返、setdomainname 往返、fork 继承、共享 namespace 传播),结构清晰,使用 syscall() 直接调用避免 libc 包装的干扰。

  3. 与现有代码无重复:base 分支(dev)中不存在 UTS namespace 实现,CLONE_NEWUTS 仅在 clone.rs 的 unsupported flags 集合中出现。与当前其他 open PR(如 #934 axvisor board tests)无功能重叠。

  4. clone 路径行为改进:将不支持的 namespace flag 从 warn!(仅警告)改为 error! + return EINVAL,更符合 Linux 语义。

结论

请修复格式问题后重新请求审查。修复后(仅需 cargo fmt),代码逻辑上没有其他阻塞问题。

Powered by deepseek-v4-pro

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant