CVE-2026-64363 json
HID: appleir: fix UAF on pending key_up_timer in remove()
published 2026-07-25 3 mo ago modified 2026-11-06 2 d ago also EUVD-2026-48907
- cvss
- 7.8
- version 3.1, NVD
- cisa kev
- Not listed
- not in CISA's catalog
- epss
- 0.2%
- EPSS 0.2% chance of exploitation in 30 days, percentile 6%
- public exploits
- 0
- none known
Summary
In the Linux kernel, the following vulnerability has been resolved:
HID: appleir: fix UAF on pending key_up_timer in remove()
appleir_remove() runs hid_hw_stop() before timer_delete_sync(). hid_hw_stop() synchronously unregisters the HID input device via hid_disconnect() -> hidinput_disconnect() -> input_unregister_device(), which drops the last reference and frees the underlying input_dev when no userspace handle holds it open.
key_up_tick() reads appleir->input_dev and calls input_report_key() / input_sync() on it. The timer is armed from appleir_raw_event() with a HZ/8 (~125 ms) timeout on every keydown and key-repeat report. If a key was pressed shortly before the device is disconnected, the timer can fire after hid_hw_stop() has freed input_dev but before the teardown drains it.
A simple reorder is not sufficient. Putting the timer drain first still leaves a window where a USB URB completion (raw_event) running during hid_hw_stop() can call mod_timer() and re-arm the timer, which then fires after hidinput_disconnect() has freed input_dev. The same URB-completion window also lets raw_event() reach key_up(), key_down() and battery_flat() directly, all of which dereference appleir->input_dev.
Introduce a 'removing' flag on struct appleir, gated by the existing spinlock. appleir_remove() sets the flag under the lock and then shuts down the timer with timer_shutdown_sync(), which both drains any in-flight callback and permanently disables further mod_timer() calls. appleir_raw_event() and key_up_tick() bail out early if the flag is set, so no path can arm or run the timer, or dereference appleir->input_dev, after remove() has started tearing down.
The keyrepeat and flatbattery branches of appleir_raw_event() previously called into the input layer without holding the spinlock; take it now so the flag check is well-defined. This incidentally closes a pre-existing read-side race on appleir->current_key in the keyrepeat branch.
This bug is structurally a sibling of commit 4db2af929279 ("HID: appletb-kbd: fix UAF in inactivity-timer cleanup path") and has been present since the driver was introduced.
Patch / fix
- Linux Linux 5.10.261, 5.15.212, 6.1.178, 6.6.145, 6.12.97, 6.18.39, 7.1.4, 7.2
- linux Debian 12 6.1.180-1
- linux Debian 13 6.12.100-1
- linux Debian 14 7.1.4-1
- linux-6.12 Debian 12 6.12.100-1~deb12u1
debian advisories DEBIAN-CVE-2026-64363
- linux Ubuntu 22.04 LTS 5.15.0-198.208
- linux Ubuntu 24.04 LTS 6.8.0-147.147
- linux Ubuntu 26.04 LTS 7.0.0-31.31
- linux-aws Ubuntu 22.04 LTS 5.15.0-1117.124
- linux-aws Ubuntu 24.04 LTS 6.8.0-1067.70
- linux-aws Ubuntu 26.04 LTS 7.0.0-1012.12
- linux-gcp Ubuntu 22.04 LTS 5.15.0-1118.128
- linux-gcp Ubuntu 24.04 LTS 6.8.0-1071.79
ubuntu advisories UBUNTU-CVE-2026-64363
Ubuntu security data © Canonical Ltd., from https://github.com/canonical/ubuntu-security-notices via OSV; changed: normalised to fixed package versions per release. CC BY-SA 4.0
- kernel-source openSUSE Tumbleweed 7.1.7-1.1
opensuse advisories openSUSE-SU-2026:11476-1
- git.kernel.org/stable/c/89ef67359672bf4cd6921524e39f61648fe38c0f commit
- git.kernel.org/stable/c/3d30a0bb0e79621ae921b487835c56198adfafa3 commit
- git.kernel.org/stable/c/37a52c61d4f78153c38ae1f7491dfcc8ac828dcf commit
- git.kernel.org/stable/c/05e3decc55d1deca9410e0eb36466651fcbe57a5 commit
- git.kernel.org/stable/c/3755f6e25776b8b12ddf062f9b573f05090e4034 commit
- git.kernel.org/stable/c/b363d964ca829c1761c9f04188dfa28f90b0f2d4 commit
- git.kernel.org/stable/c/6b0838e86da88b1d3bff86f19761ff25af73eaca commit
- git.kernel.org/stable/c/75fe87e19d8aff81eb2c64d15d244ab8da4de945 commit
Vendor advisories
What the vendors themselves say about their products: affected, fixed or not affected, and what to do.
red hat product security vex CVE-2026-64363 updated cvss 5.5
kernel: HID: appleir: fix UAF on pending key_up_timer in remove()
-
Red Hat Enterprise Linux 7 perf, kernel, bpftool, kernel-rt, python-perf, kernel-kdump, +8 more Red Hat Enterprise Linux 8 perf, kernel, bpftool, kernel-rt, kernel-core, kernel-tools, +29 more Red Hat Enterprise Linux 9 rv, perf, rtla, kernel, bpftool, libperf, +83 more Red Hat Enterprise Linux 10 kernelaffected: workaround, no fix available “Fix deferred”
-
Red Hat Enterprise Linux 6 perf, kernel, python-perf, kernel-kdump, kernel-firmware, kernel-bootwrapper, +1 morenot affected: vulnerable code not present
Red Hat CSAF VEX © Red Hat, Inc., from https://security.access.redhat.com/data/csaf/v2/vex/; changed: reduced to product statuses and remediations. CC BY 4.0 · csaf
CISA SSVC
- Exploitation
- none
- Automatable
- no
- Technical impact
- partial
- Assessed
- 2 d ago
Exploit prediction
0.17% chance of exploitation in the next 30 days, higher than 6% of all scored CVEs (FIRST EPSS, 2026-11-08).
CVSS scores
| assigned by | version | score | vector |
|---|---|---|---|
| NVD | 3.1 | 7.8 | CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H |
Affected products
- Linux Linux
Classification
- Weakness
-
- CWE-416 Use After Free
- Technology feeds
References
-
git.kernel.org
/stable/c/89ef67359672bf4cd6921524e39f61648fe38c0f
patch
-
git.kernel.org
/stable/c/3d30a0bb0e79621ae921b487835c56198adfafa3
patch
-
git.kernel.org
/stable/c/37a52c61d4f78153c38ae1f7491dfcc8ac828dcf
patch
-
git.kernel.org
/stable/c/05e3decc55d1deca9410e0eb36466651fcbe57a5
patch
-
git.kernel.org
/stable/c/3755f6e25776b8b12ddf062f9b573f05090e4034
patch
-
git.kernel.org
/stable/c/b363d964ca829c1761c9f04188dfa28f90b0f2d4
patch
-
git.kernel.org
/stable/c/6b0838e86da88b1d3bff86f19761ff25af73eaca
patch
-
git.kernel.org
/stable/c/75fe87e19d8aff81eb2c64d15d244ab8da4de945
patch
Sources
- CVE List CVE-2026-64363
- NVD CVE-2026-64363
Fencer Vulns keeps one entry per vulnerability: the CVE id wins, then GHSA, and records that alias each other are merged, except that two CVEs always keep separate entries. The same data is available as JSON.