Commit Graph

1143 Commits

Author SHA1 Message Date
LoGin 13df67a5c0
docs: 添加Tasklet文档并扩展其数据传递能力 (#1624)
- 在文档目录中添加Tasklet的详细说明文档
- 扩展Tasklet回调以支持复杂数据类型的传递
- 更新TTY驱动以适配新的Tasklet接口

Signed-off-by: longjin <longjin@DragonOS.org>
2026-01-09 14:33:23 +08:00
LoGin c875dac003
feat(net): 新增TCP_INFO支持并优化网络接口选择逻辑 (#1623)
* feat(net): 新增TCP_INFO支持并优化网络接口选择逻辑

- 新增TCP_INFO socket选项实现,提供详细的TCP连接状态信息
- 优化IPv4映射IPv6地址的处理逻辑
- 重构未指定地址绑定的网络接口选择算法
- 修复getsockopt缓冲区处理边界条件
- 更新smoltcp依赖版本至5a73cad

Signed-off-by: longjin <longjin@DragonOS.org>
2026-01-09 10:44:21 +08:00
LoGin 510ad1be82
feat(elf): 实现只读段文件映射与BSS处理优化 (#1616)
- 为只读ELF段(PF_W=0)添加文件映射支持,通过pagecache实现按需加载
- 重构BSS处理逻辑,避免死锁并遵循Linux padzero语义
- 新增file_mapping_with_file接口,优化文件映射参数传递

Signed-off-by: longjin <longjin@DragonOS.org>
2026-01-07 23:34:33 +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 74478d610b
refactor: 提取sched_yield函数 (#1615)
Signed-off-by: longjin <longjin@DragonOS.org>
2026-01-06 21:30:56 +08:00
LoGin 343a2c553f
fix: rv64 build (#1614)
Signed-off-by: longjin <longjin@DragonOS.org>
2026-01-06 20:19:13 +08:00
LoGin 7cd673d43e
refactor: 将 SpinLockGuard 替换为 MutexGuard (#1613)
- 在多个文件系统的 IndexNode 实现中,将 SpinLockGuard<FilePrivateData> 替换为
MutexGuard<FilePrivateData>
- 更新了 epoll 模块中的锁类型,将 SpinLock 替换为
Mutex,并调整了相关锁的使用方式
- 修改了网络模块中 EPollItems 的锁类型,将 SpinLock 替换为 Mutex
- 调整了文件系统、驱动、IPC 等模块中相关代码的锁使用方式

Signed-off-by: longjin <longjin@DragonOS.org>
2026-01-06 20:13:02 +08:00
LoGin f5eb00b0d0
feat(exec): 重构execve系统调用,引入do_open_execat函数统一打开可执行文件 (#1612)
- 新增do_open_execat函数,复用do_sys_openat2的路径解析和权限检查逻辑,专门用于打
开可执行文件
- 修改execve、execveat系统调用,不再直接操作inode,而是通过do_open_execat打开文件
- 重构ElfLoader和Shebang处理逻辑,使用File对象替代inode,简化权限检查和文件操作
- 移除冗余的VFS_MAX_FOLLOW_SYMLINK_TIMES导入和手动路径解析代码

Signed-off-by: longjin <longjin@DragonOS.org>
2026-01-06 01:36:31 +08:00
LoGin be37d65322
feat(kernel): 新增工作队列机制 (#1609)
- 新增工作队列(Workqueue)机制,支持在进程上下文中延迟执行任务
- 添加中断与下半部文档目录及工作队列设计文档
- 集成工作队列初始化到内核启动流程

Signed-off-by: longjin <longjin@DragonOS.org>
2026-01-06 00:07:22 +08:00
LoGin 82e11793fc
feat(tty): 引入中断下半部机制并重构TTY输入处理 (#1607)
- 新增bottom_half模块,实现local_bh_disable/enable和lock_bh语义
- 新增tasklet模块,提供基于softirq的bottom-half机制
- 重构TTY输入处理:将send_to_tty_refresh_thread改为enqueue_tty_rx_from_irq,在硬
中断中只入队并调度tasklet
- 为spinlock和rwlock添加*_bh接口,支持在持锁时屏蔽softirq/tasklet
- 修改softirq执行逻辑,在BH禁用时跳过执行以避免死锁
- 更新初始化流程,统一初始化bottom-half子系统

Signed-off-by: longjin <longjin@DragonOS.org>
2026-01-05 22:50:01 +08:00
LoGin d80a2321e6
feat(sched): 新增FIFO调度器实现及演示功能 (#1606)
- 新增FIFO调度器核心实现(fifo.rs),包含优先级队列管理和调度逻辑
- 在CFS调度器中添加set_next_task方法以支持FIFO切换
- 重构CFS调度器的pick_next_task算法,优化任务选择逻辑
- 在进程管理器中添加set_fifo_policy方法,支持内核线程设置FIFO策略
- 新增FIFO演示模块(fifo_demo.rs),展示FIFO调度器使用方式
- 在系统初始化时可选加载FIFO演示功能(通过fifo_demo特性控制)
- 更新调度器模块集成FIFO调度器,完善调度策略切换逻辑
- 修改sched_yield系统调用以支持FIFO调度器的yield操作

Signed-off-by: longjin <longjin@DragonOS.org>
2026-01-05 20:00:24 +08:00
LoGin a6927d4e51
chore: 为sys_time模块添加x86_64架构条件编译 (#1605)
Signed-off-by: longjin <longjin@DragonOS.org>
2026-01-05 00:18:24 +08:00
LoGin 0878add0c3
feat(time): 新增 sys_time 系统调用 (#1601)
- 实现 time() 系统调用,返回自纪元以来的秒数
- 支持将时间值写入用户空间指针 tloc
- 使用与 gettimeofday 相同的时间源

Signed-off-by: longjin <longjin@DragonOS.org>
2026-01-04 21:17:49 +08:00
Yuming Jiang 58676c8e91
refactor(mm): 重命名 verify_area 为 access_ok 并改进文档 (#1597)
重命名理由:
- verify_area 暗示"已验证可访问",具有误导性
- access_ok 强调"快速范围检查",符合实际行为

文档改进:
- 明确说明这只是第一层检查,不保证真正可访问
- 添加粗体警告,防止误用为"已验证可访问"
- 补充典型用法示例,展示配合 copy_to_user 的正确模式

这将函数语义从"验证已完成"纠正为"可以尝试访问",
避免开发者误认为 Ok(()) 代表地址已映射或真正可访问。
2026-01-03 22:06:38 +08:00
LoGin d3aea1d238
refactor(syscall): 重构系统调用处理为独立模块 (#1580)
- 将bpf、eventfd、poll、ppoll、perf_event_open、rseq、getrandom系统调用从Syscall
trait移至独立模块

Signed-off-by: longjin <longjin@DragonOS.org>
2026-01-01 19:16:05 +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
LoGin f6eeef4f74
feat(libs): 新增可睡眠读写信号量RwSem (#1589)
- 新增RwSem读写信号量实现,支持进程上下文阻塞获取锁
- 提供读/写锁的阻塞/非阻塞获取接口,支持可中断等待
- 实现写锁降级功能,支持原子降级为读锁
- 采用写者优先策略,防止写者饥饿
- 更新多个驱动模块,将RwLock替换为RwSem以支持睡眠等待
- 新增设计文档rwsem.md说明实现细节

Signed-off-by: longjin <longjin@DragonOS.org>
2026-01-01 15:39:56 +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
Samuel Dai 84368a9419
Allow offset == len and add NE read/write (#1587) 2026-01-01 02:27:20 +08:00
LoGin aa1c1d1774
Revert "fix(lookup_kallsyms): 修复符号表查询问题 (#1443)" (#1584)
This reverts commit 23ab2f3658.
2025-12-31 22:35:51 +08:00
LoGin 3a5cf980a9
fix(net): 修复 raw socket 发送到非 loopback 地址时未正确选择出口网卡的问题 (#1582)
- 新增 ensure_not_loopback_wildcard_for_send 方法,在发送前检查并切换绑定
- 在 send_to 和 sendmsg 中调用该方法,确保非 loopback 目的地址使用正确的出口网卡
- 更新 DNS 服务器配置为国内常用地址

Signed-off-by: longjin <longjin@DragonOS.org>
2025-12-30 22:04:19 +08:00
LoGin b1275e800a
feat(procfs): 新增/proc/net目录支持ARP缓存和协议列表查看 (#1581)
- 新增/proc/net/arp文件,显示ARP缓存表信息
- 新增/proc/net/protocols文件,显示支持的socket协议信息
- 新增neighbor模块提供ARP条目查询API
- 新增uapi/arp模块定义ARP硬件类型和标志位
- 更新smoltcp依赖以支持medium-ethernet特性
- 调整Unix流套接字缓冲区大小上限

Signed-off-by: longjin <longjin@DragonOS.org>
2025-12-30 19:12:36 +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 e8fc8b3af9
ci: 添加rust-slabmalloc的主机测试工作流和属性测试 (#1577)
- 新增GitHub Actions工作流,用于在主机上构建并运行slab_stress压力测试
- 添加proptest依赖,实现随机分配/释放序列的属性测试
- 新增slab_stress二进制工具,支持Valgrind内存检查
- 完善测试文档,说明主机测试的使用方法
- 修复页面状态迁移测试,确保Full/Partial/Empty列表转换正确

Signed-off-by: longjin <longjin@DragonOS.org>
2025-12-30 08:37:47 +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 9411a468c5
refactor(slabmalloc): 优化页面状态管理并移除周期性重平衡 (#1576)
- 解决 #1466 的性能下降问题
- 引入 PageState 枚举和页面状态跟踪方法
- 在分配和释放时直接维护页面列表,移除 check_page_assignments 周期性重平衡
- 更新元数据开销常量并调整相关测试

Signed-off-by: longjin <longjin@DragonOS.org>
2025-12-30 08:29:30 +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 4c13a59d28
feat(arch/x86_64): 添加AVX支持和XSAVE指令集优化 (#1569)
- 在启动代码中启用CR4.OSXSAVE位和XCR0寄存器以支持AVX指令集
- 重构FPU状态管理模块,支持XSAVE/XRSTOR指令并自动检测硬件能力
- 扩展信号处理框架以支持AVX寄存器状态的保存和恢复
- 修复进程切换时FPU状态恢复的时序问题,确保首次进入用户态前正确初始化
- 优化QEMU启动脚本,使用host CPU模式以支持更多现代指令集特性

Signed-off-by: longjin <longjin@DragonOS.org>
2025-12-29 23:01:37 +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 45db3e09ba
feat(ext4): 将another_ext4库集成到内核仓库 (#1556)
- 并且移除了another_ext4库的block cache相关的代码

Signed-off-by: longjin <longjin@DragonOS.org>
2025-12-27 01:04:49 +08:00
火花 3c0a4eb13a
refactor(procfs): 重构为基于模板的模块化架构(#1514)
- 引入模板系统(template模块),提供ProcFile、ProcDir、ProcSym泛型包装器
- 将原有单体式procfs拆分为模块化结构:cmdline、cpuinfo、meminfo、mounts、pid、se
lf_、sys、thread_self、version等
- 实现动态进程目录(/proc/[pid]),按需创建进程相关文件
- 新增/proc/kmsg、/proc/version_signature等文件支持
- 改进命名空间文件(/proc/*/ns/*)实现,支持动态inode ID和魔法链接
- 优化文件描述符目录(/proc/[pid]/fd)实现,支持chroot视图
- 保持与现有测试的兼容性,包括gVisor测试套件

Signed-off-by: sparkzky <sparkhhhhhhhhhh@outlook.com>
2025-12-27 00:37:56 +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
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