CVE Catalog

CVE-2026-98645

Low risk· EPSS 8%
Published: Updated: Translated: NVD NIST

Exploitation Probability (EPSS)

Low risk
0.19%

8th percentile - higher than 8% of all known CVEs

Summary

In the Linux kernel, the HID winwing driver has a use-after-free in force feedback teardown. winwing_init_ff() passes driver private data allocated with devm_kzalloc() as the effect context to input_ff_create_memless(), and the force feedback core frees that pointer with kfree(), which is an invalid free leading to a double free and slab corruption. This triggers on unbind, rmmod, hot-unplug, and system suspend.

Risk Assessment

The double free and slab corruption can lead to kernel crashes, privilege escalation, or arbitrary code execution. It occurs during common operations such as device unplug or system suspend.

Recommendation

Update the Linux kernel to a version containing the fix that passes NULL as the memless context and fetches driver data from the input device. Until then, avoid unplugging and replugging affected winwing HID devices.

Other vulnerabilities in Linux kernel

See all
Original NVD description (English source)

In the Linux kernel, the following vulnerability has been resolved: HID: winwing: fix use-after-free in force feedback teardown winwing_init_ff() passes the driver's private data, allocated with devm_kzalloc() in winwing_probe(), as the effect context to input_ff_create_memless(). The memoryless force-feedback core takes ownership of that pointer and frees it with kfree() from input_ff_destroy() (ml_ff_destroy()) when the input device is destroyed. Freeing a devm-managed allocation with kfree() is an invalid free, and the same object is then released again by devres when the HID device is torn down, a double free. As the allocation also embeds the LED class devices, their timers and work item live on freed memory and the slab gets corrupted. This triggers on unbind, rmmod, hot-unplug and on system suspend, where the firmware cache walks the now-corrupt devres list. KASAN reports: BUG: KASAN: invalid-free in input_ff_destroy Allocated by task N: winwing_probe Pass NULL as the memless context instead and fetch the driver data from the input device in winwing_play_effect(): the HID core already stores the hid_device as the input device's drvdata. The force-feedback core then owns nothing that it must not free.

Vulnerability data from NVD (NIST) · CISA KEV · EPSS