Skip to content
GitLab
Projects Groups Topics Snippets
  • /
  • Help
    • Help
    • Support
    • Community forum
    • Submit feedback
    • Contribute to GitLab
  • Sign in
  • 2 2026OS-陶酉册
  • Project information
    • Project information
    • Activity
    • Labels
    • Members
  • Repository
    • Repository
    • Files
    • Commits
    • Branches
    • Tags
    • Contributor statistics
    • Graph
    • Compare revisions
  • Issues 0
    • Issues 0
    • List
    • Boards
    • Service Desk
    • Milestones
  • Merge requests 0
    • Merge requests 0
  • CI/CD
    • CI/CD
    • Pipelines
    • Jobs
    • Schedules
  • Deployments
    • Deployments
    • Environments
    • Releases
  • Packages and registries
    • Packages and registries
    • Package Registry
    • Terraform modules
  • Monitor
    • Monitor
    • Incidents
  • Analytics
    • Analytics
    • Value stream
    • CI/CD
    • Repository
  • Wiki
    • Wiki
  • Snippets
    • Snippets
  • Activity
  • Graph
  • Create a new issue
  • Jobs
  • Commits
  • Issue Boards
Collapse sidebar
  • 陶酉册
  • 2026OS-陶酉册
  • Merge requests
  • !7

fix(perf_event): 经译址拷贝助手读用户 attr,消除 S 态裸读触发的递归陷入风暴 (Bug A)

  • Review changes

  • Download
  • Patches
  • Plain diff
Merged 陶酉册 requested to merge fix/bugA-perf-event-user-deref into main Jun 16, 2026
  • Overview 0
  • Commits 1
  • Pipelines 0
  • Changes 1

Bug A 修复:ltp-musl RISC-V 递归陷入风暴卡死整组

根因(证据锁定):sys_perf_event_open 用 core::ptr::read_unaligned 直接解引用用户态 attr_ptr。S 态在 SUM 未置位时从 U=1 用户页加载会触发缺页;而 __alltraps 不处理嵌套内核态陷入,缺页演变成递归陷入风暴,卡死 ltp-musl 整组及其后所有组(4150 分大池子全 0)。

证据:gdb 在官方镜像 :20260510 抓到原始嵌套 S 态陷入 sepc=0x802a802a scause=0xd(LoadPageFault) stval=0x7ffffa71 a0=0x7ffffa70(用户地址) SPP=1;riscv64-linux-musl-addr2line 解析内联链 read_unaligned<u32> ← sys_perf_event_open (perf_event.rs:253)。

修法(对标 Linux copy_from_user):改走内核统一的译址拷贝助手 crate::syscall::user::read_user_buffer 读 attr 头部(16B)与可选 flags(偏移40, 8B),坏地址返回 -EFAULT。

验证(官方镜像 :20260510):make all RC=0 双 ELF;SLICE_GROUPS=ltp-musl RV 现已通过 accept03 的 accept() on perf event 子测例(TPASS ENOTSOCK)并继续跑到 adjtimex(串口 8901→40956 持续增长,无风暴);gdb 条件断点(__alltraps 处 S 态异常)在 perf_event 窗口 0 命中;LA 引导正常,basic-musl 跑到 GROUP END 干净关机。

Assignee
Assign to
Reviewers
Request review from
Time tracking
Source branch: fix/bugA-perf-event-user-deref