{"id":"CVE-2024-40901","state":"PUBLISHED","title":"scsi: mpt3sas: Avoid test/set_bit() operating in non-allocated memory","description":"In the Linux kernel, the following vulnerability has been resolved:\n\nscsi: mpt3sas: Avoid test/set_bit() operating in non-allocated memory\n\nThere is a potential out-of-bounds access when using test_bit() on a single\nword. The test_bit() and set_bit() functions operate on long values, and\nwhen testing or setting a single word, they can exceed the word\nboundary. KASAN detects this issue and produces a dump:\n\n\t BUG: KASAN: slab-out-of-bounds in _scsih_add_device.constprop.0 (./arch/x86/include/asm/bitops.h:60 ./include/asm-generic/bitops/instrumented-atomic.h:29 drivers/scsi/mpt3sas/mpt3sas_scsih.c:7331) mpt3sas\n\n\t Write of size 8 at addr ffff8881d26e3c60 by task kworker/u1536:2/2965\n\nFor full log, please look at [1].\n\nMake the allocation at least the size of sizeof(unsigned long) so that\nset_bit() and test_bit() have sufficient room for read/write operations\nwithout overwriting unallocated memory.\n\n[1] Link: https://lore.kernel.org/all/ZkNcALr3W3KGYYJG@gmail.com/","publishedAt":"2024-07-12T12:20:42.859Z","updatedAt":"2026-10-15T00:44:54.665Z","severity":{"score":7.3,"label":"High","version":"3.1","vector":"CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:L/I:H/A:H","source":"Linux"},"assigner":"Linux","products":["Linux Linux"],"affected":[{"vendor":"Linux","product":"Linux","defaultStatus":"unaffected","versions":[{"version":"c696f7b83edeac804e898952058089143f49ca0a","status":"affected","lessThan":"e9bce7c751f6d6c7be88c0bc081a66aaf61a23ee","versionType":"git"},{"version":"c696f7b83edeac804e898952058089143f49ca0a","status":"affected","lessThan":"19649e49a6df07cd2e03e0a11396fd3a99485ec2","versionType":"git"},{"version":"c696f7b83edeac804e898952058089143f49ca0a","status":"affected","lessThan":"0081d2b3ae0a17a86b8cc0fa3c8bdc54e233ba16","versionType":"git"},{"version":"c696f7b83edeac804e898952058089143f49ca0a","status":"affected","lessThan":"521f333e644c4246ca04a4fc4772edc53dd2a801","versionType":"git"},{"version":"c696f7b83edeac804e898952058089143f49ca0a","status":"affected","lessThan":"46bab2bcd771e725ff5ca3a68ba68cfeac45676c","versionType":"git"},{"version":"c696f7b83edeac804e898952058089143f49ca0a","status":"affected","lessThan":"9079338c5a0d1f1fee34fb1c9e99b754efe414c5","versionType":"git"},{"version":"c696f7b83edeac804e898952058089143f49ca0a","status":"affected","lessThan":"18abb5db0aa9b2d48f7037a88b41af2eef821674","versionType":"git"},{"version":"c696f7b83edeac804e898952058089143f49ca0a","status":"affected","lessThan":"4254dfeda82f20844299dca6c38cbffcfd499f41","versionType":"git"}],"repo":"https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git","programFiles":["drivers/scsi/mpt3sas/mpt3sas_base.c"]},{"vendor":"Linux","product":"Linux","defaultStatus":"affected","versions":[{"version":"4.10","status":"affected"},{"version":"0","status":"unaffected","lessThan":"4.10","versionType":"semver"},{"version":"4.19.317","status":"unaffected","lessThanOrEqual":"4.19.*","versionType":"semver"},{"version":"5.4.279","status":"unaffected","lessThanOrEqual":"5.4.*","versionType":"semver"},{"version":"5.10.221","status":"unaffected","lessThanOrEqual":"5.10.*","versionType":"semver"},{"version":"5.15.162","status":"unaffected","lessThanOrEqual":"5.15.*","versionType":"semver"},{"version":"6.1.95","status":"unaffected","lessThanOrEqual":"6.1.*","versionType":"semver"},{"version":"6.6.35","status":"unaffected","lessThanOrEqual":"6.6.*","versionType":"semver"},{"version":"6.9.6","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":["drivers/scsi/mpt3sas/mpt3sas_base.c"]}],"references":["https://git.kernel.org/stable/c/e9bce7c751f6d6c7be88c0bc081a66aaf61a23ee","https://git.kernel.org/stable/c/19649e49a6df07cd2e03e0a11396fd3a99485ec2","https://git.kernel.org/stable/c/0081d2b3ae0a17a86b8cc0fa3c8bdc54e233ba16","https://git.kernel.org/stable/c/521f333e644c4246ca04a4fc4772edc53dd2a801","https://git.kernel.org/stable/c/46bab2bcd771e725ff5ca3a68ba68cfeac45676c","https://git.kernel.org/stable/c/9079338c5a0d1f1fee34fb1c9e99b754efe414c5","https://git.kernel.org/stable/c/18abb5db0aa9b2d48f7037a88b41af2eef821674","https://git.kernel.org/stable/c/4254dfeda82f20844299dca6c38cbffcfd499f41","https://lists.debian.org/debian-lts-announce/2025/01/msg00001.html","https://cert-portal.siemens.com/productcert/html/ssa-398330.html","https://cert-portal.siemens.com/productcert/html/ssa-355557.html"],"weaknesses":[],"ingestedAt":"2026-10-29T20:07:39.287Z","source":{"repository":"CVEProject/cvelistV5","path":"cves/2024/40xxx/CVE-2024-40901.json","commit":"556c9d3a8cd17e218bb8e452ba7cd619a384ff47"},"raw":{"dataType":"CVE_RECORD","dataVersion":"5.2","cveMetadata":{"cveId":"CVE-2024-40901","state":"PUBLISHED","datePublished":"2024-07-12T12:20:42.859Z","dateUpdated":"2026-10-15T00:44:54.665Z","assignerShortName":"Linux","assignerOrgId":"416baaa9-dc9f-4396-8d5f-8c081fb06d67","dateReserved":"2024-07-12T12:17:45.579Z"},"containers":{"cna":{"title":"scsi: mpt3sas: Avoid test/set_bit() operating in non-allocated memory","descriptions":[{"lang":"en","value":"In the Linux kernel, the following vulnerability has been resolved:\n\nscsi: mpt3sas: Avoid test/set_bit() operating in non-allocated memory\n\nThere is a potential out-of-bounds access when using test_bit() on a single\nword. The test_bit() and set_bit() functions operate on long values, and\nwhen testing or setting a single word, they can exceed the word\nboundary. KASAN detects this issue and produces a dump:\n\n\t BUG: KASAN: slab-out-of-bounds in _scsih_add_device.constprop.0 (./arch/x86/include/asm/bitops.h:60 ./include/asm-generic/bitops/instrumented-atomic.h:29 drivers/scsi/mpt3sas/mpt3sas_scsih.c:7331) mpt3sas\n\n\t Write of size 8 at addr ffff8881d26e3c60 by task kworker/u1536:2/2965\n\nFor full log, please look at [1].\n\nMake the allocation at least the size of sizeof(unsigned long) so that\nset_bit() and test_bit() have sufficient room for read/write operations\nwithout overwriting unallocated memory.\n\n[1] Link: https://lore.kernel.org/all/ZkNcALr3W3KGYYJG@gmail.com/"}],"affected":[{"vendor":"Linux","product":"Linux","defaultStatus":"unaffected","versions":[{"version":"c696f7b83edeac804e898952058089143f49ca0a","status":"affected","lessThan":"e9bce7c751f6d6c7be88c0bc081a66aaf61a23ee","versionType":"git"},{"version":"c696f7b83edeac804e898952058089143f49ca0a","status":"affected","lessThan":"19649e49a6df07cd2e03e0a11396fd3a99485ec2","versionType":"git"},{"version":"c696f7b83edeac804e898952058089143f49ca0a","status":"affected","lessThan":"0081d2b3ae0a17a86b8cc0fa3c8bdc54e233ba16","versionType":"git"},{"version":"c696f7b83edeac804e898952058089143f49ca0a","status":"affected","lessThan":"521f333e644c4246ca04a4fc4772edc53dd2a801","versionType":"git"},{"version":"c696f7b83edeac804e898952058089143f49ca0a","status":"affected","lessThan":"46bab2bcd771e725ff5ca3a68ba68cfeac45676c","versionType":"git"},{"version":"c696f7b83edeac804e898952058089143f49ca0a","status":"affected","lessThan":"9079338c5a0d1f1fee34fb1c9e99b754efe414c5","versionType":"git"},{"version":"c696f7b83edeac804e898952058089143f49ca0a","status":"affected","lessThan":"18abb5db0aa9b2d48f7037a88b41af2eef821674","versionType":"git"},{"version":"c696f7b83edeac804e898952058089143f49ca0a","status":"affected","lessThan":"4254dfeda82f20844299dca6c38cbffcfd499f41","versionType":"git"}],"repo":"https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git","programFiles":["drivers/scsi/mpt3sas/mpt3sas_base.c"]},{"vendor":"Linux","product":"Linux","defaultStatus":"affected","versions":[{"version":"4.10","status":"affected"},{"version":"0","status":"unaffected","lessThan":"4.10","versionType":"semver"},{"version":"4.19.317","status":"unaffected","lessThanOrEqual":"4.19.*","versionType":"semver"},{"version":"5.4.279","status":"unaffected","lessThanOrEqual":"5.4.*","versionType":"semver"},{"version":"5.10.221","status":"unaffected","lessThanOrEqual":"5.10.*","versionType":"semver"},{"version":"5.15.162","status":"unaffected","lessThanOrEqual":"5.15.*","versionType":"semver"},{"version":"6.1.95","status":"unaffected","lessThanOrEqual":"6.1.*","versionType":"semver"},{"version":"6.6.35","status":"unaffected","lessThanOrEqual":"6.6.*","versionType":"semver"},{"version":"6.9.6","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":["drivers/scsi/mpt3sas/mpt3sas_base.c"]}],"references":[{"url":"https://git.kernel.org/stable/c/e9bce7c751f6d6c7be88c0bc081a66aaf61a23ee"},{"url":"https://git.kernel.org/stable/c/19649e49a6df07cd2e03e0a11396fd3a99485ec2"},{"url":"https://git.kernel.org/stable/c/0081d2b3ae0a17a86b8cc0fa3c8bdc54e233ba16"},{"url":"https://git.kernel.org/stable/c/521f333e644c4246ca04a4fc4772edc53dd2a801"},{"url":"https://git.kernel.org/stable/c/46bab2bcd771e725ff5ca3a68ba68cfeac45676c"},{"url":"https://git.kernel.org/stable/c/9079338c5a0d1f1fee34fb1c9e99b754efe414c5"},{"url":"https://git.kernel.org/stable/c/18abb5db0aa9b2d48f7037a88b41af2eef821674"},{"url":"https://git.kernel.org/stable/c/4254dfeda82f20844299dca6c38cbffcfd499f41"}],"metrics":[{"cvssV3_1":{"version":"3.1","vectorString":"CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:L/I:H/A:H","baseScore":7.3,"baseSeverity":"HIGH"},"scenarios":[{"lang":"en","value":"AV:L - The undersized bitmaps are per-HBA kernel objects touched by local device-discovery/reset work and by the `MPT3COMMAND` ioctl on `/dev/mpt3ctl`, which passes a user-supplied `device_handle` to `test_bit()`. Nothing here processes remote network data, so local access is required.\nAC:L - On any controller whose firmware reports a `MaxDevHandle` that is not a multiple of 64, the allocation is deterministically short and every device add/remove or handle-referencing ioctl performs the 8-byte read-modify-write past the requested allocation. No race, no memory-layout grooming, and no unpredictable system state is involved.\nPR:L - The driver performs no `capable()`/`CAP_SYS_RAWIO` check on any of these paths — reachability is governed solely by device-node policy, and appliance, storage-management and container deployments routinely hand `/dev/mpt3ctl` or HBA-attached block devices to a non-root storage group. The OOB write side itself occurs in automatic discovery work that needs no privilege at all, so low privileges are the ceiling of what an attacker needs.\nUI:N - Device discovery, hotplug handling and controller reset run autonomously in the driver's firmware-event workqueue, and the ioctl path is a plain syscall. No victim action of any kind is required.\nS:U - The out-of-bounds access corrupts kernel slab memory from within kernel context; there is no crossing of a VM, IOMMU, or sandbox boundary.\nC:L - `test_bit()` reads an 8-byte word that extends past the allocation, but the overread is strictly bounded to at most 7 adjacent bytes and only the in-bounds bit is consumed, so no meaningful memory contents are returned to the attacker.\nI:H - This is an out-of-bounds write — KASAN reports `Write of size 8` past the slab allocation from `_scsih_add_device` — and the atomic RMW spans neighbouring heap bytes, which can clobber a concurrent non-atomic update to adjacent slab memory. Per the out-of-bounds-write classification this is scored High.\nA:H - The trailing word access crosses the object boundary, which faults into the guard page under KFENCE (enabled by default in mainstream distro and Android kernels) and raises a slab-out-of-bounds BUG under KASAN or SLUB redzoning, producing an oops or, with `panic_on_warn`, a full kernel panic."}]}],"providerMetadata":{"shortName":"Linux","orgId":"416baaa9-dc9f-4396-8d5f-8c081fb06d67","dateUpdated":"2026-08-05T11:33:53.488Z"},"cpeApplicability":[{"nodes":[{"operator":"OR","negate":false,"cpeMatch":[{"vulnerable":true,"criteria":"cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*","versionStartIncluding":"4.10","versionEndExcluding":"4.19.317"},{"vulnerable":true,"criteria":"cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*","versionStartIncluding":"4.10","versionEndExcluding":"5.4.279"},{"vulnerable":true,"criteria":"cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*","versionStartIncluding":"4.10","versionEndExcluding":"5.10.221"},{"vulnerable":true,"criteria":"cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*","versionStartIncluding":"4.10","versionEndExcluding":"5.15.162"},{"vulnerable":true,"criteria":"cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*","versionStartIncluding":"4.10","versionEndExcluding":"6.1.95"},{"vulnerable":true,"criteria":"cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*","versionStartIncluding":"4.10","versionEndExcluding":"6.6.35"},{"vulnerable":true,"criteria":"cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*","versionStartIncluding":"4.10","versionEndExcluding":"6.9.6"},{"vulnerable":true,"criteria":"cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*","versionStartIncluding":"4.10","versionEndExcluding":"6.10"}]}]}],"x_generator":{"engine":"bippy-1.2.0"}},"adp":[{"title":"CVE Program Container","references":[{"url":"https://git.kernel.org/stable/c/e9bce7c751f6d6c7be88c0bc081a66aaf61a23ee","tags":["x_transferred"]},{"url":"https://git.kernel.org/stable/c/19649e49a6df07cd2e03e0a11396fd3a99485ec2","tags":["x_transferred"]},{"url":"https://git.kernel.org/stable/c/0081d2b3ae0a17a86b8cc0fa3c8bdc54e233ba16","tags":["x_transferred"]},{"url":"https://git.kernel.org/stable/c/521f333e644c4246ca04a4fc4772edc53dd2a801","tags":["x_transferred"]},{"url":"https://git.kernel.org/stable/c/46bab2bcd771e725ff5ca3a68ba68cfeac45676c","tags":["x_transferred"]},{"url":"https://git.kernel.org/stable/c/9079338c5a0d1f1fee34fb1c9e99b754efe414c5","tags":["x_transferred"]},{"url":"https://git.kernel.org/stable/c/18abb5db0aa9b2d48f7037a88b41af2eef821674","tags":["x_transferred"]},{"url":"https://git.kernel.org/stable/c/4254dfeda82f20844299dca6c38cbffcfd499f41","tags":["x_transferred"]},{"url":"https://lists.debian.org/debian-lts-announce/2025/01/msg00001.html"}],"providerMetadata":{"shortName":"CVE","orgId":"af854a3a-2127-422b-91ae-364da2661108","dateUpdated":"2025-11-03T21:57:28.834Z"}},{"title":"CISA ADP Vulnrichment","metrics":[{"other":{"type":"ssvc","content":{"id":"CVE-2024-40901","role":"CISA Coordinator","options":[{"Exploitation":"none"},{"Automatable":"no"},{"Technical Impact":"partial"}],"version":"2.0.3","timestamp":"2024-09-10T17:06:31.349447Z"}}}],"providerMetadata":{"shortName":"CISA-ADP","orgId":"134c704f-9b21-4f2e-91b3-4a467353bcc0","dateUpdated":"2024-09-11T17:34:38.538Z"}},{"affected":[{"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-355557.html"}],"providerMetadata":{"shortName":"siemens-SADP","orgId":"0b142b55-0307-4c5a-b3c9-f314f3fb7c5e","dateUpdated":"2026-10-15T00:44:54.665Z"},"x_adpType":"supplier"}]}}}