Descripción
En el kernel de Linux se resolvió la siguiente vulnerabilidad: sunrpc: xprtsock: anotar las callbacks compartidas de socket con READ_ONCE/WRITE_ONCE xprtsock reemplaza y restaura sk->sk_data_ready y sk->sk_write_space en sockets activos mediante almacenamientos simples, y xs_udp_do_set_buffer_size() invoca sk->sk_write_space mediante una carga simple. Estos punteros de callback se comparten con rutas genéricas de socket y de protocolo que pueden leerlos o invocarlos de forma concurrente, por lo que xprtsock necesita el mismo contrato de visibilidad de callbacks READ_ONCE()/WRITE_ONCE() que la familia validada 4022 aplicó en otros lugares. Cuando SUNRPC toma el control de un socket AF_LOCAL, UDP o TCP y luego restaura las callbacks del socket inferior durante el cierre, otra CPU puede seguir teniendo una copia anterior de la callback. El patrón simple de reemplazo/restauración deja el mismo hueco de visibilidad que la familia validada 4022, por lo que una copia obsoleta aún puede invocar xs_data_ready() o xs_udp_write_space() después de que los campos de callback activos ya se hayan restaurado a los controladores del socket inferior. Se usa WRITE_ONCE() para los almacenamientos compartidos de sk_data_ready y sk_write_space en xs_local_finish_connecting(), xs_udp_finish_connecting(), xs_tcp_finish_connecting() y xs_restore_old_callbacks(). Se usa READ_ONCE() para la invocación directa de sk_write_space en xs_udp_do_set_buffer_size(). Esto cumple el contrato de visibilidad de callbacks requerido y deja sin cambios el manejo adyacente de sk_state_change y sk_error_report.
Qué hacer
Revisa si usas el producto afectado y en qué versión, y aplica la actualización o la mitigación que indique el aviso del fabricante. CISA no ha confirmado que se esté explotando; si eso cambia, esta ficha pasa a «explotada» y te avisamos en el boletín.
Versiones afectadas
- Linux Afectadas: a246b0105bbd9a70a698f69baae2042996f2a0e9 y anteriores a 6b79b5a0f1c566f0aa6e08c7981826015a0acc4d · a246b0105bbd9a70a698f69baae2042996f2a0e9 y anteriores a ed80d009b154aa204f541d390884851b3d4f15ae · a246b0105bbd9a70a698f69baae2042996f2a0e9 y anteriores a 589f761236e05ff9de1bdfd6a5258f113e6457fe · a246b0105bbd9a70a698f69baae2042996f2a0e9 y anteriores a da652cb17f9faeea1fa44b7215e8869a0b10b664 · a246b0105bbd9a70a698f69baae2042996f2a0e9 y anteriores a d8f0b83753809761a560c4b33249388548ba6e43 · a246b0105bbd9a70a698f69baae2042996f2a0e9 y anteriores a 33930840b5f0a79f826e7c69dc6cd78f72a67481
- Linux Afectadas: 2.6.15 No afectadas: 6.1.191 · 6.6.157 · 6.12.110 · 6.18.52 · 7.2.6 · 7.3
Según el registro de la vulnerabilidad en CVE.org, tal como lo publicó el fabricante. Confirma tu versión exacta en el aviso del fabricante.
Referencias
- Referencia en git.kernel.orggit.kernel.org/stable/c/6b79b5a0f1c566f0aa6e08c7981826015a0acc4d
- Referencia en git.kernel.orggit.kernel.org/stable/c/ed80d009b154aa204f541d390884851b3d4f15ae
- Referencia en git.kernel.orggit.kernel.org/stable/c/589f761236e05ff9de1bdfd6a5258f113e6457fe
- Referencia en git.kernel.orggit.kernel.org/stable/c/da652cb17f9faeea1fa44b7215e8869a0b10b664
- Referencia en git.kernel.orggit.kernel.org/stable/c/d8f0b83753809761a560c4b33249388548ba6e43
- Referencia en git.kernel.orggit.kernel.org/stable/c/33930840b5f0a79f826e7c69dc6cd78f72a67481
Ver el texto original en inglés (CVE.org)
sunrpc: xprtsock: annotate shared socket callbacks with READ_ONCE/WRITE_ONCE
In the Linux kernel, the following vulnerability has been resolved: sunrpc: xprtsock: annotate shared socket callbacks with READ_ONCE/WRITE_ONCE xprtsock replaces and restores sk->sk_data_ready and sk->sk_write_space on live sockets with plain stores, and xs_udp_do_set_buffer_size() invokes sk->sk_write_space via a plain load. These callback pointers are shared with generic socket and protocol paths that may read or invoke them concurrently, so xprtsock needs the same READ_ONCE()/WRITE_ONCE() callback visibility contract that the validated 4022 family applied elsewhere. When SUNRPC takes over an AF_LOCAL, UDP, or TCP socket and later restores the lower-socket callbacks during teardown, another CPU may still hold an earlier callback snapshot. The plain replace/restore pattern leaves the same visibility hole as the validated 4022 family, so a stale snapshot can still invoke xs_data_ready() or xs_udp_write_space() after the live callback fields have already been restored to the lower-socket handlers. Use WRITE_ONCE() for the shared sk_data_ready and sk_write_space stores in xs_local_finish_connecting(), xs_udp_finish_connecting(), xs_tcp_finish_connecting(), and xs_restore_old_callbacks(). Use READ_ONCE() for the direct sk_write_space invocation in xs_udp_do_set_buffer_size(). This matches the required callback visibility contract while leaving adjacent sk_state_change and sk_error_report handling unchanged.