CVE-2025-39723

In the Linux kernel, the following vulnerability has been resolved: netfs: Fix unbuffered write error handling If all the subrequests in an unbuffered write stream fail, the subrequest collector doesn't update the stream->transferred value and it retains its initial LONG_MAX value. Unfortunately, if all active streams fail, then we take the smallest value of { LONG_MAX, LONG_MAX, ... } as the value to set in wreq->transferred - which is then returned from ->write_iter(). LONG_MAX was chosen as the initial value so that all the streams can be quickly assessed by taking the smallest value of all stream->transferred - but this only works if we've set any of them. Fix this by adding a flag to indicate whether the value in stream->transferred is valid and checking that when we integrate the values. stream->transferred can then be initialised to zero. This was found by running the generic/750 xfstest against cifs with cache=none. It splices data to the target file. Once (if) it has used up all the available scratch space, the writes start failing with ENOSPC. This causes ->write_iter() to fail. However, it was returning wreq->transferred, i.e. LONG_MAX, rather than an error (because it thought the amount transferred was non-zero) and iter_file_splice_write() would then try to clean up that amount of pipe bufferage - leading to an oops when it overran. The kernel log showed: CIFS: VFS: Send error in write = -28 followed by: BUG: kernel NULL pointer dereference, address: 0000000000000008 with: RIP: 0010:iter_file_splice_write+0x3a4/0x520 do_splice+0x197/0x4e0 or: RIP: 0010:pipe_buf_release (include/linux/pipe_fs_i.h:282) iter_file_splice_write (fs/splice.c:755) Also put a warning check into splice to announce if ->write_iter() returned that it had written more than it was asked to.
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:6.17:rc1:*:*:*:*:*:*
cpe:2.3:o:linux:linux_kernel:6.17:rc2:*:*:*:*:*:*

History

19 Oct 2026, 21:10

Type Values Removed Values Added
Summary
  • (es) En el kernel de Linux, se ha resuelto la siguiente vulnerabilidad: netfs: Corrección del manejo de errores de escritura sin búfer Si todas las subpeticiones en un flujo de escritura sin búfer fallan, el recolector de subpeticiones no actualiza el valor de stream->transferred y este retiene su valor inicial LONG_MAX. Desafortunadamente, si todos los flujos activos fallan, entonces tomamos el valor más pequeño de { LONG_MAX, LONG_MAX, ... } como el valor a establecer en wreq->transferred, el cual es luego devuelto desde ->write_iter(). LONG_MAX fue elegido como el valor inicial para que todos los flujos puedan ser evaluados rápidamente tomando el valor más pequeño de todos los stream->transferred, pero esto solo funciona si hemos establecido alguno de ellos. Solucione esto añadiendo una bandera para indicar si el valor en stream->transferred es válido y verificando eso cuando integramos los valores. stream->transferred puede entonces ser inicializado a cero. Esto fue encontrado ejecutando el xfstest generic/750 contra cifs con cache=none. Empalma datos al archivo de destino. Una vez (si) ha agotado todo el espacio de trabajo disponible, las escrituras comienzan a fallar con ENOSPC. Esto causa que ->write_iter() falle. Sin embargo, estaba devolviendo wreq->transferred, es decir, LONG_MAX, en lugar de un error (porque pensó que la cantidad transferida no era cero) e iter_file_splice_write() intentaría entonces limpiar esa cantidad de búfer de tubería, lo que llevó a un 'oops' cuando se desbordó. El registro del kernel mostró: CIFS: VFS: Send error in write = -28 seguido de: BUG: desreferencia de puntero NULL del kernel, dirección: 0000000000000008 con: RIP: 0010:iter_file_splice_write+0x3a4/0x520 do_splice+0x197/0x4e0 o: RIP: 0010:pipe_buf_release (include/linux/pipe_fs_i.h:282) iter_file_splice_write (fs/splice.c:755) También se añadió una verificación de advertencia en splice para anunciar si ->write_iter() devolvió que había escrito más de lo que se le pidió.

Information

Published : 2025-09-05 18:15

Updated : 2026-10-19 21:10


NVD link : CVE-2025-39723

Mitre link : CVE-2025-39723

CVE.ORG link : CVE-2025-39723


JSON object : View

Products Affected

linux

  • linux_kernel
CWE
CWE-787

Out-of-bounds Write