LinuxのLinux Kernelにおける不特定の脆弱性
タイトル LinuxのLinux Kernelにおける不特定の脆弱性
概要

Linuxカーネルにおいて、以下の脆弱性が修正されました:virtio_netにおけるサスペンドおよびレジューム後のxdp_rxq_infoのバグです。現在、virtio_netを使用した場合、以下の操作の順序でドライバのバグ警告が発生します。まず、# ip link set eth0 up を実行し、次に # echo mem /sys/power/state(または例として # rtcwake -s 10 -m mem)を実行して復帰後、# ip link set eth0 down を行います。警告内容は「Missing register, driver bug WARNING: CPU: 0 PID: 375 at net/core/xdp.c:138 xdp_rxq_info_unreg+0x58/0x60」およびコールトレースが表示されます。この現象は、virtnet_freeze()がstruct xdp_rxq_infoを含むreceive_queueを完全に解放する一方で、xdp_rxq_info_unreg()を呼び出していないことに起因します。一方で、virtnet_restore()はreceive_queueを再構築しますが、xdp_rxq_info_reg()を呼び出していません。実際には、virtnet_freeze_down()とvirtnet_restore_up()の一部は、virtnet_close()およびvirtnet_open()とほぼ同一ですが、xdp_rxq_info_(un)reg()の呼び出しのみが不足していました。したがって、freezeおよびrestoreハンドラからvirtnet_close()とvirtnet_open()を呼び出すことで簡単に修正でき、将来的な問題を回避できます。欠落していたxdp_rxq_info呼び出しの追加以外の違いとしては、refill作業がnetif_running()の場合にのみキャンセルされる点がありますが、ネットワークインターフェースが実際に起動している場合のみrefill作業がアクティブになるため、機能的な違いはありません。

想定される影響 当該ソフトウェアが扱う全ての情報が外部に漏れる可能性があります。 また、当該ソフトウェアが扱う情報について、書き換えは発生しません。 さらに、当該ソフトウェアが完全に停止する可能性があります。 そして、この脆弱性を悪用した攻撃の影響は、他のソフトウェアには及びません。 
対策

リリース情報、またはパッチ情報が公開されています。参考情報を参照して適切な対策を実施してください。

公表日 2025年2月26日0:00
登録日 2026年1月27日17:39
最終更新日 2026年1月27日17:39
CVSS3.0 : 重要
スコア 7.1
ベクター CVSS:3.0/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:N/A:H
影響を受けるシステム
Linux
Linux Kernel 4.16 以上 4.19.250 未満
Linux Kernel 4.20 以上 5.4.202 未満
Linux Kernel 5.11 以上 5.15.51 未満
Linux Kernel 5.16 以上 5.18.8 未満
Linux Kernel 5.19
Linux Kernel 5.5 以上 5.10.127 未満
CVE (情報セキュリティ 共通脆弱性識別子)
CWE (共通脆弱性タイプ一覧)
その他
変更履歴
No 変更内容 変更日
1 [2026年01月27日]
  掲載
2026年1月27日17:39

NVD脆弱性情報
CVE-2022-49687
概要

In the Linux kernel, the following vulnerability has been resolved:

virtio_net: fix xdp_rxq_info bug after suspend/resume

The following sequence currently causes a driver bug warning
when using virtio_net:

# ip link set eth0 up
# echo mem > /sys/power/state (or e.g. # rtcwake -s 10 -m mem)
<resume>
# ip link set eth0 down

Missing register, driver bug
WARNING: CPU: 0 PID: 375 at net/core/xdp.c:138 xdp_rxq_info_unreg+0x58/0x60
Call trace:
xdp_rxq_info_unreg+0x58/0x60
virtnet_close+0x58/0xac
__dev_close_many+0xac/0x140
__dev_change_flags+0xd8/0x210
dev_change_flags+0x24/0x64
do_setlink+0x230/0xdd0
...

This happens because virtnet_freeze() frees the receive_queue
completely (including struct xdp_rxq_info) but does not call
xdp_rxq_info_unreg(). Similarly, virtnet_restore() sets up the
receive_queue again but does not call xdp_rxq_info_reg().

Actually, parts of virtnet_freeze_down() and virtnet_restore_up()
are almost identical to virtnet_close() and virtnet_open(): only
the calls to xdp_rxq_info_(un)reg() are missing. This means that
we can fix this easily and avoid such problems in the future by
just calling virtnet_close()/open() from the freeze/restore handlers.

Aside from adding the missing xdp_rxq_info calls the only difference
is that the refill work is only cancelled if netif_running(). However,
this should not make any functional difference since the refill work
should only be active if the network interface is actually up.

公表日 2025年2月26日16:01
登録日 2025年2月27日4:01
最終更新日 2025年2月26日16:01
関連情報、対策とツール
共通脆弱性一覧