{"id":"CVE-2024-39292","state":"PUBLISHED","title":"um: Add winch to winch_handlers before registering winch IRQ","description":"In the Linux kernel, the following vulnerability has been resolved:\n\num: Add winch to winch_handlers before registering winch IRQ\n\nRegistering a winch IRQ is racy, an interrupt may occur before the winch is\nadded to the winch_handlers list.\n\nIf that happens, register_winch_irq() adds to that list a winch that is\nscheduled to be (or has already been) freed, causing a panic later in\nwinch_cleanup().\n\nAvoid the race by adding the winch to the winch_handlers list before\nregistering the IRQ, and rolling back if um_request_irq() fails.","publishedAt":"2024-06-24T13:52:26.769Z","updatedAt":"2026-10-15T00:43:56.312Z","severity":{"score":7.8,"label":"High","version":"3.1","vector":"CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H","source":"Linux"},"assigner":"Linux","products":["Linux Linux"],"affected":[{"vendor":"Linux","product":"Linux","defaultStatus":"unaffected","versions":[{"version":"42a359e31a0e438b5b978a8f0fecdbd3c86bb033","status":"affected","lessThan":"66ea9a7c6824821476914bed21a476cd20094f33","versionType":"git"},{"version":"42a359e31a0e438b5b978a8f0fecdbd3c86bb033","status":"affected","lessThan":"dc1ff95602ee908fcd7d8acee7a0dadb61b1a0c0","versionType":"git"},{"version":"42a359e31a0e438b5b978a8f0fecdbd3c86bb033","status":"affected","lessThan":"351d1a64544944b44732f6a64ed65573b00b9e14","versionType":"git"},{"version":"42a359e31a0e438b5b978a8f0fecdbd3c86bb033","status":"affected","lessThan":"31960d991e43c8d6dc07245f19fc13398e90ead2","versionType":"git"},{"version":"42a359e31a0e438b5b978a8f0fecdbd3c86bb033","status":"affected","lessThan":"0c02d425a2fbe52643a5859a779db0329e7dddd4","versionType":"git"},{"version":"42a359e31a0e438b5b978a8f0fecdbd3c86bb033","status":"affected","lessThan":"434a06c38ee1217a8baa0dd7c37cc85d50138fb0","versionType":"git"},{"version":"42a359e31a0e438b5b978a8f0fecdbd3c86bb033","status":"affected","lessThan":"73b8e21f76c7dda4905655d2e2c17dc5a73b87f1","versionType":"git"},{"version":"42a359e31a0e438b5b978a8f0fecdbd3c86bb033","status":"affected","lessThan":"a0fbbd36c156b9f7b2276871d499c9943dfe5101","versionType":"git"}],"repo":"https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git","programFiles":["arch/um/drivers/line.c"]},{"vendor":"Linux","product":"Linux","defaultStatus":"affected","versions":[{"version":"2.6.23","status":"affected"},{"version":"0","status":"unaffected","lessThan":"2.6.23","versionType":"semver"},{"version":"4.19.316","status":"unaffected","lessThanOrEqual":"4.19.*","versionType":"semver"},{"version":"5.4.278","status":"unaffected","lessThanOrEqual":"5.4.*","versionType":"semver"},{"version":"5.10.219","status":"unaffected","lessThanOrEqual":"5.10.*","versionType":"semver"},{"version":"5.15.161","status":"unaffected","lessThanOrEqual":"5.15.*","versionType":"semver"},{"version":"6.1.93","status":"unaffected","lessThanOrEqual":"6.1.*","versionType":"semver"},{"version":"6.6.33","status":"unaffected","lessThanOrEqual":"6.6.*","versionType":"semver"},{"version":"6.9.4","status":"unaffected","lessThanOrEqual":"6.9.*","versionType":"semver"},{"version":"6.10","status":"unaffected","lessThanOrEqual":"*","versionType":"original_commit_for_fix"}],"repo":"https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git","programFiles":["arch/um/drivers/line.c"]}],"references":["https://git.kernel.org/stable/c/66ea9a7c6824821476914bed21a476cd20094f33","https://git.kernel.org/stable/c/dc1ff95602ee908fcd7d8acee7a0dadb61b1a0c0","https://git.kernel.org/stable/c/351d1a64544944b44732f6a64ed65573b00b9e14","https://git.kernel.org/stable/c/31960d991e43c8d6dc07245f19fc13398e90ead2","https://git.kernel.org/stable/c/0c02d425a2fbe52643a5859a779db0329e7dddd4","https://git.kernel.org/stable/c/434a06c38ee1217a8baa0dd7c37cc85d50138fb0","https://git.kernel.org/stable/c/73b8e21f76c7dda4905655d2e2c17dc5a73b87f1","https://git.kernel.org/stable/c/a0fbbd36c156b9f7b2276871d499c9943dfe5101","https://lists.debian.org/debian-lts-announce/2024/06/msg00020.html","https://cert-portal.siemens.com/productcert/html/ssa-398330.html","https://cert-portal.siemens.com/productcert/html/ssa-613116.html"],"weaknesses":[],"ingestedAt":"2026-10-29T20:07:39.287Z","source":{"repository":"CVEProject/cvelistV5","path":"cves/2024/39xxx/CVE-2024-39292.json","commit":"556c9d3a8cd17e218bb8e452ba7cd619a384ff47"},"raw":{"dataType":"CVE_RECORD","dataVersion":"5.2","cveMetadata":{"cveId":"CVE-2024-39292","state":"PUBLISHED","datePublished":"2024-06-24T13:52:26.769Z","dateUpdated":"2026-10-15T00:43:56.312Z","assignerShortName":"Linux","assignerOrgId":"416baaa9-dc9f-4396-8d5f-8c081fb06d67","dateReserved":"2024-06-21T11:16:40.627Z"},"containers":{"cna":{"title":"um: Add winch to winch_handlers before registering winch IRQ","descriptions":[{"lang":"en","value":"In the Linux kernel, the following vulnerability has been resolved:\n\num: Add winch to winch_handlers before registering winch IRQ\n\nRegistering a winch IRQ is racy, an interrupt may occur before the winch is\nadded to the winch_handlers list.\n\nIf that happens, register_winch_irq() adds to that list a winch that is\nscheduled to be (or has already been) freed, causing a panic later in\nwinch_cleanup().\n\nAvoid the race by adding the winch to the winch_handlers list before\nregistering the IRQ, and rolling back if um_request_irq() fails."}],"affected":[{"vendor":"Linux","product":"Linux","defaultStatus":"unaffected","versions":[{"version":"42a359e31a0e438b5b978a8f0fecdbd3c86bb033","status":"affected","lessThan":"66ea9a7c6824821476914bed21a476cd20094f33","versionType":"git"},{"version":"42a359e31a0e438b5b978a8f0fecdbd3c86bb033","status":"affected","lessThan":"dc1ff95602ee908fcd7d8acee7a0dadb61b1a0c0","versionType":"git"},{"version":"42a359e31a0e438b5b978a8f0fecdbd3c86bb033","status":"affected","lessThan":"351d1a64544944b44732f6a64ed65573b00b9e14","versionType":"git"},{"version":"42a359e31a0e438b5b978a8f0fecdbd3c86bb033","status":"affected","lessThan":"31960d991e43c8d6dc07245f19fc13398e90ead2","versionType":"git"},{"version":"42a359e31a0e438b5b978a8f0fecdbd3c86bb033","status":"affected","lessThan":"0c02d425a2fbe52643a5859a779db0329e7dddd4","versionType":"git"},{"version":"42a359e31a0e438b5b978a8f0fecdbd3c86bb033","status":"affected","lessThan":"434a06c38ee1217a8baa0dd7c37cc85d50138fb0","versionType":"git"},{"version":"42a359e31a0e438b5b978a8f0fecdbd3c86bb033","status":"affected","lessThan":"73b8e21f76c7dda4905655d2e2c17dc5a73b87f1","versionType":"git"},{"version":"42a359e31a0e438b5b978a8f0fecdbd3c86bb033","status":"affected","lessThan":"a0fbbd36c156b9f7b2276871d499c9943dfe5101","versionType":"git"}],"repo":"https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git","programFiles":["arch/um/drivers/line.c"]},{"vendor":"Linux","product":"Linux","defaultStatus":"affected","versions":[{"version":"2.6.23","status":"affected"},{"version":"0","status":"unaffected","lessThan":"2.6.23","versionType":"semver"},{"version":"4.19.316","status":"unaffected","lessThanOrEqual":"4.19.*","versionType":"semver"},{"version":"5.4.278","status":"unaffected","lessThanOrEqual":"5.4.*","versionType":"semver"},{"version":"5.10.219","status":"unaffected","lessThanOrEqual":"5.10.*","versionType":"semver"},{"version":"5.15.161","status":"unaffected","lessThanOrEqual":"5.15.*","versionType":"semver"},{"version":"6.1.93","status":"unaffected","lessThanOrEqual":"6.1.*","versionType":"semver"},{"version":"6.6.33","status":"unaffected","lessThanOrEqual":"6.6.*","versionType":"semver"},{"version":"6.9.4","status":"unaffected","lessThanOrEqual":"6.9.*","versionType":"semver"},{"version":"6.10","status":"unaffected","lessThanOrEqual":"*","versionType":"original_commit_for_fix"}],"repo":"https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git","programFiles":["arch/um/drivers/line.c"]}],"references":[{"url":"https://git.kernel.org/stable/c/66ea9a7c6824821476914bed21a476cd20094f33"},{"url":"https://git.kernel.org/stable/c/dc1ff95602ee908fcd7d8acee7a0dadb61b1a0c0"},{"url":"https://git.kernel.org/stable/c/351d1a64544944b44732f6a64ed65573b00b9e14"},{"url":"https://git.kernel.org/stable/c/31960d991e43c8d6dc07245f19fc13398e90ead2"},{"url":"https://git.kernel.org/stable/c/0c02d425a2fbe52643a5859a779db0329e7dddd4"},{"url":"https://git.kernel.org/stable/c/434a06c38ee1217a8baa0dd7c37cc85d50138fb0"},{"url":"https://git.kernel.org/stable/c/73b8e21f76c7dda4905655d2e2c17dc5a73b87f1"},{"url":"https://git.kernel.org/stable/c/a0fbbd36c156b9f7b2276871d499c9943dfe5101"}],"metrics":[{"cvssV3_1":{"version":"3.1","vectorString":"CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H","baseScore":7.8,"baseSeverity":"HIGH"},"scenarios":[{"lang":"en","value":"AV:L - The vulnerable code is UML console/tty setup reached by opening a UML console or serial device (`/dev/tty*`, `/dev/ttyS*`) inside the guest, i.e. via a local `open()` syscall. Although the `con=port:` telnet channel type can have its setup triggered by an incoming connection, the standard and reliable reach is local.\nAC:L - The attacker creates and repeats the race themselves — closing and reopening the line clears `line->sigio` and re-runs `register_winch_irq()`, so the tiny window between `um_request_irq()` and `list_add()` can be attacked in an unbounded retry loop. Once the early interrupt lands, the freed object stays linked in the global `winch_handlers` list deterministically, and the later dereference is delayed long enough for reliable heap grooming.\nPR:L - No capability or credential check exists anywhere on the path from `open()` through `line_open()` → `line_activate()` → `register_winch_irq()`; only device-node permissions gate it, and a plain unprivileged guest user is sufficient both to open a console/serial line and to spray the `kmalloc-96` slab that reclaims the freed `struct winch`.\nUI:N - Winch registration happens automatically when a configured console line is first opened (including at boot), and the attacker can drive that open themselves. No action by any other user is required.\nS:U - The corruption and its impact are confined to the UML kernel's own memory and the process it already fully controls, which is standard in-kernel privilege escalation. No hypervisor, IOMMU, or sandbox authority boundary is crossed by the vulnerable component.\nC:H - This is a use-after-free on a small, easily reclaimed slab object; the later walk of `winch_handlers` calls `tty_port_tty_get(winch->port)` on an attacker-controlled pointer, giving an arbitrary-dereference read primitive usable to disclose kernel memory.\nI:H - The stale `list_add()` writes two pointers into freed (reclaimable) memory, and the later `free_winch()` performs `free_stack(winch->stack, 0)` on an attacker-controlled address plus a double `kfree()` and `os_kill_process(winch->pid, 1)`, yielding write/free primitives suitable for control-flow hijack.\nA:H - The commit itself states the dangling list entry causes a panic in `winch_cleanup()`, and any use-after-free of this kind reliably produces an oops or kernel panic in the UML instance."}]}],"providerMetadata":{"shortName":"Linux","orgId":"416baaa9-dc9f-4396-8d5f-8c081fb06d67","dateUpdated":"2026-08-05T11:33:22.163Z"},"cpeApplicability":[{"nodes":[{"operator":"OR","negate":false,"cpeMatch":[{"vulnerable":true,"criteria":"cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*","versionStartIncluding":"2.6.23","versionEndExcluding":"4.19.316"},{"vulnerable":true,"criteria":"cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*","versionStartIncluding":"2.6.23","versionEndExcluding":"5.4.278"},{"vulnerable":true,"criteria":"cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*","versionStartIncluding":"2.6.23","versionEndExcluding":"5.10.219"},{"vulnerable":true,"criteria":"cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*","versionStartIncluding":"2.6.23","versionEndExcluding":"5.15.161"},{"vulnerable":true,"criteria":"cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*","versionStartIncluding":"2.6.23","versionEndExcluding":"6.1.93"},{"vulnerable":true,"criteria":"cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*","versionStartIncluding":"2.6.23","versionEndExcluding":"6.6.33"},{"vulnerable":true,"criteria":"cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*","versionStartIncluding":"2.6.23","versionEndExcluding":"6.9.4"},{"vulnerable":true,"criteria":"cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*","versionStartIncluding":"2.6.23","versionEndExcluding":"6.10"}]}]}],"x_generator":{"engine":"bippy-1.2.0"}},"adp":[{"title":"CISA ADP Vulnrichment","metrics":[{"other":{"type":"ssvc","content":{"timestamp":"2024-06-24T15:15:10.639136Z","id":"CVE-2024-39292","options":[{"Exploitation":"none"},{"Automatable":"no"},{"Technical Impact":"partial"}],"role":"CISA Coordinator","version":"2.0.3"}}}],"providerMetadata":{"shortName":"CISA-ADP","orgId":"134c704f-9b21-4f2e-91b3-4a467353bcc0","dateUpdated":"2024-06-24T15:15:20.044Z"}},{"title":"CVE Program Container","references":[{"url":"https://git.kernel.org/stable/c/66ea9a7c6824821476914bed21a476cd20094f33","tags":["x_transferred"]},{"url":"https://git.kernel.org/stable/c/dc1ff95602ee908fcd7d8acee7a0dadb61b1a0c0","tags":["x_transferred"]},{"url":"https://git.kernel.org/stable/c/351d1a64544944b44732f6a64ed65573b00b9e14","tags":["x_transferred"]},{"url":"https://git.kernel.org/stable/c/31960d991e43c8d6dc07245f19fc13398e90ead2","tags":["x_transferred"]},{"url":"https://git.kernel.org/stable/c/0c02d425a2fbe52643a5859a779db0329e7dddd4","tags":["x_transferred"]},{"url":"https://git.kernel.org/stable/c/434a06c38ee1217a8baa0dd7c37cc85d50138fb0","tags":["x_transferred"]},{"url":"https://git.kernel.org/stable/c/73b8e21f76c7dda4905655d2e2c17dc5a73b87f1","tags":["x_transferred"]},{"url":"https://git.kernel.org/stable/c/a0fbbd36c156b9f7b2276871d499c9943dfe5101","tags":["x_transferred"]},{"url":"https://lists.debian.org/debian-lts-announce/2024/06/msg00020.html"}],"providerMetadata":{"shortName":"CVE","orgId":"af854a3a-2127-422b-91ae-364da2661108","dateUpdated":"2025-11-04T17:21:58.690Z"}},{"affected":[{"vendor":"Siemens","product":"RUGGEDCOM RST2428P","defaultStatus":"unknown","versions":[{"version":"0","status":"affected","lessThan":"V3.1","versionType":"custom"}]},{"vendor":"Siemens","product":"SCALANCE XC-300/XR-300/XC-400/XR-500WG/XR-500 family","defaultStatus":"unknown","versions":[{"version":"0","status":"unaffected","lessThan":"*","versionType":"custom"}]},{"vendor":"Siemens","product":"SCALANCE XCM-/XRM-/XCH-/XRH-300 family","defaultStatus":"unknown","versions":[{"version":"0","status":"affected","lessThan":"V3.1","versionType":"custom"}]},{"vendor":"Siemens","product":"SIMATIC S7-1500 CPU 1518-4 PN/DP MFP","defaultStatus":"unknown","versions":[{"version":"V3.1.0","status":"affected","lessThan":"V3.1.5","versionType":"custom"}]},{"vendor":"Siemens","product":"SIMATIC S7-1500 CPU 1518-4 PN/DP MFP","defaultStatus":"unknown","versions":[{"version":"V3.1.0","status":"affected","lessThan":"V3.1.5","versionType":"custom"}]},{"vendor":"Siemens","product":"SIMATIC S7-1500 CPU 1518F-4 PN/DP MFP","defaultStatus":"unknown","versions":[{"version":"V3.1.0","status":"affected","lessThan":"V3.1.5","versionType":"custom"}]},{"vendor":"Siemens","product":"SIMATIC S7-1500 CPU 1518F-4 PN/DP MFP","defaultStatus":"unknown","versions":[{"version":"V3.1.0","status":"affected","lessThan":"V3.1.5","versionType":"custom"}]},{"vendor":"Siemens","product":"SIPLUS S7-1500 CPU 1518-4 PN/DP MFP","defaultStatus":"unknown","versions":[{"version":"V3.1.0","status":"affected","lessThan":"V3.1.5","versionType":"custom"}]}],"references":[{"url":"https://cert-portal.siemens.com/productcert/html/ssa-398330.html"},{"url":"https://cert-portal.siemens.com/productcert/html/ssa-613116.html"}],"providerMetadata":{"shortName":"siemens-SADP","orgId":"0b142b55-0307-4c5a-b3c9-f314f3fb7c5e","dateUpdated":"2026-10-15T00:43:56.312Z"},"x_adpType":"supplier"}]}}}