Commit Graph

1207 Commits

Author SHA1 Message Date
LoGin 12b9e0629a
feat(vfs): 实现写/截断/修改所有者时清理suid/sgid位 (#1562)
* feat(vfs): 实现写/截断/修改所有者时清理suid/sgid位

- 在文件写入、截断和chown操作后,根据Linux语义清理suid/sgid位
- 修复init进程能力集,移除CAP_FSETID以符合gVisor测试预期
- 修复UserBufferWriter边界检查,防止缓冲区溢出

Signed-off-by: longjin <longjin@DragonOS.org>
2025-12-27 00:23:06 +08:00
LoGin 3a66c317af
fix(mm): 修复页面错误处理中的信号发送逻辑 (#1561)
- 在用户态页面错误处理中,当检测到段错误时,添加了提前返回以避免重复发送信号
- 重构信号信息构建逻辑,简化代码结构,统一使用动态确定的信号类型

Signed-off-by: longjin <longjin@DragonOS.org>
2025-12-26 22:31:21 +08:00
JingXuan_Wei 7bbcb4aa0e
fix(riscv64 platform):Fix several bugs on the VF2 platform and existing bugs in the RISCV architecture (#1560)
- Fix several bugs on the VF2 platform
- Fix some riscv bugs because of kexec codes.

Signed-off-by: JensenWei007 <jensenwei007@gmail.com>
2025-12-26 20:58:02 +08:00
Samuel Dai f031e61716
feat(build): replace rootfs and user space app creation with nix base scripts (#1505)
Implement
- userland build in nix, with cross platform support and 
non-previleged disk gen
- qemu start command in nix
- nix develop envrionment for make kernel
- document build environment defined by nix

Next Steps
- 减小rootfs占用nix store的体积
- deb包的打包兼容用的函数
- 更加灵活的构建依赖注入
- 保留先前系统内修改的内容
- nix rootfs build与qemu启动适配 vnc模式
- 适配 riscv64 构建
- Arm MacOS上的开发兼容
2025-12-26 18:36:13 +08:00
LoGin aab4617d3a
feat(net/unix): 为Unix流/seqpacket套接字添加缓冲区大小调整、超时设置与关闭处理 (#1555)
* feat(net/unix): 为Unix流/seqpacket套接字添加缓冲区大小调整、超时设置与关闭处理

- 在RingBuffer中新增resize方法,支持动态调整环形缓冲区容量并保持数据一致性
- 为Unix流套接字实现SO_SNDBUF/SO_RCVBUF选项,允许用户设置发送/接收缓冲区大小
- 新增SO_SNDTIMEO/SO_RCVTIMEO超时选项,支持阻塞操作的超时控制
- 重构seqpacket接收逻辑,统一try_recv_seqpacket_meta方法处理peek/truncate场景
- 完善套接字关闭流程,正确通知对端并唤醒等待队列
- 启用gVisor测试中的socket_unix_seqpacket相关测试用例

Signed-off-by: longjin <longjin@DragonOS.org>

* feat(net/socket): 为Socket trait添加open_file_counter方法

- 在Socket trait中新增open_file_counter方法,用于管理socket的打开文件引用计数
- 为UdpSocket、TcpSocket、NetlinkSocket、UnixDatagramSocket和UnixStreamSocket实
现open_file_counter方法
- 修改socket inode的open和close方法,使用引用计数确保只在最后一次关闭时执行清理操作

Signed-off-by: longjin <longjin@DragonOS.org>

* refactor(net/socket): 修改环形缓冲区resize方法以返回Result类型

- 将RingBuffer::resize()的断言改为返回SystemError错误
- 更新Producer和Consumer的resize方法签名
- 修改Unix流套接字的缓冲区调整方法以处理错误

Signed-off-by: longjin <longjin@DragonOS.org>

* feat(net/unix): 实现AF_UNIX流套接字完整功能

- 新增连接重置(ECONNRESET)机制,模拟Linux行为
- 实现SO_LINGER、SO_ACCEPTCONN套接字选项支持
- 添加SO_SNDBUF发送缓冲区限制检查
- 修复sendto()在已连接套接字上的EISCONN错误处理
- 优化缓冲区大小计算和限制逻辑
- 通过gVisor socket_unix_stream_test测试

Signed-off-by: longjin <longjin@DragonOS.org>

* fix(net/socket): 修复环形缓冲区并发竞争和sendto语义问题

- 修复环形缓冲区在resize时的并发竞争问题,确保容量计算与索引访问的一致性
- 修复Unix流套接字sendto方法的语义,正确处理连接状态和地址参数

Signed-off-by: longjin <longjin@DragonOS.org>

* fix(net): 同步socket非阻塞状态与文件标志,修复Unix域套接字抽象地址处理

- 在fcntl(F_SETFL)中增加对socket非阻塞状态的同步,确保内部状态与文件标志一致
- 重构Unix域套接字抽象地址处理,支持二进制名称(可包含嵌入的NUL字符)
- 将抽象地址表作用域限定到网络命名空间,修复跨命名空间地址冲突问题
- 修复Unix域套接字地址长度计算,使其符合Linux语义
- 更新gvisor测试白名单,启用socket_unix_unbound_abstract_test测试

Signed-off-by: longjin <longjin@DragonOS.org>

* feat(net/socket): 为Unix流套接字添加监听器缓冲区大小继承功能

- 在Listener创建时传入sndbuf_effective和rcvbuf_effective参数
- 新增set_sndbuf_effective和set_rcvbuf_effective方法用于更新监听器缓冲区设置
- 修改push_incoming方法以应用客户端缓冲区配置
- 新增ring_cap_for_effective_sockbuf辅助函数计算环形缓冲区容量
- 在accept时继承监听器端的SO_SNDBUF/SO_RCVBUF设置
- 修改setsockopt逻辑,支持在监听器状态下更新缓冲区大小

Signed-off-by: longjin <longjin@DragonOS.org>

---------

Signed-off-by: longjin <longjin@DragonOS.org>
2025-12-26 17:25:32 +08:00
LoGin b5017cfa5c
feat(mm): 改进共享匿名映射和mremap的Linux兼容性 (#1552)
* feat(mm): 改进共享匿名映射和mremap的Linux兼容性

- 修复共享匿名映射的页偏移计算,添加超出范围SIGBUS检查
- 改进mremap系统调用,支持MREMAP_FIXED、原地扩展、复制映射等语义
- 完善VM_SHARED和VM_MAYSHARE标志的转换逻辑
- 重构AnonSharedMapping,支持固定大小和页缓存管理

Signed-off-by: longjin <longjin@DragonOS.org>

* fix(mm): 将文件页偏移替换为后备对象页偏移以提高内存管理一致性

---------

Signed-off-by: longjin <longjin@DragonOS.org>
2025-12-26 00:05:53 +08:00
LoGin 20f1b503e5
fix(ipc): 修复信号处理中的线程组同步问题 (#1553)
* fix(ipc): 修复信号处理中的线程组同步问题

- 修复 SIGSTOP/SIGCONT 信号处理,确保对线程组内所有线程生效
- 修复 nanosleep 在伪唤醒时错误返回的问题
- 修复进程停止/唤醒时的调度队列管理问题

Signed-off-by: longjin <longjin@DragonOS.org>

* fix(sched): 修复任务停止时的队列处理逻辑,新增 DEQUEUE_STOPPED 标志

---------

Signed-off-by: longjin <longjin@DragonOS.org>
2025-12-26 00:05:39 +08:00
LoGin f76025783b
feat(net/socket): 实现Unix域套接字完整功能与gVisor测试兼容性 (#1554)
* feat(net): 实现Unix域套接字完整功能与系统调用支持

- 新增Unix域数据报和流套接字的shutdown、ioctl(FIONREAD/TIOCOUTQ)支持
- 实现Unix域套接字的SCM_RIGHTS文件描述符传递功能
- 新增recvmmsg系统调用支持多消息接收
- 修复socket创建逻辑,区分VFS打开与系统调用创建的套接字文件
- 完善用户空间缓冲区访问的安全检查

Signed-off-by: longjin <longjin@DragonOS.org>

* fix(epoll): 修复epoll事件掩码和信号中断处理

- 在epoll_ctl操作中强制添加EPOLLERR和EPOLLHUP事件以符合Linux语义
- 修复EPOLLEXCLUSIVE标志在MOD操作中的处理逻辑
- 将epoll_wait信号中断错误码从ERESTARTSYS改为EINTR以符合Linux规范
- 修复eventfd的最大计数值处理,使用EVENTFD_MAX常量替代u64::MAX

Signed-off-by: longjin <longjin@DragonOS.org>

* feat(unix): 实现SCM_RIGHTS和SCM_CREDENTIALS支持

- 为Unix域数据报和流式套接字添加SCM_RIGHTS(文件描述符传递)和SCM_CREDENTIALS(
凭据传递)支持
- 实现SO_PASSCRED套接字选项,支持自动附加凭据
- 修复epoll事件处理,确保EPOLLET和EPOLLONESHOT标志符合Linux语义
- 改进recvmmsg系统调用,正确处理超时和WAITFORONE标志
- 添加辅助消息工具模块,统一处理控制消息的序列化和反序列化
- 更新gVisor测试白名单,启用socket_unix_pair_test测试

Signed-off-by: longjin <longjin@DragonOS.org>

* refactor(net/socket): 优化用户空间地址写入和原子操作

- 重构 Endpoint::write_to_user,提取 write_sockaddr_to_user 内部函数
- 新增 write_to_user_msghdr 方法用于 recvmsg 场景
- 统一原子操作内存序(Acquire/Release)
- 修复 recvmmsg 和 recvmsg 的用户空间缓冲区访问
- 优化 Unix 数据报套接字的发送/接收逻辑
- 调整 SIOCGIFCONF 中环回接口顺序以满足测试要求

Signed-off-by: longjin <longjin@DragonOS.org>

---------

Signed-off-by: longjin <longjin@DragonOS.org>
2025-12-25 23:34:48 +08:00
LoGin bccc0e391a
refactor(net): 重构网络系统调用为syscall table机制 (#1551)
* refactor(net): 重构网络系统调用为syscall table机制

- 将单个syscall.rs文件拆分为模块化结构,每个系统调用独立文件
- 新增syscall/mod.rs作为模块入口,统一导出所有网络系统调用处理器
- 实现Syscall trait的统一接口,支持参数格式化和错误处理
- 移除原syscall.rs中的网络系统调用实现,迁移至新架构
- 保持原有功能不变,仅重构代码组织结构

Signed-off-by: longjin <longjin@DragonOS.org>

* refactor(net): 统一使用UserBufferReader/Writer进行用户空间内存访问

- 在Endpoint::write_to_user中替换verify_area为UserBufferReader/Writer
- 移除accept/accept4中冗余的SOCK_CLOEXEC和SOCK_NONBLOCK常量定义
- 在getsockopt中增加optval长度限制并统一使用UserBufferReader/Writer

Signed-off-by: longjin <longjin@DragonOS.org>

---------

Signed-off-by: longjin <longjin@DragonOS.org>
2025-12-25 11:38:23 +08:00
LoGin 31d25c7478
feat(net): 完善Unix域数据报套接字功能 (#1550)
* feat(net): 完善Unix域数据报套接字功能

- 为MsgHdr结构体添加64位平台填充字段以保持与Linux布局一致
- 实现Unix域数据报套接字的SO_SNDBUF、SO_RCVBUF、SO_SNDTIMEO、SO_RCVTIMEO选项支持
- 添加sendmsg系统调用支持,完善recvmsg实现
- 支持SOCK_RAW类型映射到SOCK_DGRAM,遵循Linux行为
- 实现发送缓冲区记账机制,支持阻塞/非阻塞发送等待
- 添加MSG_PEEK和MSG_TRUNC标志支持,完善数据报截断处理
- 修复getsockopt系统调用,支持更多选项类型
- 在recv/recvfrom/send/sendto中正确处理文件描述符的O_NONBLOCK标志

Signed-off-by: longjin <longjin@DragonOS.org>
2025-12-25 00:22:02 +08:00
LoGin 8e0400e6ee
fix(net): 修复 Unix 域套接字地址处理中的边界检查与错误映射 (#1548)
* fix(net): 修复 Unix 域套接字地址处理中的边界检查与错误映射

- 在`SockAddr::to_endpoint`中,为 Unix 域套接字地址添加了`addrlen`
参数的有效性检查,确保其长度在合法范围内,并避免忽略用户传入的长度。
- 修复了`UnixEndpoint::bind`中的错误映射,将 VFS 返回的`EEXIST`错误码正确映射为
`EADDRINUSE`,以符合 Linux/POSIX 的`bind`语义。

Signed-off-by: longjin <longjin@DragonOS.org>

* refactor(net): 重构 SockAddr::to_endpoint 函数,增强安全性并统一错误处理

- 新增 MAX_SOCKADDR_LEN 常量,限制用户传入的地址结构体大小,防止内核读取越界内存
- 使用 UserBufferReader 安全读取用户空间数据,防止用户地址缺页导致内核崩溃
- 统一地址长度检查逻辑,为每个地址家族添加明确的下限检查
- 移除冗余的 unsafe 代码块,提升代码可读性
- 优化错误日志输出,便于问题定位

Signed-off-by: longjin <longjin@DragonOS.org>

---------

Signed-off-by: longjin <longjin@DragonOS.org>
2025-12-25 00:15:02 +08:00
Vitus 1da7f944a7
refactor(epoll): 重构epoll实现,优化poll系统调用 (#1504)
- 移除自定义EpollTimeoutWaker,使用通用的TimeoutWaker
- 重构EPollItem::ep_item_poll(),添加对"总是就绪"文件的支持
- 优化poll/ppoll系统调用,支持nfds=0的情况
- 修复Unix流套接字的recv_from实现
- 在wait_queue模块添加通用的TimeoutWaker结构

Signed-off-by: Vitus213 <zhzvitus@gmail.com>
Signed-off-by: longjin <longjin@DragonOS.org>
Co-authored-by: longjin <longjin@DragonOS.org>
2025-12-24 15:43:13 +08:00
Vitus 66d902e24c
feat(loop_device): 新增loop设备子系统 (#1261)
- 新增loop设备驱动,支持将文件作为块设备使用
- 实现loop设备管理器,支持设备创建、绑定、删除等生命周期管理
- 新增loop-control字符设备,提供用户态控制接口
- 实现完整的ioctl命令集,包括LOOP_SET_FD、LOOP_CLR_FD、LOOP_SET_STATUS64等
- 添加设备状态机管理,支持Unbound、Bound、Rundown、Draining、Deleting状态
- 完善块设备卸载流程,支持并发I/O期间的设备删除
- 新增IDA分配器特定ID分配功能
- 更新GenDisk的read_at、write_at、metadata和ioctl实现
- 添加loop设备文档和测试用例

Signed-off-by: Vitus213 <zhzvitus@gmail.com>
Signed-off-by: longjin <longjin@DragonOS.org>
Co-authored-by: longjin <longjin@DragonOS.org>
2025-12-24 14:29:46 +08:00
LoGin c3215a0bf5
feat(time): 重构POSIX时钟支持并实现clock_getres系统调用 (#1547)
- 新增posix_clock模块,统一处理不同时钟类型的当前时间和分辨率查询
- 扩展PosixClockID枚举以支持动态CPU时钟ID,用于pthread_getcpuclockid
- 实现clock_getres系统调用,支持查询时钟分辨率
- 重构clock_gettime系统调用,使用新的posix_clock_now函数
- 更新gvisor测试白名单,添加clock_getres_test和clock_gettime_test

Signed-off-by: longjin <longjin@DragonOS.org>
2025-12-24 11:09:47 +08:00
LoGin 79d54c9a8b
fix(pipe): 改进 FIFO 打开逻辑,引入读写端计数器 (#1546)
- 新增`r_counter`和`w_counter`字段,用于 FIFO 打开时的阻塞等待逻辑
- 重构`has_writer`和`has_reader`方法为`w_counter_changed`和`r_counter_changed`
,采用 Linux 内核设计,通过计数器变化判断对端是否打开
- 在`open`
方法中,读写端打开时递增对应计数器,并在阻塞等待时检查计数器变化,避免竞态条件
- 优化中断处理逻辑,被信号中断时仅回滚`reader`或`writer`计数,不重置`had_reader`
且不减少计数器(计数器只增不减)

Signed-off-by: longjin <longjin@DragonOS.org>
2025-12-24 11:04:52 +08:00
LoGin f914ae00f4
fix(vfs): 修复删除目录和文件时的权限检查逻辑 (#1543)
* fix(vfs): 修复删除目录和文件时的权限检查逻辑

- 在 do_remove_dir 和 do_unlink_at 中添加对父目录的 W+X 权限检查
- 调整权限检查顺序,确保在目标不存在时返回正确的 EACCES 错误码
- 删除已通过测试的 gvisor blocklist 条目

Signed-off-by: longjin <longjin@DragonOS.org>

* refactor(vfs): 提取父目录权限检查逻辑为独立函数

- 新增`check_parent_dir_permission`函数,统一处理父目录的写+执行权限检查
- 在`do_sys_openat2`、`do_remove_dir`和`do_unlink_at`中复用该函数,消除重复代码
- 遵循 Linux 语义,确保在查找目标前进行权限检查,以返回正确的错误码

Signed-off-by: longjin <longjin@DragonOS.org>

---------

Signed-off-by: longjin <longjin@DragonOS.org>
2025-12-23 21:10:00 +08:00
LoGin b71a265aff
feat(filesystem): 完善 rename 系统调用实现 (#1540)
- 在 kernfs 中处理重命名到自身的特殊情况
- 在 renameat2 系统调用中添加权限检查
- 从测试黑名单中移除已实现的测试项
- 在测试白名单中添加 munmap_test

Signed-off-by: longjin <longjin@DragonOS.org>
2025-12-23 18:21:25 +08:00
LoGin 539b82a597
feat(prctl): 实现PR_SET/GET_NO_NEW_PRIVS、PR_SET/GET_DUMPABLE、PR_SET/GET_CHILD_SUBREAPER选项 (#1538)
- 在ProcessControlBlock中新增no_new_privs和dumpable字段,并实现相应的getter/sett
er方法
- 在fork流程中新增copy_prctl_state函数,用于复制prctl相关的进程/线程状态
- 实现PR_SET/GET_NO_NEW_PRIVS、PR_SET/GET_DUMPABLE、PR_SET/GET_CHILD_SUBREAPER等
prctl选项
- 修复孤儿进程收养逻辑,优先reparent到最近的祖先subreaper,否则收养到init进程
- 更新gVisor测试白名单,启用prctl_test相关测试

Signed-off-by: longjin <longjin@DragonOS.org>
2025-12-23 11:24:49 +08:00
LoGin 358cf6d3e8
feat(mm): 新增process_vm_readv和process_vm_writev系统调用 (#1535)
* feat(mm): 新增process_vm_readv和process_vm_writev系统调用

- 实现跨进程内存读写系统调用process_vm_readv和process_vm_writev
- 在syscall/mod.rs中注册新的系统调用模块
- 修复fault.rs中的注释标点符号
- 将QEMU运行内存从512M增加到1024M

Signed-off-by: longjin <longjin@DragonOS.org>

* feat(mm): 添加进程间内存访问权限检查与RAII写保护守卫

- 新增KernelWpGuard RAII守卫,确保内核写保护在异常时正确恢复
- 实现check_process_vm_access函数,检查进程间内存访问权限
- 在process_vm_readv/writev系统调用中添加权限验证
- 改进total_iov_len函数,添加溢出检查

Signed-off-by: longjin <longjin@DragonOS.org>

---------

Signed-off-by: longjin <longjin@DragonOS.org>
2025-12-23 00:18:54 +08:00
LoGin 6060705f7c
docs: 新增发布助手能力说明文档和V0.4.0发行日志 (#1533)
- 新增`docs/agents/release_agent_capability.md`
文档,提供面向未来版本发布的通用“发布助手”能力说明和可复用模板
- 新增`docs/community/ChangeLog/V0.4.x/V0.4.0.md`
发行日志,详细记录V0.4.0版本的各项改进和变更
- 更新`docs/community/ChangeLog/index.rst`索引文件,添加V0.4.0版本条目
- 更新内核版本号至0.4.0(`kernel/Cargo.toml`和`kernel/Cargo.lock`)
- 更新`about`应用程序的版权信息和版本显示

Signed-off-by: longjin <longjin@DragonOS.org>
2025-12-22 19:52:20 +08:00
LoGin b6e9086087
fix(poll): 修复信号掩码恢复逻辑并优化pselect6实现 (#1531)
- 修复poll_select_finish中信号掩码恢复逻辑,避免在ERESTARTSYS时错误恢复
- 重构pselect6系统调用,正确处理sigmask参数和timeout验证
- 移除poll_select_finish中零超时提前返回的逻辑
- 为PosixTimeSpec添加as_millis方法
- 将select相关测试加入白名单

Signed-off-by: longjin <longjin@DragonOS.org>
2025-12-22 16:34:34 +08:00
Vitus a55ce567b1
chore: cleanup duplicate another_ext4 entry in Cargo.lock (#1530)
修复 Cargo.lock 中 another_ext4 包的重复条目问题。新版本的 Cargo
会自动清理这种重复条目并使用简化的依赖引用格式,这个提交统一了
lockfile 格式,避免不同开发者使用不同 Cargo 版本时产生冲突。
2025-12-22 13:45:35 +08:00
LoGin a59cc0e91e
fix: 修复用户空间内存访问和页面回收问题 (#1522)
* fix: 修复用户空间内存访问和页面回收问题

- 修复 IoVecs 构造时对零长度缓冲区的验证,确保符合 Linux 语义
- 修复 scatter 方法在遇到不可访问内存时的错误处理,避免部分写入后返回错误
- 修复 readv/preadv 等系统调用,使其支持分块读取和部分成功写入
- 修复页面回收逻辑,避免回收仍被映射的文件页
- 修复 UserBufferReader/Writer 对空指针的检查,防止未定义行为
- 调整缓存阈值并添加 gVisor 测试的内存检测逻辑

Signed-off-by: longjin <longjin@DragonOS.org>

* refactor(vfs): 优化 IoVecs 的用户空间内存访问检查与拷贝逻辑

- 移除冗余的 verify_area 和 UserBufferReader/Writer 检查,统一使用
user_accessible_len 进行访问性验证
- 在 gather 方法中使用 copy_from_user_protected 进行异常保护的拷贝,与 scatter
方法保持一致
- 改进错误处理逻辑,当部分数据已成功读取时返回已读取的数据,否则返回 EFAULT

Signed-off-by: longjin <longjin@DragonOS.org>

---------

Signed-off-by: longjin <longjin@DragonOS.org>
2025-12-22 11:53:40 +08:00
LoGin e7fa64be1a
fix(pipe): 修复阻塞模式下写端唤醒的竞态条件 (#1529)
- 在阻塞模式下先增加 writer 计数再等待读端,避免竞态条件
- 在增加 writer 计数后立即唤醒等待的读者
- 处理信号中断时回滚 writer 计数
- 确保非阻塞模式下也正确唤醒读者

Signed-off-by: longjin <longjin@DragonOS.org>
2025-12-21 22:18:09 +08:00
LoGin 03b8928161
fix(epoll): 正确处理普通文件的epoll事件 (#1528)
- 修复普通文件在epoll中总是就绪的逻辑,避免添加epitem
- 改进poll_select_finish函数以支持更多时间类型
- 修复select系统调用中timeout负值检查

Signed-off-by: longjin <longjin@DragonOS.org>
2025-12-21 22:17:43 +08:00
LoGin d1872d899a
feat(ext4): 修复死锁问题并增强文件系统功能 (#1509)
* feat(ext4): 修复死锁问题并增强文件系统功能

- 修复了ext4 inode读写操作中的自旋锁死锁问题
- 添加了父目录指针支持,实现parent()方法
- 改进了块设备寻址逻辑,统一使用512字节LBA
- 增强了根文件系统探测机制,支持ext4和FAT自动识别
- 修复了ELF加载器中解释器路径查找问题
- 更新了another_ext4依赖版本

Signed-off-by: longjin <longjin@DragonOS.org>

* feat(filesystem): 为ext4和fat文件系统添加探测方法并优化代码

- 在Ext4FileSystem和FATFileSystem中新增probe方法,用于探测gendisk是否包含对应文
件系统
- 重构vcore.rs中的文件系统探测逻辑,使用新的probe方法替代原有的独立探测函数
- 优化Ext4Inode构造函数中parent字段的默认值设置,使用unwrap_or_default替代unwrap
_or_else
- 在rcS启动脚本中添加PATH环境变量设置

Signed-off-by: longjin <longjin@DragonOS.org>

---------

Signed-off-by: longjin <longjin@DragonOS.org>
2025-12-21 21:04:12 +08:00
LoGin 22d60d9e41
refactor(net): 将 NapiManager 的锁机制改为 lock_irqsave (#1525)
- 修复在中断上下文中调用 napi_schedule 可能导致的死锁问题

Signed-off-by: longjin <longjin@DragonOS.org>
2025-12-21 21:03:41 +08:00
LoGin b68e54cec9
fix(process): 修正POSIX定时器信号投递逻辑并支持SIGEV_THREAD (#1521)
- 修复`ProcessControlBlock::raw_tgid()`返回错误字段的问题
- 为POSIX定时器添加SIGEV_THREAD支持,兼容gVisor测试
- 放宽SIGEV_THREAD_ID限制,允许向同线程组的任意线程投递信号

Signed-off-by: longjin <longjin@DragonOS.org>
2025-12-21 02:55:27 +08:00
LoGin 1f4ee4719e
fix: sys_exec test (#1518)
* fix(syscall): 修复execve系统调用中空路径和空参数处理问题

- 在解析符号链接前检查argv是否为空,避免空指针访问
- 添加对空路径字符串的检查,返回ENOENT错误码

Signed-off-by: longjin <longjin@DragonOS.org>

* feat(tests): 为gvisor测试套件添加版本管理功能

- 引入版本变量和版本文件以支持自动检测和升级
- 重构现有测试检查逻辑,根据版本信息决定是否重新下载
- 解压后自动记录当前安装的测试版本

Signed-off-by: longjin <longjin@DragonOS.org>

* 1

* feat(exec): 增强执行文件权限检查与信号处理

- 在execve系统调用中增加文件类型和执行权限检查
- 移除shebang处理中冗余的interpreter_path字段
- 修复fork时信号掩码复制问题,确保POSIX合规性
- 完善execveat系统调用对AT_EMPTY_PATH和AT_SYMLINK_NOFOLLOW标志的处理

Signed-off-by: longjin <longjin@DragonOS.org>

* feat(exec): Enhance fd_table management and path resolution in execve

- Implemented unsharing of fd_table in the execve process to ensure isolation when shared.
- Updated path resolution logic to only replace argv[0] if absolute_path() succeeds, maintaining original path on failure.

Signed-off-by: longjin <longjin@DragonOS.org>

* fix(exec): Correct argv handling in sys_execve for empty arguments

- Updated sys_execve to ensure that if argv is empty, an empty string is added as argv[0], maintaining proper argc behavior.
- Adjusted symlink resolution logic to only occur when argv[0] is non-empty, preventing unnecessary processing and potential errors.

Signed-off-by: longjin <longjin@DragonOS.org>

* fix(exec): 改进shebang解释器未找到时的错误日志

- 在shebang解释器查找失败时,将错误详情添加到警告日志中
- 调整gvisor测试列表,移除不支持的测试用例并添加注释说明

Signed-off-by: longjin <longjin@DragonOS.org>

---------

Signed-off-by: longjin <longjin@DragonOS.org>
2025-12-21 01:57:16 +08:00
LoGin f095a26655
feat(process): 实现进程与线程CPU时间统计及clock_nanosleep支持 (#1517)
* feat(process): 实现进程与线程CPU时间统计及clock_nanosleep支持

- 新增ProcessCpuTime结构体,用于统计用户态、内核态及总执行时间
- 为PCB添加cputime_wait_queue,支持CLOCK_PROCESS/THREAD_CPUTIME_ID的clock_nanosleep
- 在调度器CPU时间统计中增加CPU-time等待队列唤醒逻辑
- 扩展clock_gettime和clock_nanosleep系统调用,支持进程和线程CPU时间时钟
- 添加PosixTimeSpec::from_ns方法,便于从纳秒创建时间规格
- 更新测试白名单,添加clock_nanosleep_test

Signed-off-by: longjin <longjin@DragonOS.org>

* feat(cputime): 增强进程CPU时间统计并添加多线程测试

- 在`process_cputime_ns`中添加对无效线程组关系的防御性回退和日志记录
- 为`thread_cputime_ns`添加原子操作顺序的注释说明
- 新增多线程CPU时间测试程序,验证进程CPU时间累加线程时间的功能

Signed-off-by: longjin <longjin@DragonOS.org>

---------

Signed-off-by: longjin <longjin@DragonOS.org>
2025-12-20 23:04:23 +08:00
LoGin ad30303a2b
fix(process): 修复子进程退出时父进程唤醒逻辑 (#1516)
- 修正父进程唤醒条件,确保无论exit_signal为何值都唤醒父进程
- 修复线程组leader唤醒逻辑的位置错误

Signed-off-by: longjin <longjin@DragonOS.org>
2025-12-20 17:20:53 +08:00
LoGin adfac393ef
feat(procfs): 添加/proc/<pid>/ns/目录支持及cgroup命名空间实现 (#1515)
- 新增/proc/<pid>/ns/目录,支持动态创建命名空间文件
- 实现cgroup命名空间基础结构,支持CLONE_NEWCGROUP标志
- 为命名空间文件添加ioctl支持(NS_GET_NSTYPE等命令)
- 扩展setns系统调用以支持cgroup命名空间切换

Signed-off-by: longjin <longjin@DragonOS.org>
2025-12-20 16:36:05 +08:00
LoGin c4c283d326
feat(vfs): 新增 copy_file_range 系统调用实现及测试 (#1513)
* feat(vfs): 新增 copy_file_range 系统调用实现及测试

- 实现 copy_file_range 系统调用,支持文件间高效数据拷贝
- 添加完整的测试用例,覆盖基本功能、边界条件和错误处理

Signed-off-by: longjin <longjin@DragonOS.org>
2025-12-20 14:26:25 +08:00
LoGin ce087f7a7a
fix(vfs): 修复symlinkat中父目录路径为None时的处理逻辑 (#1512)
- 当路径只有文件名时,父目录应为起始inode本身
- 避免对None值调用lookup_follow_symlink导致错误

Signed-off-by: longjin <longjin@DragonOS.org>
2025-12-20 03:13:23 +08:00
LoGin c557b9b773
feat(exec): 添加shebang脚本支持 (#1511)
* feat(exec): 添加shebang脚本支持

- 新增shebang模块,实现脚本解析和递归执行
- 重构exec模块,支持递归加载和上下文跟踪
- 添加测试程序验证shebang功能

Signed-off-by: longjin <longjin@DragonOS.org>

* feat(process): Add inline attribute to parse_shebang_line function

- Added #[inline(never)] attribute to the parse_shebang_line function for optimization purposes.
- This change aims to improve performance by controlling inlining behavior during compilation.

Signed-off-by: longjin <longjin@DragonOS.org>

* 1

---------

Signed-off-by: longjin <longjin@DragonOS.org>
2025-12-20 02:30:50 +08:00
LoGin 514283011d
feat(filesystem): Enhance symlink handling and VFS behavior (#1507)
* feat(filesystem): Enhance symlink handling and VFS behavior

- Updated tmpfs to require page cache for both regular files and symlinks to ensure proper read/write operations.
- Increased the maximum symlink follow count to 40, aligning with Linux 6.6 standards.
- Improved symlink handling in VFS to correctly follow symlinks based on path conditions and trailing slashes.
- Added validation for conflicting flags in vfs_statx to prevent invalid operations.
- Refined syscall implementations for symlink and lstat to adhere to Linux semantics, ensuring correct behavior for symlink creation and path resolution.

Signed-off-by: longjin <longjin@DragonOS.org>

* fix(vfs): 修正符号链接跟随次数的处理逻辑

- 将 VFS_MAX_FOLLOW_SYMLINK_TIMES 从 40 调整为 41,以保留 0 的禁用语义并实现最多
40 次跟随的 Linux 语义
- 重构路径解析逻辑,明确区分 max_follow_times 为
0(完全禁用跟随)、1(计数耗尽)及 >=2(允许继续跟随)三种情况
- 确保在计数耗尽(max_follow_times == 1)且需要跟随时正确返回 ELOOP 错误

Signed-off-by: longjin <longjin@DragonOS.org>

---------

Signed-off-by: longjin <longjin@DragonOS.org>
2025-12-19 20:24:10 +08:00
LoGin fa4d785eaa
feat(kernel/posix-timer): 实现 POSIX interval timer,修复 gVisor timers_test (#1501)
- 新增 timer_create/timer_settime/timer_gettime/timer_getoverrun/timer_delete 系统调用处理,并接入 syscall table
- 实现进程级 POSIX interval timer:基于 CLOCK_MONOTONIC 的创建/删除/设置/查询、周期性重装与到期调度
- 完整实现 SIGEV_NONE/SIGEV_SIGNAL/SIGEV_THREAD_ID(限制 THREAD_ID 只能指向当前线程)与 SI_TIMER siginfo(含 si_timerid/si_overrun/si_value)
- 修复 overrun 语义与信号合并:按线程 pending 队列合并并累积 overrun,避免重复入队导致进程被信号杀死
- 修复周期性 timer 的 gettime 剩余时间计算与回调窗口返回 0 的问题(PeriodicSilent)
- 修复定时器回调中信号锁/队列访问导致的自锁死(PeriodicGroupDirectedSignal)
- clear_child_tid/robust futex 相关用户内存访问改为异常表保护,并避免在失败时继续 futex 操作

Signed-off-by: longjin <longjin@DragonOS.org>
2025-12-18 20:37:40 +08:00
LoGin 601ba6d092
feat(fs): implement umask and improve permission handling (#1500)
- Set default umask to 0022 for new filesystem instances
- Add apply_umask_for_create() and chmod_preserve_type() helper functions
- Implement proper permission checks for file creation and chmod operations
- Fix fchmod syscall to work correctly and reject O_PATH file descriptors
- Add open_create_test to gvisor test suite

Signed-off-by: longjin <longjin@DragonOS.org>
2025-12-18 19:51:21 +08:00
LoGin 92895534f7
fix(epoll): 修复epoll超时唤醒机制,确保定时器通过Waker唤醒等待队列 (#1492)
- 重构定时器创建逻辑,使用EpollTimeoutWaker结构体实现TimerFunction
- 将超时唤醒方式从直接唤醒PCB改为通过Waker::wake()触发

Signed-off-by: longjin <longjin@DragonOS.org>
2025-12-18 10:50:51 +08:00
LoGin 6ec1dd523e
feat(procfs): 新增/proc/<pid>/stat和/proc/<pid>/task支持 (#1490)
- 添加/proc/<pid>/stat文件生成,支持BusyBox ps/pstree/top等工具
- 实现/proc/<pid>/task目录结构,支持主线程tid=pid的展示
- 新增proc_pid_stat和proc_pid_task模块处理相关逻辑
- 扩展ProcFileType枚举,添加ProcPidStat、ProcPidTaskDir等类型
- 在InodeInfo中新增tid字段以支持线程信息

Signed-off-by: longjin <longjin@DragonOS.org>
2025-12-17 23:55:52 +08:00
LoGin 839a0d589e
feat(filesystem): 完善文件系统统计信息支持 (#1491)
- 为 FAT 文件系统实现 statfs 所需的 SuperBlock
字段(f_blocks、f_bfree、f_bavail、f_frsize)
- 为 tmpfs 添加默认容量策略(物理内存一半)并同步更新 SuperBlock 统计信息
- 修复 FAT32 FSInfo 空闲簇计数更新时的溢出问题
- 为挂载点提供稳定的 st_dev 标识符

Signed-off-by: longjin <longjin@DragonOS.org>
2025-12-17 19:59:26 +08:00
LoGin 2f19b3daa9
feat(procfs): 添加 /proc/cmdline 和 /proc/<pid>/cmdline 文件支持 (#1489)
- 新增 proc_pid_cmdline 模块,实现 /proc/cmdline 和 /proc/<pid>/cmdline
文件的读取逻辑
- 在进程控制块中增加 cmdline 字段,用于存储进程的命令行参数
- 在 execve、fork 和初始进程启动时正确设置和继承 cmdline 数据
- 在 procfs 中创建对应的文件节点并集成到文件类型枚举和打开逻辑中

Signed-off-by: longjin <longjin@DragonOS.org>
2025-12-17 14:15:58 +08:00
LoGin 0ed7d33c19
feat(filesystem): Implement EventFd filesystem and enhance VFS inode capabilities (#1486)
* feat(filesystem): Implement EventFd filesystem and enhance VFS inode capabilities

- Introduced EventFdFs as a new pseudo-filesystem to support eventfd file descriptors, including methods for root inode retrieval and filesystem information.
- Enhanced IndexNode trait with is_stream, supports_seek, supports_pread, and supports_pwrite methods to streamline file operation semantics for stream-like files.
- Updated file handling in VFS to utilize new inode capabilities, ensuring correct behavior for pread, pwrite, and lseek operations.
- Added eventfd_test to the syscall whitelist for testing purposes.

This implementation aligns with Linux semantics for eventfd and improves the overall VFS design by consolidating stream behavior checks.

Signed-off-by: longjin <longjin@DragonOS.org>

* fix(vfs): 修复pread/pwrite中O_PATH和流式对象的错误处理顺序

- 调整O_PATH文件描述符的错误处理顺序,确保优先返回EBADF
- 为流式对象(FMODE_STREAM)添加ESPIPE错误处理,避免权限检查导致的误报
- 分离权限检查逻辑,确保错误码符合Linux语义

Signed-off-by: longjin <longjin@DragonOS.org>

---------

Signed-off-by: longjin <longjin@DragonOS.org>
2025-12-17 12:09:17 +08:00
LoGin 0d10f70691
feat(vfs): 新增creat系统调用支持 (#1482)
* feat(vfs): 新增creat系统调用支持

- 实现creat系统调用处理器,遵循Linux语义:创建新文件或截断现有文件并打开为只写模式
- 在x86_64架构下注册creat系统调用到系统调用表
- 在gvisor测试白名单中添加creat测试项

Signed-off-by: longjin <longjin@DragonOS.org>

* feat(rust-jhash): Update Cargo.toml to specify Rust edition 2021

---------

Signed-off-by: longjin <longjin@DragonOS.org>
2025-12-16 23:58:15 +08:00
LoGin b28f766956
feat(vfs): Implement append lock manager for file operations (#1483)
* feat(vfs): Implement append lock manager for file operations

- Introduced an `AppendLockManager` to ensure atomicity for append operations across filesystems, preventing data corruption in concurrent write scenarios.
- Updated file write methods to utilize the new append lock mechanism, ensuring that appending to files respects the latest end-of-file position.
- Enhanced `write_append` and `pwrite_append` methods to support forced append semantics, aligning with Linux behavior.
- Initialized the append lock manager during VFS initialization to ensure it is ready before any file write operations.

This addition improves the reliability of file operations in a multi-threaded environment, particularly for append scenarios.

Signed-off-by: longjin <longjin@DragonOS.org>

* feat(kernel): 添加jhash库并用于append_lock的哈希计算

Signed-off-by: longjin <longjin@DragonOS.org>

---------

Signed-off-by: longjin <longjin@DragonOS.org>
2025-12-16 23:55:53 +08:00
LoGin d84adf400e
refactor(vfs): 统一使用vfs_check_and_clone_cstr函数进行路径检查 (#1481)
- 将多个VFS系统调用中的check_and_clone_cstr替换为vfs_check_and_clone_cstr
- 在page_cache.rs中简化page_cache引用获取方式
- 在sys_mount.rs中新增copy_mount_path_string函数专门处理挂载路径
- 移除rename_utils.rs中冗余的路径长度检查

Signed-off-by: longjin <longjin@DragonOS.org>
2025-12-16 14:11:05 +08:00
LoGin 5450a4bfc7
fix: fix chroot and tmpfs (#1480)
* feat(procfs): Add /proc/[pid]/mountinfo and /proc/[pid]/maps support

- Introduced new ProcFileType variants for /proc/[pid]/mountinfo and /proc/[pid]/maps.
- Implemented content generation for /proc/[pid]/mountinfo and /proc/[pid]/maps to align with Linux semantics.
- Updated ProcFS inode creation to include these new files for each process.
- Enhanced path handling in the VFS to ensure correct resolution based on process-specific root and current working directory.

This addition improves the process filesystem's functionality and compatibility with Linux behavior.

* feat(filesystem): Enhance page cache management in tmpfs

- Added an unevictable flag to the PageCache structure, allowing pages to be marked as unevictable to prevent reclamation.
- Updated the TmpfsInode structure to integrate page cache management, replacing direct data manipulation with page cache operations for read and write methods.
- Refactored truncate and resize methods to utilize the new page cache functionality, ensuring consistency and improved memory management.

* feat(filesystem): Enhance tmpfs functionality and VFS constraints

- Implemented support for readahead in tmpfs, allowing for optimized data retrieval.
- Added checks for filename length across various VFS operations to prevent errors related to excessively long names.
- Updated the tmpfs implementation to handle read and write operations directly through the page cache, improving memory management.
- Enhanced rename functionality to ensure type compatibility and empty directory checks during operations.
- Increased maximum path length and defined maximum single filename length for better filesystem compliance.

* refactor(fs): 重构tmpfs重命名逻辑并修复MountFSInode的move_to委托

- 将tmpfs跨目录移动逻辑提取为独立函数`tmpfs_move_entry_between_dirs`
- 优化锁顺序以避免死锁,按inode_id顺序锁定目录
- 修复MountFSInode::move_to中目标inode解包问题,确保正确委托给底层文件系统

Signed-off-by: longjin <longjin@DragonOS.org>

* feat(filesystem): Implement zero-page creation for tmpfs and enhance page fault handling

- Added `create_zero_pages` method to `InnerPageCache` for efficient zero-page creation, optimizing memory usage in tmpfs.
- Updated `Tmpfs` to utilize the new zero-page creation during read and write operations, ensuring seamless handling of page faults.
- Enhanced `PageFaultHandler` with `pagecache_fault_zero` to manage page faults specifically for tmpfs, allowing for direct page cache access without disk I/O.

This improves the performance and reliability of memory file systems by reducing unnecessary allocations and ensuring proper page management.

* refactor(syscall): Rename check_and_clone_cstr to vfs_check_and_clone_cstr for clarity

- Updated the user access module to introduce vfs_check_and_clone_cstr, enhancing clarity in its purpose for VFS operations.
- Refactored sys_openat and utimensat to utilize the new vfs_check_and_clone_cstr function, ensuring consistent handling of C string paths across the filesystem.

---------

Signed-off-by: longjin <longjin@DragonOS.org>
2025-12-16 14:05:27 +08:00
LoGin c70c94579a
feat(block_cache): Enhance CacheBlock and BlockCache functionality (#1465)
- Added `from_slice` method to `CacheBlock` for creating instances directly from slices, avoiding unnecessary allocations.
- Introduced `write_data` method in `CacheBlock` to allow in-place updates of block data.
- Updated `insert_one_block` and `immediate_write` methods in `BlockCache` to accept slices instead of vectors, improving performance and memory usage.
- Implemented error handling for block size validation in multiple locations to ensure data integrity.
- Change `FileMapInfo::page_cache` to `Weak<PageCache>` to fix a memory leak caused by reference cycles.

Signed-off-by: longjin <longjin@DragonOS.org>
2025-12-16 02:03:47 +08:00
kado 85989fdb49
fix(vfs): 修复truncate系统调用,添加截断时的页缓存截断,修复边界条件 (#1444)
* 限制缓冲区大小为 512KB,避免分配过大内存导致容量溢出;为resize加上页缓存截断

* 增加对len的检查,检查截断后的长度是否超过限度

* 检查filemode

* 回退在resize里限制文件大小

* fmt

* 添加测试

* 改进长度参数的类型转换逻辑;统一使用限制大小的缓冲区策略

* 在fat的resize中加入最大容量检查

* 统一定义ZERO_BUF_SIZE;增加对零写入的检查;在vfs层统一拒绝超出 isize::MAX 的长度

* fmt

---------

Co-authored-by: longjin <longjin@DragonOS.org>
2025-12-15 23:20:25 +08:00
LoGin a8d78be4c4
feat(mm,procfs): 添加/proc/<pid>/maps文件支持并改进缺页异常处理 (#1468)
* fix(interrupt): 修正缺页异常处理中的用户态判断逻辑

- 优先使用TrapFrame和错误码判断访问发起者,而非仅依赖地址范围
- 避免用户态访问高地址区域时触发内核panic,改为产生SIGSEGV
- 确保内核态访问用户地址时能正确走用户态fault处理路径

Signed-off-by: longjin <longjin@DragonOS.org>

* fix(time): 修复 sys_gettimeofday 用户空间访问保护

- 重构 sys_gettimeofday 系统调用处理逻辑,使用 buffer_protected 保护用户空间访问
- 修复 tv 和 timezone 指针为空时的处理逻辑,避免空指针错误
- 根据调用来源(用户/内核)动态设置用户空间访问保护标志

Signed-off-by: longjin <longjin@DragonOS.org>

* feat(procfs): 添加/proc/<pid>/maps文件支持

- 新增proc_maps模块,实现/proc/<pid>/maps文件的生成逻辑
- 在ProcFS中注册maps文件,支持进程文件夹的创建和清理
- 更新gvisor测试白名单,添加time_test

Signed-off-by: longjin <longjin@DragonOS.org>

---------

Signed-off-by: longjin <longjin@DragonOS.org>
2025-12-15 14:43:39 +08:00
LoGin 84443be280
fix: 修复slab分配器迭代器越界访问和并发安全问题 (#1464)
- 为ObjectPageIterMut添加remaining字段,防止迭代越界
- 将SLABALLOCATOR改为SpinLock保护,修复并发访问问题
- 在kernel_allocator中正确使用锁保护slab分配器操作

Signed-off-by: longjin <longjin@DragonOS.org>
2025-12-15 00:42:59 +08:00
Samuel Dai 165fa8e8df
fix(net): udp getsockname/getpeername (#1460)
* fix(net): udp getsockname/getpeername

* feat(ci): add test whitelist for new available inet syscall

---------

Co-authored-by: longjin <longjin@DragonOS.org>
2025-12-14 22:04:06 +08:00
LoGin 1245799ee1
fix(tty): Enhance TTY driver and device management (#1462)
* fix(tty): Enhance TTY driver and device management

- Updated the TTY driver to handle both master and slave types more effectively during close operations, ensuring proper cleanup of device entries in /dev/pts.
- Improved the handling of controlling TTY detachment for processes, adding support for the TIOCNOTTY command.
- Refactored the PTY device initialization to ensure correct metadata settings and device registration.
- Added a symlink for /dev/ptmx to point to the internal devpts node, preventing ENOENT errors during early access.

These changes enhance the robustness and compatibility of the TTY subsystem with Linux semantics.

Signed-off-by: longjin <longjin@DragonOS.org>

* refactor(tty): Improve PTY device management and cleanup logic

- Enhanced the `PtyDevPtsLink` structure to manage the lifecycle of PTY devices more effectively, including precise unlinking of directory entries and freeing of indices upon closure.
- Refactored the close operation in the TTY driver to utilize the new management logic, ensuring proper cleanup of master and slave PTY devices.
- Removed redundant code related to device entry removal, streamlining the cleanup process and aligning with Linux semantics.

Signed-off-by: longjin <longjin@DragonOS.org>

---------

Signed-off-by: longjin <longjin@DragonOS.org>
2025-12-14 16:22:18 +08:00
goldwind-ting 23ab2f3658
fix(lookup_kallsyms): 修复符号表查询问题 (#1443)
原有逻辑addr刚好等于kallsyms_adress_list[i+1]时,索引index值会是i,但是实际上是i+1;现在修改为通过二分查找符号
2025-12-13 16:17:12 +08:00
LoGin d40c3c0191
feat(filesystem): Add tmpfs support and integrate with devfs (#1459)
* feat(filesystem): Add tmpfs support and integrate with devfs

- Introduced a new tmpfs module for temporary file storage in memory.
- Updated devfs to mount /dev/shm as tmpfs, aligning with Linux semantics.
- Enhanced vfs module to include TMPFS_MAGIC for tmpfs identification.
- Added necessary methods and structures for tmpfs functionality, including inode management and file operations.

Signed-off-by: longjin <longjin@DragonOS.org>

* feat(filesystem): Implement atomic size management for tmpfs

- Added atomic operations to manage the current size of the tmpfs filesystem, including methods to increase and decrease size based on file operations.
- Integrated size management into inode operations, ensuring that size updates are thread-safe and adhere to specified limits.
- Enhanced the resize and truncate methods to adjust the filesystem size accordingly during file modifications.

Signed-off-by: longjin <longjin@DragonOS.org>

---------

Signed-off-by: longjin <longjin@DragonOS.org>
2025-12-12 15:54:45 +08:00
LoGin aa695d46dd
feat(filesystem): Add pwritev2 syscall implementation (#1461)
* feat(filesystem): Add pwritev2 syscall implementation

- Introduced the pwritev2 syscall, allowing vectorized writes with offset and flags, enhancing compatibility with Linux semantics.
- Implemented validation for file descriptors and offsets, ensuring robust error handling.
- Reused core logic from pwritev for the new syscall, maintaining consistency in file writing operations.

This addition improves the VFS layer's functionality and aligns with Linux behavior for vectorized writing operations.

Signed-off-by: longjin <longjin@DragonOS.org>

* fmt

---------

Signed-off-by: longjin <longjin@DragonOS.org>
2025-12-12 13:44:41 +08:00
LoGin 05e1d0eeba
feat(filesystem): Enhance pwrite and pwritev syscall validation (#1456)
- Added validation for pwrite and pwritev syscalls to ensure offset and length conform to Linux semantics, returning EINVAL for negative offsets and invalid ranges.
- Updated offset extraction in sys_pwrite64 and sys_pwritev to use i64 for better compatibility.
- Included a new test case for pwrite64 in the gvisor whitelist to ensure proper functionality.

This change improves the robustness of file writing operations in the VFS layer.

Signed-off-by: longjin <longjin@DragonOS.org>
2025-12-11 14:31:27 +08:00
LoGin e9ec735d6f
feat: 内存管理、mmap支持与设备驱动的综合改进 (#1455)
* refactor(mm): 重构页缓存读写以解决死锁问题并改进错误处理

- 将页缓存读写拆分为两阶段以避免用户缺页时持有锁
- 改进文件系统缺页处理,返回SIGBUS而非panic
- 优化sys_read/sys_write的用户缓冲区访问检查
- 修复mprotect参数对齐检查

Signed-off-by: longjin <longjin@DragonOS.org>

* feat(devfs): 添加随机设备支持

- 新增随机设备模块random_dev,提供随机字节生成能力
- 在DevFS中注册/dev/random设备,确保系统能够访问随机数据
- 更新相关文件以支持新设备的集成

Signed-off-by: longjin <longjin@DragonOS.org>

* feat(filesystem): 添加mmap支持到多个文件系统节点

- 为LockedZeroInode、LockedExt4Inode、LockedFATInode和LockedRamFSInode实现mmap方法,允许内存映射操作。
- 更新相关文件以支持mmap功能,确保与用户空间的交互更加灵活。

Signed-off-by: longjin <longjin@DragonOS.org>

* fix(mm): Improve mmap error handling and validation

- Enhanced error handling in mmap implementation to return appropriate errors for unsupported operations.
- Added checks for MAP_PRIVATE and MAP_SHARED flags to ensure only one is set.
- Implemented page alignment validation for MAP_FIXED.
- Updated tests to reflect changes in mmap behavior.

Signed-off-by: longjin <longjin@DragonOS.org>

* fix(mm): Enhance memory protection handling and validation

- Updated the `init_xd_rsvd` function to ensure NX support is enabled and correctly handle hardware limitations.
- Improved alignment checks in `sys_mprotect` to prevent overflow and ensure proper memory area verification.
- Removed outdated tests from `mmap_test` to streamline the test suite.

Signed-off-by: longjin <longjin@DragonOS.org>

* feat(procfs): Add support for /proc/[pid]/statm file

- Introduced the ProcStatm file type to the ProcFileType enum.
- Implemented the open_statm function to return a placeholder response for the statm file.
- Updated the ProcFS inode creation to include the statm file for each process.
- Enhanced the IndexNode implementation to handle the new ProcStatm file type.

Signed-off-by: longjin <longjin@DragonOS.org>

* fix(mmap): 增强mmap系统调用的偏移量检查和内存分配逻辑

* fix(procfs): 优化statm文件打开逻辑,增加虚拟内存页数计算

* fix(syscall): 处理len为0的情况,确保read和write系统调用遵循POSIX标准


* refactor(mm): Optimize page reclamation process to prevent deadlocks

- Separated the page reclamation into two phases to avoid holding the reclaimer lock for extended periods, reducing the risk of lock order inversion with page_manager/page_cache.
- Updated the `shrink_list` method to handle victim page eviction without holding the reclaimer lock, ensuring safer memory management.
- Improved the `drain_lru` method to efficiently retrieve victim pages for reclamation.

Signed-off-by: longjin <longjin@DragonOS.org>

---------

Signed-off-by: longjin <longjin@DragonOS.org>
2025-12-11 11:44:35 +08:00
LoGin fc322fb0ba
fix(filesystem): update directory link count management in FAT and RAM filesystems (#1454)
- Adjusted the link count for directories to ensure it starts at 2, accounting for the self-reference and parent directory link.
- Updated the logic for incrementing and decrementing link counts when creating and deleting directories.
- Enhanced the dynamic calculation of directory link counts in the VFS layer to ensure accuracy when metadata is unreliable.

This change improves the consistency of link count management across different filesystem implementations.

Signed-off-by: longjin <longjin@DragonOS.org>
2025-12-10 15:30:34 +08:00
LoGin f2cca87d2b
refactor(wait_queue): 重构等待队列机制,引入Waiter/Waker模式 (#1452)
* refactor(wait_queue): 重构等待队列机制,引入Waiter/Waker模式

- 重构WaitQueue,引入Waiter/Waker模式避免唤醒丢失
- 统一等待接口,提供wait_event_interruptible/uninterruptible方法
- 重构futex、epoll、eventfd、semaphore、completion等模块使用新等待队列
- 优化进程等待子进程退出逻辑,使用新等待队列接口
- 添加等待队列设计文档说明新机制

Signed-off-by: longjin <longjin@DragonOS.org>

* feat: 添加SKIP_GRUB选项以支持在CI或无图形界面环境中跳过GRUB安装

Signed-off-by: longjin <longjin@DragonOS.org>

* fix: 修复信号处理和futex唤醒的错误码

- 在sys_rt_sigtimedwait中消费信号后及时刷新HAS_PENDING_SIGNAL状态,避免后续等待路
径误判
- 将futex可中断唤醒的错误码从ERESTARTSYS改为EINTR,以符合Linux语义

Signed-off-by: longjin <longjin@DragonOS.org>

* ci: Update Docker image source in test-x86 workflow

- Changed the Docker image source from `docker.cnb.cool/dragonos-community/dragonos/dragonos-dev:v1.19` to `dragonos/dragonos-dev:v1.19` for consistency in CI workflows.

Signed-off-by: longjin <longjin@DragonOS.org>

---------

Signed-off-by: longjin <longjin@DragonOS.org>
2025-12-10 14:04:05 +08:00
LoGin d0448019ea
feat(filesystem): 新增preadv2系统调用支持 (#1451)
* feat(filesystem): 新增preadv2系统调用支持

- 实现preadv2系统调用,支持带偏移量和标志位的向量化读取
- 处理offset为-1时使用当前文件偏移量,其他情况复用preadv逻辑
- 添加RWF标志位验证,遵循Linux兼容性要求

Signed-off-by: longjin <longjin@DragonOS.org>

* refactor(open): remove follow_symlink parameter from do_sys_open and related functions

- Simplified the do_sys_open and do_open functions by removing the follow_symlink parameter.
- Updated all calls to these functions to reflect the change, ensuring that symlink following behavior is determined by the O_NOFOLLOW flag in the file flags.
- Enhanced code readability and maintainability by streamlining function signatures.

Signed-off-by: longjin <longjin@DragonOS.org>

---------

Signed-off-by: longjin <longjin@DragonOS.org>
2025-12-10 00:57:17 +08:00
xboHodx fd5cc66440
feat(fadvise64): 实现fadvise64系统调用和页面缓存管理功能 (#1439)
* feat(fs): 实现fadvise64系统调用和页面缓存管理功能

- 新增fadvise64系统调用实现
- 添加页面缓存范围写回和驱逐功能
- 改进预读机制,支持随机访问模式
- 扩展文件访问模式标志管理

* fmt

* feat(vfs): 添加带权限检查的文件描述符获取方法

- 在FileDescriptorVec中新增get_file_by_fd_not_raw方法
- 修改sys_fadvise64使用新方法进行权限检查

* 增强可读性

* 修改gvisor白名单


* refactor(vfs): 封装文件预读状态访问并优化fadvise64实现

- 将File结构体的ra_state字段改为私有并提供get/set方法
- 在sys_fadvise64中使用新的访问方法
- 修复fadvise64中页边界检查逻辑
- 移除syscall模块中未实现的fadvise64 stub


Signed-off-by:  xbohodx <xbohodx2024@gmail.com>
2025-12-09 23:22:47 +08:00
Vitus 00f7253f6e
fix(open): 修复open系统调用在gvisor下的异常表现 (#1417)
* - 调整readable和writable返回的错误码类型

* - fix 修复以下测试
OpenTest.OTrunc
OpenTest.OTruncAndReadOnlyDir
OpenTest.OCreateDirectory
OpenTest.MustCreateExisting
OpenTest.CreateWithAppend
OpenTest.AppendOnly
OpenTest.AppendConcurrentWrite
OpenTest.DirectoryWritableFails
OpenTest.DirectoryDirectFails
OpenTest.Null
OpenTest.CanTruncateReadOnly
OpenTest.OpenNonDirectoryWithTrailingSlash
OpenTest.OpenWithStrangeFlags

* - 添加open_test 的block
2025-12-09 22:56:52 +08:00
aLinChe c7c54977bd
fix(signal): correct pid retrieval and signal ignoring logic (#1434)
* fix(syscall): make getpid return correct tgid in namespaces

Signed-off-by: aLinChe <1129332011@qq.com>

* feat(signal): implement signal ignore checking logic

Signed-off-by: aLinChe <1129332011@qq.com>

* fix(fork): change copy_process order

Signed-off-by: aLinChe <1129332011@qq.com>

* clean log::debug()

Signed-off-by: aLinChe <1129332011@qq.com>

* clean log::debug() twice

Signed-off-by: aLinChe <1129332011@qq.com>

* fix(init): remove flags CloneFlags::CLONE_SIGHAND

Signed-off-by: aLinChe <1129332011@qq.com>

* update comment

Signed-off-by: aLinChe <1129332011@qq.com>

---------

Signed-off-by: aLinChe <1129332011@qq.com>
2025-12-08 23:44:02 +08:00
kaleidoscope416 7fd6e3f052
fix(vfs): 修复 utimensat/futimesat 系统调用边界情况以兼容 gVisor 测试 (#1431)
* fix(vfs): 修复 utimensat/futimesat 系统调用边界情况以兼容 gVisor 测试
2025-12-05 13:23:53 +08:00
LoGin e8eb1e3d12
fix(tty): 修复tty、会话的权限检查逻辑 (#1430)
通过pty_root_test

Signed-off-by: longjin <longjin@DragonOS.org>
2025-12-05 12:11:40 +08:00
LoGin 1033f83200
feat(ipc): 实现 FIFO 的阻塞打开语义 (#1429)
- 为 LockedPipeInode 添加 open_wait_queue 用于 FIFO 打开时的阻塞等待
- 实现 Linux FIFO 的阻塞/非阻塞打开语义(O_RDONLY/O_WRONLY/O_RDWR)
- 添加 has_reader/has_writer 辅助方法检查管道状态
- 更新测试配置,将 fifo_test 加入白名单

Signed-off-by: longjin <longjin@DragonOS.org>
2025-12-05 12:11:28 +08:00
LoGin b466adff52
feat(tty): 为TTY设备添加page_cache方法并处理无页面缓存的情况 (#1428)
- 在TTY设备中实现page_cache方法,返回None以表明字符设备不需要页面缓存
- 在页面错误处理中增加对无页面缓存情况的处理,避免panic并返回VM_FAULT_SIGBUS

Signed-off-by: longjin <longjin@DragonOS.org>
2025-12-03 01:01:57 +08:00
LoGin 963ccded97
fix(process): fix wait semantics for child processes in thread groups (#1427)
* fix(process): fix wait semantics for child processes in thread groups

Signed-off-by: longjin <longjin@DragonOS.org>

* ci: enable unshare_test

Signed-off-by: longjin <longjin@DragonOS.org>

---------

Signed-off-by: longjin <longjin@DragonOS.org>
2025-12-03 00:01:57 +08:00
LoGin 2d48f12b2f
feat(pipe): 修复&完善pipe的行为,并且在procfs新增fd相关支持。 (#1426)
* feat(pipe): 改进管道实现,支持命名管道和符合POSIX的行为

- 新增管道文件系统(PipeFS)并注册PIPEFS_MAGIC
- 扩展管道缓冲区至65536字节,支持原子写入
- 实现命名管道(FIFO)支持,允许O_RDWR模式打开
- 改进fcntl的F_SETFL实现,仅允许修改特定标志位
- 修复写入只读文件描述符的错误码为EBADF
- 为命名管道自动添加O_LARGEFILE标志
- 优化管道读写逻辑,支持循环写入和部分写入

Signed-off-by: longjin <longjin@DragonOS.org>

* fix(vfs): 在preadv/pwrite64/pwritev系统调用中增加对管道、Socket和字符设备的ESPIPE错误检查

Signed-off-by: longjin <longjin@DragonOS.org>

* feat(vfs): 为fcntl系统调用添加管道缓冲区大小查询功能

- 实现F_GETPIPE_SZ和F_SETPIPE_SZ命令,支持获取和设置管道缓冲区大小
- 优化管道关闭逻辑,避免潜在死锁问题
- 公开PIPE_BUFF_SIZE常量供系统调用使用

Signed-off-by: longjin <longjin@DragonOS.org>

* feat(procfs): 支持/proc/self/fd/N魔法链接并实现管道FIONREAD

- 为procfs的InodeInfo添加target_inode字段,用于存储魔法链接的原始文件inode
- 实现IndexNode::special_node方法,使/proc/self/fd/N能返回原始文件的引用
- 在VFS中处理SpecialNodeData::Reference,支持魔法链接的路径解析
- 为管道文件实现ioctl的FIONREAD命令,获取可读字节数

Signed-off-by: longjin <longjin@DragonOS.org>

* feat(procfs): 添加/proc/<pid>/fdinfo目录支持并实现管道缓冲区动态调整

- 新增ProcFdInfoDir和ProcFdInfoFile枚举类型,支持/proc/<pid>/fdinfo目录和文件
- 实现fdinfo目录的动态查找和列表功能,与fd目录共享文件描述符列表逻辑
- 重构fcntl系统调用,支持F_GETPIPE_SZ和F_SETPIPE_SZ命令的动态管道缓冲区管理
- 修改管道实现,使用动态分配的Vec缓冲区替代固定大小数组,支持运行时调整大小
- 添加管道缓冲区大小验证和迁移逻辑,确保数据完整性

Signed-off-by: longjin <longjin@DragonOS.org>

* feat(filesystem): 提升文件描述符表最大容量并优化分配策略

- 将文件描述符表最大容量从65536提升至1048576
- 优化文件描述符分配算法,支持动态扩容
- 更新进程资源限制以匹配新的最大容量

Signed-off-by: longjin <longjin@DragonOS.org>

* perf(pipe): 实现管道缓冲区延迟分配以优化内存使用

- 修改管道缓冲区初始化逻辑,从立即分配改为首次写入时分配
- 优化缓冲区大小调整逻辑,避免不必要的内存分配
- 更新管道元数据返回逻辑,移除冗余计算
- 添加管道测试黑名单文件以排除已知卡死问题

Signed-off-by: longjin <longjin@DragonOS.org>

* perf(filesystem): 优化文件描述符分配性能

Signed-off-by: longjin <longjin@DragonOS.org>

---------

Signed-off-by: longjin <longjin@DragonOS.org>
2025-12-02 23:11:50 +08:00
xboHodx c0122b5e6a
refactor(vfs): 重构文件系统标志体系,区分打开标志与访问模式 (#1414)
- 将 `ModeType` 重命名为 `InodeMode`,明确其为inode权限位
  - 将 `FileMode` 重命名为 `FileFlags`,明确其为文件打开标志(O_RDONLY等)
  - 新增 `FileMode` 结构体,对应Linux内核的 `file.f_mode`,表示内核专用访问模式(FMODE_READ/FMODE_WRITE/FMODE_LSEEK等)
  - 新增 `InodeFlags` 结构体,支持 S_SYNC、S_APPEND、S_IMMUTABLE 等inode标志
  - 修复管道 `poll` 函数中的标志判断逻辑
2025-12-02 22:17:42 +08:00
LoGin 8d9ea81d4e
feat(vfs): 实现异步I/O通知机制和ioctl系统调用增强 (#1425)
* fix(vfs): 在ioctl系统调用中增加O_PATH文件检查及错误码转换

- 增加对以O_PATH模式打开的文件的检查,若文件以O_PATH打开则返回EBADF错误
- 在ioctl调用失败时,将内部错误码ENOIOCTLCMD转换为用户空间错误码ENOTTY

Signed-off-by: longjin <longjin@DragonOS.org>

* feat(vfs): 实现异步I/O通知机制和通用文件描述符ioctl支持

- 新增fasync模块,提供SIGIO信号通知机制
- 扩展PollableInode接口,支持fasync注册和移除
- 实现通用文件描述符ioctl命令(FIONBIO、FIOASYNC、FIOSETOWN等)
- 为TCP、UDP、Unix域套接字添加fasync支持
- 修复Unix域套接字send返回值错误
- 实现SIOCGIFCONF网络接口配置ioctl

Signed-off-by: longjin <longjin@DragonOS.org>

* ci: add ioctl test to whitelist

Signed-off-by: longjin <longjin@DragonOS.org>

* feat(net): 新增Unix域数据报socket实现

- 实现Unix域数据报socket(SOCK_DGRAM)核心功能
- 支持bind、connect、sendto、recvfrom等操作
- 添加socket pair创建功能
- 集成到socket创建和系统调用流程中

Signed-off-by: longjin <longjin@DragonOS.org>

* refactor(net): 引用已有的SockAddrIn结构体并更新注释

Signed-off-by: sparkzky <sparkhhhhhhhhhh@outlook.com>

* refactor(ipc): 重命名信号发送函数以提高可读性和一致性

Signed-off-by: sparkzky <sparkhhhhhhhhhh@outlook.com>

* fmt

Signed-off-by: sparkzky <sparkhhhhhhhhhh@outlook.com>

---------

Signed-off-by: longjin <longjin@DragonOS.org>
Signed-off-by: sparkzky <sparkhhhhhhhhhh@outlook.com>
Co-authored-by: sparkzky <sparkhhhhhhhhhh@outlook.com>
2025-12-02 17:02:39 +08:00
LoGin 91f4d93106
fix(ipc): 修复kill进程组的bug (#1424)
使得KillTest.ProcessGroups 通过

Signed-off-by: longjin <longjin@DragonOS.org>
2025-12-02 14:15:28 +08:00
LoGin d239b7b4e1
feat(ipc): implement enhanced signal handling and IPC mechanisms (#1423)
- Add rt_sigqueueinfo and rt_tgsigqueueinfo system calls for POSIX-compliant signal delivery
- Enhance kill process functionality with proper signal validation and permission checks
- Improve process exit handling with signal cleanup and parent notification
- Update fork implementation to handle signal inheritance properly
- Implement setresuid system call with proper privilege management
- Add comprehensive test coverage for signal-related syscalls

Signed-off-by: longjin <longjin@DragonOS.org>
2025-12-01 22:51:46 +08:00
kaleidoscope416 b5b18b765f
fix(vfs): 修复 pread64 系统调用的兼容性和错误处理 (#1398)
* fs: 修复 pread64 系统调用的兼容性和错误处理

- 验证 `offset` 参数:当偏移量为负数或发生溢出时返回 `EINVAL`。
- 验证用户缓冲区:使用 `new_checked` 确保内存已映射,从而正确返回 `EFAULT`。
- 检查文件类型:对不可定位的文件(如管道、Socket)返回 `ESPIPE`。
- 修复 `File::readable()` 中的权限检查:
    - 对 `O_PATH` 文件描述符返回 `EBADF`。
    - 对只写模式(Write-only)打开的文件返回 `EBADF` 而不是 `EPERM`。
- 修复了 gVisor `pread64` 测试集中的多个失败项,包括 `BadBuffer`、`CantReadSocketPair`、`WriteOnlyNotReadable`、`Pread64WithOpath`、`BadOffset` 和 `Overflow`。

* test

* copilot

* fmt

* 删去冗余的负数判断

* 增加注释

* refactor(syscall): improve user buffer access checks in pread64 and user access modules

- Updated SysPread64Handle to use new_checked for user buffer writing.
- Enhanced user access validation by replacing direct checks with user_accessible_len in UserBufferReader and UserBufferWriter.

Signed-off-by: longjin <longjin@DragonOS.org>

* 禁用preadv的不稳定测试

* fix(vfs): 修复文件可读性检查中的模式比较错误

- 将直接比较FileMode枚举改为比较访问模式位,确保O_WRONLY模式下的文件被正确识别为不
可读

Signed-off-by: longjin <longjin@DragonOS.org>

---------

Signed-off-by: longjin <longjin@DragonOS.org>
Co-authored-by: longjin <longjin@DragonOS.org>
2025-12-01 22:24:01 +08:00
LoGin bb7a632c2b
feat(sched): implement POSIX scheduling system calls (#1416)
- Add sched_getparam syscall to retrieve process scheduling parameters
- Add sched_getscheduler syscall to get process scheduling policy
- Refactor sched_yield into separate module with proper syscall handler
- Add utility functions for scheduling permission checks
- Remove old do_sched_yield implementation from main syscall module

Signed-off-by: longjin <longjin@DragonOS.org>
2025-12-01 21:39:57 +08:00
aLinChe cd45a996f4
fix(mkdir): 修复sys_mkdir逻辑错误和权限截断问题,并添加sys_umask (#1419)
* fix(sys_mkdir): fix ModeType and feat sys_umask

Signed-off-by: aLinChe <1129332011@qq.com>

* fix(sys_mknod): fix mknod

Signed-off-by: aLinChe <1129332011@qq.com>

* use ModeType to set_umask

Signed-off-by: aLinChe <1129332011@qq.com>

---------

Signed-off-by: aLinChe <1129332011@qq.com>
2025-12-01 21:34:49 +08:00
LoGin b0a7948372
feat(klog): Implement kernel log level management and procfs interface (#1415)
- Introduced a new module for managing kernel log levels, mimicking Linux behavior.
- Added support for dynamic log level configuration via command line and procfs interface.
- Created a new `/proc/sys/kernel/printk` file for reading and writing log level settings.
- Updated existing logging mechanisms to utilize the new log level management system.
- Enhanced the QEMU startup script to allow setting log levels through environment variables.

This implementation improves logging flexibility and aligns with expected Linux functionality.

Signed-off-by: longjin <longjin@DragonOS.org>
2025-12-01 18:08:57 +08:00
LoGin ecf7749df2
fix(procfs): resolve race condition in namespace file creation (#1413)
- Add proper error handling for concurrent namespace file creation
- Move namespace type validation earlier in the creation process
- Ensure child inodes are fully initialized before being visible in children map
- Handle EEXIST race condition by re-checking children map

Signed-off-by: longjin <longjin@DragonOS.org>
2025-11-27 19:15:39 +08:00
LoGin 147241e7cd
feat(procfs): Add support for /proc/thread-self/ns namespace files (#1412)
* feat(procfs): Add support for /proc/thread-self/ns namespace files

- Introduced a new module for handling namespace files under /proc/thread-self/ns, allowing applications to reference namespaces via symlinks.
- Implemented dynamic creation of namespace files and their corresponding IDs, ensuring compatibility with Linux behavior.
- Updated ProcFS to create necessary directory structures and files for thread-specific namespaces.
- Enhanced existing ProcFileType enum to include new types for thread self namespaces.

This addition improves the process namespace management and aligns with expected Linux functionality.

Signed-off-by: longjin <longjin@DragonOS.org>

* feat(namespace): Implement setns syscall for namespace management

- Added the `setns` syscall to allow processes to join existing namespaces using a file descriptor.
- Implemented kernel-level logic to handle namespace switching based on provided flags, supporting pidfd and namespace fd types.
- Enhanced the namespace management by integrating with the existing `NsProxy` structure, ensuring compatibility with Linux behavior.
- Updated related modules and added necessary error handling for invalid flags and file descriptors.

This addition improves the flexibility of namespace management in the kernel, aligning with expected Linux functionality.

Signed-off-by: longjin <longjin@DragonOS.org>

---------

Signed-off-by: longjin <longjin@DragonOS.org>
2025-11-27 19:08:48 +08:00
LoGin 43263c1a11
feat(vfs): Implement mount propagation mechanism in VFS (#1410)
* feat(vfs): Implement mount propagation mechanism in VFS

- Added support for mount propagation types: Shared, Private, Slave, and Unbindable.
- Introduced a new module for managing mount propagation semantics, including peer group registration and event propagation.
- Updated existing mount functions to handle propagation logic during mount and unmount operations.
- Enhanced documentation to include details on the new mount propagation features and their usage.
- Added unit tests to verify the correctness of mount propagation behavior across different scenarios.

This implementation aligns with Linux semantics for mount propagation, ensuring compatibility and expected behavior in containerized environments.;

Signed-off-by: longjin <longjin@DragonOS.org>

* refactor(filesystem): optimize mount propagation and logging

- Replace ID allocator with atomic counter for propagation groups
- Refactor peer group registry into structured class with better APIs
- Remove verbose debug logs to reduce noise

Signed-off-by: longjin <longjin@DragonOS.org>

* fix(namespace): correct mount propagation peer group handling

- Fix peer group registration when changing propagation type from shared
- Ensure propagated mounts join source child's peer group instead of target
parent's group
- Add proper peer group cleanup when transitioning from shared propagation

Signed-off-by: longjin <longjin@DragonOS.org>

* feat(vfs): implement recursive bind mount support

- Add recursive bind mount functionality with MS_BIND | MS_REC flags
- Implement BFS traversal for copying submounts in do_recursive_bind_mount
- Fix mount registration order to prevent dangling registrations on failure
- Add comprehensive test cases for recursive and non-recursive bind mounts

Signed-off-by: longjin <longjin@DragonOS.org>

---------

Signed-off-by: longjin <longjin@DragonOS.org>
2025-11-27 01:07:16 +08:00
xboHodx 53df56cb94
feat(fs): 添加文件预读功能支持 (#1391)
- 新增readahead模块实现文件预读算法
- 修改page_cache模块支持预读标记
- 在File结构体中添加预读状态管理
- 为PageFlags添加PG_READAHEAD标志位

Signed-off-by: xbohodx <xbohodx2024@gmail.com>
2025-11-26 23:32:03 +08:00
kaleidoscope416 94c1f4cd20
feat(vfs): 增加sys_preadv 增加对readable中对 O_PATH的检查 (#1404)
* 实现preadv系统调用, 增加对对 O_PATH 的可读检查

Signed-off-by: 2448956191@qq.com <2448956191@qq.com>
2025-11-26 00:45:16 +08:00
aLinChe cb6237403a
fix(syscall): 修复cputime, sys_rt_sigtimedwait and sys_rt_sigreturn (#1406)
1. **修复:** 进程 CPU 时间统UserUContext 计精度,将统计基准调整为扣除 IRQ 和 Steal 时间后的净时间(accounted_cputime),避免将硬件中断处理时间错误计入进程的 utime/stime
2. **修复:** `sys_rt_sigtimedwait`: 
- 修复了信号等待逻辑,确保即使 等待信号集 为空也能正确进入 do_kernel_rt_sigtimedwait,符合 Linux 行为。
- 修复潜在的无限睡眠问题:当线程被非目标信号或非超时事件唤醒时,将正确返回 EINTR,避免进程一直挂起。
- 修复了bitflags错误移除的bug,应该使用remove()。
3. **修复:** `sys_rt_sigreturn:`:
- 当从信号处理函数返回用户态时,内核错误地使用 sysretq 来处理 sys_rt_sigreturn 的返回,%rcx 和 %r11 这两个寄存器被意外破坏。
- 修复:如果待恢复的 %rcx / %r11 与 sysretq 的行为冲突,则强制跳转到 .L_syscall_must_use_iret 分支,使用 iretq 指令精确恢复完整的上下文。

TODO: 目标线程的 TGID 没有正确设置为 leader 的 PID,导致还有两个sys_rt_sigtimedwait的测例无法通过。
```sh
Value of: tgkill(getpid(), tid, kSigno)
Expected: not -1 (success)
  Actual: -1 (of type int), with errno PosixError(errno=3 No such process)
```

---------

Signed-off-by: aLinChe <1129332011@qq.com>
2025-11-26 00:21:03 +08:00
kaleidoscope416 54c2a45d36
fix(fs): 修复 sys_rename 逻辑并支持 RENAME_NOREPLACE (#1393)
逻辑修复:
· 修正覆盖现有文件/目录时的逻辑,确保目标被正确截断和删除。
· 增加文件类型检查,禁止文件与目录之间的非法覆盖。
· 增加祖先关系检查,防止将目录移动到其子目录下。
· 修复同名重命名及非空目录覆盖的边界情况。
· 拦截源或目标路径以 . 或 .. 结尾的非法操作。

功能增强:
引入RenameFlags支持,实现了 RENAME_NOREPLACE 语义。

相关 Commits:

· 添加 RenameFlags 支持 (NOREPLACE)
· 完善路径拦截 (. / ..)
·修复覆盖
截断及类型检查逻辑

· 增加祖先关系判断

---------

Signed-off-by: kaleidoscope416 <2448956191@qq.com>
2025-11-24 13:44:18 +08:00
linfeng a9576e3b9c
feat: support ssh app(dropbear). (#1392)
* feat: support ssh app(dropbear).

fix tty errors.
fix socket errors.
fix select syscall errors.
update some init configs.
add docs.

Signed-off-by: Godones <chenlinfeng25@outlook.com>

* remove bad code

Signed-off-by: Godones <chenlinfeng25@outlook.com>

* fix: drop lockguard

Signed-off-by: Godones <chenlinfeng25@outlook.com>

---------

Signed-off-by: Godones <chenlinfeng25@outlook.com>
Co-authored-by: longjin <longjin@DragonOS.org>
2025-11-22 14:49:12 +08:00
LoGin 48c2be0c5e
fix: 修复getdents系统调用实现 (#1397)
- 修复目录项缓存逻辑,避免动态目录读取时丢失条目
- 添加O_PATH文件描述符和文件类型检查
- 支持getdents和getdents64两种格式
- 改进用户缓冲区写入安全性和错误处理
- 修复/proc/self/fd目录列表包含"."和".."

Signed-off-by: longjin <longjin@DragonOS.org>
2025-11-22 00:46:30 +08:00
LoGin 72300f15c6
Revert "fix: cputime, sys_rt_sigtimedwait and sys_rt_sigreturn (#1394)" (#1400)
This reverts commit 3be439e54e.

由于 #1394 这个pr的测例 SigtimedwaitTest.SIGKILLUncaught 会卡死,因此撤回。
2025-11-22 00:41:46 +08:00
Yuming Jiang 3f18af7c5a
fix(syscall/vfs): fix SIG derivative when writing partial readable buffer (#1375)
* fix(mm/vfs): 修复 writev 无法正确处理部分 iov 为受保护内存空间的情况

- 引入 user_accessible_len() 以测量从给定地址 `address` 开始,能够被拷贝的最长连续字节长度(注:使用vma进行校验)
- 使 IoVecs::gather 返回 Result 并仅聚合可以被读取的 `buf` 部分(注意,一旦碰到不可访问的 iov,后面的iov都会被抛弃)
- 在 writev/pwritev 中传播新的 Result 以支持 gVisor 下的部分写入

* docs(vfs/syscall): 添加文件系统实现分散写入的 TODO 注释

- 添加了对于 IoVecs 发起的分散写入的处理方式目前处理方式的注释。
- 添加了实现分散写入依赖于文件系统对于 IoVecs 写入支持的注释。

* feat(test): 添加 pwritev 性能测试程序

* fix(syscall/user_access): 修复 潜在的死锁问题

* test(gvisor): 在自动测试中启用所有的 writev 测试


Signed-Off-By: mingjiangyu1 <mingjiangyu1@qq.com>
2025-11-22 00:00:57 +08:00
aLinChe 3be439e54e
fix: cputime, sys_rt_sigtimedwait and sys_rt_sigreturn (#1394)
* fix cputime

Signed-off-by: aLinChe <1129332011@qq.com>

* fix sigtimedwait

Signed-off-by: aLinChe <1129332011@qq.com>

* fix(sys_rt_sigreturn): use iretq

Signed-off-by: aLinChe <1129332011@qq.com>

* fix sigtimedwait sigset remove SIGKILL SIGSTOP

Signed-off-by: aLinChe <1129332011@qq.com>

* modify to use pcb.recalc_sigpending()

Signed-off-by: aLinChe <1129332011@qq.com>

* fix remove remove

Signed-off-by: aLinChe <1129332011@qq.com>

---------

Signed-off-by: aLinChe <1129332011@qq.com>
2025-11-21 23:51:06 +08:00
LoGin 7100b83424
refactor(mm): 修改异常表安全拷贝的错误处理返回值 (#1395)
将copy_with_exception_table和memset_with_exception_table的返回值从错误码改为剩余
未操作字节数

Signed-off-by: longjin <longjin@DragonOS.org>
2025-11-21 14:26:52 +08:00
LoGin 30352ece95
doc: add 0.3.0 release log (#1389)
Signed-off-by: longjin <longjin@DragonOS.org>
2025-11-20 00:58:06 +08:00
LoGin 4b25dcded2
fix: 修复 #1387 错误的把sys_exit进行更改的bug (#1388)
Signed-off-by: longjin <longjin@DragonOS.org>
2025-11-20 00:29:23 +08:00
LoGin 17ba8f721a
feat: 实现线程组退出机制&添加go语言演示程序 (#1387)
- 新增 group_exit 函数支持线程组整体退出
- 在信号处理中实现线程组退出码统一管理
- 添加 Go 语言演示程序
- 更新系统调用 exit 和 exit_group 使用新机制

Signed-off-by: longjin <longjin@DragonOS.org>
2025-11-19 23:32:23 +08:00
LoGin a7b30bcf1c
feat(process): 实现prctl系统调用支持PR_SET_PDEATHSIG和PR_SET_NAME选项 (#1386)
- 新增pdeath_signal字段到ProcessControlBlock,支持父进程退出信号设置
- 实现prctl系统调用,支持设置/获取进程名和父进程退出信号
- 在进程退出时向设置了pdeath_signal的子进程发送相应信号
- 添加prctl测试用例到gvisor测试白名单

Signed-off-by: longjin <longjin@DragonOS.org>
2025-11-19 15:32:49 +08:00
aLinChe ffc628df53
feat setitimer/getitimer and fix signal stack logic (#1377)
* add sys_get/setitimer and fix sig

Signed-off-by: aLinChe <1129332011@qq.com>

* feat cputime

Signed-off-by: aLinChe <1129332011@qq.com>

* fix sas and fix ABI

Signed-off-by: aLinChe <1129332011@qq.com>

* fix fmt

Signed-off-by: aLinChe <1129332011@qq.com>

* fix diff arch::on_sig_stack compile bug

Signed-off-by: aLinChe <1129332011@qq.com>

* fix better code

Signed-off-by: aLinChe <1129332011@qq.com>

* fix arch

Signed-off-by: aLinChe <1129332011@qq.com>

* fix fmt

Signed-off-by: aLinChe <1129332011@qq.com>

* refactor: 简化定时器类型格式化逻辑

- 移除不必要的字符串转换操作
- 使用Debug trait直接格式化枚举值

Signed-off-by: longjin <longjin@DragonOS.org>

---------

Signed-off-by: aLinChe <1129332011@qq.com>
Signed-off-by: longjin <longjin@DragonOS.org>
Co-authored-by: longjin <longjin@DragonOS.org>
2025-11-19 00:33:56 +08:00
LoGin d93301b512
feat: 实现基于异常表的安全用户空间内存访问机制 (#1383)
* feat: 实现基于异常表的安全用户空间内存访问机制

- 新增异常表机制,在系统调用中安全处理用户空间内存访问错误
- 实现带异常表保护的memcpy和memset函数,防止无效用户地址导致内核在内存拷贝处以及pagefault处理程序之间反复横跳
- 重构用户空间访问API,提供安全的UserBuffer包装类型
- 更新页错误处理程序,支持异常表修复路径
- 添加异常表测试程序,验证各种边界情况
- 更新内存管理文档,详细说明异常表设计原理和使用场景

Signed-off-by: longjin <longjin@DragonOS.org>

* chore: 更新应用黑名单配置

- 添加 test_ebpf_new, test_ebpf_tp 到黑名单,原因:aya上游发版问题导致CI失败

Signed-off-by: longjin <longjin@DragonOS.org>

---------

Signed-off-by: longjin <longjin@DragonOS.org>
2025-11-18 21:02:07 +08:00
LoGin 58cddf7629
fix(rtc): 修复读取时间失败的问题 (#1384)
Signed-off-by: longjin <longjin@DragonOS.org>
2025-11-18 19:46:33 +08:00
LoGin e85d1cd250
fix(futex): 修复futex唤醒逻辑和旧值保存问题 (#1382)
- 修复uaddr2唤醒逻辑,当没有等待者时跳过唤醒而非返回错误
- 修复futex操作中旧值保存问题,避免后续修改影响返回值

Signed-off-by: longjin <longjin@DragonOS.org>
2025-11-18 11:55:13 +08:00
Shenjie Yang 95dd6f7fd2
feat(vfs): 添加路径遍历和目录切换的权限检查 (#1348)
* feat(vfs): 添加路径遍历和目录切换的权限检查

- 新增permission模块处理inode权限检查
- 在路径遍历和chdir/fchdir系统调用中添加权限验证

* feat(filesystem): 实现do_fchmodat文件权限修改功能

* feat(permission)

* fmt

* fix(arch_prctl): 优化arch_prctl错误处理逻辑

* fmt

* fix(fs/permission): 重构权限位计算逻辑,启用测例

- 重构权限位计算逻辑使用ModeType常量
- 更新gvisor测试白名单添加chdir相关测试

* 暂时block掉gvisor的FchdirTest.PermissionDenied测试用例

* refactor(vfs): 将权限检查函数重构为Cred结构体方法

- 将inode_permission及相关辅助函数从独立函数重构为Cred结构体方法
- 更新sys_chdir和sys_fchdir调用权限检查的新接口
- 优化代码组织结构,减少模块间依赖

Signed-off-by: longjin <longjin@DragonOS.org>

---------
Signed-off-by:  xbohodx2024 <xbohodx2024@gmail.com>
Signed-off-by: longjin <longjin@DragonOS.org>
Co-authored-by: longjin <longjin@DragonOS.org>
2025-11-17 23:46:28 +08:00
LoGin 20db99ff8f
refactor(futex): 优化futex唤醒逻辑和共享键生成机制 (#1376)
- 重构futex等待唤醒逻辑,明确区分正常唤醒、超时和信号唤醒
- 引入SharedKeyKind枚举,改进共享futex键的生成方式
- 为AddressSpace添加全局唯一ID,支持私有匿名映射的跨线程同步
- 修复clear_child_tid唤醒逻辑,使用FUTEX_SHARED标志
- 更新测试用例,移除不再适用的阻塞项

Signed-off-by: longjin <longjin@DragonOS.org>
2025-11-15 13:55:29 +08:00
LoGin 5ca5c0cfd6
fix(futex): 修复futex唤醒逻辑和测试用例 (#1374)
- 修复futex唤醒算法中的无限循环问题,改为基于初始队列长度的有限遍历
- 实现Linux语义:当nr_wake为0时至少唤醒一个等待者
- 优化队列处理逻辑,正确处理key和bitset匹配条件
- 清理测试用例黑名单,移除已修复的测试项

Signed-off-by: longjin <longjin@DragonOS.org>
2025-11-13 22:59:24 +08:00
LoGin 2add5d18a0
feat(futex): 实现优先级继承(PI) futex功能 (#1373)
- 新增pi_futex模块,实现FUTEX_LOCK_PI、FUTEX_UNLOCK_PI和FUTEX_TRYLOCK_PI系统调用
- 修改futex模块内部结构体字段可见性以支持PI功能
- 在syscall中集成PI futex系统调用处理
- 更新测试用例配置,启用部分PI futex相关测试

Signed-off-by: longjin <longjin@DragonOS.org>
2025-11-13 20:29:51 +08:00
LoGin 405aed3286
fix(futex): 修复robust futex实现中的竞态条件和逻辑错误 (#1372)
- 修复在get_robust_list中正确处理未设置robust list的情况
- 在exit_robust_list中重新从用户空间读取最新robust list内容
- 使用原子操作替换原有的非原子读写操作
- 修复FutexIterator中的链表遍历逻辑

Signed-off-by: longjin <longjin@DragonOS.org>
2025-11-13 16:51:00 +08:00
LoGin c9fb7305e2
fix: 修复拷贝线程的时候,错误的设置用户栈指针的bug (#1370)
Signed-off-by: longjin <longjin@DragonOS.org>
2025-11-13 11:53:15 +08:00
LoGin 98d9f204c2
fix(vfs): 修复syncfs系统调用中文件描述符验证问题 (#1369)
- 在syncfs系统调用中添加文件描述符验证逻辑
- 检查文件描述符是否存在以及是否以O_PATH模式打开
- 当文件描述符无效或为O_PATH模式时返回EBADF错误
- 添加sync_test到gvisor测试白名单中

Signed-off-by: longjin <longjin@DragonOS.org>
2025-11-12 22:41:49 +08:00
LoGin 209091915d
feat(smp): 实现SYS_GETCPU系统调用 (#1368)
- 新增sys_getcpu模块,实现获取当前CPU编号和NUMA节点编号功能
- 在smp/syscall模块中导出sys_getcpu模块
- 在gvisor测试白名单中添加getcpu相关测试用例
- 系统调用返回当前CPU ID,对于NUMA节点固定返回0(DragonOS不支持NUMA)

Signed-off-by: longjin <longjin@DragonOS.org>
2025-11-12 21:06:16 +08:00
LoGin 40a3a3ec72
refactor(smp): 将smp模块的系统调用适配syscall table (#1367)
Signed-off-by: longjin <longjin@DragonOS.org>
2025-11-12 20:28:40 +08:00
LoGin 9e7725b06c
feat(process): 实现信号备用栈的拷贝逻辑 (#1363)
- 在进程创建流程中拷贝信号备用栈,确保子进程正确继承父进程的sigaltstack
设置
- 从测试黑名单中移除ForkTest.SigAltStack

Signed-off-by: longjin <longjin@DragonOS.org>
2025-11-12 14:58:51 +08:00
LoGin 4db631ef1d
feat(process): 完善进程等待和克隆的语义实现 (#1362)
* fix(process): 修复wait4系统调用中错误码处理和子进程验证逻辑

- 将ESRCH错误码改为ECHILD以符合POSIX规范
- 增加子进程关系验证,确保只能等待当前进程的子进程
- 从测试黑名单中移除BadChild测试用例

Signed-off-by: longjin <longjin@DragonOS.org>

* feat(process): 实现 wait 系统调用的 __WALL 和 __WCLONE 选项支持

- 新增 child_matches_wait_options 函数用于检查子进程与等待选项的匹配
- 在 do_wait 中根据 __WALL/__WCLONE 选项过滤子进程
- 为 KernelCloneArgs 添加 normalize_exit_signal 方法,正确处理线程组的
exit_signal
- 修复进程退出时仅在有有效 exit_signal 时才向父进程发送信号
- 更新 sys_clone 以支持旧版 clone 系统调用的 exit_signal 参数

Signed-off-by: longjin <longjin@DragonOS.org>

---------

Signed-off-by: longjin <longjin@DragonOS.org>
2025-11-12 10:33:05 +08:00
LoGin 9c90aadb0a
fix(mm): 修复伙伴分配器递归死锁问题 (#1361)
- 移除分配过程中释放空页链表页的操作,避免触发buddy_free导致递归死锁
- 简化页链表管理逻辑,始终保留空页链表页而不释放
- 优化伙伴释放时的页链表选择逻辑,确保正确找到有空位的页链表

Signed-off-by: longjin <longjin@DragonOS.org>
2025-11-12 00:03:47 +08:00
LoGin 2b3d5e40a5
feat(kernel): 完善信号处理和进程等待机制 (#1360)
- 实现kill系统调用的信号0权限检查功能
- 修复进程等待逻辑中的ECHILD错误处理
- 添加PID释放的防御性编程保护
- 更新gvisor测试配置

Signed-off-by: longjin <longjin@DragonOS.org>
2025-11-11 23:49:34 +08:00
LoGin ca2bf5fafe
fix(arch/x86_64): 重构信号栈帧结构以兼容Linux (#1357)
- 新增与Linux完全兼容的ucontext、sigcontext、fpstate结构体
- 实现内核与用户态FP状态的安全转换
- 改进信号处理函数的寄存器恢复逻辑
- 增强SROP攻击防护机制
- 修复信号处理中FP状态保存与恢复的问题

Signed-off-by: longjin <longjin@DragonOS.org>
2025-11-11 16:15:55 +08:00
LoGin b420dd0736
fix: 修复/proc/self/exe符号链接处理问题 (#1359)
- 修复符号链接路径拼接时rest_path为空的情况
- 在fork时正确继承父进程的可执行文件路径
- 在execve中解析符号链接的绝对路径
- 添加/proc/self/exe功能测试用例

Signed-off-by: longjin <longjin@DragonOS.org>
2025-11-11 16:15:38 +08:00
aLinChe 38c8719041
fix: sys_sigaction, sys_sigprocmask (#1347)
修复 `sigaction`、`sigprocmask` 系统调用的行为,使其与 gVisor 测试套件的预期语义保持一致。

- **修复 Sigaction**:
  - **BadSigsetFails**: `rt_sigaction` 系统调用现在会严格校验用户传入的 `sigsetsize` 参数。如果该大小与内核内部 `SigSet` 结构体的大小不一致,将立即返回 `EINVAL`,这与 Linux 内核的行为完全一致。
  - **SetSigkillFails & SetSigstopFails**: 实现比原生 Linux 更严格的安全检查以通过 gVisor 测试。Linux 允许将 `SIGKILL` 或 `SIGSTOP` 的处理器重置为默认值(SIG_DFL),而 gVisor 的测试期望任何对这两个信号的设置尝试(即 act 指针不为 NULL)都应立即失败并返回 `EINVAL`。代码已按此更严格的语义进行调整。

- **修复 SigProcMask**:
  - 如果 newset 为 NULL,内核将完全跳过所有修改屏蔽集的逻辑,仅获取当前屏蔽集并按需返回给 oldset。只有当 newset 指针有效时,内核才会根据 how 参数(SIG_BLOCK, SIG_UNBLOCK, SIG_SETMASK)执行相应的修改操作。

**注意**:
对 `sigaction` 的 `SIGKILL`/`SIGSTOP` 处理是为满足 gVisor 安全模型的特定要求,其行为比标准 Linux 内核更为严格。


---------

Signed-off-by: aLinChe <1129332011@qq.com>
Signed-off-by: longjin <longjin@DragonOS.org>
Co-authored-by: longjin <longjin@DragonOS.org>
2025-11-11 15:50:32 +08:00
LoGin be0d8ac90b
fix(process): 修复vfork实现并添加相关测试 (#1358)
- 修正vfork系统调用实现,使用正确的CLONE_VFORK | CLONE_VM标志
- 在execve中添加vfork完成通知机制
- 添加vfork相关测试用例到白名单

Signed-off-by: longjin <longjin@DragonOS.org>
2025-11-11 15:19:33 +08:00
LoGin b00f19af9e
fix: 修复信号处理和fork时的FP状态管理问题 (#1356)
- 在信号处理前保存FP状态并加载标准FP环境
- 在fork时确保保存当前FP寄存器状态
- 更新测试用例白名单以包含FP信号fork & nested测试

Signed-off-by: longjin <longjin@DragonOS.org>
2025-11-11 10:14:14 +08:00
kaleidoscope416 678cad5447
fix(vfs): 当以相对路径 + dirfd 调用 openat/unlinkat 时,父目录被错误解析为 root 的问题。 (#1355)
* 修复do_remove_dir当传入相对路径和dirfd时将父文件夹索引设为root的错误

* 修复do_sys_openat2与 do_unlinkat当传入相对路径和dirfd时将父文件夹索引设为root的错误

---------

Signed-off-by: longjin <longjin@DragonOS.org>
Co-authored-by: longjin <longjin@DragonOS.org>
2025-11-11 00:56:41 +08:00
LoGin ecd3ee3709
fix: 修复进程地址空间复制时的filemap页面映射问题 (#1354)
* fix: 修复进程地址空间复制时的filemap页面映射问题

- 实现正确的写时复制机制,为私有映射设置只读权限
- 修复文件映射VMA拆分时的偏移计算问题

Signed-off-by: longjin <longjin@DragonOS.org>
2025-11-11 00:28:36 +08:00
LoGin 71a2499385
fix errors cause by git merge in pr #1339 (#1352)
Signed-off-by: longjin <longjin@DragonOS.org>
2025-11-10 13:38:39 +08:00
JingXuan_Wei be4ee4f0ac
fix:Fix related issues with kexec (pr # 1303) code (#1339)
- Fix some legacy issues of PR 1303
- Supplement the error handling of PR 1303

Signed-off-by: JensenWei007 <jensenwei007@gmail.com>
2025-11-10 13:31:10 +08:00
LoGin dee2e02034
feat(mm): 实现 VM_DONTCOPY 标志支持 (#1349)
- 在地址空间克隆时跳过标记为 VM_DONTCOPY 的 VMA
- 移除已拷贝的 VM_DONTCOPY 区域的页面映射
- 更新测试用例以验证 MADV_DONTFORK 功能

Signed-off-by: longjin <longjin@DragonOS.org>
2025-11-06 23:37:31 +08:00
kaleidoscope416 71f867f879
fix(vfs):修复 sys_mknodat 路径解析与 mode 处理,并修复 fatfs中mknod 相关死锁 (#1346)
- 处理空路径与 dirfd:当传入的路径名解析后为 "" 且给定的 dirfd 不是 AT_FDCWD 时,返回 ENOENT,避免把空字符串当成有效名在指定目录上进行创建
- mode==0 视为常规文件:将 mode 位为 0 的情况当作 S_IFREG 处理,保持与用户态期望一致
- 修正 AT_FDCWD 父目录查找逻辑:在解析父路径并查找父目录时正确处理 AT_FDCWD,避免错误地基于 AT_FDCWD 进行不当的父目录解析
- 修复 mknod 相关死锁:修复fatfs中mknod获取锁后调用create再次获取锁所引发的死锁

---------

Signed-off-by: longjin <2448956191@qq.com>
Co-authored-by: longjin <longjin@DragonOS.org>
2025-11-06 23:33:23 +08:00
Yuming Jiang d6b2e8691e
feat(vfs): 实现 SYS_PWRITEV 系统调用 (#1322)
* feat(vfs):实现了 SYS_PWRITEV 系统调用
2025-11-06 23:11:49 +08:00
kaleidoscope416 cb6df6dd68
fix(vfs):调整 lseek 行为 —— 禁止 procfs SEEK_END,目录 SEEK_END 返回 MAX_LFS_FILESIZE (#1344)
* 修复对procfs,dir进行lseek的行为错误
2025-11-06 23:02:09 +08:00
LoGin d72261e630
fix(mm): 修复madvise和msync系统调用中的边界处理问题 (#1345)
- 修复madvise长度参数未对齐时的处理逻辑,添加长度向上舍入和溢出检查
- 优化msync系统调用中的VMA查找逻辑,修复锁竞争和边界条件问题
- 修复UserMappings::find_nearest中的VMA查找逻辑错误
- 启用madvise测试

Signed-off-by: longjin <longjin@DragonOS.org>
2025-11-06 16:54:45 +08:00
LoGin c817baeee0
fix: validate clone flags and update test blocklist (#1343)
- Replace from_bits_truncate with from_bits to properly validate clone flags
- Remove CloneTest.Clone3UnknownFlag from test blocklist as it's now handled

Signed-off-by: longjin <longjin@DragonOS.org>
2025-11-05 13:01:50 +08:00
LoGin 9029f0cd0b
fix: 修复进程创建时 CLONE_PARENT_SETTID 标志处理时机 (#1342)
- 将 CLONE_PARENT_SETTID 处理逻辑移至进程创建完成后的正确位置

Signed-off-by: longjin <longjin@DragonOS.org>
2025-11-05 00:22:29 +08:00
LoGin 223966ea18
fix(process): 修复进程等待和退出机制 (#1340)
- 修正父进程等待子进程的等待队列逻辑
- 优化进程退出时的状态设置
- 添加中断保护以避免竞态条件
- 修正错误码处理

Signed-off-by: longjin <longjin@DragonOS.org>
2025-11-04 23:18:21 +08:00
LoGin 9c215fb5ac
feat(process): 添加对fs/gs的用户空间地址验证 (#1336)
- 在ARCH_SET_FS和ARCH_SET_GS系统调用中添加FS/GS地址的用户空间验证
- 在进程克隆时添加TLS地址的用户空间验证
- 新增KernelCloneArgs::verify()方法用于验证克隆参数

Signed-off-by: longjin <longjin@DragonOS.org>
2025-11-04 13:57:20 +08:00
LoGin 75153e2bb1
fix(vfs): 修复文件写入和管道读写逻辑 (#1335)
- 修复文件写入时RLIMIT_FSIZE限制对非File对象也生效了的问题
- 修复管道读写时缓冲区边界处理逻辑,使用两段复制避免跨尾错误
- 修复非阻塞管道写入时返回错误码不正确的问题

Signed-off-by: longjin <longjin@DragonOS.org>
2025-11-03 22:09:06 +08:00
LoGin d94badf144
fix(mm): 修复匿名共享页跨进程共享问题 (#1334)
- 修复 MAP_SHARED|ANON 语义,确保匿名共享页在跨进程间真正共享,
	避免了由于匿名共享页面在尚未fault的时候,fork,
	接着父子进程分别为这一区域分配了不同的物理页面.
- 为 AnonSharedMapping 添加页面缓存,避免重复分配同一页面
- 实现原子性的页面获取或创建机制,防止竞态条件

Signed-off-by: longjin <longjin@DragonOS.org>
2025-11-03 22:08:36 +08:00
LoGin 741d1ad758
feat: 实现waitid系统调用及作业控制信号处理 (#1333)
* feat: 实现waitid系统调用及作业控制信号处理

- 新增waitid系统调用,支持WEXITED、WSTOPPED、WCONTINUED等选项
- 完善作业控制信号处理逻辑,支持SIGSTOP/SIGCONT的异步处理
- 优化信号唤醒机制,确保及时处理pending信号
- 添加waitid功能测试用例,验证系统调用正确性

Signed-off-by: longjin <longjin@DragonOS.org>

* fix: 修复进程管理和信号处理中的竞态条件与错误处理

- 在信号唤醒逻辑中添加停止状态检查,避免错误唤醒已停止进程
- 修复进程等待循环中的错误处理,防止在ESRCH等错误时无限循环
- 优化CPU踢出逻辑,避免当前CPU自踢造成的竞态条件
- 清理信号类型定义中的冗余注释

Signed-off-by: longjin <longjin@DragonOS.org>

* fix(ipc): 修正信号信息结构体字段顺序以符合Linux标准

- 调整SigInfo和PosixSigInfo结构体字段顺序
- 确保si_errno在si_code之前,符合Linux标准布局
- 更新相关转换代码中的字段赋值顺序

Signed-off-by: longjin <longjin@DragonOS.org>

---------

Signed-off-by: longjin <longjin@DragonOS.org>
2025-11-02 21:49:32 +08:00
kaleidoscope416 e769493840
fix(syscall):修复syslog的bug (#1327)
- 在 procfs 的 syslog syscall 处理路径中增加对 SYSLOG_ACTION_READ_ALL (action = 3) 的分发。
- 直接调用现有的 Kmsg::read_all 接口,未修改 Kmsg 的实现逻辑。
- 修复了 gvisor 测试中 Syslog.ReadAll 因未分发而返回 EINVAL 的问题。
2025-10-30 13:54:11 +08:00
JingXuan_Wei bb99d3f6ed
feat(kexec & initram):Add kexec and initram support for x86 architecture (#1303)
- Support embedding initram and using Ramfs as the file system for extracting initram
- Support kexec series system calls, including load series and reboot
- Support u-root as the root file system to boot in Go language
- Add sysfs such as boot_crams and memmap
- Add a series of peripheral system calls related to the above

Signed-off-by: JensenWei007 <jensenwei007@gmail.com>
2025-10-30 13:32:40 +08:00
火花 50a70e9424
feat(net): 桥接网络支持 (#1287)
* feat: 新增veth和bridge结构体,尚未详细测试

Signed-off-by: sparkzky <sparkhhhhhhhhhh@outlook.com>

* feat(net): 完善一下已有的bridge以及veth设备,增加一些调试信息

Signed-off-by: sparkzky <sparkhhhhhhhhhh@outlook.com>

* feat(net): 完善veth网卡驱动,能通过测例;简单修改vridge设备,尚未测试

Signed-off-by: sparkzky <sparkhhhhhhhhhh@outlook.com>

* feat(routing): 简单添加路由子系统,尚未完成

Signed-off-by: sparkzky <sparkhhhhhhhhhh@outlook.com>

* feat(veth): 增加veth默认对端路由

Signed-off-by: sparkzky <sparkhhhhhhhhhh@outlook.com>

* feat(socket): 恢复udp socket中的wait_queue等待

Signed-off-by: sparkzky <sparkhhhhhhhhhh@outlook.com>

* feat(net): 补充bridge的实现

Signed-off-by: sparkzky <sparkhhhhhhhhhh@outlook.com>

* feat(bridge): 更改测试程序

Signed-off-by: sparkzky <sparkhhhhhhhhhh@outlook.com>

* feat: 重命名测试程序

Signed-off-by: sparkzky <sparkhhhhhhhhhh@outlook.com>

* feat: 更改veth&beidge测试程序的toml

Signed-off-by: sparkzky <sparkhhhhhhhhhh@outlook.com>

* feat: 暂时添加route_iface以及route_table

Signed-off-by: sparkzky <sparkhhhhhhhhhh@outlook.com>

* feat: draft router

Signed-off-by: sparkzky <sparkhhhhhhhhhh@outlook.com>

* feat: 实现简单的路由功能,未详细测试

Signed-off-by: sparkzky <sparkhhhhhhhhhh@outlook.com>

* feat: 添加netlink框架,内核相应的处理逻辑以及读取写入用户空间尚未完成

Signed-off-by: sparkzky <sparkhhhhhhhhhh@outlook.com>

* feat(netlink): 完善netlink的读写部分,增加addr的内核处理逻辑

Signed-off-by: sparkzky <sparkhhhhhhhhhh@outlook.com>

* feat: 移动routing的位置

Signed-off-by: sparkzky <sparkhhhhhhhhhh@outlook.com>

* feat: 补充netlink的阻塞等待逻辑&&fmt

Signed-off-by: sparkzky <sparkhhhhhhhhhh@outlook.com>

* feat(netns): 添加网络命名空间

Signed-off-by: sparkzky <sparkhhhhhhhhhh@outlook.com>

* feat(netns): 删除全局路由,使用当前netns下的路由

Signed-off-by: sparkzky <sparkhhhhhhhhhh@outlook.com>

* feat(netlink): 将netlink socket移入netns中

Signed-off-by: sparkzky <sparkhhhhhhhhhh@outlook.com>

* feat: 完成netlink addr消息的支持,增加测试程序

Signed-off-by: sparkzky <sparkhhhhhhhhhh@outlook.com>

* feat(netlink): 消除一些warning

Signed-off-by: sparkzky <sparkhhhhhhhhhh@outlook.com>

* fix: 新建netns时插入loopback网卡到设备列表

Signed-off-by: sparkzky <sparkhhhhhhhhhh@outlook.com>

* feat: 将veth和bridge测试程序改用C完成

Signed-off-by: sparkzky <sparkhhhhhhhhhh@outlook.com>

* feat(gdb): 增加gdb debug可选项

Signed-off-by: sparkzky <sparkhhhhhhhhhh@outlook.com>

* fix: 修复SockAddrIn结构体中的sin_addr字节序问题,确保正确处理IPv4地址

Signed-off-by: sparkzky <sparkhhhhhhhhhh@outlook.com>

* feat: 手糊实现路由功能,后续需要更改事件驱动

Signed-off-by: sparkzky <sparkhhhhhhhhhh@outlook.com>

* feat(netlink): 补充getlink方法以及相关结构体

Signed-off-by: sparkzky <sparkhhhhhhhhhh@outlook.com>

* Refactor network driver interfaces and introduce NAPI support

- Removed the default_iface parameter.
- Introduced a new NAPI module to manage network polling and scheduling.
- Updated the Iface trait to include a napi_struct method for NAPI support.
- Modified Veth network interfaces to integrate with the new NAPI structure.
- Refactored the Router implementation to remove unnecessary polling threads and wait queues.
- Updated NetNamespace to manage a list of bridge devices.
- Cleaned up various unused methods and comments across network-related files.

Signed-off-by: sparkzky <sparkhhhhhhhhhh@outlook.com>

* feat: 将virtio网卡的处理逻辑移动进ksoftirqd中

Signed-off-by: sparkzky <sparkhhhhhhhhhh@outlook.com>

* feat(netlink): 暂时为多播消息添加allow unused,消除warning

Signed-off-by: sparkzky <sparkhhhhhhhhhh@outlook.com>

* feat(nat): 实现SNAT和DNAT

Signed-off-by: sparkzky <sparkhhhhhhhhhh@outlook.com>

* feat(epoll): 更改epoll唤醒判断的逻辑,支持socket加入epoll

Signed-off-by: sparkzky <sparkhhhhhhhhhh@outlook.com>

* feat: 修改test_bind,防止爆内存

Signed-off-by: sparkzky <sparkhhhhhhhhhh@outlook.com>

* feat: 添加一个路由todo信息

Signed-off-by: sparkzky <sparkhhhhhhhhhh@outlook.com>

* fix: rebase主线之后修改冲突

Signed-off-by: sparkzky <sparkhhhhhhhhhh@outlook.com>

* feat: fmt

Signed-off-by: sparkzky <sparkhhhhhhhhhh@outlook.com>

* feat: 清除无用日志

Signed-off-by: sparkzky <sparkhhhhhhhhhh@outlook.com>

* feat: 补充一个panic信息

Signed-off-by: sparkzky <sparkhhhhhhhhhh@outlook.com>

* feat: 将kernel文件夹重命名为kern

Signed-off-by: sparkzky <sparkhhhhhhhhhh@outlook.com>

* feat: 删除netlink测试程序中的linux/netlink.h头文件

Signed-off-by: sparkzky <sparkhhhhhhhhhh@outlook.com>

---------

Signed-off-by: sparkzky <sparkhhhhhhhhhh@outlook.com>
2025-10-30 01:55:04 +08:00
linfeng c651b2747c
add dropbear support (#1304)
https://github.com/DragonOS-Community/DragonOS/pull/1304

* fix rename error in fat32

add a fake link implementation for fat32(it will be removed in the
future).

Signed-off-by: Godones <chenlinfeng25@outlook.com>

* feat: add new syscall and fix the fnctl error

add sendfile syscall.
add rt_sigsuspend syscall.
add sendfile test.
add setown/getown command for fcntl.

Signed-off-by: Godones <chenlinfeng25@outlook.com>

---------

Signed-off-by: Godones <chenlinfeng25@outlook.com>
2025-10-27 22:29:50 +08:00
JingXuan_Wei 9634e5e530
feat(riscv platform vf2): vf2 platform adapted to riscv architecture (#1285)
- Add necessary platform driver support
- Modify some startup processes and assert
- Fixed some issues

Signed-off-by: JensenWei007 <jensenwei007@gmail.com>
2025-10-27 00:11:00 +08:00
LoGin c353791804
fix(futex): 修复futex定时器激活逻辑导致唤醒丢失的问题&复FUTEX_WAKE_OP操作中的Linux兼容性问题 (#1326)
* fix(futex): 修复定时器激活逻辑以避免唤醒丢失

- 在阻塞进程时,确保定时器在中断关闭后被激活,以防止短超时导致的唤醒丢失
- 移除不必要的定时器激活调用,优化代码结构

Signed-off-by: longjin <longjin@DragonOS.org>

* fix(futex): 修复FUTEX_WAKE_OP操作中的Linux兼容性问题

- 修复FUTEX_OP_ANDN操作的位运算逻辑错误
- 支持私有futex中uaddr为NULL时的Linux兼容行为
- futex_test启用PrivateFutex的测例

Signed-off-by: longjin <longjin@DragonOS.org>

---------

Signed-off-by: longjin <longjin@DragonOS.org>
2025-10-27 00:03:54 +08:00
LoGin 1e637b2e9e
fix: 修复多线程的一些bug (#1325)
* feat: 增强信号处理和线程同步功能

- 修复信号处理默认行为,显式设置SIGCHLD/SIGURG/SIGWINCH为忽略
- 在信号处理和futex系统调用中添加内存屏障确保执行顺序
- 添加pthread创建和连接测试用例,验证线程功能正确性
- 优化进程退出时的子进程收养逻辑,移除调试日志
- 更新测试程序Makefile,添加pthread链接支持

Signed-off-by: longjin <longjin@DragonOS.org>

* feat(mm): 实现MADV_DONTNEED内存建议操作

- 添加对MADV_DONTNEED和MADV_DONTNEED_LOCKED标志的处理
- 实现页面解除映射和TLB刷新逻辑
- 支持glibc pthread_create时的线程栈管理

Signed-off-by: longjin <longjin@DragonOS.org>

* fix(robust_lock): 修复robust list获取逻辑

- 修正get_robust_list方法的参数命名和文档
- 修复用户空间指针处理逻辑,正确写入robust list head地址和大小

Signed-off-by: longjin <longjin@DragonOS.org>

* refactor(kernel): 优化futex系统调用和线程相关代码

- 简化futex操作参数处理,移除不必要的错误检查
- 调整clone系统调用参数提取函数顺序
- 在clear_user函数中添加内存屏障
- 新增pthread基础功能测试程序

Signed-off-by: longjin <longjin@DragonOS.org>

---------

Signed-off-by: longjin <longjin@DragonOS.org>
2025-10-19 16:50:03 +08:00
LoGin 0fdf7e1123
feat(ipc): 实现 rt_sigtimedwait 系统调用并优化信号处理机制 (#1323)
* feat(ipc): 实现 rt_sigtimedwait 系统调用并优化信号处理机制

- 添加标准 POSIX siginfo_t 结构体及相关类型,用于用户态接口
- 实现 rt_sigtimedwait 系统调用,支持等待特定信号并处理超时
- 优化信号处理逻辑,确保信号正确标记为 pending
- 修复生命周期标注问题,提高代码健壮性
- 添加完整的系统调用测试用例

Signed-off-by: longjin <longjin@DragonOS.org>

* feat(signal): 扩展实时信号支持并优化信号处理逻辑

- 新增实时信号定义(SIGRTMIN+1至SIGRTMIN+31)
- 改进信号唤醒机制,修复阻塞状态下的信号处理
- 增强内存错误日志,添加进程ID和RIP信息
- 重构抢占管理,引入PreemptGuard机制
- 优化rt_sigtimedwait系统调用实现

Signed-off-by: longjin <longjin@DragonOS.org>
2025-10-14 00:01:48 +08:00
LoGin 978252d00a
fix(futex): 修复futex系统调用参数处理逻辑 (#1321)
- 根据不同的futex命令类型正确处理第4个参数
- 对于WAIT系列操作,第4个参数被解释为超时指针
- 对于其他操作,第4个参数被解释为数值val2
- 仅在需要uaddr2的操作中校验uaddr2

Signed-off-by: longjin <longjin@DragonOS.org>
2025-10-10 23:09:12 +08:00
LoGin bc7c38b705
refactor(futex): 迁移futex系统调用到syscall table机制 (#1320)
- 将futex系统调用从通用系统调用模块中分离
- 为futex和robust futex创建独立的系统调用处理器

Signed-off-by: longjin <longjin@DragonOS.org>
2025-10-10 22:49:38 +08:00
LoGin 3b3b55bfc9
fix(futex): 修复futex的一些bug (#1311)
* feat(filesystem): 实现truncate系统调用

- 添加VFS层的统一vfs_truncate封装,包含文件类型和只读挂载检查
- 实现truncate系统调用处理,支持路径解析和符号链接跟随
- 修复FAT文件系统resize方法,确保页缓存和元数据同步更新
- 添加全面的用户空间测试用例,覆盖各种边界条件和错误情况
- 优化文件截断流程,统一通过VFS封装处理类型和只读检查

Signed-off-by: longjin <longjin@DragonOS.org>

* fix(page_cache): 修复新文件截断时的错误处理逻辑

Signed-off-by: longjin <longjin@DragonOS.org>

* style(filesystem): 移除vcore.rs中的调试日志和注释

Signed-off-by: longjin <longjin@DragonOS.org>

* feat(futex): 完善共享匿名映射的futex支持

- 实现共享匿名映射的futex键生成机制
- 添加跨进程共享匿名futex的测试用例
- 增加futex操作的调试日志输出
- 修复私有futex键的构建问题

Signed-off-by: longjin <longjin@DragonOS.org>

* fix(futex): 修复futex超时处理并增加调试日志

- 修复零超时时间立即返回ETIMEDOUT的逻辑
- 简化超时检查条件,移除错误的FLAGS_HAS_TIMEOUT检查

Signed-off-by: longjin <longjin@DragonOS.org>

* feat(runner): 添加输出到控制台的选项

- 添加Config结构体中的output_to_stdout字段
- 根据配置决定测试输出方式(文件或控制台)
- 添加--stdout命令行参数以启用控制台输出

Signed-off-by: longjin <longjin@DragonOS.org>

* fix(futex): 修复futex等待和唤醒机制

- 修正bitset匹配逻辑,使用位与操作而非不等比较
- 移除wake_up函数的inline(always)属性
- 实现FUTEX_WAIT_BITSET的绝对超时处理
- 添加时间合法性检查和时钟选择逻辑

Signed-off-by: longjin <longjin@DragonOS.org>

* fix(process): 修复futex和进程ID管理相关问题

- 修正FLAGS_MATCH_NONE常量值为0x00
- 确保非组长线程的TGID与组长一致
- 调整clear_child_tid操作顺序以符合Linux语义
- 优化pid_nr_ns方法实现避免潜在panic
- 添加futex测试的blocklist和白名单配置

Signed-off-by: longjin <longjin@DragonOS.org>

---------

Signed-off-by: longjin <longjin@DragonOS.org>
2025-10-10 13:39:47 +08:00
黄铭涛 625abda35e
feat(misc/reboot): 进一步完善reboot系统调用 (#1157)
* feat(misc/reboot): 进一步完善reboot系统调用

* 删除多余的注释

* fix: 添加riscv, loongarch的reboot占位函数

* format: 格式化代码

https://github.com/DragonOS-Community/DragonOS/pull/1157

* Update kernel/src/debug/sysfs/mod.rs

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>

* refactor(reboot): modify reboot syscall from match to syscall table

* 添加restart模式的重启测试用例

---------

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
2025-10-09 22:45:18 +08:00
LoGin 225be1aff8
refactor(time): 将时间相关系统调用重构到syscall table机制下 (#1314)
* refactor(time): 将时间相关系统调用重构到syscall table机制下

- sys_alarm
- sys_clock_gettime
- sys_gettimeofday

Signed-off-by: longjin <longjin@DragonOS.org>

* fix(time): 修复sys_alarm系统调用的逻辑错误

- 修复初始化alarm时使用固定值0的问题,改为使用传入的秒数
- 在取消alarm时正确清空pcb_alarm并返回剩余时间

Signed-off-by: longjin <longjin@DragonOS.org>

---------

Signed-off-by: longjin <longjin@DragonOS.org>
2025-10-09 22:21:48 +08:00
LoGin 7059be4b90
feat(fs): implement RLIMIT_FSIZE limit checking (#1312)
- Add file size limit checking before write operations
- Send SIGXFSZ signal when exceeding file size limit
- Handle partial writes when approaching the limit
- Add check for O_PATH file descriptors in writeable method
- Update test configurations for write limit tests

Signed-off-by: longjin <longjin@DragonOS.org>
2025-10-09 22:06:17 +08:00
linfeng 5d74560493
fix: Fixed some bugs in network and file system (#1302)
1. Return ok instead of error for tty devices.
2. Fixed the packet sending and receiving issues in the network.
3. Fix file descriptor duplication issue.
4. Fix readlink error.
2025-10-09 14:59:44 +08:00
LoGin 84a5869169
feat(filesystem): 实现truncate系统调用 (#1308)
* feat(filesystem): 实现truncate系统调用

- 添加VFS层的统一vfs_truncate封装,包含文件类型和只读挂载检查
- 实现truncate系统调用处理,支持路径解析和符号链接跟随
- 修复FAT文件系统resize方法,确保页缓存和元数据同步更新
- 添加全面的用户空间测试用例,覆盖各种边界条件和错误情况
- 优化文件截断流程,统一通过VFS封装处理类型和只读检查

Signed-off-by: longjin <longjin@DragonOS.org>

* fix(page_cache): 修复新文件截断时的错误处理逻辑

Signed-off-by: longjin <longjin@DragonOS.org>

* style(filesystem): 移除vcore.rs中的调试日志和注释

Signed-off-by: longjin <longjin@DragonOS.org>

---------

Signed-off-by: longjin <longjin@DragonOS.org>
2025-10-08 16:41:16 +08:00
LoGin f1ca2910e6
feat: add sys_clock_nanosleep, tgkill, tkill (#1307)
* feat(syscall): 实现 clock_nanosleep 系统调用及信号重启机制

- 添加 clock_nanosleep 系统调用实现,支持相对和绝对时间睡眠
- 完善信号中断后的系统调用重启机制,特别是 ERESTART_RESTARTBLOCK 的处理
- 为 nanosleep 添加重启块支持,实现 SA_RESTART 标志的语义
- 添加 clock_nanosleep 的测试用例
- 修复 TKILL 系统调用返回 ENOSYS 而非 0

Signed-off-by: longjin <longjin@DragonOS.org>

* feat(ipc): 新增 tkill 和 tgkill 系统调用实现

- 添加 tkill 和 tgkill 系统调用及相关信号处理功能
- 实现 pause 系统调用
- 改进 nanosleep 和 clock_nanosleep 功能
- 添加相关测试用例

Signed-off-by: longjin <longjin@DragonOS.org>

* style(time): 优化睡眠函数代码结构并移除调试日志

- 重构nanosleep函数中was_interrupted变量的赋值逻辑
- 移除clock_nanosleep和nanosleep函数中的调试日志输出

Signed-off-by: longjin <longjin@DragonOS.org>

* refactor: 将 SigCode 枚举从各架构特定文件移至通用 signal_types.rs

- 消除 loongarch64、riscv64 和 x86_64 架构中的重复 SigCode 定义
- 统一信号代码处理逻辑到 signal_types.rs 模块
- 更新相关文件的导入路径以适应新的 SigCode 位置

Signed-off-by: longjin <longjin@DragonOS.org>

---------

Signed-off-by: longjin <longjin@DragonOS.org>
2025-10-08 14:19:27 +08:00