CVE-2026-52990

fsnotify: fix inode reference leak in fsnotify_recalc_mask()

State
Published
Severity
Not scored
Published
Jun 24, 2026
Updated
Oct 30, 2026
Reserved
Jun 9, 2026

Read the record on cve.org

Description

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

fsnotify: fix inode reference leak in fsnotify_recalc_mask()

fsnotify_recalc_mask() fails to handle the return value of __fsnotify_recalc_mask(), which may return an inode pointer that needs to be released via fsnotify_drop_object() when the connector's HAS_IREF flag transitions from set to cleared.

This manifests as a hung task with the following call trace:

INFO: task umount:1234 blocked for more than 120 seconds. Call Trace: __schedule schedule fsnotify_sb_delete generic_shutdown_super kill_anon_super cleanup_mnt task_work_run do_exit do_group_exit

The race window that triggers the iref leak:

Thread A (adding mark) Thread B (removing mark) ────────────────────── ──────────────────────── fsnotify_add_mark_locked(): fsnotify_add_mark_list(): spin_lock(conn->lock) add mark_B(evictable) to list spin_unlock(conn->lock) return

/* ---- gap: no lock held ---- */

fsnotify_detach_mark(mark_A): spin_lock(mark_A->lock) clear ATTACHED flag on mark_A spin_unlock(mark_A->lock) fsnotify_put_mark(mark_A)

fsnotify_recalc_mask(): spin_lock(conn->lock) __fsnotify_recalc_mask(): /* mark_A skipped: ATTACHED cleared */ /* only mark_B(evictable) remains */ want_iref = false has_iref = true /* not yet cleared */ -> HAS_IREF transitions true -> false -> returns inode pointer spin_unlock(conn->lock) /* BUG: return value discarded! * iput() and fsnotify_put_sb_watched_objects() * are never called */

Fix this by deferring the transition true -> false of HAS_IREF flag from fsnotify_recalc_mask() (Thread A) to fsnotify_put_mark() (thread B).

Scores

The record has no CVSS score.

Weaknesses

The record names no weakness.

Affected Products

ProductVersions
LinuxLinux
  • c3638b5b13740fa31762d414bbce8b7a694e582a to before ba4d88bfd58739698a9bd2309659c9cc26acf7f7Affected
  • c3638b5b13740fa31762d414bbce8b7a694e582a to before 926ec3937b28d30c08427053c8d8af7f9e086d82Affected
  • c3638b5b13740fa31762d414bbce8b7a694e582a to before 8c8afa6444e6bdc145d2bf2f3aeeca6da3e36b42Affected
  • c3638b5b13740fa31762d414bbce8b7a694e582a to before b740cc86816bbc87902ae9db74cd21abde3c8d63Affected
  • c3638b5b13740fa31762d414bbce8b7a694e582a to before 5c80289503da3658e3df80280598c68d181eadbdAffected
  • c3638b5b13740fa31762d414bbce8b7a694e582a to before 4aca914ac152f5d055ddcb36704d1e539ac08977Affected
  • ff34ebaa6f6dc1eebce6a8d6f12a1566f33d00feAffected
  • 4f145b67c075324b13d6ae7d5abb6e7a1dbac26dAffected
  • 5.10.220 to before 5.11Affected
  • 5.15.154 to before 5.16Affected
LinuxLinux
  • 5.19Affected
  • before 5.19Not affected
  • 6.1.191 through 6.1.*Not affected
  • 6.6.160 through 6.6.*Not affected
  • 6.12.91 through 6.12.*Not affected
  • 6.18.33 through 6.18.*Not affected
  • 7.0.10 through 7.0.*Not affected
  • 7.1 and laterNot affected

References

Every record here comes from the CVE Program’s CVE List. © 1999–2026 The MITRE Corporation. CVE is a registered trademark of The MITRE Corporation. The records are reproduced under the CVE Program terms of use.