CVE-2025-38311 (GCVE-0-2025-38311)
Vulnerability from cvelistv5
Published
2025-07-10 07:42
Modified
2025-07-28 04:18
Severity ?
VLAI Severity ?
EPSS score ?
Summary
In the Linux kernel, the following vulnerability has been resolved:
iavf: get rid of the crit lock
Get rid of the crit lock.
That frees us from the error prone logic of try_locks.
Thanks to netdev_lock() by Jakub it is now easy, and in most cases we were
protected by it already - replace crit lock by netdev lock when it was not
the case.
Lockdep reports that we should cancel the work under crit_lock [splat1],
and that was the scheme we have mostly followed since [1] by Slawomir.
But when that is done we still got into deadlocks [splat2]. So instead
we should look at the bigger problem, namely "weird locking/scheduling"
of the iavf. The first step to fix that is to remove the crit lock.
I will followup with a -next series that simplifies scheduling/tasks.
Cancel the work without netdev lock (weird unlock+lock scheme),
to fix the [splat2] (which would be totally ugly if we would kept
the crit lock).
Extend protected part of iavf_watchdog_task() to include scheduling
more work.
Note that the removed comment in iavf_reset_task() was misplaced,
it belonged to inside of the removed if condition, so it's gone now.
[splat1] - w/o this patch - The deadlock during VF removal:
WARNING: possible circular locking dependency detected
sh/3825 is trying to acquire lock:
((work_completion)(&(&adapter->watchdog_task)->work)){+.+.}-{0:0}, at: start_flush_work+0x1a1/0x470
but task is already holding lock:
(&adapter->crit_lock){+.+.}-{4:4}, at: iavf_remove+0xd1/0x690 [iavf]
which lock already depends on the new lock.
[splat2] - when cancelling work under crit lock, w/o this series,
see [2] for the band aid attempt
WARNING: possible circular locking dependency detected
sh/3550 is trying to acquire lock:
((wq_completion)iavf){+.+.}-{0:0}, at: touch_wq_lockdep_map+0x26/0x90
but task is already holding lock:
(&dev->lock){+.+.}-{4:4}, at: iavf_remove+0xa6/0x6e0 [iavf]
which lock already depends on the new lock.
[1] fc2e6b3b132a ("iavf: Rework mutexes for better synchronisation")
[2] https://github.com/pkitszel/linux/commit/52dddbfc2bb60294083f5711a158a
References
Impacted products
{ "containers": { "cna": { "affected": [ { "defaultStatus": "unaffected", "product": "Linux", "programFiles": [ "drivers/net/ethernet/intel/iavf/iavf.h", "drivers/net/ethernet/intel/iavf/iavf_ethtool.c", "drivers/net/ethernet/intel/iavf/iavf_main.c" ], "repo": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git", "vendor": "Linux", "versions": [ { "lessThan": "620ab4d6215de0b25227f9fff1a8c7fb66837cb8", "status": "affected", "version": "d1639a17319ba78a018280cd2df6577a7e5d9fab", "versionType": "git" }, { "lessThan": "120f28a6f314fef7f282c99f196923fe44081cad", "status": "affected", "version": "d1639a17319ba78a018280cd2df6577a7e5d9fab", "versionType": "git" }, { "status": "affected", "version": "2647ff59c52ef42c853c905817ed1a7f092d59a5", "versionType": "git" }, { "status": "affected", "version": "63d14a43128540016ebd4f7fa3ad3a2f0d6e642c", "versionType": "git" } ] }, { "defaultStatus": "affected", "product": "Linux", "programFiles": [ "drivers/net/ethernet/intel/iavf/iavf.h", "drivers/net/ethernet/intel/iavf/iavf_ethtool.c", "drivers/net/ethernet/intel/iavf/iavf_main.c" ], "repo": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git", "vendor": "Linux", "versions": [ { "status": "affected", "version": "6.5" }, { "lessThan": "6.5", "status": "unaffected", "version": "0", "versionType": "semver" }, { "lessThanOrEqual": "6.15.*", "status": "unaffected", "version": "6.15.3", "versionType": "semver" }, { "lessThanOrEqual": "*", "status": "unaffected", "version": "6.16", "versionType": "original_commit_for_fix" } ] } ], "cpeApplicability": [ { "nodes": [ { "cpeMatch": [ { "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*", "versionEndExcluding": "6.15.3", "versionStartIncluding": "6.5", "vulnerable": true }, { "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*", "versionEndExcluding": "6.16", "versionStartIncluding": "6.5", "vulnerable": true }, { "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*", "versionStartIncluding": "6.1.42", "vulnerable": true }, { "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*", "versionStartIncluding": "6.4.7", "vulnerable": true } ], "negate": false, "operator": "OR" } ] } ], "descriptions": [ { "lang": "en", "value": "In the Linux kernel, the following vulnerability has been resolved:\n\niavf: get rid of the crit lock\n\nGet rid of the crit lock.\nThat frees us from the error prone logic of try_locks.\n\nThanks to netdev_lock() by Jakub it is now easy, and in most cases we were\nprotected by it already - replace crit lock by netdev lock when it was not\nthe case.\n\nLockdep reports that we should cancel the work under crit_lock [splat1],\nand that was the scheme we have mostly followed since [1] by Slawomir.\nBut when that is done we still got into deadlocks [splat2]. So instead\nwe should look at the bigger problem, namely \"weird locking/scheduling\"\nof the iavf. The first step to fix that is to remove the crit lock.\nI will followup with a -next series that simplifies scheduling/tasks.\n\nCancel the work without netdev lock (weird unlock+lock scheme),\nto fix the [splat2] (which would be totally ugly if we would kept\nthe crit lock).\n\nExtend protected part of iavf_watchdog_task() to include scheduling\nmore work.\n\nNote that the removed comment in iavf_reset_task() was misplaced,\nit belonged to inside of the removed if condition, so it\u0027s gone now.\n\n[splat1] - w/o this patch - The deadlock during VF removal:\n WARNING: possible circular locking dependency detected\n sh/3825 is trying to acquire lock:\n ((work_completion)(\u0026(\u0026adapter-\u003ewatchdog_task)-\u003ework)){+.+.}-{0:0}, at: start_flush_work+0x1a1/0x470\n but task is already holding lock:\n (\u0026adapter-\u003ecrit_lock){+.+.}-{4:4}, at: iavf_remove+0xd1/0x690 [iavf]\n which lock already depends on the new lock.\n\n[splat2] - when cancelling work under crit lock, w/o this series,\n\t see [2] for the band aid attempt\n WARNING: possible circular locking dependency detected\n sh/3550 is trying to acquire lock:\n ((wq_completion)iavf){+.+.}-{0:0}, at: touch_wq_lockdep_map+0x26/0x90\n but task is already holding lock:\n (\u0026dev-\u003elock){+.+.}-{4:4}, at: iavf_remove+0xa6/0x6e0 [iavf]\n which lock already depends on the new lock.\n\n[1] fc2e6b3b132a (\"iavf: Rework mutexes for better synchronisation\")\n[2] https://github.com/pkitszel/linux/commit/52dddbfc2bb60294083f5711a158a" } ], "providerMetadata": { "dateUpdated": "2025-07-28T04:18:15.601Z", "orgId": "416baaa9-dc9f-4396-8d5f-8c081fb06d67", "shortName": "Linux" }, "references": [ { "url": "https://git.kernel.org/stable/c/620ab4d6215de0b25227f9fff1a8c7fb66837cb8" }, { "url": "https://git.kernel.org/stable/c/120f28a6f314fef7f282c99f196923fe44081cad" } ], "title": "iavf: get rid of the crit lock", "x_generator": { "engine": "bippy-1.2.0" } } }, "cveMetadata": { "assignerOrgId": "416baaa9-dc9f-4396-8d5f-8c081fb06d67", "assignerShortName": "Linux", "cveId": "CVE-2025-38311", "datePublished": "2025-07-10T07:42:20.006Z", "dateReserved": "2025-04-16T04:51:24.003Z", "dateUpdated": "2025-07-28T04:18:15.601Z", "state": "PUBLISHED" }, "dataType": "CVE_RECORD", "dataVersion": "5.1", "vulnerability-lookup:meta": { "nvd": "{\"cve\":{\"id\":\"CVE-2025-38311\",\"sourceIdentifier\":\"416baaa9-dc9f-4396-8d5f-8c081fb06d67\",\"published\":\"2025-07-10T08:15:30.010\",\"lastModified\":\"2025-07-10T13:17:30.017\",\"vulnStatus\":\"Awaiting Analysis\",\"cveTags\":[],\"descriptions\":[{\"lang\":\"en\",\"value\":\"In the Linux kernel, the following vulnerability has been resolved:\\n\\niavf: get rid of the crit lock\\n\\nGet rid of the crit lock.\\nThat frees us from the error prone logic of try_locks.\\n\\nThanks to netdev_lock() by Jakub it is now easy, and in most cases we were\\nprotected by it already - replace crit lock by netdev lock when it was not\\nthe case.\\n\\nLockdep reports that we should cancel the work under crit_lock [splat1],\\nand that was the scheme we have mostly followed since [1] by Slawomir.\\nBut when that is done we still got into deadlocks [splat2]. So instead\\nwe should look at the bigger problem, namely \\\"weird locking/scheduling\\\"\\nof the iavf. The first step to fix that is to remove the crit lock.\\nI will followup with a -next series that simplifies scheduling/tasks.\\n\\nCancel the work without netdev lock (weird unlock+lock scheme),\\nto fix the [splat2] (which would be totally ugly if we would kept\\nthe crit lock).\\n\\nExtend protected part of iavf_watchdog_task() to include scheduling\\nmore work.\\n\\nNote that the removed comment in iavf_reset_task() was misplaced,\\nit belonged to inside of the removed if condition, so it\u0027s gone now.\\n\\n[splat1] - w/o this patch - The deadlock during VF removal:\\n WARNING: possible circular locking dependency detected\\n sh/3825 is trying to acquire lock:\\n ((work_completion)(\u0026(\u0026adapter-\u003ewatchdog_task)-\u003ework)){+.+.}-{0:0}, at: start_flush_work+0x1a1/0x470\\n but task is already holding lock:\\n (\u0026adapter-\u003ecrit_lock){+.+.}-{4:4}, at: iavf_remove+0xd1/0x690 [iavf]\\n which lock already depends on the new lock.\\n\\n[splat2] - when cancelling work under crit lock, w/o this series,\\n\\t see [2] for the band aid attempt\\n WARNING: possible circular locking dependency detected\\n sh/3550 is trying to acquire lock:\\n ((wq_completion)iavf){+.+.}-{0:0}, at: touch_wq_lockdep_map+0x26/0x90\\n but task is already holding lock:\\n (\u0026dev-\u003elock){+.+.}-{4:4}, at: iavf_remove+0xa6/0x6e0 [iavf]\\n which lock already depends on the new lock.\\n\\n[1] fc2e6b3b132a (\\\"iavf: Rework mutexes for better synchronisation\\\")\\n[2] https://github.com/pkitszel/linux/commit/52dddbfc2bb60294083f5711a158a\"},{\"lang\":\"es\",\"value\":\"En el kernel de Linux, se ha resuelto la siguiente vulnerabilidad: iavf: eliminar el bloqueo cr\u00edtico. Eliminar el bloqueo cr\u00edtico. Esto nos libera de la l\u00f3gica propensa a errores de try_locks. Gracias a netdev_lock() de Jakub, ahora es f\u00e1cil, y en la mayor\u00eda de los casos ya est\u00e1bamos protegidos por \u00e9l: reemplazar el bloqueo cr\u00edtico por el bloqueo netdev cuando no era el caso. Lockdep informa que debemos cancelar el trabajo bajo crit_lock [splat1], y ese fue el esquema que hemos seguido principalmente desde [1] de Slawomir. Pero una vez hecho esto, seguimos teniendo interbloqueos [splat2]. As\u00ed que, en lugar de eso, deber\u00edamos analizar el problema m\u00e1s grave, es decir, el \\\"bloqueo/programaci\u00f3n extra\u00f1o\\\" de iavf. El primer paso para solucionarlo es eliminar el bloqueo cr\u00edtico. Seguir\u00e9 con una serie de -next que simplifica la programaci\u00f3n/tareas. Cancelar el trabajo sin el bloqueo de netdev (un esquema extra\u00f1o de desbloqueo y bloqueo) para corregir el [splat2] (que ser\u00eda un desastre si hubi\u00e9ramos mantenido el bloqueo cr\u00edtico). Extender la parte protegida de iavf_watchdog_task() para incluir la programaci\u00f3n de m\u00e1s trabajo. Tenga en cuenta que el comentario eliminado en iavf_reset_task() estaba mal ubicado; pertenec\u00eda a la condici\u00f3n if eliminada, por lo que ya no est\u00e1. [splat1] - sin este parche - El bloqueo durante la eliminaci\u00f3n de VF: ADVERTENCIA: se detect\u00f3 una posible dependencia de bloqueo circular sh/3825 est\u00e1 intentando adquirir el bloqueo: ((work_completion)(\u0026amp;(\u0026amp;adapter-\u0026gt;watchdog_task)-\u0026gt;work)){+.+.}-{0:0}, en: start_flush_work+0x1a1/0x470 pero la tarea ya tiene el bloqueo: (\u0026amp;adapter-\u0026gt;crit_lock){+.+.}-{4:4}, en: iavf_remove+0xd1/0x690 [iavf] cuyo bloqueo ya depende del nuevo bloqueo. [splat2] - al cancelar trabajo bajo bloqueo cr\u00edtico, sin esta serie, vea [2] para el intento de curita ADVERTENCIA: posible dependencia de bloqueo circular detectada sh/3550 est\u00e1 intentando adquirir el bloqueo: ((wq_completion)iavf){+.+.}-{0:0}, en: touch_wq_lockdep_map+0x26/0x90 pero la tarea ya tiene el bloqueo: (\u0026amp;dev-\u0026gt;lock){+.+.}-{4:4}, en: iavf_remove+0xa6/0x6e0 [iavf] cuyo bloqueo ya depende del nuevo bloqueo. [1] fc2e6b3b132a (\\\"iavf: Rehacer mutexes para mejor sincronizaci\u00f3n\\\") [2] https://github.com/pkitszel/linux/commit/52dddbfc2bb60294083f5711a158a\"}],\"metrics\":{},\"references\":[{\"url\":\"https://git.kernel.org/stable/c/120f28a6f314fef7f282c99f196923fe44081cad\",\"source\":\"416baaa9-dc9f-4396-8d5f-8c081fb06d67\"},{\"url\":\"https://git.kernel.org/stable/c/620ab4d6215de0b25227f9fff1a8c7fb66837cb8\",\"source\":\"416baaa9-dc9f-4396-8d5f-8c081fb06d67\"}]}}" } }
Loading…
Loading…
Sightings
Author | Source | Type | Date |
---|
Nomenclature
- Seen: The vulnerability was mentioned, discussed, or seen somewhere by the user.
- Confirmed: The vulnerability is confirmed from an analyst perspective.
- Exploited: This vulnerability was exploited and seen by the user reporting the sighting.
- Patched: This vulnerability was successfully patched by the user reporting the sighting.
- Not exploited: This vulnerability was not exploited or seen by the user reporting the sighting.
- Not confirmed: The user expresses doubt about the veracity of the vulnerability.
- Not patched: This vulnerability was not successfully patched by the user reporting the sighting.
Loading…
Loading…