Skip to content

v0.4.4 regression: bash SIGSEGV in set_signal_handler after setsid() #48

Description

@Bahtya

问题描述

v0.4.4 新增的 setsid() + controlling terminal 支持导致 bash 崩溃。

复现

Hermux 中调用:

session_id = vproc_ffi_create_session();
vpid = vproc_ffi_create_process(session_id, "/path/to/bash", argv, envp, pts, pts, pts);

bash 启动后立即 SIGSEGV,终端空白。

Crash 详情

signal=SIGSEGV (11) si_addr=0x0

调用栈:

#02 pc 00096494  bash (set_signal_handler+116)
#03 pc 00096114  bash
#04 pc 000962f8  bash (termsig_handler+316)
#05 pc 00095d7c  bash (termsig_sighandler+172)

进程以 exit code 127 退出。

根因分析

si_addr=0x0 表明是 NULL pointer dereference。bash 在 set_signal_handler 中操作 controlling terminal 相关数据时触发。v0.4.3 没有此问题。

可能原因:

  • setsid() 在 vproc 协程上下文中不能正常工作(协程不是真正的 OS 进程,setsid 可能返回错误或产生未定义行为)
  • setsid() 成功后 bash 尝试 tcsetpgrp()/TIOCSCTTY 操作,但协程环境的 terminal 语义不完整

影响

  • v0.4.3:bash 正常工作,但显示 "no job control" 警告
  • v0.4.4:bash 崩溃,终端完全不可用

建议

setsid() 可能不适合在协程环境中直接调用。job control 的修复可能需要在 vproc 层面模拟 terminal session 语义,而不是依赖 Linux 的 setsid() 系统调用。

相关

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions