{"id":"CVE-2026-97986","state":"PUBLISHED","title":"virtio_input: stop callbacks before unregistering input device","description":"In the Linux kernel, the following vulnerability has been resolved:\n\nvirtio_input: stop callbacks before unregistering input device\n\nvirtinput_remove() unregisters the input device before resetting the\nvirtio device. virtinput_recv_events() drops vi->lock around input_event(),\nso clearing vi->ready does not stop a callback that passed the entry check.\nIt can still use vi->idev, requeue buffers and kick the queue.\n\nReset first, as virtinput_freeze() already does. With the preceding core\nchange, reset waits for callbacks before input_unregister_device() can\nfree vi->idev. Recheck vi->ready after taking the lock again: keep draining\ncompleted events so an input packet is not truncated, but stop requeueing\nbuffers and kicking the queue.\n\nWith evdev attached, input_unregister_handle() currently waits for an RCU\ngrace period, which also waits out IRQ callbacks. This masks the lifetime\nbug on PCI and MMIO, but does not protect sleepable callbacks on other\ntransports.","publishedAt":"2026-09-25T10:23:20.801Z","updatedAt":"2026-10-19T09:11:53.304Z","severity":null,"assigner":"Linux","products":["Linux Linux"],"affected":[{"vendor":"Linux","product":"Linux","defaultStatus":"unaffected","versions":[{"version":"271c865161c57cfabca45b93eaa712b19da365bc","status":"affected","lessThan":"3ae729b1f8ab81d1244061872db2fb0ebb110d2a","versionType":"git"},{"version":"271c865161c57cfabca45b93eaa712b19da365bc","status":"affected","lessThan":"81073bca2062c916c818f2744fbab545a5c4982b","versionType":"git"},{"version":"271c865161c57cfabca45b93eaa712b19da365bc","status":"affected","lessThan":"8226aeee9b9a94cd699fbb51cb230feff46cfaf2","versionType":"git"},{"version":"271c865161c57cfabca45b93eaa712b19da365bc","status":"affected","lessThan":"a3ba86a270dd87460759214046dc7cbd409ac711","versionType":"git"},{"version":"271c865161c57cfabca45b93eaa712b19da365bc","status":"affected","lessThan":"5378f7945856a5ed88e6f9850bc7a68f54090135","versionType":"git"},{"version":"271c865161c57cfabca45b93eaa712b19da365bc","status":"affected","lessThan":"d7808b37da0a619cf1fa541c2384e783fecc2480","versionType":"git"}],"repo":"https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git","programFiles":["drivers/virtio/virtio_input.c"]},{"vendor":"Linux","product":"Linux","defaultStatus":"affected","versions":[{"version":"4.1","status":"affected"},{"version":"0","status":"unaffected","lessThan":"4.1","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.111","status":"unaffected","lessThanOrEqual":"6.12.*","versionType":"semver"},{"version":"6.18.53","status":"unaffected","lessThanOrEqual":"6.18.*","versionType":"semver"},{"version":"7.2.7","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/virtio/virtio_input.c"]}],"references":["https://git.kernel.org/stable/c/3ae729b1f8ab81d1244061872db2fb0ebb110d2a","https://git.kernel.org/stable/c/81073bca2062c916c818f2744fbab545a5c4982b","https://git.kernel.org/stable/c/8226aeee9b9a94cd699fbb51cb230feff46cfaf2","https://git.kernel.org/stable/c/a3ba86a270dd87460759214046dc7cbd409ac711","https://git.kernel.org/stable/c/5378f7945856a5ed88e6f9850bc7a68f54090135","https://git.kernel.org/stable/c/d7808b37da0a619cf1fa541c2384e783fecc2480"],"weaknesses":[],"ingestedAt":"2026-10-29T20:13:43.249Z","source":{"repository":"CVEProject/cvelistV5","path":"cves/2026/97xxx/CVE-2026-97986.json","commit":"556c9d3a8cd17e218bb8e452ba7cd619a384ff47"},"raw":{"dataType":"CVE_RECORD","dataVersion":"5.2","cveMetadata":{"cveId":"CVE-2026-97986","state":"PUBLISHED","datePublished":"2026-09-25T10:23:20.801Z","dateUpdated":"2026-10-19T09:11:53.304Z","assignerShortName":"Linux","assignerOrgId":"416baaa9-dc9f-4396-8d5f-8c081fb06d67","dateReserved":"2026-09-25T10:18:58.208Z"},"containers":{"cna":{"title":"virtio_input: stop callbacks before unregistering input device","descriptions":[{"lang":"en","value":"In the Linux kernel, the following vulnerability has been resolved:\n\nvirtio_input: stop callbacks before unregistering input device\n\nvirtinput_remove() unregisters the input device before resetting the\nvirtio device. virtinput_recv_events() drops vi->lock around input_event(),\nso clearing vi->ready does not stop a callback that passed the entry check.\nIt can still use vi->idev, requeue buffers and kick the queue.\n\nReset first, as virtinput_freeze() already does. With the preceding core\nchange, reset waits for callbacks before input_unregister_device() can\nfree vi->idev. Recheck vi->ready after taking the lock again: keep draining\ncompleted events so an input packet is not truncated, but stop requeueing\nbuffers and kicking the queue.\n\nWith evdev attached, input_unregister_handle() currently waits for an RCU\ngrace period, which also waits out IRQ callbacks. This masks the lifetime\nbug on PCI and MMIO, but does not protect sleepable callbacks on other\ntransports."}],"affected":[{"vendor":"Linux","product":"Linux","defaultStatus":"unaffected","versions":[{"version":"271c865161c57cfabca45b93eaa712b19da365bc","status":"affected","lessThan":"3ae729b1f8ab81d1244061872db2fb0ebb110d2a","versionType":"git"},{"version":"271c865161c57cfabca45b93eaa712b19da365bc","status":"affected","lessThan":"81073bca2062c916c818f2744fbab545a5c4982b","versionType":"git"},{"version":"271c865161c57cfabca45b93eaa712b19da365bc","status":"affected","lessThan":"8226aeee9b9a94cd699fbb51cb230feff46cfaf2","versionType":"git"},{"version":"271c865161c57cfabca45b93eaa712b19da365bc","status":"affected","lessThan":"a3ba86a270dd87460759214046dc7cbd409ac711","versionType":"git"},{"version":"271c865161c57cfabca45b93eaa712b19da365bc","status":"affected","lessThan":"5378f7945856a5ed88e6f9850bc7a68f54090135","versionType":"git"},{"version":"271c865161c57cfabca45b93eaa712b19da365bc","status":"affected","lessThan":"d7808b37da0a619cf1fa541c2384e783fecc2480","versionType":"git"}],"repo":"https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git","programFiles":["drivers/virtio/virtio_input.c"]},{"vendor":"Linux","product":"Linux","defaultStatus":"affected","versions":[{"version":"4.1","status":"affected"},{"version":"0","status":"unaffected","lessThan":"4.1","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.111","status":"unaffected","lessThanOrEqual":"6.12.*","versionType":"semver"},{"version":"6.18.53","status":"unaffected","lessThanOrEqual":"6.18.*","versionType":"semver"},{"version":"7.2.7","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/virtio/virtio_input.c"]}],"references":[{"url":"https://git.kernel.org/stable/c/3ae729b1f8ab81d1244061872db2fb0ebb110d2a"},{"url":"https://git.kernel.org/stable/c/81073bca2062c916c818f2744fbab545a5c4982b"},{"url":"https://git.kernel.org/stable/c/8226aeee9b9a94cd699fbb51cb230feff46cfaf2"},{"url":"https://git.kernel.org/stable/c/a3ba86a270dd87460759214046dc7cbd409ac711"},{"url":"https://git.kernel.org/stable/c/5378f7945856a5ed88e6f9850bc7a68f54090135"},{"url":"https://git.kernel.org/stable/c/d7808b37da0a619cf1fa541c2384e783fecc2480"}],"providerMetadata":{"shortName":"Linux","orgId":"416baaa9-dc9f-4396-8d5f-8c081fb06d67","dateUpdated":"2026-10-19T09:11:53.304Z"},"cpeApplicability":[{"nodes":[{"operator":"OR","negate":false,"cpeMatch":[{"vulnerable":true,"criteria":"cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*","versionStartIncluding":"4.1","versionEndExcluding":"6.1.189"},{"vulnerable":true,"criteria":"cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*","versionStartIncluding":"4.1","versionEndExcluding":"6.6.158"},{"vulnerable":true,"criteria":"cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*","versionStartIncluding":"4.1","versionEndExcluding":"6.12.111"},{"vulnerable":true,"criteria":"cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*","versionStartIncluding":"4.1","versionEndExcluding":"6.18.53"},{"vulnerable":true,"criteria":"cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*","versionStartIncluding":"4.1","versionEndExcluding":"7.2.7"},{"vulnerable":true,"criteria":"cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*","versionStartIncluding":"4.1","versionEndExcluding":"7.3"}]}]}],"x_generator":{"engine":"bippy-1.2.0"}}}}}