CVE-2026-43420

MEDIUMNVD 4.74.7
EchelonGraph scoreMEDIUM confidence

This medium-severity CVE scores 4.7 under NVD CVSS v3. EPSS exploit probability: 0.1%, top 99% of all CVEs by exploit prediction. GitHub Security Advisory data not yet ingested — confidence will rise once GHSA publishes (typical lag: hours to days for open-source ecosystem CVEs; never for infrastructure-only CVEs).

Triggered by: NVD CVSS baseline
Sources: epss, nvd
4.7
EchelonGraph verdictMonitorLow exploitation likelihood right now — keep watching.
  • Lower severity and no public exploit yet
CISA-KEV: Not listedEPSS: 0%CVSS: 4.7Exploit: NoneExposed: 0

No vendor fix yet — apply a workaround or compensating control (WAF / firewall / segmentation) and watch for a patch.

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

ceph: fix i_nlink underrun during async unlink

During async unlink, we drop the i_nlink counter before we receive the completion (that will eventually update the i_nlink) because "we assume that the unlink will succeed". That is not a bad idea, but it races against deletions by other clients (or against the completion of our own unlink) and can lead to an underrun which emits a WARNING like this one:

WARNING: CPU: 85 PID: 25093 at fs/inode.c:407 drop_nlink+0x50/0x68 Modules linked in: CPU: 85 UID: 3221252029 PID: 25093 Comm: php-cgi8.1 Not tainted 6.14.11-cm4all1-ampere #655 Hardware name: Supermicro ARS-110M-NR/R12SPD-A, BIOS 1.1b 10/17/2023 pstate: 60400009 (nZCv daif +PAN -UAO -TCO -DIT -SSBS BTYPE=--) pc : drop_nlink+0x50/0x68 lr : ceph_unlink+0x6c4/0x720 sp : ffff80012173bc90 x29: ffff80012173bc90 x28: ffff086d0a45aaf8 x27: ffff0871d0eb5680 x26: ffff087f2a64a718 x25: 0000020000000180 x24: 0000000061c88647 x23: 0000000000000002 x22: ffff07ff9236d800 x21: 0000000000001203 x20: ffff07ff9237b000 x19: ffff088b8296afc0 x18: 00000000f3c93365 x17: 0000000000070000 x16: ffff08faffcbdfe8 x15: ffff08faffcbdfec x14: 0000000000000000 x13: 45445f65645f3037 x12: 34385f6369706f74 x11: 0000a2653104bb20 x10: ffffd85f26d73290 x9 : ffffd85f25664f94 x8 : 00000000000000c0 x7 : 0000000000000000 x6 : 0000000000000002 x5 : 0000000000000081 x4 : 0000000000000481 x3 : 0000000000000000 x2 : 0000000000000000 x1 : 0000000000000000 x0 : ffff08727d3f91e8 Call trace: drop_nlink+0x50/0x68 (P) vfs_unlink+0xb0/0x2e8 do_unlinkat+0x204/0x288 __arm64_sys_unlinkat+0x3c/0x80 invoke_syscall.constprop.0+0x54/0xe8 do_el0_svc+0xa4/0xc8 el0_svc+0x18/0x58 el0t_64_sync_handler+0x104/0x130 el0t_64_sync+0x154/0x158

In ceph_unlink(), a call to ceph_mdsc_submit_request() submits the CEPH_MDS_OP_UNLINK to the MDS, but does not wait for completion.

Meanwhile, between this call and the following drop_nlink() call, a worker thread may process a CEPH_CAP_OP_IMPORT, CEPH_CAP_OP_GRANT or just a CEPH_MSG_CLIENT_REPLY (the latter of which could be our own completion). These will lead to a set_nlink() call, updating the i_nlink counter to the value received from the MDS. If that new i_nlink value happens to be zero, it is illegal to decrement it further. But that is exactly what ceph_unlink() will do then.

The WARNING can be reproduced this way:

  • Force async unlink; only the async code path is affected. Having
no real clue about Ceph internals, I was unable to find out why the MDS wouldn't give me the "Fxr" capabilities, so I patched get_caps_for_async_unlink() to always succeed.

(Note that the WARNING dump above was found on an unpatched kernel, without this kludge - this is not a theoretical bug.)

  • Add a sleep call after ceph_mdsc_submit_request() so the unlink
completion gets handled by a worker thread before drop_nlink() is called. This guarantees that the i_nlink is already zero before drop_nlink() runs.

The solution is to skip the counter decrement when it is already zero, but doing so without a lock is still racy (TOCTOU). Since ceph_fill_inode() and handle_cap_grant() both hold the ceph_inode_info.i_ceph_lock spinlock while set_nlink() runs, this seems like the proper lock to protect the i_nlink updates.

I found prior art in NFS and SMB (using inode.i_lock) and AFS (using afs_vnode.cb_lock). All three have the zero check as well.

CVSS v3
4.7
EG Score
4.7(medium)
EG Risk
26(Track)
EG Risk 26/100SSVC: Track

EG Risk is EchelonGraph's 0–100 priority score: it fuses intrinsic severity with real-world exploitation and automatability so you can rank equal-severity CVEs and fix the most dangerous first. Higher = act sooner. Distinct from the 0–10 EG Score (severity).

How it’s computed
Severity47% × 45%
Exploitation0% × 40%
Automatability30% × 15%
Action: Routine — remediate on your standard cadence.
EPSS
0.7%
KEV
Not listed

Published

May 8, 2026

Last Modified

May 22, 2026

Advisory Details (8)

Auto-updated Jun 16, 2026
No patch confirmed yet.
generic

ceph: fix i_nlink underrun during async unlink - kernel/git/stable/linux.git - Linux kernel stable tree

https://git.kernel.org/stable/c/fcc477a6e8856c8a42b3c9e171724d8d6dfadd06
generic

ceph: fix i_nlink underrun during async unlink - kernel/git/stable/linux.git - Linux kernel stable tree

https://git.kernel.org/stable/c/ce0123cbb4a40a2f1bbb815f292b26e96088639f
generic

ceph: fix i_nlink underrun during async unlink - kernel/git/stable/linux.git - Linux kernel stable tree

https://git.kernel.org/stable/c/b3f5513141ecc6b277a8f7b7efe58a0cf9a5e859
generic

ceph: fix i_nlink underrun during async unlink - kernel/git/stable/linux.git - Linux kernel stable tree

https://git.kernel.org/stable/c/aedd29386b23f3e1e6818943e11abfff2953732f
generic

ceph: fix i_nlink underrun during async unlink - kernel/git/stable/linux.git - Linux kernel stable tree

https://git.kernel.org/stable/c/9b31e88ac5623d15c8bc46f69dfe1d3b43a8f67c
generic

ceph: fix i_nlink underrun during async unlink - kernel/git/stable/linux.git - Linux kernel stable tree

https://git.kernel.org/stable/c/8975b85b0d45ca811ace6fac5907652f2310e5ac
generic

ceph: fix i_nlink underrun during async unlink - kernel/git/stable/linux.git - Linux kernel stable tree

https://git.kernel.org/stable/c/7db008e85a5d17b64bc5390b828bf457ae91a415
generic

ceph: fix i_nlink underrun during async unlink - kernel/git/stable/linux.git - Linux kernel stable tree

https://git.kernel.org/stable/c/6d5fd8bb574bef039eb3b738e523870433a2aeb9

Patch Availability(1)

Vendor / EcosystemFixed in / PatchReleasedSource
linuxKernel @ 5.10.253osv

Patches are aggregated from vendor advisories (Red Hat, Microsoft, Cisco, GitHub) and package ecosystems (OSV, GHSA). Multiple rows for the same upstream release have been deduplicated.

Weakness Classification(1)

MITRE Common Weakness Enumeration — the root-cause categories this CVE belongs to.

Data Freshness Timeline

(refreshed 6× in last 7d / 29× in last 30d)

Each row is a source pipeline that fetched or updated this CVE on that date, with what changed. For example, "NVD update" means NVD published or revised its analysis for this CVE; "MITRE cvelistV5" means we ingested or refreshed it from the CNA feed. Most recent first.

  1. 2026-07-23 14:18 UTCEPSS rescore
  2. 2026-07-23 03:14 UTCEG score recompute
  3. 2026-07-22 14:08 UTCEPSS rescore
  4. 2026-07-20 17:08 UTCEPSS rescore
  5. 2026-07-19 14:31 UTCEPSS rescore
  6. 2026-07-18 10:04 UTCEPSS rescore
  7. 2026-07-16 17:03 UTCEPSS rescore
  8. 2026-07-16 05:23 UTCOSV refresh
  9. 2026-07-15 16:57 UTCEPSS rescore
  10. 2026-07-13 22:30 UTCEPSS rescore
  11. 2026-07-12 05:46 UTCEPSS rescore
  12. 2026-07-11 08:27 UTCEPSS rescore
  13. 2026-07-09 19:10 UTCEPSS rescore
  14. 2026-07-08 15:16 UTCEPSS rescore
  15. 2026-07-07 13:46 UTCEPSS rescore
  16. 2026-07-06 16:27 UTCEPSS rescore
  17. 2026-07-06 02:23 UTCEPSS rescore
  18. 2026-07-05 02:30 UTCEPSS rescore
  19. 2026-07-04 06:31 UTCEPSS rescore
  20. 2026-07-01 15:06 UTCEPSS rescore
  21. 2026-06-29 14:06 UTCEPSS rescore
  22. 2026-06-28 14:07 UTCEPSS rescore
  23. 2026-06-28 04:54 UTCGHSA enrichment
  24. 2026-06-27 03:08 UTCEPSS rescore
  25. 2026-06-26 21:24 UTCGHSA enrichment
Show 63 more
  1. 2026-06-25 13:49 UTCEPSS rescore
  2. 2026-06-25 13:49 UTCEPSS rescore
  3. 2026-06-24 14:05 UTCEPSS rescore
  4. 2026-06-23 21:33 UTCEPSS rescore
  5. 2026-06-21 01:59 UTCEPSS rescore
  6. 2026-06-19 19:25 UTCEPSS rescore
  7. 2026-06-18 17:52 UTCEPSS rescore
  8. 2026-06-18 17:52 UTCEPSS rescore
  9. 2026-06-17 17:53 UTCEPSS rescore
  10. 2026-06-16 08:25 UTCGHSA enrichment
  11. 2026-06-15 17:49 UTCEPSS rescore
  12. 2026-06-15 03:59 UTCGHSA enrichment
  13. 2026-06-14 02:49 UTCGHSA enrichment
  14. 2026-06-13 23:00 UTCEPSS rescore
  15. 2026-06-12 23:12 UTCEPSS rescore
  16. 2026-06-12 23:12 UTCEPSS rescore
  17. 2026-06-12 01:37 UTCGHSA enrichment
  18. 2026-06-11 14:00 UTCEPSS rescore
  19. 2026-06-11 00:30 UTCGHSA enrichment
  20. 2026-06-10 22:18 UTCEPSS rescore
  21. 2026-06-10 13:22 UTCEPSS rescore
  22. 2026-06-10 13:22 UTCEPSS rescore
  23. 2026-06-09 22:44 UTCGHSA enrichment
  24. 2026-06-08 20:42 UTCGHSA enrichment
  25. 2026-06-08 14:17 UTCEPSS rescore
  26. 2026-06-08 14:17 UTCEPSS rescore
  27. 2026-06-07 15:25 UTCEPSS rescore
  28. 2026-06-07 15:25 UTCEPSS rescore
  29. 2026-06-07 14:29 UTCGHSA enrichment
  30. 2026-06-06 13:47 UTCEPSS rescore
  31. 2026-06-06 13:47 UTCEPSS rescore
  32. 2026-06-06 13:22 UTCGHSA enrichment
  33. 2026-06-05 22:47 UTCEPSS rescore
  34. 2026-06-05 12:15 UTCGHSA enrichment
  35. 2026-06-05 06:10 UTCEPSS rescore
  36. 2026-06-05 06:10 UTCEPSS rescore
  37. 2026-06-04 13:12 UTCEPSS rescore
  38. 2026-06-04 13:12 UTCEPSS rescore
  39. 2026-06-04 11:08 UTCGHSA enrichment
  40. 2026-06-03 09:59 UTCGHSA enrichment
  41. 2026-06-02 20:13 UTCEPSS rescore
  42. 2026-06-02 08:52 UTCGHSA enrichment
  43. 2026-06-01 13:52 UTCEPSS rescore
  44. 2026-06-01 13:52 UTCEPSS rescore
  45. 2026-06-01 07:45 UTCEG score recompute 4.70
  46. 2026-06-01 07:45 UTCGHSA enrichment
  47. 2026-05-31 22:30 UTCEPSS rescore
  48. 2026-05-31 22:30 UTCEPSS rescore
  49. 2026-05-31 00:16 UTCEPSS rescore
  50. 2026-05-31 00:16 UTCEPSS rescore
  51. 2026-05-29 13:44 UTCEPSS rescore
  52. 2026-05-29 13:44 UTCEPSS rescore
  53. 2026-05-28 13:44 UTCEPSS rescore
  54. 2026-05-28 13:44 UTCEPSS rescore
  55. 2026-05-27 13:40 UTCEPSS rescore
  56. 2026-05-27 13:40 UTCEPSS rescore
  57. 2026-05-26 13:44 UTCEPSS rescore
  58. 2026-05-26 07:18 UTCEPSS rescore
  59. 2026-05-21 22:43 UTCEPSS rescore
  60. 2026-05-20 22:38 UTCEPSS rescore
  61. 2026-05-20 13:38 UTCEG score recompute
  62. 2026-05-20 13:38 UTCGHSA enrichment
  63. 2026-05-20 11:22 UTCEPSS rescore

Frequently asked(5)

What is CVE-2026-43420?
CVE-2026-43420 is a medium vulnerability published on May 8, 2026. In the Linux kernel, the following vulnerability has been resolved: ceph: fix i_nlink underrun during async unlink During async unlink, we drop the i_nlink counter before we receive the completion (that will eventually update the i_nlink) because "we assume that the unlink will succeed". That is…
When was CVE-2026-43420 disclosed?
CVE-2026-43420 was first published in the National Vulnerability Database on May 8, 2026, with the most recent update on May 22, 2026. EchelonGraph re-ingests CVE updates from NVD on a 2-hour cycle, so this page reflects the latest published state.
Is CVE-2026-43420 actively exploited?
CVE-2026-43420 is not currently on CISA's Known Exploited Vulnerabilities catalog. FIRST EPSS estimates a 0.7% percentile likelihood of exploitation in the next 30 days — higher percentiles indicate greater predicted risk.
What is the CVSS score of CVE-2026-43420?
CVE-2026-43420 has a CVSS v3 base score of 4.7 (NVD).
How do I remediate CVE-2026-43420?
Patch to the fixed version published by the affected vendor. Where vendor advisories exist for CVE-2026-43420, EchelonGraph cross-links them in the Vendor Advisories panel below — those typically contain the canonical remediation steps, fixed version numbers, and any vendor-specific mitigations.

Dependency Blast Radius

Explore the affected products and dependency analysis for CVE-2026-43420

Explore →

Is Your Infrastructure Affected by CVE-2026-43420?

EchelonGraph automatically scans your cloud infrastructure and maps CVE exposure using blast radius analysis.