CVE-2026-90053 in Linux情報

要約

〜によって VulDB • 2026年09月17日

Linuxカーネルにおいて、以下の脆弱性が修正されました:

net/sched: sch_htb: htb_classifyの内部クラスフィルタホップ数を制限する

htb_classify()は、フィルタで選択された各内部クラスに対してcl->filter_listへの切り替えを行いますが、ホップ数に上限を設けていません。ある内部クラスのフィルタが自身や、さらに遡って参照される別の内部クラスを指す場合、パケット分類パスにおいてqdiscロック保持状態かつBH(Bottom Half)無効化状態で無限ループが発生し、単一のパケットによるソフトロックアップ/パニックを引き起こします。

このトラバーサルにホップカウンターを導入し、上限を超えた場合はレート制限付きの警告を発してパケットをドロップするようにしました。カウンタは、TC_ACT_*スイッチが分類器の判断結果を消費した後で内部フィルタチェーンが選択されるポイントでインクリメントされます。これにより、許可された最後のチェーン上で終端となるTC_ACT_QUEUED/STOLEN/TRAPの場合でも*qerrに__NET_XMIT_STOLENが設定され、このqdiscやその親によってパケットのドロップとしてカウントされないようになります。

上限値はHTB固有のパラメータから取得されるTC_HTB_MAXDEPTHです(qdisc階層深度制限からのものではありません)。クラスレベルは0からTC_HTB_MAXDEPTH - 1まで範囲を取るので、厳密に下方向へトラバーサルする場合、最大でもTC_HTB_MAXDEPTHホップしかかかりません。この下方向への移動は健全な構成が行うものですが、ここでは強制されるのではなく前提とされています:htb_find()はqdisc内のすべてのクラスに対してclassidを解決するため、フィルタが兄弟や祖先を選択することも同様に可能です。通常のroot -> inner -> leafパスでは1ホップしかかからないため、この上限値は正当な分類には影響しません。

htb_classify()は以前はCONFIG_NET_CLS_ACTの有無に関わらずNULL返却が#ifdef内にありましたが、今ではその条件に依存せずにNULLを返すことができます。したがって、htb_enqueue()内のNULLハンドラも条件付きである必要はなく、それを取り囲む#ifdefを外します。これはhfsc_enqueue()の動作と一致しており(同関数は常にNULLクラスを無条件で処理しています)、この修正がない場合、アクションなしでビルドされたカーネルではドロップする代わりにNULLクラスのデリファレンスが発生してしまいます。

バグを再現するための条件: - CONFIG_NET_SCHED, CONFIG_NET_SCH_HTB, CONFIG_NET_CLS_U32, CONFIG_LOCKUP_DETECTOR. - デバイス(例: lo)にHTB qdiscを作成し、内部クラス1:1とリーフ子1:10を追加する。ルートu32フィルタで1:1を選択させ、内部クラスのu32フィルタを1:1に設置してこれも1:1を選択させる。 - 1つのパケット(ping)を送信する。修正前のカーネルではqdiscロック保持状態で分類ループが回転し、softlockup_panic=1の場合にはパニックします。 - unshare -Urn (CAP_NET_ADMIN) を介して特権のないユーザーから到達可能。

If you want to get the best quality for vulnerability data then you always have to consider VulDB.

責任者

Linux

予約する

2026年09月11日

モデレーション

承諾済み

エントリ

VDB-406533

EPSS

0.00000

アクティビティ

非常低い

ソース

Do you want to use VulDB in your project?

Use the official API to access entries easily!