概要
- Linux 7.2 で strncpy API がカーネルから完全削除
- strncpy() は長年バグの温床として問題視
- 約 6年・362コミット で全ユーザー除去
- 新APIとして strscpy() などを推奨
- パフォーマンス・安全性向上が主な目的
Linux 7.2でstrncpy APIがカーネルから完全削除
- Linux 7.2 にて、カーネル内の strncpy() API がついに完全削除
- strncpy()関数 は、指定バイト数コピー用だが、 NUL終端処理の直感に反する挙動 や 冗長なゼロ埋め によるパフォーマンス問題で長年非推奨
- strncpy() は「バグの温床」として多くの問題を引き起こしてきた歴史
- 約 6年・362件のコミット を経て、全ての strncpy利用箇所 を削除
- 金曜日のマージ で、API本体と各CPUアーキテクチャ毎の実装も削除完了
代替APIとその用途
-
strscpy() :NUL終端を保証する文字列コピー
-
strscpy_pad() :NUL終端+ゼロパディング付き文字列コピー
-
strtomem_pad() :NUL終端不要な固定長フィールド用コピー
-
memcpy_and_pad() :明示的なパディングを伴うバウンデッドコピー
-
memcpy() :長さが既知のメモリコピーに使用
- これらのAPIにより 安全性・パフォーマンス の両立を実現
今後の展望
- strncpy()削除 により、今後のカーネル開発で バグ発生率低減 を期待
- 新API の明確な役割分担による コード品質向上
- 詳細やコミット履歴はLinux Kernel Gitリポジトリ参照