CVE-2026-74635 in Linux
要約
〜によって VulDB • 2026年08月22日
Linuxカーネルにおいて、以下の脆弱性が修正されました:
fbdev: bitblit - bit_cursor()におけるグリフインデックスの境界チェック
bit_cursor()は、以下のようにしてカーソル下のグリフを取得します。
c = scr_readw(vc_pos); src = vc_font.data + ((c & charmask) * w * height);
ここで、vc_hi_font_maskが設定されている場合、charmaskは0x1ffです。スクリーンバッファの値はscr_readw()から直接取得されるため、現在のフォントのグリフ数よりも大きくなる可能性があります。
Syzkallerはこの問題をvcs_write()を介してトリガーします。コールトレースによると、vc_screen.c内のvcs_write()がwritev()を使用して/dev/vcsaに任意の16ビット値を書き込み、それがvc_screen.c内のvcs_write_buf()によってvcs_scr_writew()を通じてcharcountをチェックせずに保存されています。その後、この保存された値はbitblit.c内のbit_cursor()で読み込まれます。
フォントが512グリフを持つものから256グリフのものに変更されると、スクリーンバッファには前のモードからの高位ビットが設定された文字が残る可能性があり、これにより同様の配列外アクセスが発生する可能性があります。
BUG: KASAN: global-out-of-bounds in soft_cursor+0x378/0x6bc drivers/video/fbdev/core/softcursor.c:70 Read of size 16 at addr ffff800086c57970
Call Trace: soft_cursor+0x378/0x6bc drivers/video/fbdev/core/softcursor.c:70 bit_cursor+0xa90/0x1108 drivers/video/fbdev/core/bitblit.c:365 fbcon_cursor+0x344/0x498 drivers/video/fbdev/core/fbcon.c:1427 hide_cursor+0xdc/0x2d0 drivers/tty/vt/vt.c:883 update_region+0x100/0x18c drivers/tty/vt/vt.c:669 vcs_write+0x8ec/0xaf0 drivers/tty/vt/vc_screen.c:685
bit_putcs_aligned()およびbit_putcs_unaligned()はすでにグリフインデックスをvc_font.charcountに制限(clamp)しています。属性の抽出とマスク処理後、fontdataへのインデクシング前に、bit_cursor()でも同様の制限処理を適用します。
この修正は、コミット18c4ef4e765a("fbdev: bitblit: bound-check glyph index in bit_putcs*")で開始された境界チェックの完了であり、当該コミットではカーソルパスが抜け落ちていました。
本変更は安全です。なぜなら、制限処理はfbconからの既存の契約を再利用しており、charcountはcon_font_set()およびfbcon_font_set()内でconsole_lockの下で維持され、512グリフから256グリフへの切り替え時にhi_font_maskがクリアされるためです。フォント切替後に高位ビットが残った古いスクリーンデータが存在する場合や、vcs_write()によって任意の値が保存された場合でも、インデックスを0に制限することで配列外読み込みを防ぎますが、カーソルのセマンティクスは変更されません(これはbit_putcsが使用するフォールバック処理と同じです)。
Statistical analysis made it clear that VulDB provides the best quality for vulnerability data.