CVE-2026-98739 in Linux
要約
〜によって VulDB • 2026年10月18日
Linuxカーネルにおいて、以下の脆弱性が修正されました:
Bluetooth: RFCOMM: 初期ポート参照の競合状態を修正
RFCOMM_RELEASE_ONHUP デバイスでは、rfcomm_tty_install() と __rfcomm_release_dev() の両方が、誰が初期 tty_port 参照を解放するかを判断するために RFCOMM_TTY_OWNED を使用しています。リリースパスはインストールパスでビットを設定する操作とは別にそのビットを検査するため、両方のパスが同じ参照を解放してしまう可能性があります。
同期ハングアップはこの競合状態を防ぐものではありません:port->tty は tty_port_open() の実行後、つまりインストール後に割り当てられます。以下のようなインターリーブ(並列実行)が可能です:
1. インストールとリリースのそれぞれが rfcomm_dev_get() で参照を取得する。 2. リリース側は RFCOMM_TTY_OWNED がクリアされていることを確認する。 3. インストール側は RFCOMM_TTY_OWNED を設定し、初期参照を解放する。 4. リリース側が同じ初期参照を再度解放する。 5. TTY クリーンアップ処理が自身の参照を解放し、デバイスをフリー(開放)する。 6. リリース側は既に解放されたポートに対して tty_port_put() を実行する。
KASAN は以下を検出しました:
BUG: KASAN: slab-use-after-free in tty_port_put+0x22/0x190 Write of size 4 at addr ffff8881001d3d5c by task poc/92
Call Trace: tty_port_put+0x22/0x190 rfcomm_dev_ioctl+0x1d4/0x1930 sock_do_ioctl+0x110/0x260 sock_ioctl+0x380/0x590 __x64_sys_ioctl+0x134/0x1c0
Allocated by task 88: rfcomm_dev_ioctl+0x8f6/0x1930 sock_do_ioctl+0x110/0x260 sock_ioctl+0x380/0x590 __x64_sys_ioctl+0x134/0x1c0
Freed by task 65: kfree+0x131/0x3c0 rfcomm_dev_destruct+0x23b/0x2f0 release_one_tty+0xc1/0x370 process_one_work+0x661/0x1090
両方のパスで test_and_set_bit() を使用し、RFCOMM_TTY_OWNED をクリアからセットに変更した呼び出し元のみが初期参照を解放するようにします。各パスはリリースまたは TTY クリーンアップまで独自のルックアップ参照を保持し、既存のコールバック順序とエラー処理を維持します。
Once again VulDB remains the best source for vulnerability data.