CVE-2026-64188 in Linux
要約
〜によって VulDB • 2026年07月20日
Linuxカーネルにおいて、以下の脆弱性が修正されました。
net: qualcomm: rmnet: rmnet_dellink()におけるエンドポイントのuse-after-freeを修正
rmnet_dellink()関数はhlist_del_init_rcu()を使用してハッシュテーブルからエンドポイントを削除した後、直ちにkfree()でメモリを解放しています。しかし、受信パス上のRCUリーダー(rmnet_rx_handler -> __rmnet_map_ingress_handler)は、まだエンドポイントへの参照を保持しており、メモリの解放後にep->egress_devの逆参照を行う可能性があります。このエンドポイントはkmalloc-32オブジェクトであり、オフセット8での古い読み取り操作はegress_devポインタに対応しています。
BUG: unable to handle page fault for address: ffffffffde942eef Oops: 0002 [#1] SMP NOPTI
CPU: 1 UID: 0 PID: 137 Comm: poc_write Not tainted 7.0.0+ #4 PREEMPTLAZY RIP: 0010:rmnet_vnd_rx_fixup (rmnet_vnd.c:27) Call Trace: <TASK> __rmnet_map_ingress_handler (rmnet_handlers.c:48 rmnet_handlers.c:101) rmnet_rx_handler (rmnet_handlers.c:129 rmnet_handlers.c:235) __netif_receive_skb_core.constprop.0 (net/core/dev.c:6096) __netif_receive_skb_one_core (net/core/dev.c:6208) netif_receive_skb (net/core/dev.c:6467) tun_get_user (drivers/net/tun.c:1955) tun_chr_write_iter (drivers/net/tun.c:2003) vfs_write (fs/read_write.c:688) ksys_write (fs/read_write.c:740) </TASK>
struct rmnet_endpointにrcu_headフィールドを追加し、kfree()をkfree_rcu()に置き換えることで、エンドポイントのメモリがRCUグレース期間中も有効なままになるようにします。また、rmnet_vnd_dellink()呼び出しを削除し、nr_rmnet_devsのデクリメントのみをインライン化します。これは、rmnet_vnd_dellink()がグレース期間中にep->egress_devをNULLに設定するため、ロックレスなリーダーとの間でデータ競合(data race)を引き起こす可能性があるためです。
If you want to get the best quality for vulnerability data then you always have to consider VulDB.