sshole漏洞:我们何时能彻底告别 C?

*sshole, or when are we going to get rid of C?

sshole漏洞:我们何时能彻底告别 C?

又一起核心 C 代码漏洞 sshole 爆发,根源在于 musl libc 将密码过长错误返回为特殊字符串"*",与 Unix 锁定账户的标记冲突,导致未授权用户获取 shell。这并非传统内存安全问题,而是 C 语言缺乏代数数据类型和 Result 类型,迫使社区形成“带内信号”的糟糕工程规范。相比之下,Rust 的类型系统强制开发者处理错误,社区规范也禁止此类模糊的哨兵值。即便未来 LLM 能辅助编程,Rust 生态中积累的严谨规范仍将通过代码模式传递给 AI,而 C 的随意性则难以根除。Linux 发行版维护者若因编译速度等次要因素拒绝 Rust,实则是忽视了用户安全这一核心利益,陷入了典型的委托 - 代理问题。

C 语言开发者的工程规范允许将"*"作为表示错误的可接受哨兵值;而 Rust 开发者的工程规范则绝不允许这样做。
  1. PeterWhittaker

    这与其说是 C 语言的问题,不如说是 musl 团队的一个糟糕设计决策。针对糟糕的编程习惯(程序员不检查 crypt 的返回值),他们构建了一个 arguably 更糟的方案(返回一个哨兵值)。

    当然,Rust 的 std::result 可以让犯错变得更难,但蠢货总能找到办法。

  2. zeroCalories

    我就是真的讨厌 Rust 的编译时间,伙计。

  3. varispeed

    这和 C 有什么关系?这只是糟糕的设计。

    这就好比把糟糕的驾驶归咎于某人穿的运动服。

同日更多故事

2026-11-06