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.
Configurations

Configuration 1 (hide)

OR cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*
cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*
cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*
cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*
cpe:2.3:o:linux:linux_kernel:4.2:-:*:*:*:*:*:*

History

11 Nov 2026, 21:10

Type Values Removed Values Added
Summary
  • (es) En el kernel de Linux, la siguiente vulnerabilidad ha sido resuelta: x86-64: renombrar la función con el nombre engañoso ’__copy_user_nocache()’ Esta función fue una clase magistral de mala denominación, por varias razones históricas. Afirmaba ser una copia de usuario no cacheada. Literalmente _no_ es ninguna de esas dos cosas. Es una rutina de copia de memoria especializada que utiliza almacenamientos no temporales para el destino (pero no para el origen), y que realiza manejo de excepciones para los accesos tanto de origen como de destino. También hay que tener en cuenta que, si bien funciona para destinos no alineados, cualquier parte no alineada (ya sea al principio o al final) no utilizará almacenamientos no temporales, ya que solo las palabras y las palabras cuádruples pueden ser no temporales en x86. El manejo de excepciones significa que _puede_ ser utilizada para accesos al espacio de usuario, pero no por sí sola; necesita toda la lógica normal de ’inicio de acceso al espacio de usuario’ a su alrededor. Pero típicamente el acceso al espacio de usuario sería el origen, no el destino no temporal. Esa fue la intención original de esto, donde el destino era algún objetivo de memoria persistente frágil que necesitaba almacenamientos no temporales para capturar excepciones de verificación de máquina de forma síncrona y manejarlas con elegancia. De ahí ese nombre no descriptivo: un caso de uso era copiar desde el espacio de usuario a un búfer del kernel no cacheado. Sin embargo, los usuarios existentes son una mezcla de ese caso de uso previsto y un par de controladores aleatorios que simplemente hicieron esto como un ajuste de rendimiento. Algunos de esos controladores aleatorios luego hicieron un mal uso activo de la versión de copia de usuario (con STAC/CLAC y todo) para hacer copias del kernel sin siquiera preocuparse por el manejo de excepciones, _solo_ por el destino no temporal. Renombrarla como un primer pequeño paso para hacerla realmente medio sensata, y cambiar el prototipo para que sea más normal: no toma un puntero de usuario a menos que el llamador haya realizado la conversión adecuada, y el tamaño del argumento es el size_t completo (todavía no copiará realmente más de 4GB de una sola vez, pero tampoco hay razón para truncar silenciosamente el argumento de tamaño en el llamador). Finalmente, usar esta función ahora con un nombre sensato en el código NTB, que hizo un mal uso de una versión de copia de usuario (con STAC/CLAC y todo) de esta interfaz a pesar de que en realidad no era una copia de usuario en absoluto.

21 Oct 2026, 13:18

Type Values Removed Values Added
References
  • () https://git.kernel.org/stable/c/73c2dc2c14d6a2efa5dde469546a907482af07fe -

Information

Published : 2026-05-05 16:16

Updated : 2026-11-11 21:10


NVD link : CVE-2026-43073

Mitre link : CVE-2026-43073

CVE.ORG link : CVE-2026-43073


JSON object : View

Products Affected

linux

  • linux_kernel