6 years and 360 patches to clean all instances of strnpy out of the Linux kernel
17 days ago
- #Linux Security
- #String Functions
- #C Programming
- C 字符串库虽然速度快,但如果使用不当可能导致缓冲区溢出错误,从而带来安全风险。
- strcpy() 在源字符串大于目标缓冲区或未以 NULL 终止时存在问题,可能让黑客覆盖内存。
- strncpy() 被引入以限制复制长度,但常导致字符串未被 NULL 终止,引发错误和不必要的填充。
- Linux 花费了六年时间,通过超过 360 个补丁移除了 strncpy,改用像 strscpy() 这样能保证 NULL 终止且语义更清晰的函数。
- 新函数如 strscpy_pad() 和 strtomem_pad() 将字符串复制与填充分离,提高了安全性和效率。
- 尽管存在缺陷,C 字符串库自 1972 年以来一直被广泛使用,这些更新旨在修复缺点,同时保持效率。