---
id: CVE-2026-89485
title: 'lockd: pin next file across nlm_inspect_file lock-drop'
summary: |-
  In the Linux kernel, the following vulnerability has been resolved:

  lockd: pin next file across nlm_inspect_file lock-drop

  nlm_traverse_files() pins the current file with f_count++ across
  a mutex_unlock for nlm_inspect_file(), but noth…
severity: critical
cvss: 9.8
cvssVector: 'CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H'
cvssSource: cna
cwe:
  - CWE-825
vendor: Linux
product: Linux
affected:
  - >-
    Linux >= 01df9c5e918ae5559f2d96da0143f8bfbb9e6171 <
    e3c413f789eaf0170275c7eba523ead73d963f30
  - >-
    Linux >= 01df9c5e918ae5559f2d96da0143f8bfbb9e6171 <
    08a455f87b14c7ff22ae3fdadda62a796a3a5572
  - >-
    Linux >= 01df9c5e918ae5559f2d96da0143f8bfbb9e6171 <
    550c19222c7132c888e23c9d89079ba1c9bc4cca
  - >-
    Linux >= 01df9c5e918ae5559f2d96da0143f8bfbb9e6171 <
    350087f231c11efcd288c310707c40eab63ca583
  - >-
    Linux >= 01df9c5e918ae5559f2d96da0143f8bfbb9e6171 <
    c24bdb7df2f34bdc38ca8a73796f5acb40f1830c
  - >-
    Linux >= 01df9c5e918ae5559f2d96da0143f8bfbb9e6171 <
    41f0a6d31615fcae261bf28a0aa50050dc93a401
  - >-
    Linux >= 01df9c5e918ae5559f2d96da0143f8bfbb9e6171 <
    e999a88133654c6dfc68487fb49da5f20dfa2d4f
  - >-
    Linux >= 01df9c5e918ae5559f2d96da0143f8bfbb9e6171 <
    526c49cff3f72c3ec74752016380c7567040581b
  - Linux 2.6.18
published: '2026-09-11'
updated: '2026-10-19'
sourceUpdated: '2026-10-19T08:47:35.868Z'
source: CVEORG
sourceUrl: 'https://www.cve.org/CVERecord?id=CVE-2026-89485'
references:
  - url: 'https://git.kernel.org/stable/c/e3c413f789eaf0170275c7eba523ead73d963f30'
  - url: 'https://git.kernel.org/stable/c/08a455f87b14c7ff22ae3fdadda62a796a3a5572'
  - url: 'https://git.kernel.org/stable/c/550c19222c7132c888e23c9d89079ba1c9bc4cca'
  - url: 'https://git.kernel.org/stable/c/350087f231c11efcd288c310707c40eab63ca583'
  - url: 'https://git.kernel.org/stable/c/c24bdb7df2f34bdc38ca8a73796f5acb40f1830c'
  - url: 'https://git.kernel.org/stable/c/41f0a6d31615fcae261bf28a0aa50050dc93a401'
  - url: 'https://git.kernel.org/stable/c/e999a88133654c6dfc68487fb49da5f20dfa2d4f'
  - url: 'https://git.kernel.org/stable/c/526c49cff3f72c3ec74752016380c7567040581b'
  - url: >-
      https://security.access.redhat.com/data/csaf/v2/vex/2026/cve-2026-89485.json
  - url: 'https://access.redhat.com/security/cve/CVE-2026-89485'
  - url: 'https://bugzilla.redhat.com/show_bug.cgi?id=2532183'
  - url: 'https://www.cve.org/CVERecord?id=CVE-2026-89485'
  - url: 'https://nvd.nist.gov/vuln/detail/CVE-2026-89485'
  - url: >-
      https://git.kernel.org/pub/scm/linux/security/vulns.git/plain/cve/published/2026/CVE-2026-89485.mbox
tags:
  - cve.org
  - csaf
  - vex
  - red-hat
  - score-dispute
epss: 0.00714
epssPercentile: 0.53471
scores:
  cna: 9.8
  vendor: 7
ingestedAt: '2026-09-14T15:23:07.452Z'
---

## Overview

In the Linux kernel, the following vulnerability has been resolved:

lockd: pin next file across nlm_inspect_file lock-drop

nlm_traverse_files() pins the current file with f_count++ across
a mutex_unlock for nlm_inspect_file(), but nothing pins the saved
next pointer.  A concurrent nlm_release_file() can kfree the next
file during the unlock window, and the iterator dereferences freed
memory on the next loop step.

Pin both current and next before the lock-drop.  Advance by
swapping the pinned cursors at the end of each iteration so next
is always held alive across the unlock.

Always call nlm_file_release() after dropping the iteration pin,
regardless of whether the file matched the predicate.  Use
nlm_file_inuse(), which does a live walk of the inode lock list,
rather than the cached f_locks field, so skipped files that never
ran nlm_inspect_file() are evaluated correctly.

Because every file in a hash bucket is now pinned and released,
files skipped by the is_failover_file predicate that have no
locks, blocks, shares, or external references are deleted during
traversal.  The old code never evaluated skipped files for
cleanup.  The new behavior is intentional: such files are stale
and should not persist in the table.

## Affected

- `Linux >= 01df9c5e918ae5559f2d96da0143f8bfbb9e6171 < e3c413f789eaf0170275c7eba523ead73d963f30`
- `Linux >= 01df9c5e918ae5559f2d96da0143f8bfbb9e6171 < 08a455f87b14c7ff22ae3fdadda62a796a3a5572`
- `Linux >= 01df9c5e918ae5559f2d96da0143f8bfbb9e6171 < 550c19222c7132c888e23c9d89079ba1c9bc4cca`
- `Linux >= 01df9c5e918ae5559f2d96da0143f8bfbb9e6171 < 350087f231c11efcd288c310707c40eab63ca583`
- `Linux >= 01df9c5e918ae5559f2d96da0143f8bfbb9e6171 < c24bdb7df2f34bdc38ca8a73796f5acb40f1830c`
- `Linux >= 01df9c5e918ae5559f2d96da0143f8bfbb9e6171 < 41f0a6d31615fcae261bf28a0aa50050dc93a401`
- `Linux >= 01df9c5e918ae5559f2d96da0143f8bfbb9e6171 < e999a88133654c6dfc68487fb49da5f20dfa2d4f`
- `Linux >= 01df9c5e918ae5559f2d96da0143f8bfbb9e6171 < 526c49cff3f72c3ec74752016380c7567040581b`
- `Linux 2.6.18`

## Remediation

Refer to the linked advisories for vendor-supplied fixes and affected version ranges.

## Vendor advisories

- **Red Hat VEX** · Moderate · affected: Red Hat Enterprise Linux 10, Red Hat Enterprise Linux 9, Red Hat OpenShift Container Platform 4 · no fix planned: Red Hat Enterprise Linux 10, Red Hat Enterprise Linux 9, Red Hat OpenShift Container Platform 4 · updated 2026-09-18 · [vex](https://security.access.redhat.com/data/csaf/v2/vex/2026/cve-2026-89485.json)
