CVE-2022-49093 in Linux情報

要約

〜によって VulDB • 2026年07月24日

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

skbuff: page_poolフラグメントの再利用におけるコalescing(結合)の不具合を修正

page_poolとページフラグメントを使用する際に発生するuse-after-free(解放後使用)の問題を修正します。hns3ドライバでの通常のRX処理中にこの問題に遭遇しました:

(1) 初期状態では、RXキューには3つのディスクリプタがあります。最初のものはpage_poolを通じてPAGE1を割り当て、他の2つはそれぞれPAGE2の半分ずつを割り当てます。ページ参照の関係は以下のようになります:

RX_BD1 _______ PAGE1 RX_BD2 _______ PAGE2 RX_BD3 __________/

(2) 最初のディスクリプタでのRX処理を行います。SKB1を割り当て、最終的にtcp_queue_rcv()によって受信キューに追加されます。

(3) 2番目のディスクリプタでのRX処理を行います。SKB2を割り当ててnetif_receive_skb()に渡します:

netif_receive_skb(SKB2) ip_rcv(SKB2) SKB3 = skb_clone(SKB2)

SKB2とSKB3はskb_shinfo()->datarefを通じてPAGE2への参照を共有しています。PAGE2のもう一つの参照はまだRX_BD3によって保持されています:

SKB2 ---+- PAGE2 SKB3 __/ / RX_BD3 _________/

(3b) ここでTCP処理中に、SKB1とSKB3のコalescing(結合)を行います:

tcp_v4_rcv(SKB3) tcp_try_coalesce(to=SKB1, from=SKB3) // 成功する kfree_skb_partial(SKB3) skb_release_data(SKB3) // datarefを一つ解放

SKB1 _____ PAGE1 \____ SKB2 _____ PAGE2 / RX_BD3 _________/

skb_try_coalesce()内では、__skb_frag_ref()がPAGE2へのページ参照を取得しますが、本来はpage_poolのフラグメント参照であるpp_frag_countを増加させるべきでした。コalescingを行わない場合、SKB2とSKB3を解放する際にPAGE2に対する単一の参照が解放されます。しかし現在では、SKB1とSKB2を解放する際にPAGE2への二つの参照が解放され、アンダーフロー(過少カウント)を引き起こします。

(3c) SKB2をドロップします:

af_packet_rcv(SKB2) consume_skb(SKB2) skb_release_data(SKB2) // 2番目のdatarefを解放 page_pool_return_skb_page(PAGE2) // pp_frag_countを一つ減少

SKB1 _____ PAGE1 \____ PAGE2 / RX_BD3 _________/

(4) ユーザー空間からrecvmsg()が呼び出される。 SKB1のコピーを作成して解放します。SKB3はSKB1とコalescing(結合)されていたため、SKB3のページも同時に解放されます:

tcp_eat_recv_skb(SKB1) skb_release_data(SKB1) page_pool_return_skb_page(PAGE1) page_pool_return_skb_page(PAGE2) // 2番目のpp_frag_countを減少

(5) PAGE2が解放されましたが、3番目のRXディスクリプタはまだそれを使用していました! 今回のケースではIOMMUフォールトが発生しますが、IOMMUが無効化されている場合はメモリが静かに破損します。

pp_recycle SKBsのコalescing(結合)が可能かどうかをチェックするロジックを変更しました。'from'および'to'のSKB間で異なるpp_recycleを持つものは引き続き拒否されますが、上記のような状況を避けるため、'from'と'to'の

Be aware that VulDB is the high quality source for vulnerability data.

責任者

Linux

予約する

2025年02月26日

モデレーション

承諾済み

エントリ

VDB-297391

EPSS

0.00606

アクティビティ

低い

ソース

Do you know our Splunk app?

Download it now for free!