vc_screen: reload vc pointer before if (ret) in vcs_write() to avoid UAF
Summary
| CVE | CVE-2026-98840 |
| State | PUBLISHED |
| Assigner | Linux |
| Source Priority | CVE Program / NVD first with legacy fallback |
| Published | 2026-10-18 16:17:38 UTC |
| Updated | 2026-10-21 13:21:49 UTC |
| Description | In the Linux kernel, the following vulnerability has been resolved:
vc_screen: reload vc pointer before if (ret) in vcs_write() to avoid UAF
The reload of 'vc' added by commit 8fb9ea65c9d1 ("vc_screen: reload load
of struct vc_data pointer in vcs_write() to avoid UAF") sits after the
'if (ret)' block, so the copy-failure break path exits the loop without
reloading vc. If the vc was kfree()'d via vc_port_destruct during the
unlocked copy_from_user() window, the post-loop
'if (written && vc) vcs_scr_updated(vc)' is reached with a stale
non-NULL vc. The '&& vc' guard from commit a287620312dc ("vc_screen:
fix null-ptr-deref in vcs_notifier() during concurrent vcs_write") only
handles the NULL case, not this stale-non-NULL case; vcs_notifier() then
reads param->vc->vc_num from freed memory:
BUG: KASAN: slab-use-after-free in vcs_notifier+0x7c/0xd0
Read of size 2 at addr ffff888007149190
Call Trace:
vcs_notifier+0x7c/0xd0
atomic_notifier_call_chain+0x70/0xa0
vcs_scr_updated+0x77/0xa0
vcs_write+0x71b/0x7e0
Allocated by task: vc_allocate -> con_install -> tty_open
Freed by task: kfree <- vt_ioctl (VT_DISALLOCATE -> vc_port_destruct)
Move the reload to immediately after console_lock(), before 'if (ret)',
so every break path below passes a fresh vc to the post-loop
vcs_scr_updated(). |
Vendor Declared Affected Products
| Source | Vendor | Product | Version | Platforms |
|---|
| CNA |
Linux |
Linux |
affected 8232fca738011ca2ec865b46ec721d1796dc0580 c073d01f6f5367c3a4f07efd507274ed0d03acd0 git |
Not specified |
| CNA |
Linux |
Linux |
affected 73049768ad57145acd337102c5aa3c788e6642c8 1485a3dd97ab1af2605243cabe6b604546d46dd1 git |
Not specified |
| CNA |
Linux |
Linux |
affected 7cc3dd79777f6ae4625ec37e84dd18a26dc88bde 233a2e190b12884d186027d0b86d43a48799b69c git |
Not specified |
| CNA |
Linux |
Linux |
affected a287620312dc6dcb9a093417a0e589bf30fcf38a 9dfcadc5e003fb250dd471db90144bd5366140e9 git |
Not specified |
| CNA |
Linux |
Linux |
affected a287620312dc6dcb9a093417a0e589bf30fcf38a 226bd5603371cd9f6642cbb9e9a677f445de3530 git |
Not specified |
| CNA |
Linux |
Linux |
affected 43a6281790273c1b0a9ab76609ff0245b968f1e6 git |
Not specified |
| CNA |
Linux |
Linux |
affected b6bbb85cf45bf0b070e741997fe0af3a772c5ad5 git |
Not specified |
| CNA |
Linux |
Linux |
affected ff4806202749a51938236214adc0281481a57366 git |
Not specified |
| CNA |
Linux |
Linux |
affected 74be188eb2dc1c99d63986167b9a67d415fe7326 git |
Not specified |
| CNA |
Linux |
Linux |
affected 09a43e81279b8da15526da09877134b8bcf618b0 git |
Not specified |
| CNA |
Linux |
Linux |
affected 6.6.144 6.6.160 semver |
Not specified |
| CNA |
Linux |
Linux |
affected 6.12.95 6.12.113 semver |
Not specified |
| CNA |
Linux |
Linux |
affected 6.18.37 6.18.56 semver |
Not specified |
| CNA |
Linux |
Linux |
affected 5.10.260 5.11 semver |
Not specified |
| CNA |
Linux |
Linux |
affected 5.15.211 5.16 semver |
Not specified |
| CNA |
Linux |
Linux |
affected 6.1.177 6.2 semver |
Not specified |
| CNA |
Linux |
Linux |
affected 7.0.14 7.1 semver |
Not specified |
| CNA |
Linux |
Linux |
affected 7.1.2 7.2 semver |
Not specified |
| CNA |
Linux |
Linux |
affected 7.2 |
Not specified |
| CNA |
Linux |
Linux |
unaffected 7.2 semver |
Not specified |
| CNA |
Linux |
Linux |
unaffected 6.6.160 6.6.* semver |
Not specified |
| CNA |
Linux |
Linux |
unaffected 6.12.113 6.12.* semver |
Not specified |
| CNA |
Linux |
Linux |
unaffected 6.18.56 6.18.* semver |
Not specified |
| CNA |
Linux |
Linux |
unaffected 7.2.10 7.2.* semver |
Not specified |
| CNA |
Linux |
Linux |
unaffected 7.3 * original_commit_for_fix |
Not specified |
References
| Reference | Source | Link | Tags |
|---|
| git.kernel.org/stable/c/1485a3dd97ab1af2605243cabe6b604546d46dd1 |
416baaa9-dc9f-4396-8d5f-8c081fb06d67 |
git.kernel.org |
|
| git.kernel.org/stable/c/226bd5603371cd9f6642cbb9e9a677f445de3530 |
416baaa9-dc9f-4396-8d5f-8c081fb06d67 |
git.kernel.org |
|
| git.kernel.org/stable/c/9dfcadc5e003fb250dd471db90144bd5366140e9 |
416baaa9-dc9f-4396-8d5f-8c081fb06d67 |
git.kernel.org |
|
| git.kernel.org/stable/c/233a2e190b12884d186027d0b86d43a48799b69c |
416baaa9-dc9f-4396-8d5f-8c081fb06d67 |
git.kernel.org |
|
| git.kernel.org/stable/c/c073d01f6f5367c3a4f07efd507274ed0d03acd0 |
416baaa9-dc9f-4396-8d5f-8c081fb06d67 |
git.kernel.org |
|
| CVE Program record |
CVE.ORG |
www.cve.org |
canonical |
| NVD vulnerability detail |
NVD |
nvd.nist.gov |
canonical, analysis |
No vendor comments have been submitted for this CVE.
There are currently no legacy QID mappings associated with this CVE.