In the Linux kernel, the following vulnerability has been resolved:
swiotlb: initialise restricted pool listhead when SWIOTLBDYNAMIC=y
Using restricted DMA pools (CONFIGDMARESTRICTEDPOOL=y) in conjunction with dynamic SWIOTLB (CONFIGSWIOTLB_DYNAMIC=y) leads to the following crash when initialising the restricted pools at boot-time:
| Unable to handle kernel NULL pointer dereference at virtual address 0000000000000008 | Internal error: Oops: 0000000096000005 [#1] PREEMPT SMP | pc : rmemswiotlbdeviceinit+0xfc/0x1ec | lr : rmemswiotlbdeviceinit+0xf0/0x1ec | Call trace: | rmemswiotlbdeviceinit+0xfc/0x1ec | ofreservedmemdeviceinitbyidx+0x18c/0x238 | ofdmaconfigureid+0x31c/0x33c | platformdmaconfigure+0x34/0x80
faddr2line reveals that the crash is in the list validation code:
include/linux/list.h:83 include/linux/rculist.h:79 include/linux/rculist.h:106 kernel/dma/swiotlb.c:306 kernel/dma/swiotlb.c:1695
because addmempool() is trying to listaddrcu() to a NULL 'mem->pools'.
Fix the crash by initialising the 'mem->pools' listhead in rmemswiotlbdeviceinit() before calling addmempool().
{ "vanir_signatures": [ { "signature_version": "v1", "source": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git@f2a6b3ed20f2dea4cb645abc6a73c4595662adca", "deprecated": false, "id": "CVE-2024-36925-22936fc4", "signature_type": "Function", "digest": { "length": 1176.0, "function_hash": "326587672131410602926291188670202135476" }, "target": { "file": "kernel/dma/swiotlb.c", "function": "rmem_swiotlb_device_init" } }, { "signature_version": "v1", "source": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git@f62e0fefcdfe2c05ccb1aa80521a69524eea9c84", "deprecated": false, "id": "CVE-2024-36925-42341a77", "signature_type": "Function", "digest": { "length": 1176.0, "function_hash": "326587672131410602926291188670202135476" }, "target": { "file": "kernel/dma/swiotlb.c", "function": "rmem_swiotlb_device_init" } }, { "signature_version": "v1", "source": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git@f2a6b3ed20f2dea4cb645abc6a73c4595662adca", "deprecated": false, "id": "CVE-2024-36925-79eeae66", "signature_type": "Line", "digest": { "threshold": 0.9, "line_hashes": [ "18516581189259851170037252143704269835", "206646336962070519462943934019771268725", "62136704475791303120973347206462261641", "261632450790260421649179755666674855368" ] }, "target": { "file": "kernel/dma/swiotlb.c" } }, { "signature_version": "v1", "source": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git@75961ffb5cb3e5196f19cae7683f35cc88b50800", "deprecated": false, "id": "CVE-2024-36925-9d5ac454", "signature_type": "Function", "digest": { "length": 1176.0, "function_hash": "326587672131410602926291188670202135476" }, "target": { "file": "kernel/dma/swiotlb.c", "function": "rmem_swiotlb_device_init" } }, { "signature_version": "v1", "source": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git@75961ffb5cb3e5196f19cae7683f35cc88b50800", "deprecated": false, "id": "CVE-2024-36925-9fe49714", "signature_type": "Line", "digest": { "threshold": 0.9, "line_hashes": [ "18516581189259851170037252143704269835", "206646336962070519462943934019771268725", "62136704475791303120973347206462261641", "261632450790260421649179755666674855368" ] }, "target": { "file": "kernel/dma/swiotlb.c" } }, { "signature_version": "v1", "source": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git@f62e0fefcdfe2c05ccb1aa80521a69524eea9c84", "deprecated": false, "id": "CVE-2024-36925-dba4d026", "signature_type": "Line", "digest": { "threshold": 0.9, "line_hashes": [ "18516581189259851170037252143704269835", "206646336962070519462943934019771268725", "62136704475791303120973347206462261641", "261632450790260421649179755666674855368" ] }, "target": { "file": "kernel/dma/swiotlb.c" } } ] }