公開:

【CVE-2024-50228】Linuxカーネルのshmem_getattr()でデータ競合を修正、システムの安定性が向上

text: XEXEQ編集部
(記事は執筆時の情報に基づいており、現在では異なる場合があります)


記事の要約

  • Linuxカーネルでshmem_getattr()のデータ競合を修正
  • inode_lockによる保護機能を実装し安全性を向上
  • KCSANテストによってデータ競合の問題を特定

Linuxカーネルのshmem_getattr()におけるデータ競合の修正

Linuxカーネルの開発チームは2024年11月9日、shmem_getattr()関数におけるデータ競合の脆弱性を修正したパッチをリリースした。KCSANテストによって、generic_fillattrとinode_set_ctime_currentの間でデータ競合が発生していることが明らかになっている。この問題は【CVE-2024-50228】として特定されている。[1]

データ競合はcpu1上のタスク6565によるinode_set_ctime_currentからの書き込みと、cpu0上のタスク3498によるgeneric_fillattrからの読み取りの間で発生していることが確認された。この問題により、inodeメンバー変数に予期せぬ動作が引き起こされる可能性が高まっていた。

修正パッチではshmem_getattr()からgeneric_fillattr()を呼び出す際に、inode_lock_shared()とinode_unlock_shared()による保護を実装することで問題に対処している。これによりshmem_unlinkやshmem_mknodなどの関数との間でのデータ競合を防止し、システムの安定性が向上した。

Linuxカーネルのバージョン別影響範囲まとめ

バージョン 影響状況
4.3以降 影響あり
4.3未満 影響なし
4.19.323以降 修正済み
5.4.285以降 修正済み
5.10.229以降 修正済み
5.15.171以降 修正済み

データ競合について

データ競合とは、複数のスレッドが同じメモリ位置に同時にアクセスし、少なくとも1つのアクセスが書き込みである状況を指す。主な特徴として以下のような点が挙げられる。

  • 同時実行による予期せぬメモリアクセスの衝突
  • データの整合性が損なわれる可能性
  • システムの安定性に重大な影響を及ぼす可能性

今回のLinuxカーネルで発見されたデータ競合は、shmem_getattr()関数内でのgeneric_fillattr()呼び出し時に適切なロック機構が実装されていないことが原因だった。この問題により、inodeメンバー変数へのアクセス時に予期せぬ値の変更が発生し、システムの安定性に影響を与える可能性があることが判明している。

Linuxカーネルのデータ競合修正に関する考察

今回のデータ競合の修正は、Linuxカーネルのメモリ管理システムの信頼性向上において重要な意味を持つ。特にshmemファイルシステムは共有メモリの実装に重要な役割を果たしており、データ競合の問題は並行処理を行うアプリケーションの安定性に直接影響を与える可能性があった。

今後の課題として、同様のデータ競合が他のカーネル機能でも発生する可能性を考慮する必要がある。KCSANのような動的解析ツールを活用した継続的なテストと、より包括的なロック機構の実装が求められるだろう。

期待される展開として、この修正を契機にLinuxカーネル全体でのデータ競合検出と防止の取り組みが強化されることが望ましい。特に並行処理に関する部分では、より厳密な同期機構の実装とテスト体制の整備が重要となっている。

参考サイト

  1. ^ CVE. 「CVE Record | CVE」. https://www.cve.org/CVERecord?id=CVE-2024-50228, (参照 24-11-16).

※上記コンテンツはAIで確認しておりますが、間違い等ある場合はコメントよりご連絡いただけますと幸いです。

「セキュリティ」に関するコラム一覧「セキュリティ」に関するニュース一覧
ブログに戻る

コメントを残す

コメントは公開前に承認される必要があることにご注意ください。