CVE-2026-43188

In the Linux kernel, the following vulnerability has been resolved: ceph: do not propagate page array emplacement errors as batch errors When fscrypt is enabled, move_dirty_folio_in_page_array() may fail because it needs to allocate bounce buffers to store the encrypted versions of each folio. Each folio beyond the first allocates its bounce buffer with GFP_NOWAIT. Failures are common (and expected) under this allocation mode; they should flush (not abort) the batch. However, ceph_process_folio_batch() uses the same `rc` variable for its own return code and for capturing the return codes of its routine calls; failing to reset `rc` back to 0 results in the error being propagated out to the main writeback loop, which cannot actually tolerate any errors here: once `ceph_wbc.pages` is allocated, it must be passed to ceph_submit_write() to be freed. If it survives until the next iteration (e.g. due to the goto being followed), ceph_allocate_page_array()'s BUG_ON() will oops the worker. Note that this failure mode is currently masked due to another bug (addressed next in this series) that prevents multiple encrypted folios from being selected for the same write. For now, just reset `rc` when redirtying the folio to prevent errors in move_dirty_folio_in_page_array() from propagating. Note that move_dirty_folio_in_page_array() is careful never to return errors on the first folio, so there is no need to check for that. After this change, ceph_process_folio_batch() no longer returns errors; its only remaining failure indicator is `locked_pages == 0`, which the caller already handles correctly.
Configurations

Configuration 1 (hide)

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

History

11 Nov 2026, 20:10

Type Values Removed Values Added
Summary
  • (es) En el kernel de Linux, la siguiente vulnerabilidad ha sido resuelta: ceph: no propagar errores de emplazamiento de array de páginas como errores de lote Cuando fscrypt está habilitado, move_dirty_folio_in_page_array() puede fallar porque necesita asignar búferes de rebote para almacenar las versiones cifradas de cada folio. Cada folio más allá del primero asigna su búfer de rebote con GFP_NOWAIT. Los fallos son comunes (y esperados) bajo este modo de asignación; deberían vaciar (no abortar) el lote. Sin embargo, ceph_process_folio_batch() utiliza la misma variable ’rc’ para su propio código de retorno y para capturar los códigos de retorno de sus llamadas a rutina; no restablecer ’rc’ a 0 resulta en que el error se propaga al bucle principal de writeback, el cual no puede tolerar ningún error aquí: una vez que ’ceph_wbc.pages’ es asignado, debe ser pasado a ceph_submit_write() para ser liberado. Si sobrevive hasta la siguiente iteración (por ejemplo, debido a que se sigue el goto), el BUG_ON() de ceph_allocate_page_array() hará que el worker falle. Tenga en cuenta que este modo de fallo está actualmente enmascarado debido a otro error (abordado a continuación en esta serie) que impide que múltiples folios cifrados sean seleccionados para la misma escritura. Por ahora, simplemente restablezca ’rc’ al volver a marcar el folio como sucio para evitar que los errores en move_dirty_folio_in_page_array() se propaguen. Tenga en cuenta que move_dirty_folio_in_page_array() tiene cuidado de nunca devolver errores en el primer folio, por lo que no hay necesidad de comprobar eso. Después de este cambio, ceph_process_folio_batch() ya no devuelve errores; su único indicador de fallo restante es ’locked_pages == 0’, que el llamador ya maneja correctamente.

Information

Published : 2026-05-06 12:16

Updated : 2026-11-11 20:10


NVD link : CVE-2026-43188

Mitre link : CVE-2026-43188

CVE.ORG link : CVE-2026-43188


JSON object : View

Products Affected

linux

  • linux_kernel