CVE-2026-98682
En el kernel de Linux se ha resuelto la siguiente vulnerabilidad:
smb: client: drain and invalidate before server-side copy/clone
cifs_file_copychunk_range() y la ruta de clonado (FICLONE) de cifs_remap_file_range() no serializan la caché de páginas del destino frente a la copia realizada en el servidor como sí lo hacen las demás operaciones de rango en el servidor (smb3_zero_range(), smb3_punch_hole(), smb3_collapse_range() y smb3_insert_range()).
cifs_file_copychunk_range() invalida el rango de destino con filemap_invalidate_inode(), que toma y libera internamente el invalidate_lock del mapping, de modo que el cerrojo ya no está retenido cuando se emite el ioctl de copychunk.
Leer descripción completaMostrar menos
Además, nunca drena la E/S netfs en vuelo sobre el destino. La ruta de clonado nunca toma el invalidate_lock (solo i_rwsem), usa un truncate_inode_pages_range() simple y tampoco drena la E/S pendiente.
Como resultado, una escritura diferida asíncrona del destino puede completarse después de que la copia o el clonado en el servidor se hayan ejecutado y restaurar datos obsoletos sobre la región que acaba de escribir el servidor, corrompiendo el archivo. Es la misma clase de corrupción que el commit d7d2adcd022b ("smb/client: flush dirty data before punching a hole") y se ha observado de forma aleatoria en generic/363 contra Windows Server.
Se corrigen ambas rutas siguiendo el orden establecido: mantener el invalidate_lock del mapping de destino durante el vaciado y la invalidación del destino y durante el ioctl del servidor, y llamar a netfs_wait_for_outstanding_io() sobre el destino para drenar las escrituras en vuelo antes de emitir el ioctl. Solo se requiere el invalidate_lock del inodo de destino, ya que el origen solo se vacía y no se invalida; i_rwsem (ya retenido mediante lock_two_nondirectories()) se adquiere antes que el invalidate_lock, respetando el orden de cerrojos del VFS. Como filemap_invalidate_inode() toma internamente ese mismo cerrojo, se sustituye por sus propios pasos de desmapeo, vaciado e invalidación en lugar de llamarla, y se retorna pronto ante una copia de longitud cero para evitar un desbordamiento por defecto del rango.
Traducción automática del texto original de NVD (en inglés).
CVSS
NVD no ha asignado puntuación CVSS a esta CVE (habitual desde el cambio de política de abril de 2026).
Probabilidad de explotación (EPSS)
- Probabilidad de explotación en los próximos 30 días
- 0.15 %
- Percentil entre todas las CVEs puntuadas
- 4
- Fecha de la puntuación
- 20/10/2026
EPSS (Exploit Prediction Scoring System, de FIRST) estima la probabilidad de que una vulnerabilidad sea explotada en 30 días. Complementa a CVSS (impacto) y a CISA KEV (explotación confirmada).
Tecnologías afectadas (1)
⚠ Inferidas por IA a partir de la descripción — NVD aún no ha analizado esta CVE; no son CPE verificados.
Referencias
JSON original (NVD)
Mostrar
{
"id": "CVE-2026-98682",
"cveTags": [],
"metrics": {},
"affected": [
{
"source": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
"affectedData": [
{
"repo": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git",
"vendor": "Linux",
"product": "Linux",
"versions": [
{
"status": "affected",
"version": "c54fc3a4f375663f2361a9cbb2955fb4ef912879",
"lessThan": "dc71660f11ef2fecc0695a41e49cd496a9d255ab",
"versionType": "git"
},
{
"status": "affected",
"version": "c54fc3a4f375663f2361a9cbb2955fb4ef912879",
"lessThan": "c9b1194e8ec99d95db25db45edd2fbf690f043ab",
"versionType": "git"
},
{
"status": "affected",
"version": "358bd5f436d820bb758833050aae065b35d6986c",
"versionType": "git"
},
{
"status": "affected",
"version": "43801359c8971cc49b4a4db5015fba77fbd09c32",
"versionType": "git"
},
{
"status": "affected",
"version": "6.1.68",
"lessThan": "6.2",
"versionType": "semver"
},
{
"status": "affected",
"version": "6.6.7",
"lessThan": "6.7",
"versionType": "semver"
}
],
"programFiles": [
"fs/smb/client/cifsfs.c"
],
"defaultStatus": "unaffected"
},
{
"repo": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git",
"vendor": "Linux",
"product": "Linux",
"versions": [
{
"status": "affected",
"version": "6.7"
},
{
"status": "unaffected",
"version": "0",
"lessThan": "6.7",
"versionType": "semver"
},
{
"status": "unaffected",
"version": "7.2.10",
"versionType": "semver",
"lessThanOrEqual": "7.2.*"
},
{
"status": "unaffected",
"version": "7.3",
"versionType": "original_commit_for_fix",
"lessThanOrEqual": "*"
}
],
"programFiles": [
"fs/smb/client/cifsfs.c"
],
"defaultStatus": "affected"
}
]
}
],
"published": "2026-10-18T16:17:21.557",
"references": [
{
"url": "https://git.kernel.org/stable/c/c9b1194e8ec99d95db25db45edd2fbf690f043ab",
"source": "416baaa9-dc9f-4396-8d5f-8c081fb06d67"
},
{
"url": "https://git.kernel.org/stable/c/dc71660f11ef2fecc0695a41e49cd496a9d255ab",
"source": "416baaa9-dc9f-4396-8d5f-8c081fb06d67"
}
],
"vulnStatus": "Received",
"descriptions": [
{
"lang": "en",
"value": "In the Linux kernel, the following vulnerability has been resolved:\n\nsmb: client: drain and invalidate before server-side copy/clone\n\ncifs_file_copychunk_range() and the clone (FICLONE) path of\ncifs_remap_file_range() do not serialise the destination page cache\nagainst the server-side copy the way the other server-side range\noperations (smb3_zero_range(), smb3_punch_hole(), smb3_collapse_range()\nand smb3_insert_range()) do.\n\ncifs_file_copychunk_range() invalidates the destination range with\nfilemap_invalidate_inode(), which takes and drops the mapping's\ninvalidate_lock internally, so the lock is no longer held when the\ncopychunk ioctl is issued. It also never drains in-flight netfs I/O on\nthe target. The clone path never takes the invalidate_lock at all (only\ni_rwsem), uses a bare truncate_inode_pages_range() and likewise does not\ndrain outstanding I/O.\n\nAs a result an asynchronous destination writeback can complete after the\nserver-side copy/clone has run and reinstate stale data over the region\njust written by the server, corrupting the file. This is the same class\nof corruption as commit d7d2adcd022b (\"smb/client: flush dirty data\nbefore punching a hole\") and has been seen randomly in generic/363\nagainst Windows Server.\n\nFix both paths to follow the established ordering: hold the target\nmapping's invalidate_lock across the flush and invalidation of the\ndestination and the server ioctl, and call netfs_wait_for_outstanding_io()\non the target to drain in-flight writes before the ioctl is issued. Only\nthe target inode's invalidate_lock is required, as the source is merely\nflushed and not invalidated; i_rwsem (already held via\nlock_two_nondirectories()) is acquired before the invalidate_lock,\nmatching the VFS lock ordering. Since filemap_invalidate_inode() takes\nthat same lock internally, replace it with its own unmap/flush/invalidate\nsteps instead of calling it, and return early on a zero-length copy to\navoid a range underflow."
}
],
"lastModified": "2026-10-19T10:19:32.627",
"sourceIdentifier": "416baaa9-dc9f-4396-8d5f-8c081fb06d67"
}