Commit Graph

1192 Commits

Author SHA1 Message Date
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
Shenjie Yang 81d1381f27
factor(clone, mempolicy, cpuinfo): 实现clone3和get_mempolicy系统调用,并实现`/proc/cpuinfo`文件 (#1299)
* feat(procfs): 添加/proc/cpuinfo

- 新增/proc/cpuinfo文件支持,提供CPU硬件信息查询功能
- 实现x86_64架构下的CPU信息采集逻辑,包括:
- 厂商信息、型号、步进版本
- CPU频率、缓存大小
- APIC ID和CPU特性标志
- 将SMP_BOOT_DATA的可见性从pub(super)改为pub,以便cpuinfo模块访问
- 在ProcFS中注册cpuinfo文件并添加相关文件类型定义
- 实现open_cpuinfo方法处理文件打开请求
- 添加generate_cpu_info方法生成各CPU核心的详细信息

refactor(clone): 重构clone系统调用实现并添加clone3支持

- 将clone系统调用的核心逻辑提取到clone_utils模块
- 新增clone3系统调用实现,支持更现代的进程创建方式
- 添加CloneArgs结构体处理clone3的用户空间参数
- 实现从用户空间复制clone参数的验证和转换逻辑
- 扩展CloneFlags支持CLONE_INTO_CGROUP标志

feat(memory): 实现get_mempolicy系统调用

- 添加get_mempolicy系统调用处理NUMA内存策略查询
- 实现Mempolicy结构体和相关枚举类型
- 提供用户空间与内核空间的内存策略数据转换方法
- 支持查询默认内存策略和特定地址的策略
- 添加mempolice_utils模块处理内存策略相关逻辑

* fix: fmt

* fix(fork): PAGE_SIZE的module导入错误

* fix(process): 修正clone_args相关代码

- 将copy_clone_args_from_user方法从fork.rs移至clone_utils.rs
- 将CloneArgs重命名为PosixCloneArgs并设为私有结构体
- 改进用户空间数据读取方式,避免越界读取
- 修复信号检查逻辑中的错误条件判断

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

* fix(syscall): 修正clone_utils.rs中的用户空间数据读取逻辑

- 将set_tid参数的读取方式从指针转换为常量指针
- 修正读取用户空间数据时的偏移计算,确保正确读取每个线程ID

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

---------

Signed-off-by: longjin <longjin@DragonOS.org>
Co-authored-by: longjin <longjin@DragonOS.org>
2025-10-06 17:32:47 +08:00
LoGin afc09a460b
feat(process): 新增进程资源限制(rlimit)管理功能及相关系统调用 (#1300)
-
为ProcessControlBlock添加rlimits字段,存储进程资源限制,默认初始化典型值(如nofi
le软限制1024、硬限制65536)
- 实现进程rlimit的获取、设置及继承机制(inherit_rlimits_from)
- 在dup2、fcntl等函数中添加RLIMIT_NOFILE检查,确保文件描述符不超过软限制
- 实现sys_prlimit64和sys_setrlimit系统调用,支持查询和设置进程资源限制
- 调整测试用例,添加dup_test到gvisor白名单,忽略未支持的测试

Signed-off-by: longjin <longjin@DragonOS.org>
2025-09-27 22:01:34 +08:00
kaleidoscope416 1e90730d34
fix(syscall): 修复mincore系统调用 (#1301) 2025-09-26 16:36:24 +08:00
LoGin 5946260e1e
fix(syscall): 修复 setdomainname 和 sethostname 系统调用 (#1298)
- 添加 CAP_SYS_ADMIN 权限检查
- 修复字符串处理逻辑
- 确保 UnameTest 测试通过

Signed-off-by: longjin <longjin@DragonOS.org>
2025-09-25 20:11:02 +08:00
LoGin 6b7088f6b4
fix(syscall): 处理不支持的系统调用,返回错误而非panic (#1297)
* fix(syscall): 处理不支持的系统调用,返回错误而非panic

- 将不支持的系统调用处理从panic改为记录error日志
- 返回ENOSYS错误码表示功能未实现
- 添加相关测试用例到白名单

---------

Signed-off-by: longjin <longjin@DragonOS.org>
2025-09-25 20:00:30 +08:00
LoGin cb2487a7f3
feat: implement sys_capget and sys_capset system calls (#1293)
- Add capability management system calls to DragonOS kernel
- Implement capget/capset with version negotiation and capability rules
- Add documentation for sys_capget/sys_capset design and implementation
- Add test cases for both system calls
- Update documentation structure to include new capability syscall documentation

---------

Signed-off-by: longjin <longjin@DragonOS.org>
2025-09-25 17:17:26 +08:00
kaleidoscope416 be0c86d7ed
feat(syscall/mincore):实现了mincore系统调用 (#1258)
* feat(syscall/mincore):实现了mincore系统调用

* 往usebuffer直接写入,在get_page处改为拿一次锁

* 更改原先测试

* 完成can_do_mincore

* fmt

* fix(mm): 完善mincore系统调用实现

- 添加大页支持,在遇到大页时按4K粒度填充
- 修复地址对齐检查,将assert改为返回EINVAL错误
- 严格验证用户缓冲区映射与写权限
- 修复VMA查找和排序逻辑,确保地址连续性判断正确
- 添加覆盖完整性校验
- 重写mincore测试用例,增加边界条件和文件映射测试

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

---------

Signed-off-by: longjin <longjin@DragonOS.org>
Co-authored-by: longjin <longjin@DragonOS.org>
2025-09-24 23:12:07 +08:00
LoGin ef296a34e1
feat(ipc): 实现IPC命名空间初步支持 (#1288)
* feat(ipc): 实现IPC命名空间第一阶段支持

- 添加IpcNamespace结构体并集成到NsProxy中
- 将全局SHM_MANAGER重构为per-ns ShmManager
- 修改shm相关系统调用以支持命名空间隔离
- 添加VMA的shm_id字段用于精确维护映射计数
- 新增IPC命名空间测试用例
- 更新相关文档

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

* fmt

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

---------

Signed-off-by: longjin <longjin@DragonOS.org>
2025-09-24 16:15:09 +08:00
linfeng 509ee34586
refactor: Add system call number to name conversion (#1279)
* refactor: Add system call number to name conversion

add a ptmx test.
fix typo.

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

* add a tty test

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

* fix: fix ptmx bugs.

1. Fix epoll bug.
2. Fix ptmx logic.
3. update tests

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

---------

Signed-off-by: Godones <chenlinfeng25@outlook.com>
2025-09-16 01:48:40 +08:00
LoGin 0c8f73d472
refactor(ipc): Refactor signal handling mechanism, optimize signal sharing between threads (#1282)
- Migrate signal handlers from SignalStruct to the new SigHand structure
- Properly implement sharing of signal handlers between threads
- Add shared signal handling, flag bits, and PID management to SigHand
- Remove the unnecessary sig_struct spinlock on x86_64 architecture
- Optimize the signal handling process to reduce lock usage and deadlock risks

Signed-off-by: longjin <longjin@DragonOS.org>
2025-09-13 21:30:09 +08:00
Shenjie Yang d663df1e91
fix(mm/buddy): correct page zeroing size and add boundary checks (#1280)
fix(mm/buddy): correct page zeroing size and add boundary checks

- Fix incorrect page zeroing size by using PAGE_SIZE instead of block size (1 <<
order)
- Add boundary check to return early when new_page_list_addr equals base
- Add validation to ensure second page list has sufficient capacity before use
- Improve code comments to clarify page metadata handling

---------

Co-authored-by: xbohodx2024 <xbohodx2024@gmail.com>
Signed-off-by: xbohodx2024 <xbohodx2024@gmail.com>
Signed-off-by: longjin <longjin@DragonOS.org>
2025-09-13 01:45:50 +08:00
Samuel Dai 6f371967c3
refactor(net): the big network rebuild (#977)
* ready for merge in master (#964)

uevent should be format

Enum of smoltcp socket should be optimized.

need to add interface for routing subsys

actix is still not abled to run.

clean some casual added code to other places

* updates uevent and make fmt

* 新增CommonAttrGroup,基本支持sysfs下各种类型设备的uevent属性文件的读测试

* 修改net设备的uevent内容,使之与Linux语义一致

* 删除无用注释

* feat: 支持 sysfs下 block, char, Net, rtc, tty 等类型设备的 uevent 文件读操作 (#973)

* 新增CommonAttrGroup,基本支持sysfs下各种类型设备的uevent属性文件的读测试

* 修改net设备的uevent内容,使之与Linux语义一致

* 删除无用注释

* can ctrl-c interupt from blocking accept

* make fmt

* clean debug messages

* 清理积弊,不必要的动态分发和智能指针

* remove uevent and netlink

* fmt

* remove uevent test

* 重新组织代码分布

* remove unused imports

* fix it back to old syscall printing style

* regulate naming to posix

* todo: socket close 及 port 接触占用

* fix: format check

* feat: remove syscall prettier printing (#988)

* 重新组织代码分布

* remove unused imports

* fix it back to old syscall printing style

* regulate naming to posix

* todo: socket close 及 port 接触占用

* fix: format check

* remove unnecessary warnings and impls

* loopback assign single ip, remove unnecessary comments

* fmt

* 去除virtio_blk, virtio_net expect错误处理,直接返回错误

* fix: 修复网卡顺序的bug (#996)

* fix: 修复网卡顺序的bug

* make fmt

* feat: 添加默认网卡字段

* make fmt

* 删掉奇怪加入的文件

* fix: ipv6, AddressFamily有转换问题。

* make fmt

* feat(net): 实现unix抽象地址空间 (#1017)

* feat(doc):添加网络子系统模块 (#1020)

* feat(doc): 添加网络子系统文档

* make fmt

* fix(net): TCP Resources and add syscall print, change to use latest smoltcp (#1032)

* change to smoltcp

* add syscall, fix wront accept-listen logic

* add version and resource close

* debug and add socket option level print

* fix: fix udp and run dog in udp

* turn off syscall printing, remove unused imports and make fmt

* turn off syscall printings

* 纸糊忙等tcp connecting,尚不明确连接可用的机制。

* turn off syscall

* fix: 修正IfaceCommon的bounds字段的锁使用问题&调度问题

- 中断上下文内用到的锁,在外面要irqsave.
- 把主线调度的pr应用到当前分支: https://github.com/DragonOS-Community/DragonOS/pull/1063

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

* feat(socket): 实现shutdown系统调用的基础结构并启用相关方法

* feat(socket): 添加shutdown方法并实现ShutdownTemp的TryFrom转换

* fmt

* fix(net): misc of resources release (#1096)

* fix: TCP socket miss activation after close

* fix: TCP socket miss activation after close (#1085)

* fix: loopback, udp resource aquire
- remove tcp useless status update
- enable smoltcp medium-ip feature
- change loopback device use ip for addressing, avoid arp procedure
- fix udp couldn't close bug
- fix udp resource aquire didn't lock port
- remove useless Timer in network initialization

* fmt: format

* fix: loopback and udp resource problem (#1086)

* fix: loopback, udp resource aquire
- remove tcp useless status update
- enable smoltcp medium-ip feature
- change loopback device use ip for addressing, avoid arp procedure
- fix udp couldn't close bug
- fix udp resource aquire didn't lock port
- remove useless Timer in network initialization

* fix(net): Unix 资源释放 (#1087)

* unix socket 相关资源释放 #991
* 完善streamsocket资源释放
* 解决inode和id不匹配

* fix TCP socketset release (#1095)

* fix: TCP socket miss activation after close

* fix: loopback, udp resource aquire
- remove tcp useless status update
- enable smoltcp medium-ip feature
- change loopback device use ip for addressing, avoid arp procedure
- fix udp couldn't close bug
- fix udp resource aquire didn't lock port
- remove useless Timer in network initialization

---------

Co-authored-by: YuLong Huang <139891737+LINGLUO00@users.noreply.github.com>

* fix(process): 修复copy_process的一些bug & 支持默认init进程传参 (#1083)

- 修复`copy_process`函数对标志位处理不正确的bug
- init进程搜索列表中,支持为默认init程序传入参数

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

* feat: 完善sys_reboot (#1084)

* fix(process): 修复copy_process的一些bug & 支持默认init进程传参

- 修复`copy_process`函数对标志位处理不正确的bug
- init进程搜索列表中,支持为默认init程序传入参数

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

* feat: 完善sys_reboot

- 校验magic number
- 支持多个cmd (具体内容未实现)

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

---------

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

* fix: 修复do_wait函数在wait所有子进程时,忘了释放锁就sleep的bug (#1089)

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

* feat(virtualization): 内核虚拟化支持 (#1073)

* 几个结构体

* 通过vmx_init以及create_vm,create_vcpu部分TODO

* kvm_run完成一半

* 能够成功vmlaunch,但是在vmexit时候还有些问题未排查出来

* 解决了vmlaunch导致的cpu_reset的问题

* 整理代码

* 暂时性push到hyc仓库

* 修改内存虚拟化部分参数传入,解决死锁问题

* 初步完成ept映射.但不停EPT_VIOLATION

* 初步完成了EPT映射,但是读写内存还是有点问题

* fixme

* 更新了一些truncate到from_bits_unchecked的实现

* 完成内存虚拟化EPT_VIOLATION的映射

* fmt

* Remove /fixme from .gitignore

* Remove /fixme file

* Update kernel/src/init/init.rs

Co-authored-by: Samuel Dai <samuka007@dragonos.org>

* Update kernel/src/init/init.rs

Co-authored-by: Samuel Dai <samuka007@dragonos.org>

* 修改了注释格式,删除了附带的一些文件操作

* feat(syscall): 实现syscall restart (#1075)

能够在系统调用返回ERESTARTSYS时,信号处理结束后,自动重启系统调用.

TODO: 实现wait等需要restart_block的系统调用的重启

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

* chore: update docker image version in script && update doc (#1076)

* chore: update docker image version in script

* chore: replace lots of spaces with newline in doc

* fix: 修复wait4系统调用部分语义与Linux不一致的问题 (#1080)

* fix: 修复wait4系统调用部分语义与Linux不一致的问题

解决wait不住/wait之后卡死的bug

---------

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

* feat(fs/syscall): 实现fchdir系统调用 (#1081)

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

* fix(mm): 修复fat文件系统的PageCache同步问题 (#1005)


---------

Co-authored-by: longjin <longjin@DragonOS.org>

* fix: 修正nographic启动时,控制台日志未能输出到文件的问题 (#1082)

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

* fix(process): 修复copy_process的一些bug & 支持默认init进程传参 (#1083)

- 修复`copy_process`函数对标志位处理不正确的bug
- init进程搜索列表中,支持为默认init程序传入参数

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

* feat: 完善sys_reboot (#1084)

* fix(process): 修复copy_process的一些bug & 支持默认init进程传参

- 修复`copy_process`函数对标志位处理不正确的bug
- init进程搜索列表中,支持为默认init程序传入参数

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

* feat: 完善sys_reboot

- 校验magic number
- 支持多个cmd (具体内容未实现)

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

---------

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

* fix: 修复do_wait函数在wait所有子进程时,忘了释放锁就sleep的bug (#1089)

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

* pull主线并且fmt

---------

Signed-off-by: longjin <longjin@DragonOS.org>
Co-authored-by: GnoCiYeH <heyicong@dragonos.org>
Co-authored-by: Samuel Dai <samuka007@dragonos.org>
Co-authored-by: LoGin <longjin@DragonOS.org>
Co-authored-by: LIU Yuwei <22045841+Marsman1996@users.noreply.github.com>
Co-authored-by: MemoryShore <1353318529@qq.com>

* fix: 在插入新的timer时,边界条件判断不正确的问题 (#1091)

修复split_pos 初始值错误导致原本应该被插入到链表末尾的定时器,插入到了链表头

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

* fmt

* feat(net): Add Inet documenation

* Revert "Merge Master"

* cleanup codes

* refactor: 将设备名称 "lo" 提取为常量 DEVICE_NAME

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

* make fmt (#1109)

* fmt (#1110)

* refactor: 删除多余的代码

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

* refactor: 移除网络重构分支中,use xxx::*的内容 (#1117)

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

* feat(net): 引入kthread,将Inet-网卡处理流程移入内核线程中

* change socket interface

* add check target vscode settings

* fix(net,unix): fix miss create of file

* fix(net): format codes

* fix: 修复缺失的glibc和busybox的toml文件

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

* fmt

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

* refactor: 统一接口到 Socket trait 一层

* fix(user): http_server 错误判断创建socket的返回值

* feat(net): add epoll logical support for inet sockets

* fix(net): can write file, have problem in notification

* refactor: 消除warning,优化代码结构

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

* fix(epoll): 修复connect的忙等待逻辑,以及支持socket加入epoll

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

* fmt

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

* feat: 简单实现unix stream & seqpacket

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

* fix(unix):让 unix socket 的close方法返回Ok

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

* chore: 更新依赖镜像并调整调试输出

- 将inherit-methods-macro依赖从GitHub迁移至DragonOS镜像源
- 移除rust-analyzer的allTargets检查配置
- 简化LoopbackInterface和IfaceCommon的Debug实现
- 移除socket resize方法中的冗余警告日志

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

---------

Signed-off-by: longjin <longjin@DragonOS.org>
Signed-off-by: sparkzky <sparkhhhhhhhhhh@outlook.com>
Co-authored-by: val213 <1042594899@qq.com>
Co-authored-by: Val213 <112376067+val213@users.noreply.github.com>
Co-authored-by: 黄铭涛 <1037827920@qq.com>
Co-authored-by: Cai Junyuan <121806694+smallcjy@users.noreply.github.com>
Co-authored-by: smallcjy <2628035541@qq.com>
Co-authored-by: longjin <longjin@DragonOS.org>
Co-authored-by: xiaolin2004 <1553367438@qq.com>
Co-authored-by: YuLong Huang <139891737+LINGLUO00@users.noreply.github.com>
Co-authored-by: Z Fan <140599389+BrahmaMantra@users.noreply.github.com>
Co-authored-by: GnoCiYeH <heyicong@dragonos.org>
Co-authored-by: LIU Yuwei <22045841+Marsman1996@users.noreply.github.com>
Co-authored-by: MemoryShore <1353318529@qq.com>
Co-authored-by: 火花 <sparkhhhhhhhhhh@outlook.com>
2025-09-12 00:35:13 +08:00
Shenjie Yang 6ebe30bfa9
feat(syscall/getxattr): 实现关于扩展参数xattr的六个系统调用 (#1248)
* feat(syscall/getxattr): 实现关于扩展参数xattr的六个系统调用

- SYS_SETXATTR, SYS_LSETXATTR, SYS_FSETXATTR

- SYS_GETXATTR, SYS_LGETXATTR, SYS_FGETXATTR

* fix(getxattr): 修改无法获取值长度的问题

* fix(ext4): 修复ext4文件系统的缓存一致性问题,实现LockedExt4Inode的resize函数

* fix(xattr): 增加关于setxattr和getxattr的测试函数

* fix(xattr): 修改test_sgxattr测试程序,使其强制在ext4文件系统中测试

* fix(xattr): 测例文件移动到对应位置

* fix(xattr): 删除测例的dadk文件

* fix(xattr): 修改测例的名字

* fix(link, unlink, symlink): 在ext4中增加create_with_data使得能够创建symlink; 修复ext4的link和unlink的逻辑bug

* fix(unlink)

* fmt

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

---------

Signed-off-by: sparkzky <sparkhhhhhhhhhh@outlook.com>
Co-authored-by: sparkzky <sparkhhhhhhhhhh@outlook.com>
2025-09-05 22:07:41 +08:00
LoGin d5158a0f48
fix(futex): 修复futex键不存在时的错误处理 (#1276)
- 当futex键不存在时,不再返回EINVAL错误,而是创建新的FutexHashBucket

Signed-off-by: longjin <longjin@DragonOS.org>
Co-authored-by: jensenwei007 <jensenwei007@gmail.com>
2025-09-04 21:39:49 +08:00
LoGin a8e4a826a4
feat(build, kernel): 添加内核版本信息生成与显示功能 (#1269)
添加了内核构建时自动生成版本信息的功能,包括版本号、构建时间、编译器信息、Git提交等。
在内核启动时打印版本信息,并可通过/proc/version文件查询。更新了about应用使用uname系统调用

Signed-off-by: longjin <longjin@DragonOS.org>
2025-08-28 13:16:31 +08:00
LoGin 97d321d713
feat: 实现 UTS 命名空间支持并添加 hostname/domainname 系统调用 (#1268)
* feat(process): 实现 UTS 命名空间支持

添加 UTS 命名空间实现,用于隔离系统标识信息如主机名和域名。
更新 uname 系统调用以使用当前进程的 UTS 命名空间。
改进 UserBufferWriter API 以支持 Clone 类型。

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

* feat(kernel): 添加 sethostname 系统调用支持

实现 sethostname 系统调用,允许用户空间程序设置系统主机名。
包括 UTS 命名空间的修改、系统调用处理程序的实现以及相关配置文件的添加。

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

* feat(syscall): 添加 setdomainname 系统调用

- 在 UtsNamespace 中实现 set_domainname 方法
- 添加 sys_setdomainname 系统调用实现
- 修改 sys_sethostname 中的长度检查逻辑
- 添加 setdomainname 功能的单元测试

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

---------

Signed-off-by: longjin <longjin@DragonOS.org>
2025-08-25 00:34:23 +08:00
LoGin 86929880ad
feat: mntns支持unshare (#1262)
Signed-off-by: longjin <longjin@DragonOS.org>
2025-08-23 18:20:17 +08:00
LoGin f7e908f47e
release: 发布 DragonOS 0.2.0 版本 (#1263)
Signed-off-by: longjin <longjin@DragonOS.org>
2025-08-22 23:01:37 +08:00
LoGin 40e92db370
chore: Upgrade kernel toolchain to 250810 (#1257)
chore: 升级Rust工具链至nightly-2025-08-10

- 更新工作流容器版本至v1.14
- 升级Rust工具链至nightly-2025-08-10
- 更新多个依赖库版本(bitflags、gimli、itertools等)
- 修复代码格式和文档注释
- 优化内存对齐检查使用is_multiple_of()
- 改进错误处理和日志输出
- 移除过时的特性标记和代码

Signed-off-by: longjin <longjin@DragonOS.org>
2025-08-18 13:25:19 +08:00
LoGin ba4af7f718
feat: Add sys_unshare (#1260)
* feat(namespace): 实现unshare系统调用及相关功能

- 新增unshare.rs模块实现ksys_unshare
- 修改nsproxy.rs添加clone_inner方法
- 公开create_new_namespaces和create_pid_namespace方法
- 在user_namespace.rs添加current_user_ns方法
- 添加sys_unshare系统调用实现

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

* add util-linux package

* 调试unshare

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

* fix: 修复futex处理中的用户空间内存访问问题

在`futex.rs`中增加了`safe_read`、`safe_read_u32`和`safe_write_u32`方法,确保在访问用户空间内存时进行安全检查,避免无效地址导致的错误。同时,优化了`handle_futex_death`方法,使用新的安全读取和写入方法,确保在进程死亡时正确处理futex。

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

* refactor(futex): 重构RobustListHead结构并移除调试日志

- 将RobustListHead拆分为PosixRobustListHead和RobustListHead
- 为RobustListHead实现Deref和DerefMut trait
- 移除多余的调试日志输出
- 优化robust list处理逻辑

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

---------

Signed-off-by: longjin <longjin@DragonOS.org>
2025-08-18 08:43:51 +08:00
LoGin 3ab5403938
fix: 修复futex处理中的用户空间内存访问问题 (#1259)
在`futex.rs`中增加了`safe_read`、`safe_read_u32`和`safe_write_u32`方法,确保在访问用户空间内存时进行安全检查,避免无效地址导致的错误。同时,优化了`handle_futex_death`方法,使用新的安全读取和写入方法,确保在进程死亡时正确处理futex。

Signed-off-by: longjin <longjin@DragonOS.org>
2025-08-18 08:28:07 +08:00
LoGin 955e97ad3e
feat(filesystem): 添加MountFlags支持并实现`/proc/mounts`文件 (#1253)
* feat(filesystem): 添加MountFlags支持并完善procfs功能

- 为所有文件系统挂载操作添加MountFlags参数
- 在procfs中新增/proc/mounts文件支持
- 重构procfs文件创建逻辑使用Builder模式
- 优化KernFS初始化流程
- 添加MountFlags到字符串的转换功能

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

* refactor(procfs): 将pid字段改为Option类型并优化相关逻辑

- 修改ProcFileCreationParams和InodeInfo中的pid字段为Option<RawPid>
- 为ProcFileCreationParamsBuilder添加默认mode值
- 优化read_exe_link和open_status方法处理None pid的情况
- 移除不必要的pid参数设置
- 为procfs_register_pid和procfs_unregister_pid添加#[inline(never)]

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

---------

Signed-off-by: longjin <longjin@DragonOS.org>
2025-08-12 01:06:16 +08:00
LoGin a6404b52b8
refactor(bitmap): 重构静态位图实现,移除incomplete_features依赖 (#1256)
* refactor(bitmap): 重构静态位图实现,移除incomplete_features依赖

- 移除generic_const_exprs特性依赖
- 引入static_bitmap_size常量函数和static_bitmap!宏
- 修改StaticBitmap结构体定义
- 更新相关测试和使用代码

Signed-off-by: longjin <longjin@DragonOS.org>
2025-08-12 01:06:05 +08:00
linfeng e439a66004
feat: add set/getgroups syscall (#1255)
Signed-off-by: Godones <chenlinfeng25@outlook.com>
2025-08-10 17:33:20 +08:00
kaleidoscope416 169b3a7988
feat(proc): 在proc中添加进程在cpu上运行的时间与进程开始运行的时间的信息 (#1238) 2025-08-10 16:31:14 +08:00
linfeng aaca906914
fix: Fixed several errors in the file system (#1249)
* fix: Fixed several errors in the file system

1. Adjust the initialization order of the file system
2. Complete missing interfaces for special files
3. Fix file system remount error
4. Fix other bugs

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

Signed-off-by: Godones <chenlinfeng25@outlook.com>
Co-authored-by: longjin <longjin@DragonOS.org>
2025-08-10 16:30:05 +08:00
linfeng 501d9f259a
feat: support fsync/sync/syncfs syscall (#1250)
Signed-off-by: Godones <chenlinfeng25@outlook.com>
2025-08-05 15:00:09 +08:00
kaleidoscope416 b1c4f459b2
refactor(vfs/syscall): 重构部分vfs下的系统调用 (#1236)
* refactor(vfs/syscall): 重构部分vfs下的系统调用

* refactor(vfs/syscall): 把 chdir 添加到调用表

* refactor(vfs/syscall): 把 fchdir 添加到调用表

* refactor(vfs/syscall): 把 getcwd 添加到调用表

* refactor(vfs/syscall): 把 getdents|gendents64 添加到调用表

* refactor(vfs/syscall): 把 lseek 添加到调用表

* refactor(vfs/syscall): 把 openat 添加到调用表

* refactor(vfs/syscall): 把 pread64 添加到调用表

* refactor(vfs/syscall): 把 pwrite64 添加到调用表

* refactor(vfs/syscall): 把 mkdir 添加到调用表

* refactor(vfs/syscall): 把 mkdirat 添加到调用表

* refactor(vfs/syscall): 把 link 添加到调用表

* refactor(vfs/syscall): 把 linkat 添加到调用表

* refactor(vfs/syscall): 把 unlinkat 添加到调用表

* refactor(vfs/syscall): 把 rename 添加到调用表

* refactor(vfs/syscall): 把 renameat 添加到调用表

* refactor(vfs/syscall): 把 renameat2 添加到调用表

* refactor(vfs/syscall): 把 rmdir 添加到调用表

* refactor(vfs/syscall): 把 unlink 添加到调用表

* 迁移sys_utimes系统调用

* 迁移futimesat和utimensat系统调用

* 迁移fchown

* 迁移fchownat

* refactor(vfs/syscall):迁移lchown

* refactor(vfs/syscall):迁移chown

* refactor(vfs/syscall):迁移fchmod

* refactor(vfs/syscall):迁移fchmodat

* refactor(vfs/syscall):迁移chmod

* refactor(vfs/syscall):迁移faccessat和faccessat2

* refactor(vfs/syscall):迁移access

* refactor(vfs/syscall):迁移readlink和readlinkat

* refactor(vfs/syscall):迁移dup,dup2,dup3,fcntl

* refactor(vfs/syscall):迁移ftruncate

* refactor(vfs/syscall):迁移mknod

* refactor(vfs/syscall):迁移newfstatat

* refactor(vfs/syscall):迁移statx

* refactor(vfs/syscall):迁移statfs

* refactor(vfs/syscall):迁移fstatfs

* refactor(vfs/syscall):迁移newfstat

* refactor(vfs/syscall):make fmt

* fix: 更新root_inode的获取

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

---------

Signed-off-by: sparkzky <sparkhhhhhhhhhh@outlook.com>
Co-authored-by: dolzhuying <1240800466@qq.com>
Co-authored-by: sparkzky <sparkhhhhhhhhhh@outlook.com>
2025-08-04 11:11:06 +08:00
LoGin 91827fc04a
feat: implement basic mount namespace support (#1246)
Add initial mount namespace functionality with root namespace creation:
  - Create root mount namespace initialization and management
  - Implement basic mount namespace structure with root mountfs
  - Add namespace-aware mount/umount operations and VFS modifications
  - Update filesystem modules (devfs, procfs, sysfs, overlayfs) for namespace compatibility
  - Modify TTY and stdio for namespace support

Signed-off-by: longjin <longjin@DragonOS.org>
2025-08-03 23:11:51 +08:00
LoGin 1875b2feb0
fix(procfs): 修复进程名称显示问题 (#1245)
* fix(procfs): 修复进程名称显示问题

修改ProcessControlBlock::generate_name函数,使其只返回可执行文件的basename,
而不是完整的路径和所有参数。这样/proc/*/status中显示的进程名称将符合
Linux的行为规范。

例如:/bin/busybox 进程将显示为 "busybox" 而不是 "/bin/busybox -/bin/busybox sh --login"

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

* refactor(process): 简化进程名称生成逻辑

移除`generate_name`函数中未使用的`args`参数,简化代码逻辑。

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

---------

Signed-off-by: longjin <longjin@DragonOS.org>
2025-08-03 23:05:23 +08:00
LoGin 5038bf86d5
feat: implement namespace proxy and PID namespace support (#1244)
- Add nsproxy module for unified namespace management across process types
  - Implement complete PID namespace isolation with process ID mapping and management
  - Refactor credential system to use Arc<Cred> for improved performance and memory safety
  - Unify namespace common field management to enhance code reusability
  - Optimize PID namespace process lookup and management mechanisms
  - Enhance TTY subsystem with improved terminal job control and virtual terminal management
  - Improve signal handling system with namespace-level signal isolation
  - Add sys_getpgrp system call and refine process group management
  - Refactor signal processing modules across x86 and RISC-V architectures
2025-07-30 22:54:43 +08:00
chiichen dcd79b408b
feat: basic support build kernel rust codes with nix (#1213) 2025-07-28 23:18:01 +08:00
LoGin 4407984044
feat(mm): 添加mincore系统调用,返回ENOSYS (#1241)
* feat(mm): 添加mincore系统调用,返回ENOSYS

添加sys_mincore,使其返回ENOSYS

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

* feat: 新增grep_bin_ubuntu2404配置文件

添加grep_bin_ubuntu2404.toml配置文件,用于安装为ubuntu2404预构建的grep工具

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

* feat: 实现DevPtsFSInode的as_any_ref方法并添加findutils和sed配置

- 实现LockedDevPtsFSInode的as_any_ref方法返回self
- 新增findutils_bin_ubuntu2404.toml配置文件
- 新增sed_bin_ubuntu2404.toml配置文件

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

---------

Signed-off-by: longjin <longjin@DragonOS.org>
2025-07-28 20:39:32 +08:00
linfeng cd10e69927
feat: add execveat syscall (#1240)
Signed-off-by: Godones <chenlinfeng25@outlook.com>
2025-07-27 16:10:25 +08:00
linfeng 8aa3b7cdfb
feat: add select and pselect6 syscall (#1229)
* feat: add select and pselect6 syscall

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

* fix: fix the select compile error

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

---------

Signed-off-by: Godones <chenlinfeng25@outlook.com>
2025-07-16 13:22:32 +08:00
火花 a63fac831f
feat(tty): 在proc中添加进程的tty信息 (#1237)
Signed-off-by: sparkzky <sparkhhhhhhhhhh@outlook.com>
2025-07-15 20:11:42 +08:00
LoGin c8af029744
refactor(time): 将nanosleep系统调用适配新的syscall table (#1233)
Signed-off-by: longjin <longjin@DragonOS.org>
2025-07-12 22:54:40 +08:00
LoGin 1498dbac23
fix(process): 修复waitpid在处理Blocked状态时的逻辑错误 (#1235)
在处理Blocked状态的子进程时,waitpid应继续等待而不是立即返回0。只有当子进程真正退出时才应返回。

Signed-off-by: longjin <longjin@DragonOS.org>
2025-07-12 22:54:09 +08:00
LoGin cade251128
fix: 解决syscall_table处理结束后,忘记执行调度的bug (#1234)
同时,将sys_fork\sys_vfork调整为使用syscall table机制来实现

Signed-off-by: longjin <longjin@DragonOS.org>
2025-07-12 10:57:45 +08:00
LoGin 9156c83658
fix: 临时修复进程execve没恢复默认的sighandler的问题 (#1232)
* feat: 添加测试fork/wait功能的用户程序

1. 在kernel错误日志中添加当前进程ID信息
2. 新增test-fork-wait用户程序,包含Makefile、main.c和配置文件
3. 程序用于测试fork和wait系统调用功能

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

* fix: 临时修复进程execve没恢复默认的sighandle的问题

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

---------

Signed-off-by: longjin <longjin@DragonOS.org>
2025-07-10 23:45:24 +08:00
LoGin 33c42e7dfb
refactor(kernel): 增加内核栈大小从0x4000到0x8000 (#1230)
* refactor(kernel): 增加内核栈大小从0x4000到0x8000

修改KernelStack的SIZE和ALIGN常量值,将内核栈大小从16KB增加到32KB。

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

* fix: 修复update submodules的时候没能正确checkout到远程的commit的问题

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

---------

Signed-off-by: longjin <longjin@DragonOS.org>
2025-07-08 00:28:21 +08:00
LoGin 7fb7701e19
refactor(x86/ipc): 将信号处理相关代码迁移至generic_signal模块 (#1226)
* refactor(x86/ipc): 将信号处理相关代码迁移至generic_signal模块

将x86的Signal、SigSet等信号处理相关定义及默认处理函数从x86_64/ipc/signal.rs迁移到ipc/generic_signal.rs,实现架构无关的信号处理逻辑。

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

* refactor(riscv64): 重构信号处理模块,使用通用信号实现

移除原有的Signal枚举和信号处理函数,改为使用通用的GenericSignal实现

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

---------

Signed-off-by: longjin <longjin@DragonOS.org>
2025-07-01 20:37:40 +08:00
火花 1e574d89fa
feat(fs): 补充mount系统调用,增加对硬盘挂载 & ext4文件系统的支持 (#1182)
主要变更:
* 实现完整的mount系统调用,支持从块设备挂载文件系统
* 新增ext4文件系统支持,基于another_ext4库实现
* 引入MountableFileSystem trait和文件系统工厂模式,提升VFS架构
* 完善块设备管理,自动将磁盘和分区注册到devfs(/dev)
* 支持virtio块设备的分区检测和挂载
* 新增umount2系统调用支持文件系统卸载
* 重构symlink相关系统调用,提升代码组织
* 提供硬盘镜像制作脚本和测试程序

技术细节:
- 支持ext4和vfat文件系统的挂载
- 实现MBR分区表解析和GenDisk管理
- 集成页面缓存支持提升文件系统性能
- 完善错误处理和设备号管理
- 新增详细的VFS挂载机制文档

测试验证:
- 新增test-mount-ext4和test-mount-fat测试程序
- 提供make_fs_image.sh脚本创建测试镜像
- 验证挂载、读写、卸载完整流程

Co-authored-by: Samuka007 <samuka007@dragon-os.org>
Co-authored-by: oeasy1412 <oeasy1412@gmail.com>
Co-authored-by: fslongjin <longjin@DragonOS.org>
2025-06-29 17:05:06 +08:00
LoGin f8f7bcf2a3
refactor: Remove namespace related code (#1218)
* 删除mnt namespace

* 移除Namespace代码

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

* 删除Namespace相关文档

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

---------

Signed-off-by: longjin <longjin@DragonOS.org>
2025-06-28 21:20:21 +08:00
黄铭涛 a69d1a93b6
fix(fs, mm): 修复fs、mm上有关系统调用的bug (#1208)
* fix(fs, mm): 修复fs、mm上有关系统调用的bug

**filesystem:**

- 修改read系统调用:修复`O_PATH`文件模式该有的功能,使其能通过gvisor/syscall/read的测试。参考:[[file_table.c - fs/file_table.c - Linux source code v2.6.39 - Bootlin Elixir Cross Referencer](https://elixir.bootlin.com/linux/v2.6.39/source/fs/file_table.c#L331)](https://elixir.bootlin.com/linux/v2.6.39/source/fs/file_table.c#L331),在读取之前先进行检查文件模式是否为`O_PATH`
- 修改getcwd系统调用:修正成跟linux语义一样,返回目录长度而不是地址。因为gvisor用这个系统调用如果返回的是地址是会报错的,改成跟linux一样就不会报错了。参考:[[dcache.c - fs/dcache.c - Linux source code v2.6.39 - Bootlin Elixir Cross Referencer](https://elixir.bootlin.com/linux/v2.6.39/source/fs/dcache.c#L2774)](https://elixir.bootlin.com/linux/v2.6.39/source/fs/dcache.c#L2774)
- 修改unlink系统调用:在unlink删除inode之后,要将inode对应的pagecache的dirty标识去掉,否则在`flush_dirty_pages()`的时候,会将标记为dirty的pagecache进行`page_writeback()`,但是对应的pagecache的inode已经被释放了,这时候直接unwrap()就会导致panic。参考:[[namei.c - fs/namei.c - Linux source code v2.6.6 - Bootlin Elixir Cross Referencer](https://elixir.bootlin.com/linux/v2.6.6/source/fs/namei.c#L1714)](https://elixir.bootlin.com/linux/v2.6.6/source/fs/namei.c#L1714)

**mm:**

- 添加`truncate_inode_pages()`,用来截断文件从指定偏移量的页缓存,但目前该函数功能仅是将pagecache的dirty标识去掉。参考:[[truncate.c - mm/truncate.c - Linux source code v2.6.6 - Bootlin Elixir Cross Referencer](https://elixir.bootlin.com/linux/v2.6.6/source/mm/truncate.c#L112)](https://elixir.bootlin.com/linux/v2.6.6/source/mm/truncate.c#L112)

**syscall:**

- 修改了`convert_with_offset()`的判断逻辑,使其能够从用户空间读取0字节的数据,也是为了能够通过gvisor/syscall/read的测试

目前是能够跑通gvisor syscall测试`read_test`并通过所有测例
![image-20250614224227721](https://github.com/user-attachments/assets/b1c04720-da5c-464a-a7f3-c01f3e82783a)
2025-06-27 10:40:49 +08:00
linfeng 723ac05719
feat: Update rbpf to mainline (#1209)
* feat: Update rbpf to mainline

Enable JIT compilation on x86 platform.

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

* fix: remove rbpf test

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

* fix: remove rbpf info

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

---------

Signed-off-by: Godones <chenlinfeng25@outlook.com>
2025-06-20 10:49:59 +08:00
linfeng 799e573259
feat: debug kernel stack (#1176)
* feat: debug kernel stack

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

* fix: Create guard pages for the kstack through remap

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

* feat(arch/x86_64): 启用内核态写保护功能

添加enable_kernel_wp函数来设置CR0的WP位,防止内核错误写入只读页面

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

* fix(x86_64/mm): 在内核地址错误处理中添加RIP寄存器信息

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

* fix: Fixed the error introduced by enabling WP flag on x86

Restore accidentally deleted functions.

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

* refactor: 移除kstack_protect默认特性并优化内存管理

- 从default特性中移除kstack_protect
- 为X86_64MMBootstrapInfo添加kernel_rodata_start字段
- 调整内核页标志对rodata区域的判断逻辑

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

* fix(mm): 解决加载二进制文件到用户空间的时候,忘记关闭wp的问题

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

* fix

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

---------

Signed-off-by: Godones <chenlinfeng25@outlook.com>
Signed-off-by: longjin <longjin@DragonOS.org>
Co-authored-by: longjin <longjin@DragonOS.org>
2025-06-14 20:42:58 +08:00
linfeng 6b581d4dd8
feat: support tracepoint-based ebpf programs (#1190)
* feat: support tracepoint-based ebpf programs

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

* remove licenses

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

* feat: Supplement tracepoint related files

fix some warnings
add docs for tracepoint

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

---------

Signed-off-by: Godones <chenlinfeng25@outlook.com>
Co-authored-by: longjin <longjin@DragonOS.org>
2025-06-14 17:34:45 +08:00
LoGin 8471e4173e
fix: epoll drop deadlock and open AT_FDCWD with empty relative path panic (#1203)
* fix(epoll): 解决进程持有epoll_inode的时候exit导致的死锁问题

解决由于进程在进入exit流程之前,没有关闭epoll inode导致exit流程死锁的bug

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

* fix(vfs): 解决AT_FDCWD时,传入path为空导致内核panic的问题

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

* chore: 更新Held项目的git revision

将Held项目的git revision从f192df4更新为5163c56。

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

---------

Signed-off-by: longjin <longjin@DragonOS.org>
2025-06-14 17:32:15 +08:00
LoGin 2c6e9dee73
fix: 检测不到ctrl+D的问题 && pid=1被kill的时候没报错的问题 (#1206)
Signed-off-by: longjin <longjin@DragonOS.org>
2025-06-12 14:23:29 +08:00
LoGin 774f9eb7ce
fix(time): 处理信号中断导致的定时器唤醒 (#1204)
在sleep和schedule_timeout模块中增加信号中断检查,当定时器被信号中断时取消定时器并返回ERESTARTSYS错误。

Signed-off-by: longjin <longjin@DragonOS.org>
2025-06-12 14:22:53 +08:00
LoGin 523d2a97d9
fix(net): 解决dhcp偶尔失败的问题 (#1205)
原因是unified init导致网卡顺序不一样了,原本固定写死id的方式不对.现在改用名称匹配

Signed-off-by: longjin <longjin@DragonOS.org>
2025-06-12 14:22:27 +08:00
LoGin 478d68a4de
fix: 修复SignalStruct创建的时候,栈上内存占用过大的问题 (#1201)
Signed-off-by: longjin <longjin@DragonOS.org>
2025-06-12 01:32:14 +08:00
LoGin e696ba4440
fix: 解决创建buddy的函数栈帧过大的问题 (#1189)
* fix: 解决创建buddy的函数栈帧过大的问题

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

* chore(kernel): 移除smoltcp的log依赖项

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

---------

Signed-off-by: longjin <longjin@DragonOS.org>
2025-06-08 10:56:26 +08:00
火花 996150bbc4
fix(sbrk): 将sbrk移出syscall_table (#1197)
Signed-off-by: sparkzky <sparkhhhhhhhhhh@outlook.com>
2025-06-06 21:56:06 +08:00
LoGin 78588e88b1
refactor-process-pcb-init (#1193)
将`do_create_pcb()`的内存占用量从10k降低到5k

Signed-off-by: longjin <longjin@DragonOS.org>
2025-06-05 22:51:27 +08:00
kaleidoscope416 0b358b9db5
refactor(mm/syscall): 重构mm下的系统调用 (#1185)
* refactor(mm/syscall): 把sys_brk加到调用表
* refactor(mm/syscall): 把sys_sbrk加到调用表
* refactor(mm/syscall): 把sys_mmap加到调用表
* refactor(mm/syscall): 把sys_munmap加到调用表
* refactor(mm/syscall): 把sys_mremap加到调用表
* refactor(mm/syscall): 把sys_mprotect加到调用表
* refactor(mm/syscall): 把sys_madvise加到调用表
* refactor(mm/syscall): 把sys_msync加到调用表
2025-06-05 20:06:57 +08:00
DoL 8ff7cd5546
fix(vfs):修复getdents系统调用 (#1195) 2025-06-05 15:09:43 +08:00
DoL 326cf3e0a3
refactor(process): 重构process下的系统调用 (#1184)
* refactor(process):迁移geteuid系统调用

* refactor(process):迁移getegid系统调用

* refactor(process):迁移getgid系统调用

* refactor(process):迁移getpgid系统调用

* refactor(process):迁移getpid系统调用

* refactor(process):迁移getppid系统调用

* refactor(process):迁移getsid系统调用

* refactor(process):迁移gettid系统调用

* refactor(process):迁移getuid系统调用

* refactor(process):迁移set_tid_address系统调用

* refactor(process):迁移setfsgid系统调用

* refactor(process):迁移setfsuid系统调用

* refactor(process):迁移setgid系统调用

* refactor(process):迁移setpgid系统调用

* refactor(process):迁移setresgid系统调用

* refactor(process):迁移setresuid系统调用

* refactor(process):迁移setsid系统调用

* refactor(process):迁移setuid系统调用

* refactor(process):删除部分已迁移的syscall(id相关)的原有部分

* refactor(process):make fmt

* refactor(process):迁移sys_get_rusage系统调用

* refactor(process):迁移exit exit_group 系统调用

* refactor(process):删除重构syscall下的mod中的全架构条件编译

* refactor(process):迁移sys_wait4系统调用

* refactor(process):迁移sys_getrlimit sys_prlimit64 系统调用

* make fmt

* refactor(process):迁移sys_uname系统调用

* fix(ipc):修复rebase时的错误冲突

* refactor(process):修改已迁移的系统调用的handle参数from_user-->frame

* refactor(process):迁移execve系统调用

* refactor(process):迁移clone系统调用

* refactor(process):迁移fork、vfork系统调用

* refactor(process):删除原有syscall文件,将迁移后的文件夹重命名为syscall

* refactor(process):修复条件编译错误
2025-06-04 21:29:51 +08:00
linfeng 58e7943c13
refactor: refactor tracepoint (#1186)
* Refactor: refactor tracepoint

Move tracepoints into separate module.
Macro implementation closer to Linux.
Add the id and formt files corresponding to each tracepoint.
Correctly handle trace/trace_pipe files.

Signed-off-by: Godones <chenlinfeng25@outlook.com>
2025-06-04 13:53:27 +08:00
LoGin 41c7f962c9
refactor(irq): 拆分inner_setup_irq函数,降低栈内存峰值 (#1187)
* refactor(irq): 将错误处理函数重构为类方法

将原先的闭包错误处理函数重构为IrqManager的类方法,减少栈内存使用量864字节

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

* refactor(irq): 重构中断设置逻辑并优化日志处理

- 将inner_setup_irq拆分为prepare_irq_setup和finalize_irq_setup,使得没有栈帧的大小超过4k.降低内存占用峰值

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

* refactor(irq): 拆分finalize_irq_setup为setup_irq_resources和activate_irq_line

将原finalize_irq_setup函数拆分为两个更小、职责更明确的函数,并引入SetupIrqResourcesResp结构体管理中间状态。

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

* fmt

---------

Signed-off-by: longjin <longjin@DragonOS.org>
2025-06-04 13:10:47 +08:00
DoL 9f9b37c492
refactor(syscall):将syscall trait 中的handle参数from_user修改为TrapFrame (#1188)
* refactor(syscall):将syscall trait 中的handle参数from_user修改为frame,

* refactor: 将x86_64::interrupt::TrapFrame替换为arch::interrupt::TrapFrame

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

---------

Signed-off-by: sparkzky <sparkhhhhhhhhhh@outlook.com>
Co-authored-by: sparkzky <sparkhhhhhhhhhh@outlook.com>
2025-06-04 10:18:03 +08:00
Vitus 5db1f9ad54
refactor(ipc): Refactor the syscalls in ipc (#1183)
* feat(ipc): 完成对ipc的系统调用的重构

* refactor(ipc): 优化结构

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

* feat: fmt

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

---------

Signed-off-by: sparkzky <sparkhhhhhhhhhh@outlook.com>
Co-authored-by: Vitus <zhzvitus@gmail.com>
Co-authored-by: sparkzky <sparkhhhhhhhhhh@outlook.com>
2025-05-30 20:52:44 +08:00
LoGin 6ac8e1f0cd
refactor(mm): 优化内存管理模块代码结构 (#1181)
- 将 `MmioBuddyMemPool` 中的 `free_regions` 从数组改为 `Vec`, 降低初始化的栈内存使用
- 移除不必要的 `LinkedList` 依赖,使用 `Vec` 替代

Signed-off-by: longjin <longjin@DragonOS.org>
2025-05-29 17:40:11 +08:00
LoGin 1032474cbf
refactor(driver/acpi): 重构ACPI表读取逻辑并优化栈内存使用 (#1178)
重构了ACPI表读取逻辑,使用宏定义表结构体并拆分读取函数以减少栈内存使用。

Signed-off-by: longjin <longjin@DragonOS.org>
2025-05-29 16:42:11 +08:00
火花 a951a88bee
refactor(epoll): epoll syscall refactor (#1180)
* feat(epoll): Move epoll functionality into filesystem module

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

* refactor(epoll): refactor epoll syscall

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

* feat(epoll): move do_epoll_wait into epoll_utils

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

* fmt

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

---------

Signed-off-by: sparkzky <sparkhhhhhhhhhh@outlook.com>
2025-05-27 14:05:18 +08:00
LoGin e9d82983e1
refactor(x86_64/process): 简化TSSManager初始化方式 (#1179)
移除TSSManager::new()构造函数,改为直接初始化静态变量

Signed-off-by: longjin <longjin@DragonOS.org>
2025-05-27 14:03:09 +08:00
YJwu2023 ef9c935732
fix: 检查栈帧大小 (#1126)
* feat: 打开clippy的stack overflow静态检查

*限制栈大小最大为4096字节
*限制栈中的数组最大为1024字节

* fix: 修复部分函数的爆栈问题 (#1172)

* fix:修复部分函数的爆栈问题

* feat(filesystem): 重构FAT文件系统重命名和移动文件逻辑

将rename_file_in_same_dir和move_file_to_other_dir函数重构为LockedFATInode的方法,优化代码结构。同时更新clippy配置,添加栈大小和数组大小阈值。

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

---------

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

---------

Signed-off-by: longjin <longjin@DragonOS.org>
Co-authored-by: DoL <1240800466@qq.com>
Co-authored-by: longjin <longjin@DragonOS.org>
2025-05-26 17:33:25 +08:00
LoGin a56444e1ad
refactor(vfs): refactor some fs syscalls to syscall-table (#1177)
* refactor(vfs/syscall): 把sys_open加到调用表

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

* refactor(vfs): 将文件系统相关系统调用拆分为独立模块

将 `close`、`fstat`、`lstat` 和 `stat` 系统调用从 `mod.rs` 中拆分为独立的模块

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

* refactor(vfs): 将ioctl系统调用处理逻辑移至独立模块

将ioctl系统调用的处理逻辑从`mod.rs`中提取到独立的`sys_ioctl.rs`模块中,以提高代码的可维护性和可读性。

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

* refactor(vfs): 重构stat相关系统调用实现

将sys_fstat、sys_lstat和sys_stat的实现统一改为调用Syscall::newfstat,移除重复代码

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

* refactor(vfs): 将do_open函数提取到open_utils模块

将sys_open.rs中的do_open函数提取到新建的open_utils模块,并在多处调用处更新引用路径。

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

---------

Signed-off-by: longjin <longjin@DragonOS.org>
2025-05-24 23:17:26 +08:00
火花 aa394c1f6f
feat(wait): 调整内核wait4函数参数类型 (#1175)
* feat:补充wait4的逻辑,添加对进程组的判断

* fix: 修复进程退出码的返回,将正常退出的进程的退出码移动至高8位

* fix: 移除session和processgroup的debug trait

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

* fix: 删除shell.service文件中对于backspace的单独设置

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

* fix: 更新exit函数文档,明确状态码移位规则

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

---------

Signed-off-by: sparkzky <sparkhhhhhhhhhh@outlook.com>
2025-05-24 13:31:20 +08:00
linfeng ba734c8d6b
fix: Fix stack related errors (#1167)
* fix: Fix stack related errors

Increase kernel stack to 32k.
Add a stack overflow test.
Remove manual placement of guard pages

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

* fix: update userstack comments

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

---------

Signed-off-by: Godones <chenlinfeng25@outlook.com>
2025-05-22 08:52:32 +08:00
chiichen fccfa6f7ff
feat: 支持动态链接 (#910)
* feat: 支持动态链接

Authored-By: chiichen <chiichen@qq.com>
Co-authored-by: longjin <longjin@DragonOS.org>
Signed-off-by: longjin <longjin@DragonOS.org>

* build: 更新构建容器版本至v1.12并指定DADK安装版本

- 将BUILD_CONTAINER_VERSION从v1.11升级到v1.12
- 修改bootstrap.sh和user/Makefile中DADK的安装方式,明确指定版本v0.4.0

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

---------

Signed-off-by: longjin <longjin@dragonos.org>
Co-authored-by: chiichen <chiichen@qq.com>
Co-authored-by: longjin <longjin@dragonos.org>
Co-authored-by: Jomo <xuzihao@dragonos.org>
Co-authored-by: MemoryShore <1353318529@qq.com>
2025-05-19 14:29:55 +08:00
LoGin b322121dd9
feat(syscall): 添加syscall table的实现 (#1164)
* feat(syscall): 添加syscall table的实现

- 实现syscall table
- 为syscall table适配write/writev、read和readv系统调用

---------

Signed-off-by: longjin <longjin@DragonOS.org>
2025-05-13 18:59:18 +08:00
LoGin d3ae9c7c4a
fix(page_cache): 修复pagecache无法直接mmap然后读写文件的bug (#1158)
* fix(page_cache): 修复pagecache无法直接mmap然后读写文件的bug

经过此commit,用户程序可以直接mmap文件然后读写(无需通过read/write去读取)

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

* fix(page_cache): 修复pagecache 文件映射的bug

- 修复对同一文件mmap两次时,第二次map之后写入文件,内核panic的问题
- 修复address space已经drop之后,页面回写时的panic的问题
- 为PageCache和InnerPageCache添加唯一ID支持
- 优化页面错误处理函数,添加inline(never)属性
- 修复页面映射范围计算错误
- 改进页面回收器的地址空间处理逻辑

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

---------

Signed-off-by: longjin <longjin@DragonOS.org>
2025-05-10 12:12:03 +08:00
linfeng 7486ad438c
fix bugs in poll and epoll (#1135)
* fix bugs in poll and epoll

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

* fix: wakeup all epitems instead of the first

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

* Fix wakeup_epoll error

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

* Make test_epoll pass

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

---------

Signed-off-by: Godones <chenlinfeng25@outlook.com>
2025-05-09 23:08:50 +08:00
LoGin cd3289e4b4
feat: 实现并测试 newfstatat 系统调用 (#1153)
* feat: 实现并测试 newfstatat 系统调用

新增了 newfstatat 系统调用的实现,并添加了相应的测试应用。

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

* feat(loongarch64/riscv64): 添加文件系统模块并实现GenericPosixStat结构

为loongarch64和riscv64架构添加filesystem模块,包含stat子模块,并实现GenericPosixStat结构用于处理文件状态信息。

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

---------

Signed-off-by: longjin <longjin@DragonOS.org>
2025-05-09 23:04:58 +08:00
火花 5422256d63
fix: 修复无法执行当前目录下程序的bug (#1154)
* 更改pcb中的fs以及fNsSet结构体,以便从fs中获取pwd inode

* fmt

* 更改run-qemu.sh,为x86_64传入KERNEL_CMDLINE参数

* 提取FsStruct中的root和pwd信息

* chore(run-qemu.sh): 重构内核启动参数处理逻辑

- 优化KERNEL_CMDLINE拼接逻辑,确保参数顺序正确
- 统一使用sh -c执行QEMU命令

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

* refactor(mnt_namespace): 重构FsStruct使用ModeType并移除Arc包装

- 将umask类型从u32改为ModeType
- 移除path_context的Arc包装,改为直接使用RwLock
- 实现Clone trait替代自动derive
- 更新默认umask值为ModeType::S_IWUGO

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

* fix(run-qemu): 修改x86_64架构的init程序路径

将x86_64架构的init程序从/bin/busybox改为/bin/dragonreach

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

---------

Signed-off-by: longjin <longjin@DragonOS.org>
Co-authored-by: longjin <longjin@DragonOS.org>
2025-05-09 15:16:10 +08:00
LoGin 0b89d7130e
refactor(vfs): 重构statx系统调用的实现 (#1149)
- 将kstat的获取,与posix statx的获取进行分离.
- 修复statx没有处理dirfd的bug
- 在Metadata结构体中新增btime字段,表示文件的创建时间
- 更新多个文件系统的metadata实现,添加对btime的支持
- 引入derive_builder crate以简化Metadata构建过程
- 重构vfs模块,将core重命名为vcore以避免命名冲突
- 实现vfs_statx和vfs_getattr函数,支持更详细的文件属性查询
- 新增LookUpFlags定义,用于路径查找时的标志位

Signed-off-by: longjin <longjin@dragonos.org>
2025-05-09 14:46:10 +08:00
火花 bc9bb9607f
Feat(tty): Supplement process group logic (#1139)
* 添加busybox的编译

* 完善tty job control的逻辑

* 修改copy_sighand的逻辑,符合Linux语义

* 以busybox作为启动shell去运行

* 修改setsid的逻辑

* 解决前台进程组无法处理信号的问题

* 移除ProcessBasicInfo其中的pgid和sid信息

* 修改setsid

* 新增get_pcb_info

* 在etc目录下新增必要的文件

* 改用busybox init作为引导程序

* 恢复dragonreach文件

* 修改busybox编译选项,能够读取环境变量

* 先让SYS_RT_SIGTIMEDWAIT返回Ok(0),能够正常进入系统

* 一些小更改

* 删除get_pcb_info

* 增加对默认termios的判断

* 完成backspace的修复

* 更改inittab,在shell启动之后更改termios

* 增加executable_path信息

* 补充proc下的exe链接文件以及读取逻辑

* 更改PosixTermios,使用stty完成erase的设置

* 用busybox作为引导程序

* 修改波特率的获取

* 修改函数方法

* 在baud_rate方法中添加对于cbaud的与操作

* 为rv64下的SigSet实现From<Signal>

* refactor(driver): 移除`#[derive(Debug)]`并手动实现`Debug` trait

移除`VirtIOBlkDevice`、`VirtIOConsoleDevice`和`VirtIONetDevice`的`#[derive(Debug)]`,并手动实现`Debug` trait以提供更详细的调试信息。

Co-authored-by: longjin <longjin@DragonOS.org>
2025-05-08 15:05:02 +08:00
Samuel Dai f3bfe77712
fix(boot): won't fail to boot when kvm not available (#1152)
* fix(boot): won't fail to boot when kvm not available

* feat(kvm): add additional debug message on kvm init fail
2025-05-07 23:23:10 +08:00
LoGin 5e87c41d96
chore: 更新loongArch64依赖版本至0.2.5 (#1151)
将loongArch64依赖从git版本切换为crates.io注册表版本0.2.5,

Signed-off-by: longjin <longjin@DragonOS.org>
2025-05-07 19:00:02 +08:00
LoGin 4cc267146a
feat(la64): 实现了较为早期的la64的异常处理的注册 (#1138)
* feat(la64): 实现了较为早期的la64的异常处理的注册

- 栈保存&恢复
- 开机时临时设置异常处理程序,并验证可进入异常处理程序

Signed-off-by: longjin <longjin@DragonOS.org>
2025-05-07 13:14:54 +08:00
火花 fcb5bf4496
Feat(process): 增加ProcessGroup以及Session机制 (#1115)
* 添加make run-nographic

* 添加session和processgroup结构体

* 添加一些有关进程组的syscall

* 在fork中加入set_group

* 修改broadcast未实现的信息

* 添加对kill缺失的进程组的逻辑的补充
2025-04-22 13:22:42 +08:00
linfeng 50bbcae01a
feat:Add tracepoint prototype (#1088)
* feat:Add tracepoint prototype

Signed-off-by: Godones <chenlinfeng25@outlook.com>
2025-04-22 01:58:44 +08:00
LoGin e80796eb82
feat: la64 boot (#1132)
* la64能够进入到kernel_main
* ci: 添加为ubuntu编译qemu-loongarch64的脚本
* feat: la64能输出hello world
* la64 安装gcc && 配置github ci
* chore: 更新CI工作流和构建脚本中的Docker镜像版本至v1.10

Signed-off-by: longjin <longjin@DragonOS.org>
2025-04-20 18:51:45 +08:00
linfeng 167d272792
refactor epoll related implementation (#1128)
* Refactor epoll related implementation

Add PollableInode trait
Implement PollableInode for pollable inodes

fix https://github.com/DragonOS-Community/DragonOS/issues/1094

Signed-off-by: Godones <chenlinfeng25@outlook.com>
2025-04-20 16:41:49 +08:00
Samuel Dai 0f827fb191
fix(build): filter out mislinked debug symbol in the first link stage (#1129) 2025-04-14 10:11:14 +08:00
linfeng 1485456bf3
refacotr: remove all c files (#1131)
* refacotr: remove all c files

Use Rust to implement the symbol table generator.
Delete unused header files and c files
Adjust the makefile in the debug directory

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

* fix: remove extern "C" rs_* functions

move gen_kallsyms.rs to build-scripts

Signed-off-by: Godones <chenlinfeng25@outlook.com>
2025-04-14 09:56:14 +08:00
LoGin 2d06264d79
feat: 实现ppoll系统调用并优化poll相关功能 (#1127)
- 新增ppoll系统调用,支持信号屏蔽和精确超时控制
- 优化poll系统调用,修复超时处理逻辑
- 新增ProcessControlBlock::has_pending_not_masked_signal方法,优化信号检测
- 添加Instant::saturating_sub方法,改进时间计算
- 新增rt_sigpending系统调用,支持获取待处理信号
- 添加ppoll测试程序,验证ppoll功能

Signed-off-by: longjin <longjin@DragonOS.org>
2025-04-02 21:10:52 +08:00
linfeng 91cc4adba9
fix the panic error for riscv64 (#1123)
* fix the panic error for riscv64
2025-04-02 13:49:57 +08:00
LoGin 03015e2559
feat: 支持在rv64下,运行rust编写的helloworld程序 (#1125)
* 添加 riscv_rust_init 这个helloworld程序

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

* feat: 支持在riscv下启动rust编写的hello world程序

TODO: 支持sys ppoll

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

* chore: 更新构建容器版本至v1.9

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

* 1

---------

Signed-off-by: longjin <longjin@DragonOS.org>
2025-03-30 01:28:41 +08:00
LoGin 55833537f1
fix: 修复elf加载器在读取解释器路径时的越界问题 (#1124)
Signed-off-by: longjin <longjin@DragonOS.org>
2025-03-29 23:46:55 +08:00
LoGin b6db20c072
feature: virtio console support (#1113)
feat(virtio): add virtio console driver support

- Implement virtio console driver with TTY interface
- Add HVC device support for console output
- Update devfs to handle HVC devices
- Fix virtio driver registration and initialization
- Improve virtio net driver interrupt handling
- Clean up block device naming implementation
- Add clippy lint checks to multiple crates
- Fix slab allocator alignment issues
- Update QEMU run script for virtio consoleagonOS.org>

---------

Signed-off-by: longjin <longjin@DragonOS.org>
2025-03-27 20:48:40 +08:00
linfeng 3d663af8a2
fix: remove useless c code (#1116)
* fix: remove useless c code

remove printk.c file
remove old test_ebpf file
implement `lookup_kallsyms` and `addr_from_symbol` using rust

* fix the weak linkage

* feat(kernel): 添加cfg-if依赖并优化panic模块的条件编译

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

---------

Signed-off-by: longjin <longjin@DragonOS.org>
Co-authored-by: longjin <longjin@DragonOS.org>
2025-03-27 14:16:10 +08:00
Z Fan 4729ec69c4
feat(kvm): 删除了旧版本kvm的代码 (#1093)
* feat(kvm): 删除了旧版本kvm的代码

* chore(kernel): 将release profile中的debug选项设置为false

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

---------

Signed-off-by: longjin <longjin@DragonOS.org>
Co-authored-by: longjin <longjin@DragonOS.org>
2025-03-25 13:41:30 +08:00
LoGin 8b8f2f7981
chore: 将cargo.lock恢复提交到git (#1114)
Signed-off-by: longjin <longjin@DragonOS.org>
2025-03-25 11:27:50 +08:00
LoGin f8c5e12d70
fix: 修复slab分配器的UAF\内存越界问题 (#1111)
- 新增 `tests.rs` 模块,包含多个测试用例以验证内存分配器的正确性和性能。
- 优化 `pages.rs` 中的 `Bitfield` 实现,移除不必要的 `get_offset_for_align` 函数。
- 在 `zone.rs` 中新增 `try_reclaim_pages_in_slab` 方法,用于在特定 slab 中回收页面。
- 修复 `kernel_allocator.rs` 中的 `allocator_select_condition` 逻辑,移除对 `slab_init_state` 的依赖。
- 移除 `slab.rs` 中的 `slab_init_state` 函数,简化初始化状态检查。

Signed-off-by: longjin <longjin@DragonOS.org>
2025-03-24 23:21:22 +08:00
LoGin 13514f6695
fix: 修复nttyData的buffer导致初始化时,栈溢出的问题 (#1112)
Signed-off-by: longjin <longjin@DragonOS.org>
2025-03-24 23:17:06 +08:00
LoGin 488718dc2e
feat: 实现poll系统调用实现并修复相关bug (#1098)
feat: 实现poll系统调用实现并修复相关bug

- 实现poll系统调用,增加对EPollEvent的处理逻辑
- 修复LockedPipeInode中epitems的锁管理问题
- 添加RestartBlock支持,处理系统调用重启逻辑
- 修复EventPoll中epoll_wait的超时处理逻辑
- 新增test_poll测试程序,验证poll功能

Signed-off-by: longjin <longjin@DragonOS.org>
2025-03-14 10:48:06 +08:00
火花 24b102b030
添加set_user_sigmask (#1090) 2025-03-11 23:25:42 +08:00
LoGin 6fa06ff08a
fix: 在插入新的timer时,边界条件判断不正确的问题 (#1091)
修复split_pos 初始值错误导致原本应该被插入到链表末尾的定时器,插入到了链表头

Signed-off-by: longjin <longjin@DragonOS.org>
2025-03-07 12:05:45 +08:00
Z Fan 597315b04d
feat(virtualization): 内核虚拟化支持 (#1073)
* 几个结构体

* 通过vmx_init以及create_vm,create_vcpu部分TODO

* kvm_run完成一半

* 能够成功vmlaunch,但是在vmexit时候还有些问题未排查出来

* 解决了vmlaunch导致的cpu_reset的问题

* 整理代码

* 暂时性push到hyc仓库

* 修改内存虚拟化部分参数传入,解决死锁问题

* 初步完成ept映射.但不停EPT_VIOLATION

* 初步完成了EPT映射,但是读写内存还是有点问题

* fixme

* 更新了一些truncate到from_bits_unchecked的实现

* 完成内存虚拟化EPT_VIOLATION的映射

* fmt

* Remove /fixme from .gitignore

* Remove /fixme file

* Update kernel/src/init/init.rs

Co-authored-by: Samuel Dai <samuka007@dragonos.org>

* Update kernel/src/init/init.rs

Co-authored-by: Samuel Dai <samuka007@dragonos.org>

* 修改了注释格式,删除了附带的一些文件操作

* feat(syscall): 实现syscall restart (#1075)

能够在系统调用返回ERESTARTSYS时,信号处理结束后,自动重启系统调用.

TODO: 实现wait等需要restart_block的系统调用的重启

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

* chore: update docker image version in script && update doc (#1076)

* chore: update docker image version in script

* chore: replace lots of spaces with newline in doc

* fix: 修复wait4系统调用部分语义与Linux不一致的问题 (#1080)

* fix: 修复wait4系统调用部分语义与Linux不一致的问题

解决wait不住/wait之后卡死的bug

---------

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

* feat(fs/syscall): 实现fchdir系统调用 (#1081)

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

* fix(mm): 修复fat文件系统的PageCache同步问题 (#1005)


---------

Co-authored-by: longjin <longjin@DragonOS.org>

* fix: 修正nographic启动时,控制台日志未能输出到文件的问题 (#1082)

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

* fix(process): 修复copy_process的一些bug & 支持默认init进程传参 (#1083)

- 修复`copy_process`函数对标志位处理不正确的bug
- init进程搜索列表中,支持为默认init程序传入参数

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

* feat: 完善sys_reboot (#1084)

* fix(process): 修复copy_process的一些bug & 支持默认init进程传参

- 修复`copy_process`函数对标志位处理不正确的bug
- init进程搜索列表中,支持为默认init程序传入参数

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

* feat: 完善sys_reboot

- 校验magic number
- 支持多个cmd (具体内容未实现)

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

---------

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

* fix: 修复do_wait函数在wait所有子进程时,忘了释放锁就sleep的bug (#1089)

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

* pull主线并且fmt

---------

Signed-off-by: longjin <longjin@DragonOS.org>
Co-authored-by: GnoCiYeH <heyicong@dragonos.org>
Co-authored-by: Samuel Dai <samuka007@dragonos.org>
Co-authored-by: LoGin <longjin@DragonOS.org>
Co-authored-by: LIU Yuwei <22045841+Marsman1996@users.noreply.github.com>
Co-authored-by: MemoryShore <1353318529@qq.com>
2025-03-04 10:56:20 +08:00
LoGin 01dcb5d7a8
fix: 修复do_wait函数在wait所有子进程时,忘了释放锁就sleep的bug (#1089)
Signed-off-by: longjin <longjin@DragonOS.org>
2025-02-08 23:35:09 +08:00
LoGin 7ae6621cfa
feat: 完善sys_reboot (#1084)
* fix(process): 修复copy_process的一些bug & 支持默认init进程传参

- 修复`copy_process`函数对标志位处理不正确的bug
- init进程搜索列表中,支持为默认init程序传入参数

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

* feat: 完善sys_reboot

- 校验magic number
- 支持多个cmd (具体内容未实现)

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

---------

Signed-off-by: longjin <longjin@DragonOS.org>
2025-02-06 22:55:45 +08:00
LoGin a3011dd24a
fix(process): 修复copy_process的一些bug & 支持默认init进程传参 (#1083)
- 修复`copy_process`函数对标志位处理不正确的bug
- init进程搜索列表中,支持为默认init程序传入参数

Signed-off-by: longjin <longjin@DragonOS.org>
2025-02-06 22:51:51 +08:00
MemoryShore e92424df8d
fix(mm): 修复fat文件系统的PageCache同步问题 (#1005)
---------

Co-authored-by: longjin <longjin@DragonOS.org>
2025-01-01 23:38:00 +08:00
LoGin a08191c719
feat(fs/syscall): 实现fchdir系统调用 (#1081)
Signed-off-by: longjin <longjin@DragonOS.org>
2025-01-01 23:36:37 +08:00
LoGin bcf0382763
fix: 修复wait4系统调用部分语义与Linux不一致的问题 (#1080)
* fix: 修复wait4系统调用部分语义与Linux不一致的问题

解决wait不住/wait之后卡死的bug

---------

Signed-off-by: longjin <longjin@DragonOS.org>
2025-01-01 14:25:46 +08:00
LoGin 2b72148cae
feat(syscall): 实现syscall restart (#1075)
能够在系统调用返回ERESTARTSYS时,信号处理结束后,自动重启系统调用.

TODO: 实现wait等需要restart_block的系统调用的重启

Signed-off-by: longjin <longjin@DragonOS.org>
2024-12-13 00:56:20 +08:00
linfeng 72423f90bb
feat(ebpf): support Aya framework. (#1070)
* feat(ebpf): support Aya framework.

1. fix the rbpf bug
2. use new Aya template
3. add kprobe related device files and attributes to sysfs

---
Signed-off-by: chenlinfeng <chenlinfeng25@outlook.com>
2024-12-07 16:41:37 +08:00
火花 6e85059fbc
feat:添加sigprocmask系统调用 (#1046)
* 添加sigprocmask系统调用

---------

Signed-off-by: sparkzky <sparkhhhhhhhhh@outlook.com>
Co-authored-by: longjin <longjin@DragonOS.org>
2024-12-07 16:36:55 +08:00
LoGin 4f8f269baf
fix: 解决进程退出时没有主动释放fdtable的问题 (#1069)
会导致http server被kill时,pcb没有drop

Signed-off-by: longjin <longjin@DragonOS.org>
2024-12-02 00:39:52 +08:00
LoGin ffa8e88c60
fix:命名管道读行为不符合posix规范问题 (#1066)
fix(pipe): 增强FIFO管道的读写逻辑,解决问题一:非阻塞模式下的无写端错误返回
feat(test_fifo_write): 增强FIFO写入测试,添加信号处理、非阻塞模式支持和多场景测试

---------
Signed-off-by: xiaolin2004 <1553367438@qq.com>
Co-authored-by: xiaolin2004 <1553367438@qq.com>
2024-11-28 23:57:19 +08:00
LoGin df3bf6d60a
fix: 修复无唤醒事件时,核心卡死在idle进程的问题 (#1063)
Signed-off-by: longjin <longjin@DragonOS.org>
2024-11-28 14:33:14 +08:00
LoGin 62da73bbe5
fix: 修正进程pcb的`on_cpu`字段未设置导致的panic问题 (#1057)
Signed-off-by: longjin <longjin@DragonOS.org>
2024-11-28 01:04:48 +08:00