{"id":"CVE-2026-98501","state":"PUBLISHED","title":"HID: alps: fix use-after-free on input2 registration failure","description":"In the Linux kernel, the following vulnerability has been resolved:\n\nHID: alps: fix use-after-free on input2 registration failure\n\nalps_input_configured() stores data->input2 before calling\ninput_register_device().  If registration fails, input_free_device()\nfrees the input device but data->input2 still points to the freed memory.\nalps_input_configured() calls hid_hw_open() before allocating input2, so\nURBs are already active and raw_event can fire during the failure window.\nA U1_SP_ABSOLUTE_REPORT_ID report arriving then causes u1_raw_event()\nto dereference the freed data->input2 -> use-after-free.\n\nFix by only storing input2 into drvdata after successful registration\nand adding a NULL guard in the raw_event path.","publishedAt":"2026-10-18T15:16:46.205Z","updatedAt":"2026-10-24T14:09:09.356Z","severity":{"score":7.1,"label":"High","version":"3.1","vector":"CVSS:3.1/AV:A/AC:H/PR:N/UI:R/S:U/C:H/I:H/A:H","source":"Linux"},"assigner":"Linux","products":["Linux Linux"],"affected":[{"vendor":"Linux","product":"Linux","defaultStatus":"unaffected","versions":[{"version":"2562756dde550901c224e3805102bdfc17e7d13a","status":"affected","lessThan":"64f824dccfd316fd3db8ea1cc4e8a76ad6a02740","versionType":"git"},{"version":"2562756dde550901c224e3805102bdfc17e7d13a","status":"affected","lessThan":"2e55d76e6e8a756f6d87c241de975599f82b02fa","versionType":"git"},{"version":"2562756dde550901c224e3805102bdfc17e7d13a","status":"affected","lessThan":"ef8ca5bb4c8b9696f38b1bebce1c851baa02b77b","versionType":"git"},{"version":"2562756dde550901c224e3805102bdfc17e7d13a","status":"affected","lessThan":"5a8ad63158165bacd6a1d7420e0fe5364c913b06","versionType":"git"},{"version":"2562756dde550901c224e3805102bdfc17e7d13a","status":"affected","lessThan":"47e5e177e9e4e10da6f2759d5ce8d049e33efdc4","versionType":"git"},{"version":"2562756dde550901c224e3805102bdfc17e7d13a","status":"affected","lessThan":"925da1d2a24787f24872de13a4680437c54de179","versionType":"git"},{"version":"2562756dde550901c224e3805102bdfc17e7d13a","status":"affected","lessThan":"443f6b93442b10b972a16f57ceaaea75b77892b6","versionType":"git"},{"version":"2562756dde550901c224e3805102bdfc17e7d13a","status":"affected","lessThan":"d3aba3442798ce4a4c8ce3104d7b286d61e605f9","versionType":"git"}],"repo":"https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git","programFiles":["drivers/hid/hid-alps.c"]},{"vendor":"Linux","product":"Linux","defaultStatus":"affected","versions":[{"version":"4.8","status":"affected"},{"version":"0","status":"unaffected","lessThan":"4.8","versionType":"semver"},{"version":"5.10.271","status":"unaffected","lessThanOrEqual":"5.10.*","versionType":"semver"},{"version":"5.15.222","status":"unaffected","lessThanOrEqual":"5.15.*","versionType":"semver"},{"version":"6.1.189","status":"unaffected","lessThanOrEqual":"6.1.*","versionType":"semver"},{"version":"6.6.158","status":"unaffected","lessThanOrEqual":"6.6.*","versionType":"semver"},{"version":"6.12.112","status":"unaffected","lessThanOrEqual":"6.12.*","versionType":"semver"},{"version":"6.18.55","status":"unaffected","lessThanOrEqual":"6.18.*","versionType":"semver"},{"version":"7.2.9","status":"unaffected","lessThanOrEqual":"7.2.*","versionType":"semver"},{"version":"7.3","status":"unaffected","lessThanOrEqual":"*","versionType":"original_commit_for_fix"}],"repo":"https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git","programFiles":["drivers/hid/hid-alps.c"]}],"references":["https://git.kernel.org/stable/c/64f824dccfd316fd3db8ea1cc4e8a76ad6a02740","https://git.kernel.org/stable/c/2e55d76e6e8a756f6d87c241de975599f82b02fa","https://git.kernel.org/stable/c/ef8ca5bb4c8b9696f38b1bebce1c851baa02b77b","https://git.kernel.org/stable/c/5a8ad63158165bacd6a1d7420e0fe5364c913b06","https://git.kernel.org/stable/c/47e5e177e9e4e10da6f2759d5ce8d049e33efdc4","https://git.kernel.org/stable/c/925da1d2a24787f24872de13a4680437c54de179","https://git.kernel.org/stable/c/443f6b93442b10b972a16f57ceaaea75b77892b6","https://git.kernel.org/stable/c/d3aba3442798ce4a4c8ce3104d7b286d61e605f9"],"weaknesses":[],"ingestedAt":"2026-10-29T20:13:43.249Z","source":{"repository":"CVEProject/cvelistV5","path":"cves/2026/98xxx/CVE-2026-98501.json","commit":"556c9d3a8cd17e218bb8e452ba7cd619a384ff47"},"raw":{"dataType":"CVE_RECORD","dataVersion":"5.2","cveMetadata":{"cveId":"CVE-2026-98501","state":"PUBLISHED","datePublished":"2026-10-18T15:16:46.205Z","dateUpdated":"2026-10-24T14:09:09.356Z","assignerShortName":"Linux","assignerOrgId":"416baaa9-dc9f-4396-8d5f-8c081fb06d67","dateReserved":"2026-09-25T10:25:14.353Z"},"containers":{"cna":{"title":"HID: alps: fix use-after-free on input2 registration failure","descriptions":[{"lang":"en","value":"In the Linux kernel, the following vulnerability has been resolved:\n\nHID: alps: fix use-after-free on input2 registration failure\n\nalps_input_configured() stores data->input2 before calling\ninput_register_device().  If registration fails, input_free_device()\nfrees the input device but data->input2 still points to the freed memory.\nalps_input_configured() calls hid_hw_open() before allocating input2, so\nURBs are already active and raw_event can fire during the failure window.\nA U1_SP_ABSOLUTE_REPORT_ID report arriving then causes u1_raw_event()\nto dereference the freed data->input2 -> use-after-free.\n\nFix by only storing input2 into drvdata after successful registration\nand adding a NULL guard in the raw_event path."}],"affected":[{"vendor":"Linux","product":"Linux","defaultStatus":"unaffected","versions":[{"version":"2562756dde550901c224e3805102bdfc17e7d13a","status":"affected","lessThan":"64f824dccfd316fd3db8ea1cc4e8a76ad6a02740","versionType":"git"},{"version":"2562756dde550901c224e3805102bdfc17e7d13a","status":"affected","lessThan":"2e55d76e6e8a756f6d87c241de975599f82b02fa","versionType":"git"},{"version":"2562756dde550901c224e3805102bdfc17e7d13a","status":"affected","lessThan":"ef8ca5bb4c8b9696f38b1bebce1c851baa02b77b","versionType":"git"},{"version":"2562756dde550901c224e3805102bdfc17e7d13a","status":"affected","lessThan":"5a8ad63158165bacd6a1d7420e0fe5364c913b06","versionType":"git"},{"version":"2562756dde550901c224e3805102bdfc17e7d13a","status":"affected","lessThan":"47e5e177e9e4e10da6f2759d5ce8d049e33efdc4","versionType":"git"},{"version":"2562756dde550901c224e3805102bdfc17e7d13a","status":"affected","lessThan":"925da1d2a24787f24872de13a4680437c54de179","versionType":"git"},{"version":"2562756dde550901c224e3805102bdfc17e7d13a","status":"affected","lessThan":"443f6b93442b10b972a16f57ceaaea75b77892b6","versionType":"git"},{"version":"2562756dde550901c224e3805102bdfc17e7d13a","status":"affected","lessThan":"d3aba3442798ce4a4c8ce3104d7b286d61e605f9","versionType":"git"}],"repo":"https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git","programFiles":["drivers/hid/hid-alps.c"]},{"vendor":"Linux","product":"Linux","defaultStatus":"affected","versions":[{"version":"4.8","status":"affected"},{"version":"0","status":"unaffected","lessThan":"4.8","versionType":"semver"},{"version":"5.10.271","status":"unaffected","lessThanOrEqual":"5.10.*","versionType":"semver"},{"version":"5.15.222","status":"unaffected","lessThanOrEqual":"5.15.*","versionType":"semver"},{"version":"6.1.189","status":"unaffected","lessThanOrEqual":"6.1.*","versionType":"semver"},{"version":"6.6.158","status":"unaffected","lessThanOrEqual":"6.6.*","versionType":"semver"},{"version":"6.12.112","status":"unaffected","lessThanOrEqual":"6.12.*","versionType":"semver"},{"version":"6.18.55","status":"unaffected","lessThanOrEqual":"6.18.*","versionType":"semver"},{"version":"7.2.9","status":"unaffected","lessThanOrEqual":"7.2.*","versionType":"semver"},{"version":"7.3","status":"unaffected","lessThanOrEqual":"*","versionType":"original_commit_for_fix"}],"repo":"https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git","programFiles":["drivers/hid/hid-alps.c"]}],"references":[{"url":"https://git.kernel.org/stable/c/64f824dccfd316fd3db8ea1cc4e8a76ad6a02740"},{"url":"https://git.kernel.org/stable/c/2e55d76e6e8a756f6d87c241de975599f82b02fa"},{"url":"https://git.kernel.org/stable/c/ef8ca5bb4c8b9696f38b1bebce1c851baa02b77b"},{"url":"https://git.kernel.org/stable/c/5a8ad63158165bacd6a1d7420e0fe5364c913b06"},{"url":"https://git.kernel.org/stable/c/47e5e177e9e4e10da6f2759d5ce8d049e33efdc4"},{"url":"https://git.kernel.org/stable/c/925da1d2a24787f24872de13a4680437c54de179"},{"url":"https://git.kernel.org/stable/c/443f6b93442b10b972a16f57ceaaea75b77892b6"},{"url":"https://git.kernel.org/stable/c/d3aba3442798ce4a4c8ce3104d7b286d61e605f9"}],"metrics":[{"cvssV3_1":{"version":"3.1","vectorString":"CVSS:3.1/AV:A/AC:H/PR:N/UI:R/S:U/C:H/I:H/A:H","baseScore":7.1,"baseSeverity":"HIGH"},"scenarios":[{"lang":"en","value":"AV:A - `alps_id` uses `HID_BUS_ANY`, so a Bluetooth HIDP peer can bind `hid-alps`; its L2CAP ID-6 report follows `hidp_process_report()->hid_input_report()->alps_raw_event()->u1_raw_event()`, which dereferences the pointer left stale by `alps_input_configured()`.\nAC:H - The peer controls stick support and ID-6 report timing, and asynchronous `hidp_session_dev_work()` permits concurrency, but it cannot force `input_register_device(input2)` to fail; that requires a host-side allocation, device-model, or lock-interruption failure.\nPR:N - After the HIDP session is established, `hidp_session_run()` passes peer-supplied interrupt-channel reports to `hid_input_report()` without any per-report host privilege check; the nearby peer needs no kernel credential.\nUI:R - The victim must pair or connect the attacker's spoofed ALPS Bluetooth HID peer so BlueZ establishes the HIDP session and `hid-alps` probes it; subsequent triggering reports need no further action.\nS:U - The stale `data->input2` and the memory corrupted through it are host-kernel input-core objects; `u1_raw_event()` crosses no VM, IOMMU, or other security-authority boundary.\nC:H - The freed `struct input_dev` contains `vals`, `grab`, and handler-list pointers; after heap reuse, ID-6 reports drive `input_event()` and `input_pass_values()` through attacker-influenced reclaimed fields, permitting arbitrary kernel-memory disclosure.\nI:H - `input_event_dispose()` writes attacker-selected relative and button values through the reclaimed `input_dev->vals` pointer, while `input_pass_values()` follows reclaimed handler pointers, supporting arbitrary writes and control-flow hijacking.\nA:H - `u1_raw_event()` passes the freed pointer to `input_event()`, which reads `evbit`, takes `event_lock`, and accesses `vals` and handler lists; invalid reclaimed state can immediately cause an oops, panic, or lockup."}]}],"providerMetadata":{"shortName":"Linux","orgId":"416baaa9-dc9f-4396-8d5f-8c081fb06d67","dateUpdated":"2026-10-24T14:09:09.356Z"},"cpeApplicability":[{"nodes":[{"operator":"OR","negate":false,"cpeMatch":[{"vulnerable":true,"criteria":"cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*","versionStartIncluding":"4.8","versionEndExcluding":"5.10.271"},{"vulnerable":true,"criteria":"cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*","versionStartIncluding":"4.8","versionEndExcluding":"5.15.222"},{"vulnerable":true,"criteria":"cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*","versionStartIncluding":"4.8","versionEndExcluding":"6.1.189"},{"vulnerable":true,"criteria":"cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*","versionStartIncluding":"4.8","versionEndExcluding":"6.6.158"},{"vulnerable":true,"criteria":"cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*","versionStartIncluding":"4.8","versionEndExcluding":"6.12.112"},{"vulnerable":true,"criteria":"cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*","versionStartIncluding":"4.8","versionEndExcluding":"6.18.55"},{"vulnerable":true,"criteria":"cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*","versionStartIncluding":"4.8","versionEndExcluding":"7.2.9"},{"vulnerable":true,"criteria":"cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*","versionStartIncluding":"4.8","versionEndExcluding":"7.3"}]}]}],"x_generator":{"engine":"bippy-1.2.0"}}}}}