{ "dataType": "CVE_RECORD", "dataVersion": "5.2", "cveMetadata": { "cveId": "CVE-2024-56645", "assignerOrgId": "416baaa9-dc9f-4396-8d5f-8c081fb06d67", "state": "PUBLISHED", "assignerShortName": "Linux", "dateReserved": "2024-12-27T15:00:39.840Z", "datePublished": "2024-12-27T15:02:46.531Z", "dateUpdated": "2026-08-05T11:45:46.741Z" }, "containers": { "cna": { "providerMetadata": { "orgId": "416baaa9-dc9f-4396-8d5f-8c081fb06d67", "shortName": "Linux", "dateUpdated": "2026-08-05T11:45:46.741Z" }, "descriptions": [ { "lang": "en", "value": "In the Linux kernel, the following vulnerability has been resolved:\n\ncan: j1939: j1939_session_new(): fix skb reference counting\n\nSince j1939_session_skb_queue() does an extra skb_get() for each new\nskb, do the same for the initial one in j1939_session_new() to avoid\nrefcount underflow.\n\n[mkl: clean up commit message]" } ], "metrics": [ { "cvssV3_1": { "version": "3.1", "vectorString": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H", "baseScore": 9.8, "baseSeverity": "CRITICAL" }, "scenarios": [ { "lang": "en", "value": "AV:N - The vulnerable path is in the net/ stack and is entered purely from data received from a remote J1939 peer — a TP.CM_RTS frame reaches j1939_xtp_rx_rts_session_new() → j1939_session_fresh_new() → j1939_session_new(), and peer-supplied TP.CM_CTS frames drive the drop_old free. J1939 segments are routinely bridged to IP by telematics/gateway units, and the kernel CNA scored the equivalent j1939 RTS reception path in the same file (CVE-2026-22997) as AV:N.\nAC:L - The reference-count underflow itself is deterministic — every session created via j1939_session_new() has an under-referenced head skb, and tearing the session down (timeout, abort, or completion) triggers it. Where the premature free is used, the attacker controls both sides of the race by choosing when and how many RTS/CTS frames to inject and can repeat it indefinitely.\nPR:N - A peer transmitting J1939 frames needs no credentials, account, or privileges on the target — the stack parses TP.CM_RTS and creates the session automatically. Locally the same defect is reachable from an unprivileged AF_CAN/CAN_J1939 sendmsg(), including over vcan created inside a user namespace.\nUI:N - The j1939 receive handler processes incoming frames and allocates the session in softirq context with no action by any local user. The only precondition is a bound j1939 socket, which is the normal steady state of any device using this stack.\nS:U - The corrupted objects (sk_buff and its heap slab) and the resulting impact are entirely within the kernel's own security authority. No VM, IOMMU, or sandbox boundary is crossed.\nC:H - After the premature free, j1939_session_tx_dat() memcpy()s from the freed skb buffer into outgoing CAN frames, transmitting reclaimed kernel heap contents to the attacker on the bus — a direct read primitive. More generally, an skb use-after-free lets the attacker groom the freed slab and read back kernel memory.\nI:H - The refcount underflow yields a use-after-free and double-free of an sk_buff, allowing the attacker to reclaim the freed object with controlled data and corrupt adjacent kernel state — the standard heap-spray primitive for control-flow hijack.\nA:H - The underflow triggers refcount_t saturation warnings (fatal under panic_on_warn) and leaks the skb, while the use-after-free/double-free of the queued skb readily oopses the kernel; either can be induced repeatedly by an unauthenticated peer." } ] } ], "affected": [ { "product": "Linux", "vendor": "Linux", "defaultStatus": "unaffected", "repo": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git", "programFiles": [ "net/can/j1939/transport.c" ], "versions": [ { "version": "9d71dd0c70099914fcd063135da3c580865e924c", "lessThan": "224e606a8d8e8c7db94036272c47a37455667313", "status": "affected", "versionType": "git" }, { "version": "9d71dd0c70099914fcd063135da3c580865e924c", "lessThan": "b3282c2bebeeb82ceec492ee4972f51ee7a4a132", "status": "affected", "versionType": "git" }, { "version": "9d71dd0c70099914fcd063135da3c580865e924c", "lessThan": "4199dd78a59896e091d3a7a05a77451aa7fd724d", "status": "affected", "versionType": "git" }, { "version": "9d71dd0c70099914fcd063135da3c580865e924c", "lessThan": "f117cba69cbbd496babb3defcdf440df4fd6fe14", "status": "affected", "versionType": "git" }, { "version": "9d71dd0c70099914fcd063135da3c580865e924c", "lessThan": "426d94815e12b6bdb9a75af294fbbafb9301601d", "status": "affected", "versionType": "git" }, { "version": "9d71dd0c70099914fcd063135da3c580865e924c", "lessThan": "68fceb143b635cdc59fed3896d5910aff38f345e", "status": "affected", "versionType": "git" }, { "version": "9d71dd0c70099914fcd063135da3c580865e924c", "lessThan": "a8c695005bfe6569acd73d777ca298ddddd66105", "status": "affected", "versionType": "git" } ] }, { "product": "Linux", "vendor": "Linux", "defaultStatus": "affected", "repo": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git", "programFiles": [ "net/can/j1939/transport.c" ], "versions": [ { "version": "5.4", "status": "affected" }, { "version": "0", "lessThan": "5.4", "status": "unaffected", "versionType": "semver" }, { "version": "5.4.287", "lessThanOrEqual": "5.4.*", "status": "unaffected", "versionType": "semver" }, { "version": "5.10.231", "lessThanOrEqual": "5.10.*", "status": "unaffected", "versionType": "semver" }, { "version": "5.15.174", "lessThanOrEqual": "5.15.*", "status": "unaffected", "versionType": "semver" }, { "version": "6.1.120", "lessThanOrEqual": "6.1.*", "status": "unaffected", "versionType": "semver" }, { "version": "6.6.66", "lessThanOrEqual": "6.6.*", "status": "unaffected", "versionType": "semver" }, { "version": "6.12.5", "lessThanOrEqual": "6.12.*", "status": "unaffected", "versionType": "semver" }, { "version": "6.13", "lessThanOrEqual": "*", "status": "unaffected", "versionType": "original_commit_for_fix" } ] } ], "cpeApplicability": [ { "nodes": [ { "operator": "OR", "negate": false, "cpeMatch": [ { "vulnerable": true, "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*", "versionStartIncluding": "5.4", "versionEndExcluding": "5.4.287" }, { "vulnerable": true, "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*", "versionStartIncluding": "5.4", "versionEndExcluding": "5.10.231" }, { "vulnerable": true, "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*", "versionStartIncluding": "5.4", "versionEndExcluding": "5.15.174" }, { "vulnerable": true, "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*", "versionStartIncluding": "5.4", "versionEndExcluding": "6.1.120" }, { "vulnerable": true, "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*", "versionStartIncluding": "5.4", "versionEndExcluding": "6.6.66" }, { "vulnerable": true, "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*", "versionStartIncluding": "5.4", "versionEndExcluding": "6.12.5" }, { "vulnerable": true, "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*", "versionStartIncluding": "5.4", "versionEndExcluding": "6.13" } ] } ] } ], "references": [ { "url": "https://git.kernel.org/stable/c/224e606a8d8e8c7db94036272c47a37455667313" }, { "url": "https://git.kernel.org/stable/c/b3282c2bebeeb82ceec492ee4972f51ee7a4a132" }, { "url": "https://git.kernel.org/stable/c/4199dd78a59896e091d3a7a05a77451aa7fd724d" }, { "url": "https://git.kernel.org/stable/c/f117cba69cbbd496babb3defcdf440df4fd6fe14" }, { "url": "https://git.kernel.org/stable/c/426d94815e12b6bdb9a75af294fbbafb9301601d" }, { "url": "https://git.kernel.org/stable/c/68fceb143b635cdc59fed3896d5910aff38f345e" }, { "url": "https://git.kernel.org/stable/c/a8c695005bfe6569acd73d777ca298ddddd66105" } ], "title": "can: j1939: j1939_session_new(): fix skb reference counting", "x_generator": { "engine": "bippy-1.2.0" } }, "adp": [ { "title": "CVE Program Container", "references": [ { "url": "https://lists.debian.org/debian-lts-announce/2025/03/msg00001.html" }, { "url": "https://lists.debian.org/debian-lts-announce/2025/03/msg00002.html" } ], "providerMetadata": { "orgId": "af854a3a-2127-422b-91ae-364da2661108", "shortName": "CVE", "dateUpdated": "2025-11-03T20:51:51.200Z" } } ] } }