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

Linuxカーネルにおいて、以下の脆弱性が修正されました:x86-64で誤解を招く名前だった "__copy_user_nocache()" 関数の名称を変更しました。この関数は歴史的な理由から非常に不適切な名前が付けられていました。この関数は非キャッシュのユーザーコピーを謳っていましたが、実際にはそうではありません。宛先に対してのみ非順序的ストア(ソースには適用されません)を使用し、ソースと宛先のアクセス例外処理を行う特殊なメモリコピー処理ルーチンです。また、アライメントが取れていない宛先に対しては動作しますが、アライメントの取れていない部分(先頭や末尾)はx86ではワードまたはクアッドワードのみが非順序的になるため、非順序的ストアは使われません。例外処理を行うため、ユーザースペースアクセスに使用可能ですが、単独では使用できず、通常の "ユーザースペースアクセス開始" のロジックが必要です。通常、ユーザースペースアクセスはソースであり、非順序的ストアは宛先に使用されます。当初の意図は、マシンチェック例外を同期的に検出し優雅に処理する必要がある脆弱な永続メモリ宛先に対して非順序的ストアを行うことでした。そのため、この説明のない名前が付けられました。ユースケースの一つとしては、ユーザースペースから非キャッシュカーネルバッファへのコピーがありました。ただし、実際の使用者はこの意図されたケースとパフォーマンス向上のためにこの処理を使った異なるドライバーの混在でした。そのいくつかのドライバーはユーザーコピー版(STAC/CLAC含む)を例外処理を気にせずに非順序的宛先だけのために誤用していました。この問題に対し、まず名前をより適切に変更し、プロトタイプもより標準的に変更しました:呼び出し側が適切な変換を行っていない限りユーザーポインタは渡されず、引数のサイズは完全なsize_t型に変更しました(実際には一度に4GB以上コピーしませんが、引数のサイズをサイレントで切り捨てる理由はありません)。最後に、この正しく名前変更された関数をNTBコードで使用しました。NTBコードはこのインターフェースのユーザーコピー版(STAC/CLAC含む)を実際のユーザーコピーでないにもかかわらず誤用していました。

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

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

公表日 2026年5月5日0:00
登録日 2026年5月28日14:41
最終更新日 2026年5月28日14:41
CVSS3.0 : 警告
スコア 5.5
ベクター CVSS:3.0/AV:L/AC:L/PR:L/UI:N/S:U/C:N/I:N/A:H
影響を受けるシステム
Linux
Linux Kernel 4.2
Linux Kernel 4.2.1 以上 6.12.83 未満
Linux Kernel 6.13 以上 6.18.24 未満
Linux Kernel 6.19 以上 6.19.14 未満
Linux Kernel 7.0 以上 7.0.1 未満
CVE (情報セキュリティ 共通脆弱性識別子)
CWE (共通脆弱性タイプ一覧)
その他
変更履歴
No 変更内容 変更日
1 [2026年05月28日]
  掲載
2026年5月28日14:41

NVD脆弱性情報
CVE-2026-43073
概要

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

x86-64: rename misleadingly named '__copy_user_nocache()' function

This function was a masterclass in bad naming, for various historical
reasons.

It claimed to be a non-cached user copy. It is literally _neither_ of
those things. It's a specialty memory copy routine that uses
non-temporal stores for the destination (but not the source), and that
does exception handling for both source and destination accesses.

Also note that while it works for unaligned targets, any unaligned parts
(whether at beginning or end) will not use non-temporal stores, since
only words and quadwords can be non-temporal on x86.

The exception handling means that it _can_ be used for user space
accesses, but not on its own - it needs all the normal "start user space
access" logic around it.

But typically the user space access would be the source, not the
non-temporal destination. That was the original intention of this,
where the destination was some fragile persistent memory target that
needed non-temporal stores in order to catch machine check exceptions
synchronously and deal with them gracefully.

Thus that non-descriptive name: one use case was to copy from user space
into a non-cached kernel buffer. However, the existing users are a mix
of that intended use-case, and a couple of random drivers that just did
this as a performance tweak.

Some of those random drivers then actively misused the user copying
version (with STAC/CLAC and all) to do kernel copies without ever even
caring about the exception handling, _just_ for the non-temporal
destination.

Rename it as a first small step to actually make it halfway sane, and
change the prototype to be more normal: it doesn't take a user pointer
unless the caller has done the proper conversion, and the argument size
is the full size_t (it still won't actually copy more than 4GB in one
go, but there's also no reason to silently truncate the size argument in
the caller).

Finally, use this now sanely named function in the NTB code, which
mis-used a user copy version (with STAC/CLAC and all) of this interface
despite it not actually being a user copy at all.

公表日 2026年5月6日1:16
登録日 2026年5月6日4:07
最終更新日 2026年5月6日22:08
関連情報、対策とツール
共通脆弱性一覧