LoGin
efb0f6eaaa
feat(net): 为UDP和Raw socket添加IPv4组播支持 ( #1716 )
...
- 新增multicast模块,包含IPv4组播成员管理相关函数
- 为UDP socket实现IP_MULTICAST_IF、IP_ADD_MEMBERSHIP和IP_DROP_MEMBERSHIP选项
- 为Raw socket实现IP_MULTICAST_IF、IP_ADD_MEMBERSHIP和IP_DROP_MEMBERSHIP选项
- 在IpOption枚举中添加MULTICAST_IF选项
- 更新gvisor测试白名单,添加相关socket测试
Signed-off-by: longjin <longjin@DragonOS.org>
2026-01-28 23:36:09 +08:00
Vitus
832c04a23f
feat(nix): 添加nix alias,formatter,以及更好的提示与原make命令集成 ( #1661 )
...
* - chore:加了一条一键启动的命令
* chore(nix): 添加nixfmt格式化器并整合devShell配置
- 添加treefmt-nix和nixfmt-rfc-style作为项目formatter
- 将tools/nix-dev-shell的devShell配置合并到根目录flake.nix
- 新增rust-toolchain到devShell的buildInputs
- 格式化所有.nix文件并排除.direnv目录
- 移除已废弃的tools/nix-dev-shell目录
* fix
* fix
* fix:构建完后直接退出
fix: qemu 参数分开写的不支持问题
* fix
* fix
* fix:delete result
* remove 快速启动 hint
* Update Makefile
---------
Co-authored-by: Samuel Dai <samuka007@dragonos.org>
2026-01-28 00:17:18 +08:00
LoGin
c194b663ba
feat(net/socket): 新增UDP套接字选项处理与错误队列支持 ( #1712 )
...
* feat(net/socket): 新增UDP套接字选项处理与错误队列支持
- 新增timeval模块,提供通用的时间值解析与写入函数
- 重构UDP套接字选项处理逻辑,拆分为独立option模块
- 实现UDP错误队列支持,包括MSG_ERRQUEUE标志处理
- 新增多种套接字选项:SO_REUSEADDR、SO_BROADCAST、SO_LINGER等
- 支持IP和IPV6级别的选项设置与获取
- 优化接收逻辑,返回原始数据长度以支持MSG_TRUNC标志
- 统一TCP、Unix域套接字的时间值处理函数
Signed-off-by: longjin <longjin@DragonOS.org>
* feat(tests/gvisor): add socket_ip_udp_loopback_test to blocklist and update whitelist
- Added socket_ip_udp_loopback_test to the blocklist due to missing SYS_SENDMMSG support.
- Updated whitelist.txt to include socket_ip_udp_loopback_test for testing purposes.
---------
Signed-off-by: longjin <longjin@DragonOS.org>
2026-01-27 23:30:44 +08:00
LoGin
5285c1510b
feat(net): 实现SO_RCVLOWAT选项并完善socket选项处理 ( #1693 )
...
- 为UDP、TCP、Unix域socket添加SO_RCVLOWAT选项支持
- 修复SO_SNDTIMEO/SO_RCVTIMEO选项处理,支持无限超时(u64::MAX)
- 实现SO_TYPE、SO_DOMAIN、SO_PROTOCOL等基础socket选项
- 为TCP socket添加SO_REUSEADDR、SO_BROADCAST、SO_PASSCRED、SO_NO_CHECK选项
- 修复TCP缓冲区大小计算,区分SNDBUF和RCVBUF的最小值
- 改进timeval解析逻辑,支持负值和零值处理
- 添加gvisor测试白名单,支持更多socket测试用例
Signed-off-by: longjin <longjin@DragonOS.org>
2026-01-21 20:34:21 +08:00
LoGin
84f1fe454d
feat(net): 新增TCP/IP套接字选项支持与Cork缓冲区超时机制 ( #1691 )
...
- 新增TCP_LINGER2、IP_MULTICAST_TTL、IP_MULTICAST_LOOP、SO_OOBINLINE等套接字选项
的读写支持
- 为TCP_CORK选项实现自动超时刷新机制,防止数据在缓冲区中滞留过久
- 在TCP状态处理中区分Closed与TimeWait状态,返回更精确的错误码
- 新增相关网络常量定义,提升与Linux内核的兼容性
- 更新gvisor测试白名单,添加socket_ip_tcp_generic_loopback_test
Signed-off-by: longjin <longjin@DragonOS.org>
2026-01-21 15:10:05 +08:00
LoGin
df62bcbd8f
fix(wait): align WNOHANG/PGID wait semantics with Linux 6.6 ( #1689 )
...
- return ECHILD when no matching children exist
- handle PGID WNOHANG scanning correctly
- add WNOTHREAD wait test for thread-created child
Signed-off-by: longjin <longjin@DragonOS.org>
2026-01-21 01:04:23 +08:00
xboHodx
f7298ff726
feat: 增强VFS系统调用并重构sysinfo ( #1622 )
...
- 修复do_fchmodat中空路径返回ENOENT的问题
- 在do_sys_openat2中添加O_NOFOLLOW符号链接处理
- 改进do_mkdir_at的权限检查顺序以符合Linux语义
- 重构sysinfo系统调用为独立模块并添加进程计数
- 添加uptime_secs函数并优化时间更新逻辑
- 移除gvisor测试黑名单以启用更多测试用例
Signed-off-by: xbohodx2024 <xbohodx2024@gmail.com>
2026-01-17 22:33:55 +08:00
LoGin
1c0948fbe2
feat: 添加IO性能测试工具test_ioperf ( #1666 )
...
实现一个简化的fio-like IO性能测试工具,支持顺序/随机读写模式,可配置块大小、线程数、测试时长等参数,并输出带宽、IOPS和延迟等性能指标
2026-01-15 13:22:25 +08:00
LoGin
a451d185b2
refactor(gvisor): 优化测试输出配置并移除冗余日志 ( #1650 )
...
- 将测试运行器默认输出方式改为控制台,并添加`--no-stdout`选项以保存到文件
- 移除监控脚本中显示最近100行串口输出的冗余日志
- 清理代码格式和注释
Signed-off-by: longjin <longjin@DragonOS.org>
2026-01-13 23:55:47 +08:00
LoGin
3fc8866dd5
refactor(kernel): 重构 Mutex 和 WaitQueue 实现,使用状态机避免唤醒丢失 ( #1643 )
...
- 将 Mutex 内部实现从 SpinLock+LinkedList 改为 AtomicBool+WaitQueue
- 重构 WaitQueue 的 Waker
机制,使用四态状态机(Idle/Sleeping/Notified/Closed)替代 AtomicBool
- 引入 Waiter/Waker 握手机制,通过 prepare_sleep() 和 consume_notification()
避免竞态条件
- 在 Mutex::lock() 中直接使用 wait_queue.wait_until(),简化加锁逻辑
- 修复监控脚本中的权限问题,将 kill 命令改为 sudo kill
Signed-off-by: longjin <longjin@DragonOS.org>
2026-01-13 20:50:15 +08:00
LoGin
0f5163e5b2
feat: 改进VM状态管理和GDB调试支持 ( #1638 )
...
- 新增VM状态管理功能,支持获取网络端口、PID和GDB端口
- 改进GDB调试支持,自动分配端口并支持动态连接
- 优化QEMU启动脚本,使用数组参数提高可维护性
- 修复监控脚本的环境变量依赖问题
Signed-off-by: longjin <longjin@DragonOS.org>
2026-01-13 13:44:01 +08:00
LoGin
5d0cbdcff5
feat(vfs): 实现splice和tee系统调用 ( #1621 )
...
* feat(vfs): 实现splice和tee系统调用
- 新增splice系统调用,支持管道与文件间的零拷贝数据传输
- 新增tee系统调用,实现管道间数据复制而不消耗源数据
- 为File结构体添加pos()和advance_pos()方法用于文件偏移管理
- 在pipe模块中实现splice_to_pipe()和tee_to()等核心操作
- 添加send_kernel_signal_to_current()辅助函数简化内核信号发送
- 更新测试白名单以包含splice相关测试
Signed-off-by: longjin <longjin@DragonOS.org>
* feat(ipc/pipe): 重构splice和tee实现,添加copy_from_other和transfer_chunk辅助函数
Signed-off-by: longjin <longjin@DragonOS.org>
* fix(pipe): 修复管道读写时的信号发送与零拷贝处理逻辑
- 在管道写入时,若没有读取者,发送 SIGPIPE 信号并返回 EPIPE 错误
- 修复读取逻辑中零拷贝时的循环处理,避免因快照过期导致的无限循环
Signed-off-by: longjin <longjin@DragonOS.org>
* 1
* fix(pipe): 修复splice系统调用中管道数据竞争问题
- 为管道添加splice_hold字段,防止并发读取导致数据丢失
- 修改splice_pipe_to_file函数,使用peek+hold模式读取管道数据
- 修复sys_splice和sys_tee中的文件权限检查
- 优化管道可读性判断逻辑,正确处理splice_hold状态
Signed-off-by: longjin <longjin@DragonOS.org>
* fix(splice): refine O_NONBLOCK handling for pipe endpoints
- Update logic to inherit O_NONBLOCK flag only from pipe endpoints, ensuring correct splice behavior for regular files.
- Clarify comments to reflect the changes in handling non-blocking flags.
Signed-off-by: longjin <longjin@DragonOS.org>
* refactor(filesystem): 移除冗余的 nonblock_prep_pipe_write 函数并优化 splice
非阻塞逻辑
- 删除`nonblock_prep_pipe_write`函数,将非阻塞检查逻辑内联至
`splice_file_to_pipe`函数中
- 优化文件到管道 splice 的非阻塞语义,使其更符合 Linux 行为
- 修复管道 epoll 事件检查逻辑,避免在 splice 持有锁时误报可读事件
Signed-off-by: longjin <longjin@DragonOS.org>
* 1
---------
Signed-off-by: longjin <longjin@DragonOS.org>
2026-01-12 15:14:29 +08:00
LoGin
0ee965c8e9
feat(net): 重构网络子系统,引入NAPI机制与TCP socket改进 ( #1599 )
...
- 新增NAPI(New API)子系统,实现有界轮询机制,提升网络包处理性能
- 重构e1000e驱动,集成NAPI中断处理,移除旧的中断处理模块
- 改进TCP socket实现,支持self-connect、延迟关闭、backlog管理等Linux兼容特性
- 优化网络命名空间轮询线程,采用事件驱动与定时器混合模型
- 新增TCP listener backlog和TCP close defer机制,提升协议栈兼容性
- 修复epoll事件通知机制,避免竞态条件和唤醒丢失
- 升级smoltcp依赖,启用TCP Reno和Cubic拥塞控制算法
- 新增网络子系统设计文档,详细说明NAPI与NetNamespace Poll机制
Signed-off-by: longjin <longjin@DragonOS.org>
2026-01-07 22:50:48 +08:00
LoGin
90e127386f
chore(tests): 在gvisor测例白名单中添加pause_test ( #1611 )
...
Signed-off-by: longjin <longjin@DragonOS.org>
2026-01-06 00:34:30 +08:00
kado
c9d123261a
fix(mm): 修复 msync 系统调用以通过 gvisor 测试用例 ( #1583 )
...
* 将原先 直接在内核根据用户地址构造slice再使用write同步 修改为 调用sync同步
Signed-off-by: kaleidoscope416 <jiangruizhi@DragonOS.org>
2026-01-01 15:43:55 +08:00
Samuel Dai
a04c6c1ca6
fix(net): Fix UDP missing features and miss polls ( #1571 )
...
feat(net): 增强UDP套接字功能并修复多个网络问题
- 实现UDP套接字连接模式下的数据包过滤和预连接数据处理
- 添加UDP套接字断开连接支持,包括AF_UNSPEC和端口0处理
- 实现UDP套接字缓冲区大小配置(SO_SNDBUF/SO_RCVBUF)
- 添加UDP套接字shutdown功能支持
- 修复UDP发送到0.0.0.0地址的处理逻辑
- 实现UDP套接字ioctl FIONREAD/TIOCOUTQ支持
- 修复UDP recvmsg/sendmsg系统调用实现
- 增强TCP套接字listen和bind端口处理
- 修复网络接口绑定和地址转换逻辑
- 改进readv系统调用对套接字的特殊处理
Signed-off-by: samuka007 <samuka007@dragonos.org>
2026-01-01 13:23:31 +08:00
LoGin
3ac1432288
feat(net): 重构 raw socket 并添加超时等待支持 ( #1579 )
...
- 重构 raw socket
模块,将大型文件拆分为多个子模块(loopback、ops、options、packet、recv、send、so
cket、sockopt)
- 在 wait_queue 中添加带超时的等待函数(wait_event_interruptible_timeout 和
wait_event_interruptible_timeout_with)
- 为 raw socket 添加 ICMP/ICMPv6 Echo 自动回复功能
- 为 Unix 域套接字(datagram 和 stream)使用新的超时等待函数
- 修复 getsockopt 系统调用中 optval 为 null 时的处理逻辑
- 添加 ICMPv6 过滤器支持
- 改进 raw socket 的 IP_HDRINCL 发送处理
Signed-off-by: longjin <longjin@DragonOS.org>
2025-12-30 13:25:16 +08:00
LoGin
b445c2f5b9
feat(net): 实现 raw socket 和 packet socket 支持 ( #1575 )
...
- 新增 AF_INET/AF_INET6 SOCK_RAW 实现,支持 IPv4/IPv6 raw socket
- 新增 AF_PACKET socket 实现,支持链路层数据包捕获和发送
- 实现 raw socket 的 IP_HDRINCL、ICMP_FILTER、IPV6_CHECKSUM 等选项
- 为网络驱动添加 packet socket 分发支持(e1000e、virtio_net、veth、loopback)
- 完善 socket 系统调用对 raw/packet socket 的支持
- 修复代码规范问题(函数内 use 语句、magic number 常量化)
- 优化并发安全、代码重复和模块结构
Signed-off-by: longjin <longjin@DragonOS.org>
2025-12-30 08:34:35 +08:00
LoGin
62ae87ca3d
feat(signal): 实现进程级信号与线程级信号的分离处理 ( #1574 )
...
- 在信号发送路径中区分进程级信号(TGID/PGID/SID)与线程级信号(PID),分别存储到
shared_pending 和线程私有 pending
- 修改 kill、rt_sigqueueinfo 等系统调用使用进程级信号,tgkill 使用线程级信号
- 为 POSIX timer 添加线程定向信号支持,SIGEV_THREAD_ID 使用线程级信号
- 修复 signalfd 读操作中可能因持有锁而导致的死锁问题
- 更新信号检查逻辑,同时检查线程级 pending 和进程级 shared_pending
Signed-off-by: longjin <longjin@DragonOS.org>
2025-12-30 00:53:36 +08:00
LoGin
a6b54d19c4
feat(syscall): 新增并重构UID/GID相关系统调用 ( #1572 )
...
- 新增id_utils模块,提供setuid/setgid相关系统调用的通用辅助函数
- 新增setreuid、setregid、getresuid、getresgid系统调用实现
- 重构setuid、setgid、setresuid、setresgid、sys_groups系统调用,使用统一的辅助函数
- 完善权限检查逻辑,遵循Linux语义处理-1参数和capability更新
- 在sys_groups中增加CAP_SETGID权限检查
- 更新测试白名单,添加uidgid_test
Signed-off-by: longjin <longjin@DragonOS.org>
2025-12-30 00:13:15 +08:00
LoGin
8e1c9051dc
feat(vfs): 改进pread/pwrite和getdents的用户缓冲区处理 ( #1568 )
...
- 新增pread_pwrite_common模块,实现Linux兼容的部分缓冲区访问语义
- 修改IoVecs::scatter方法返回实际写入字节数
- 修复getdents错误处理逻辑,遵循Linux语义返回已写入字节数
- 优化UserBuffer清零操作,临时关闭内核写保护
- 更新测试配置,添加部分坏缓冲区测试
Signed-off-by: longjin <longjin@DragonOS.org>
2025-12-29 11:11:57 +08:00
LoGin
073432f930
feat: 实现 Restartable Sequences (rseq) 机制 ( #1565 )
...
- 新增 rseq 内核支持,包括系统调用、进程状态管理和用户态辅助向量
- 在调度、信号处理和异常返回路径中集成 rseq 事件处理
- 添加 rseq 相关文档和测试用例
- 修复用户栈扩展逻辑中的边界检查问题
- 调整 Makefile 构建选项以支持测试
Signed-off-by: longjin <longjin@DragonOS.org>
2025-12-27 20:34:35 +08:00
LoGin
23bd1fc9a4
feat(epoll): 支持嵌套epoll与signalfd,修复poll语义 ( #1566 )
...
- 实现epoll嵌套检测与循环检查,支持epoll监听epoll文件描述符
- 添加signalfd系统调用,支持通过文件描述符接收信号
- 修复poll/select对普通文件和目录的处理,确保符合POSIX语义
- 优化epoll唤醒逻辑,避免虚假唤醒和事件丢失
- 修复pipe文件描述符关闭时的epoll通知问题
Signed-off-by: longjin <longjin@DragonOS.org>
2025-12-27 19:45:44 +08:00
LoGin
8480500e1f
feat(signal): 完善信号发送者信息传递与rt_sigqueueinfo实现 ( #1564 )
...
- 修改SigType枚举,为Kill类型添加uid字段,并新增Rt类型以支持rt_sigqueueinfo
- 在所有信号发送路径中传递发送者的pid和uid信息
- 实现rt_sigqueueinfo系统调用,支持用户态传递siginfo信息
- 更新SigCode::try_from_i32方法以支持错误处理
- 添加rtsignal_test到测试白名单
Signed-off-by: longjin <longjin@DragonOS.org>
2025-12-27 17:39:47 +08:00
LoGin
ccd159f815
fix(net): 修复Unix流套接字SCM记录边界处理 ( #1563 )
...
- 修复Unix流套接字SCM记录边界处理,确保recvmsg正确合并数据
- 修复write系统调用零长度写入的语义
- 修复open系统调用对socket文件的处理
- 更新Makefile构建配置
- 启用gVisor Unix套接字测试
Signed-off-by: longjin <longjin@DragonOS.org>
2025-12-27 11:37:14 +08:00
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
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
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
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
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
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
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
9cbd72af99
chore: 删除gvisor测试中的fifo_test blocklist文件 ( #1524 )
...
Signed-off-by: longjin <longjin@DragonOS.org>
2025-12-21 03:30:32 +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
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
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
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