CVE-2025-37871 (GCVE-0-2025-37871)
Vulnerability from cvelistv5
Published
2025-05-09 06:43
Modified
2025-05-26 05:22
Severity ?
Summary
In the Linux kernel, the following vulnerability has been resolved: nfsd: decrease sc_count directly if fail to queue dl_recall A deadlock warning occurred when invoking nfs4_put_stid following a failed dl_recall queue operation: T1 T2 nfs4_laundromat nfs4_get_client_reaplist nfs4_anylock_blockers __break_lease spin_lock // ctx->flc_lock spin_lock // clp->cl_lock nfs4_lockowner_has_blockers locks_owner_has_blockers spin_lock // flctx->flc_lock nfsd_break_deleg_cb nfsd_break_one_deleg nfs4_put_stid refcount_dec_and_lock spin_lock // clp->cl_lock When a file is opened, an nfs4_delegation is allocated with sc_count initialized to 1, and the file_lease holds a reference to the delegation. The file_lease is then associated with the file through kernel_setlease. The disassociation is performed in nfsd4_delegreturn via the following call chain: nfsd4_delegreturn --> destroy_delegation --> destroy_unhashed_deleg --> nfs4_unlock_deleg_lease --> kernel_setlease --> generic_delete_lease The corresponding sc_count reference will be released after this disassociation. Since nfsd_break_one_deleg executes while holding the flc_lock, the disassociation process becomes blocked when attempting to acquire flc_lock in generic_delete_lease. This means: 1) sc_count in nfsd_break_one_deleg will not be decremented to 0; 2) The nfs4_put_stid called by nfsd_break_one_deleg will not attempt to acquire cl_lock; 3) Consequently, no deadlock condition is created. Given that sc_count in nfsd_break_one_deleg remains non-zero, we can safely perform refcount_dec on sc_count directly. This approach effectively avoids triggering deadlock warnings.
Impacted products
Vendor Product Version
Linux Linux Version: b874cdef4e67e5150e07eff0eae1cbb21fb92da1
Version: cdb796137c57e68ca34518d53be53b679351eb86
Version: d96587cc93ec369031bcd7658c6adc719873c9fd
Version: 9a81cde8c7ce65dd90fb47ceea93a45fc1a2fbd1
Version: cad3479b63661a399c9df1d0b759e1806e2df3c8
Version: 133f5e2a37ce08c82d24e8fba65e0a81deae4609
Version: 230ca758453c63bd38e4d9f4a21db698f7abada8
Version: 63b91c8ff4589f5263873b24c052447a28e10ef7
Create a notification for this product.
   Linux Linux Version: 5.10.236   
Version: 5.15.180   
Version: 6.1.134   
Version: 6.6.87   
Version: 6.12.23   
Version: 6.14.2   
Create a notification for this product.
Show details on NVD website


{
  "containers": {
    "cna": {
      "affected": [
        {
          "defaultStatus": "unaffected",
          "product": "Linux",
          "programFiles": [
            "fs/nfsd/nfs4state.c"
          ],
          "repo": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git",
          "vendor": "Linux",
          "versions": [
            {
              "lessThan": "b9bbe8f9d5663311d06667ce36d6ed255ead1a26",
              "status": "affected",
              "version": "b874cdef4e67e5150e07eff0eae1cbb21fb92da1",
              "versionType": "git"
            },
            {
              "lessThan": "a70832d3555987035fc430ccd703acd89393eadb",
              "status": "affected",
              "version": "cdb796137c57e68ca34518d53be53b679351eb86",
              "versionType": "git"
            },
            {
              "lessThan": "ba903539fff745d592d893c71b30e5e268a95413",
              "status": "affected",
              "version": "d96587cc93ec369031bcd7658c6adc719873c9fd",
              "versionType": "git"
            },
            {
              "lessThan": "7d192e27a431026c58d60edf66dc6cd98d0c01fc",
              "status": "affected",
              "version": "9a81cde8c7ce65dd90fb47ceea93a45fc1a2fbd1",
              "versionType": "git"
            },
            {
              "lessThan": "a7fce086f6ca84db409b9d58493ea77c1978897c",
              "status": "affected",
              "version": "cad3479b63661a399c9df1d0b759e1806e2df3c8",
              "versionType": "git"
            },
            {
              "lessThan": "14985d66b9b99c12995dd99d1c6c8dec4114c2a5",
              "status": "affected",
              "version": "133f5e2a37ce08c82d24e8fba65e0a81deae4609",
              "versionType": "git"
            },
            {
              "lessThan": "a1d14d931bf700c1025db8c46d6731aa5cf440f9",
              "status": "affected",
              "version": "230ca758453c63bd38e4d9f4a21db698f7abada8",
              "versionType": "git"
            },
            {
              "status": "affected",
              "version": "63b91c8ff4589f5263873b24c052447a28e10ef7",
              "versionType": "git"
            }
          ]
        },
        {
          "defaultStatus": "unaffected",
          "product": "Linux",
          "programFiles": [
            "fs/nfsd/nfs4state.c"
          ],
          "repo": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git",
          "vendor": "Linux",
          "versions": [
            {
              "lessThan": "5.10.237",
              "status": "affected",
              "version": "5.10.236",
              "versionType": "semver"
            },
            {
              "lessThan": "5.15.181",
              "status": "affected",
              "version": "5.15.180",
              "versionType": "semver"
            },
            {
              "lessThan": "6.1.135",
              "status": "affected",
              "version": "6.1.134",
              "versionType": "semver"
            },
            {
              "lessThan": "6.6.88",
              "status": "affected",
              "version": "6.6.87",
              "versionType": "semver"
            },
            {
              "lessThan": "6.12.25",
              "status": "affected",
              "version": "6.12.23",
              "versionType": "semver"
            },
            {
              "lessThan": "6.14.4",
              "status": "affected",
              "version": "6.14.2",
              "versionType": "semver"
            }
          ]
        }
      ],
      "cpeApplicability": [
        {
          "nodes": [
            {
              "cpeMatch": [
                {
                  "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
                  "versionEndExcluding": "5.10.237",
                  "versionStartIncluding": "5.10.236",
                  "vulnerable": true
                },
                {
                  "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
                  "versionEndExcluding": "5.15.181",
                  "versionStartIncluding": "5.15.180",
                  "vulnerable": true
                },
                {
                  "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
                  "versionEndExcluding": "6.1.135",
                  "versionStartIncluding": "6.1.134",
                  "vulnerable": true
                },
                {
                  "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
                  "versionEndExcluding": "6.6.88",
                  "versionStartIncluding": "6.6.87",
                  "vulnerable": true
                },
                {
                  "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
                  "versionEndExcluding": "6.12.25",
                  "versionStartIncluding": "6.12.23",
                  "vulnerable": true
                },
                {
                  "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
                  "versionEndExcluding": "6.14.4",
                  "versionStartIncluding": "6.14.2",
                  "vulnerable": true
                },
                {
                  "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
                  "versionStartIncluding": "6.13.11",
                  "vulnerable": true
                }
              ],
              "negate": false,
              "operator": "OR"
            }
          ]
        }
      ],
      "descriptions": [
        {
          "lang": "en",
          "value": "In the Linux kernel, the following vulnerability has been resolved:\n\nnfsd: decrease sc_count directly if fail to queue dl_recall\n\nA deadlock warning occurred when invoking nfs4_put_stid following a failed\ndl_recall queue operation:\n            T1                            T2\n                                nfs4_laundromat\n                                 nfs4_get_client_reaplist\n                                  nfs4_anylock_blockers\n__break_lease\n spin_lock // ctx-\u003eflc_lock\n                                   spin_lock // clp-\u003ecl_lock\n                                   nfs4_lockowner_has_blockers\n                                    locks_owner_has_blockers\n                                     spin_lock // flctx-\u003eflc_lock\n nfsd_break_deleg_cb\n  nfsd_break_one_deleg\n   nfs4_put_stid\n    refcount_dec_and_lock\n     spin_lock // clp-\u003ecl_lock\n\nWhen a file is opened, an nfs4_delegation is allocated with sc_count\ninitialized to 1, and the file_lease holds a reference to the delegation.\nThe file_lease is then associated with the file through kernel_setlease.\n\nThe disassociation is performed in nfsd4_delegreturn via the following\ncall chain:\nnfsd4_delegreturn --\u003e destroy_delegation --\u003e destroy_unhashed_deleg --\u003e\nnfs4_unlock_deleg_lease --\u003e kernel_setlease --\u003e generic_delete_lease\nThe corresponding sc_count reference will be released after this\ndisassociation.\n\nSince nfsd_break_one_deleg executes while holding the flc_lock, the\ndisassociation process becomes blocked when attempting to acquire flc_lock\nin generic_delete_lease. This means:\n1) sc_count in nfsd_break_one_deleg will not be decremented to 0;\n2) The nfs4_put_stid called by nfsd_break_one_deleg will not attempt to\nacquire cl_lock;\n3) Consequently, no deadlock condition is created.\n\nGiven that sc_count in nfsd_break_one_deleg remains non-zero, we can\nsafely perform refcount_dec on sc_count directly. This approach\neffectively avoids triggering deadlock warnings."
        }
      ],
      "providerMetadata": {
        "dateUpdated": "2025-05-26T05:22:43.674Z",
        "orgId": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
        "shortName": "Linux"
      },
      "references": [
        {
          "url": "https://git.kernel.org/stable/c/b9bbe8f9d5663311d06667ce36d6ed255ead1a26"
        },
        {
          "url": "https://git.kernel.org/stable/c/a70832d3555987035fc430ccd703acd89393eadb"
        },
        {
          "url": "https://git.kernel.org/stable/c/ba903539fff745d592d893c71b30e5e268a95413"
        },
        {
          "url": "https://git.kernel.org/stable/c/7d192e27a431026c58d60edf66dc6cd98d0c01fc"
        },
        {
          "url": "https://git.kernel.org/stable/c/a7fce086f6ca84db409b9d58493ea77c1978897c"
        },
        {
          "url": "https://git.kernel.org/stable/c/14985d66b9b99c12995dd99d1c6c8dec4114c2a5"
        },
        {
          "url": "https://git.kernel.org/stable/c/a1d14d931bf700c1025db8c46d6731aa5cf440f9"
        }
      ],
      "title": "nfsd: decrease sc_count directly if fail to queue dl_recall",
      "x_generator": {
        "engine": "bippy-1.2.0"
      }
    }
  },
  "cveMetadata": {
    "assignerOrgId": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
    "assignerShortName": "Linux",
    "cveId": "CVE-2025-37871",
    "datePublished": "2025-05-09T06:43:59.720Z",
    "dateReserved": "2025-04-16T04:51:23.959Z",
    "dateUpdated": "2025-05-26T05:22:43.674Z",
    "state": "PUBLISHED"
  },
  "dataType": "CVE_RECORD",
  "dataVersion": "5.1",
  "vulnerability-lookup:meta": {
    "nvd": "{\"cve\":{\"id\":\"CVE-2025-37871\",\"sourceIdentifier\":\"416baaa9-dc9f-4396-8d5f-8c081fb06d67\",\"published\":\"2025-05-09T07:16:08.210\",\"lastModified\":\"2025-05-12T17:32:32.760\",\"vulnStatus\":\"Awaiting Analysis\",\"cveTags\":[],\"descriptions\":[{\"lang\":\"en\",\"value\":\"In the Linux kernel, the following vulnerability has been resolved:\\n\\nnfsd: decrease sc_count directly if fail to queue dl_recall\\n\\nA deadlock warning occurred when invoking nfs4_put_stid following a failed\\ndl_recall queue operation:\\n            T1                            T2\\n                                nfs4_laundromat\\n                                 nfs4_get_client_reaplist\\n                                  nfs4_anylock_blockers\\n__break_lease\\n spin_lock // ctx-\u003eflc_lock\\n                                   spin_lock // clp-\u003ecl_lock\\n                                   nfs4_lockowner_has_blockers\\n                                    locks_owner_has_blockers\\n                                     spin_lock // flctx-\u003eflc_lock\\n nfsd_break_deleg_cb\\n  nfsd_break_one_deleg\\n   nfs4_put_stid\\n    refcount_dec_and_lock\\n     spin_lock // clp-\u003ecl_lock\\n\\nWhen a file is opened, an nfs4_delegation is allocated with sc_count\\ninitialized to 1, and the file_lease holds a reference to the delegation.\\nThe file_lease is then associated with the file through kernel_setlease.\\n\\nThe disassociation is performed in nfsd4_delegreturn via the following\\ncall chain:\\nnfsd4_delegreturn --\u003e destroy_delegation --\u003e destroy_unhashed_deleg --\u003e\\nnfs4_unlock_deleg_lease --\u003e kernel_setlease --\u003e generic_delete_lease\\nThe corresponding sc_count reference will be released after this\\ndisassociation.\\n\\nSince nfsd_break_one_deleg executes while holding the flc_lock, the\\ndisassociation process becomes blocked when attempting to acquire flc_lock\\nin generic_delete_lease. This means:\\n1) sc_count in nfsd_break_one_deleg will not be decremented to 0;\\n2) The nfs4_put_stid called by nfsd_break_one_deleg will not attempt to\\nacquire cl_lock;\\n3) Consequently, no deadlock condition is created.\\n\\nGiven that sc_count in nfsd_break_one_deleg remains non-zero, we can\\nsafely perform refcount_dec on sc_count directly. This approach\\neffectively avoids triggering deadlock warnings.\"},{\"lang\":\"es\",\"value\":\"En el kernel de Linux, se ha resuelto la siguiente vulnerabilidad: nfsd: disminuir sc_count directamente si no se puede poner en cola dl_recall Se produjo una advertencia de bloqueo al invocar nfs4_put_stid despu\u00e9s de una operaci\u00f3n de cola dl_recall fallida: T1 T2 nfs4_laundromat nfs4_get_client_reaplist nfs4_anylock_blockers __break_lease spin_lock // ctx-\u0026gt;flc_lock spin_lock // clp-\u0026gt;cl_lock nfs4_lockowner_has_blockers locks_owner_has_blockers spin_lock // flctx-\u0026gt;flc_lock nfsd_break_deleg_cb nfsd_break_one_deleg nfs4_put_stid refcount_dec_and_lock spin_lock // clp-\u0026gt;cl_lock Cuando se abre un archivo, se genera una nfs4_delegation asignado con sc_count inicializado a 1, y el file_lease contiene una referencia a la delegaci\u00f3n. El file_lease se asocia entonces con el archivo a trav\u00e9s de kernel_setlease. La disociaci\u00f3n se realiza en nfsd4_delegreturn mediante la siguiente cadena de llamadas: nfsd4_delegreturn --\u0026gt; destroy_delegation --\u0026gt; destroy_unhashed_deleg --\u0026gt; nfs4_unlock_deleg_lease --\u0026gt; kernel_setlease --\u0026gt; generic_delete_lease La referencia sc_count correspondiente se liberar\u00e1 despu\u00e9s de esta disociaci\u00f3n. Dado que nfsd_break_one_deleg se ejecuta mientras mantiene el flc_lock, el proceso de disociaci\u00f3n se bloquea al intentar adquirir flc_lock en generic_delete_lease. Esto significa: 1) sc_count en nfsd_break_one_deleg no se decrementar\u00e1 a 0; 2) El `nfs4_put_stid` llamado por `nfsd_break_one_deleg` no intentar\u00e1 adquirir `cl_lock`; 3) Por consiguiente, no se crea ninguna condici\u00f3n de interbloqueo. Dado que `sc_count` en `nfsd_break_one_deleg` permanece distinto de cero, podemos ejecutar `refcount_dec` en `sc_count` directamente. Este enfoque evita eficazmente la activaci\u00f3n de advertencias de interbloqueo.\"}],\"metrics\":{},\"references\":[{\"url\":\"https://git.kernel.org/stable/c/14985d66b9b99c12995dd99d1c6c8dec4114c2a5\",\"source\":\"416baaa9-dc9f-4396-8d5f-8c081fb06d67\"},{\"url\":\"https://git.kernel.org/stable/c/7d192e27a431026c58d60edf66dc6cd98d0c01fc\",\"source\":\"416baaa9-dc9f-4396-8d5f-8c081fb06d67\"},{\"url\":\"https://git.kernel.org/stable/c/a1d14d931bf700c1025db8c46d6731aa5cf440f9\",\"source\":\"416baaa9-dc9f-4396-8d5f-8c081fb06d67\"},{\"url\":\"https://git.kernel.org/stable/c/a70832d3555987035fc430ccd703acd89393eadb\",\"source\":\"416baaa9-dc9f-4396-8d5f-8c081fb06d67\"},{\"url\":\"https://git.kernel.org/stable/c/a7fce086f6ca84db409b9d58493ea77c1978897c\",\"source\":\"416baaa9-dc9f-4396-8d5f-8c081fb06d67\"},{\"url\":\"https://git.kernel.org/stable/c/b9bbe8f9d5663311d06667ce36d6ed255ead1a26\",\"source\":\"416baaa9-dc9f-4396-8d5f-8c081fb06d67\"},{\"url\":\"https://git.kernel.org/stable/c/ba903539fff745d592d893c71b30e5e268a95413\",\"source\":\"416baaa9-dc9f-4396-8d5f-8c081fb06d67\"}]}}"
  }
}


Log in or create an account to share your comment.




Tags
Taxonomy of the tags.


Loading…

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…