CVE-2026-98645 (GCVE-0-2026-98645)
Vulnerability from cvelistv5
Published
2026-10-18 15:20
Modified
2026-10-19 09:23
Severity ?
VLAI Severity ?
EPSS score ?
Summary
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.
References
Impacted products
{
"containers": {
"cna": {
"affected": [
{
"defaultStatus": "unaffected",
"product": "Linux",
"programFiles": [
"drivers/hid/hid-winwing.c"
],
"repo": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git",
"vendor": "Linux",
"versions": [
{
"lessThan": "2b25f11ec52ea0a82334d5b83ee321f6b0a35923",
"status": "affected",
"version": "42d020b54edc57d03749bed75976f1e962a9fbfa",
"versionType": "git"
},
{
"lessThan": "a1a5ad37e50ceb192c07ac7e2d7143638cd4d110",
"status": "affected",
"version": "42d020b54edc57d03749bed75976f1e962a9fbfa",
"versionType": "git"
}
]
},
{
"defaultStatus": "affected",
"product": "Linux",
"programFiles": [
"drivers/hid/hid-winwing.c"
],
"repo": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git",
"vendor": "Linux",
"versions": [
{
"status": "affected",
"version": "7.1"
},
{
"lessThan": "7.1",
"status": "unaffected",
"version": "0",
"versionType": "semver"
},
{
"lessThanOrEqual": "7.2.*",
"status": "unaffected",
"version": "7.2.9",
"versionType": "semver"
},
{
"lessThanOrEqual": "*",
"status": "unaffected",
"version": "7.3",
"versionType": "original_commit_for_fix"
}
]
}
],
"cpeApplicability": [
{
"nodes": [
{
"cpeMatch": [
{
"criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
"versionEndExcluding": "7.2.9",
"versionStartIncluding": "7.1",
"vulnerable": true
},
{
"criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
"versionEndExcluding": "7.3",
"versionStartIncluding": "7.1",
"vulnerable": true
}
],
"negate": false,
"operator": "OR"
}
]
}
],
"descriptions": [
{
"lang": "en",
"value": "In the Linux kernel, the following vulnerability has been resolved:\n\nHID: winwing: fix use-after-free in force feedback teardown\n\nwinwing_init_ff() passes the driver\u0027s private data, allocated with\ndevm_kzalloc() in winwing_probe(), as the effect context to\ninput_ff_create_memless(). The memoryless force-feedback core takes\nownership of that pointer and frees it with kfree() from\ninput_ff_destroy() (ml_ff_destroy()) when the input device is\ndestroyed.\n\nFreeing a devm-managed allocation with kfree() is an invalid free, and\nthe same object is then released again by devres when the HID device is\ntorn down, a double free. As the allocation also embeds the LED class\ndevices, their timers and work item live on freed memory and the slab\ngets corrupted. This triggers on unbind, rmmod, hot-unplug and on system\nsuspend, where the firmware cache walks the now-corrupt devres list.\nKASAN reports:\n\n BUG: KASAN: invalid-free in input_ff_destroy\n Allocated by task N:\n winwing_probe\n\nPass NULL as the memless context instead and fetch the driver data from\nthe input device in winwing_play_effect(): the HID core already stores\nthe hid_device as the input device\u0027s drvdata. The force-feedback core\nthen owns nothing that it must not free."
}
],
"providerMetadata": {
"dateUpdated": "2026-10-19T09:23:14.926Z",
"orgId": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
"shortName": "Linux"
},
"references": [
{
"url": "https://git.kernel.org/stable/c/2b25f11ec52ea0a82334d5b83ee321f6b0a35923"
},
{
"url": "https://git.kernel.org/stable/c/a1a5ad37e50ceb192c07ac7e2d7143638cd4d110"
}
],
"title": "HID: winwing: fix use-after-free in force feedback teardown",
"x_generator": {
"engine": "bippy-1.2.0"
}
}
},
"cveMetadata": {
"assignerOrgId": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
"assignerShortName": "Linux",
"cveId": "CVE-2026-98645",
"datePublished": "2026-10-18T15:20:16.676Z",
"dateReserved": "2026-09-25T10:25:14.362Z",
"dateUpdated": "2026-10-19T09:23:14.926Z",
"state": "PUBLISHED"
},
"dataType": "CVE_RECORD",
"dataVersion": "5.2"
}
Loading…
Loading…
Sightings
| Author | Source | Type | Date |
|---|
Nomenclature
- Seen: The vulnerability was mentioned, discussed, or seen somewhere by the user.
- Confirmed: The vulnerability is confirmed from an analyst perspective.
- Published Proof of Concept: A public proof of concept is available for this vulnerability.
- Exploited: This vulnerability was exploited and seen by the user reporting the sighting.
- Patched: This vulnerability was successfully patched by the user reporting the sighting.
- Not exploited: This vulnerability was not exploited or seen by the user reporting the sighting.
- Not confirmed: The user expresses doubt about the veracity of the vulnerability.
- Not patched: This vulnerability was not successfully patched by the user reporting the sighting.
Loading…
Loading…