Linux 7.2 终于从 Linux kernel 中彻底移除了 strncpy API。strncpy ( ) 函数用于复制最多指定字节数,早已被标记为 deprecated,经过六年的工作和数百个补丁,kernel 内已不再有 strncpy 接口的使用者,因此现在将其彻底移除。
Linux kernel 中的 strncpy 函数由于其反直觉的语义和 NUL 终止方面的行为,长期以来一直是 " 持续不断的 bug 来源 ",同时由于目标地址的冗余补零,还存在性能问题。在过去六年中,经过约 362 个 commits 的工作,才彻底清除了 kernel 代码中对 strncpy 的使用,这些工作终于在 Linux 7.2 中完成。

这次周五的合并清除了 strncpy API 以及每个 CPU 架构下最后的 strncpy 实现。
取代 strncpy,Linux kernel 代码中应该使用 strscpy ( ) 用于 NUL 终止的目标地址,strscpy_pad ( ) 用于带零填充的 NUL 终止目标地址,strtomem_pad ( ) 用于非 NUL 终止的固定宽度字段,memcpy_and_pad ( ) 用于带显式填充的边界复制,或者 memcpy ( ) 用于已知长度的内存复制。
有网友评论:我们必须分叉 Linux 内核以保留其对 strncpy ( ) 的使用!内存安全是觉醒的!让 Linux 再次变得不安全!
另外网友则回复:xlibre、sysvinit、k&r c、glibc、twm、xdm、bash、bzip2 压缩的 initrd、仅限 GPLv3 源码的 Slackware Linux 是您的最佳选择。
来自:https://www.phoronix.com/news/Linux-7.2-Drops-strncpy


登录后才可以发布评论哦
打开小程序可以发布评论哦