In the Linux kernel, the following vulnerability has been resolved:
PCI: Fix use-after-free in pcibusreleasedomainnr()
Commit c14f7ccc9f5d ("PCI: Assign PCI domain IDs by ida_alloc()") introduced a use-after-free bug in the bus removal cleanup. The issue was found with kfence:
[ 19.293351] BUG: KFENCE: use-after-free read in pcibusreleasedomainnr+0x10/0x70
[ 19.302817] Use-after-free read at 0x000000007f3b80eb (in kfence-#115): [ 19.309677] pcibusreleasedomainnr+0x10/0x70 [ 19.309691] dwpciehostdeinit+0x28/0x78 [ 19.309702] tegrapciedeinitcontroller+0x1c/0x38 [pcietegra194] [ 19.309734] tegrapciedwprobe+0x648/0xb28 [pcietegra194] [ 19.309752] platformprobe+0x90/0xd8 ...
[ 19.311457] kfence-#115: 0x00000000063a155a-0x00000000ba698da8, size=1072, cache=kmalloc-2k
[ 19.311469] allocated by task 96 on cpu 10 at 19.279323s: [ 19.311562] _kmemcacheallocnode+0x260/0x278 [ 19.311571] kmalloctrace+0x24/0x30 [ 19.311580] pciallocbus+0x24/0xa0 [ 19.311590] pciregisterhostbridge+0x48/0x4b8 [ 19.311601] pciscanrootbusbridge+0xc0/0xe8 [ 19.311613] pcihostprobe+0x18/0xc0 [ 19.311623] dwpciehostinit+0x2c0/0x568 [ 19.311630] tegrapciedwprobe+0x610/0xb28 [pcietegra194] [ 19.311647] platformprobe+0x90/0xd8 ...
[ 19.311782] freed by task 96 on cpu 10 at 19.285833s: [ 19.311799] releasepcibusdev+0x30/0x40 [ 19.311808] devicerelease+0x30/0x90 [ 19.311814] kobjectput+0xa8/0x120 [ 19.311832] deviceunregister+0x20/0x30 [ 19.311839] pciremovebus+0x78/0x88 [ 19.311850] pciremoverootbus+0x5c/0x98 [ 19.311860] dwpciehostdeinit+0x28/0x78 [ 19.311866] tegrapciedeinitcontroller+0x1c/0x38 [pcietegra194] [ 19.311883] tegrapciedwprobe+0x648/0xb28 [pcietegra194] [ 19.311900] platformprobe+0x90/0xd8 ...
[ 19.313579] CPU: 10 PID: 96 Comm: kworker/u24:2 Not tainted 6.2.0 #4 [ 19.320171] Hardware name: /, BIOS 1.0-d7fb19b 08/10/2022 [ 19.325852] Workqueue: eventsunbound deferredprobeworkfunc
The stack trace is a bit misleading as dwpciehostdeinit() doesn't directly call pcibusreleasedomainnr(). The issue turns out to be in pciremoverootbus() which first calls pciremovebus() which frees the struct pcibus when its struct device is released. Then pcibusreleasedomainnr() is called and accesses the freed struct pcibus. Reordering these fixes the issue.
{
"cna_assigner": "Linux",
"osv_generated_from": "https://github.com/CVEProject/cvelistV5/tree/main/cves/2023/53xxx/CVE-2023-53363.json"
}"https://storage.googleapis.com/osv-test-cve-osv-conversion/osv-output/CVE-2023-53363.json"
[
{
"id": "CVE-2023-53363-35f9ac13",
"source": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git@fbf45385e3419b8698b5e0a434847072375cfec2",
"target": {
"file": "drivers/pci/remove.c",
"function": "pci_remove_root_bus"
},
"signature_type": "Function",
"signature_version": "v1",
"deprecated": false,
"digest": {
"length": 442.0,
"function_hash": "67127409959513623613861578492494286713"
}
},
{
"id": "CVE-2023-53363-3cdf2778",
"source": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git@30ba2d09edb5ea857a1473ae3d820911347ada62",
"target": {
"file": "drivers/pci/remove.c",
"function": "pci_remove_root_bus"
},
"signature_type": "Function",
"signature_version": "v1",
"deprecated": false,
"digest": {
"length": 442.0,
"function_hash": "67127409959513623613861578492494286713"
}
},
{
"id": "CVE-2023-53363-4166dfc3",
"source": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git@ad367516b1c09317111255ecfbf5e42c33e31918",
"target": {
"file": "drivers/pci/remove.c"
},
"signature_type": "Line",
"signature_version": "v1",
"deprecated": false,
"digest": {
"line_hashes": [
"199828787599451668731756498442509895444",
"189641059283103732696537118155208939360",
"102328438276743736435673540839615800287",
"258886139854457535633754532298116363955",
"198841821230972913518633885120579148854",
"320065354642450382662019248122737917029",
"164375690487664290794901875821494674645",
"117429885199548767219468798721641823562"
],
"threshold": 0.9
}
},
{
"id": "CVE-2023-53363-5ab54cc6",
"source": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git@52b0343c7d628f37b38e3279ba585526b850ad3b",
"target": {
"file": "drivers/pci/remove.c"
},
"signature_type": "Line",
"signature_version": "v1",
"deprecated": false,
"digest": {
"line_hashes": [
"199828787599451668731756498442509895444",
"189641059283103732696537118155208939360",
"102328438276743736435673540839615800287",
"258886139854457535633754532298116363955",
"198841821230972913518633885120579148854",
"320065354642450382662019248122737917029",
"164375690487664290794901875821494674645",
"117429885199548767219468798721641823562"
],
"threshold": 0.9
}
},
{
"id": "CVE-2023-53363-c964e663",
"source": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git@fbf45385e3419b8698b5e0a434847072375cfec2",
"target": {
"file": "drivers/pci/remove.c"
},
"signature_type": "Line",
"signature_version": "v1",
"deprecated": false,
"digest": {
"line_hashes": [
"199828787599451668731756498442509895444",
"189641059283103732696537118155208939360",
"102328438276743736435673540839615800287",
"258886139854457535633754532298116363955",
"198841821230972913518633885120579148854",
"320065354642450382662019248122737917029",
"164375690487664290794901875821494674645",
"117429885199548767219468798721641823562"
],
"threshold": 0.9
}
},
{
"id": "CVE-2023-53363-e4793a07",
"source": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git@07a75c0050e59c50f038cc5f4e2a3258c8f8c9d0",
"target": {
"file": "drivers/pci/remove.c"
},
"signature_type": "Line",
"signature_version": "v1",
"deprecated": false,
"digest": {
"line_hashes": [
"199828787599451668731756498442509895444",
"189641059283103732696537118155208939360",
"102328438276743736435673540839615800287",
"258886139854457535633754532298116363955",
"198841821230972913518633885120579148854",
"320065354642450382662019248122737917029",
"164375690487664290794901875821494674645",
"117429885199548767219468798721641823562"
],
"threshold": 0.9
}
},
{
"id": "CVE-2023-53363-e8e140be",
"source": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git@07a75c0050e59c50f038cc5f4e2a3258c8f8c9d0",
"target": {
"file": "drivers/pci/remove.c",
"function": "pci_remove_root_bus"
},
"signature_type": "Function",
"signature_version": "v1",
"deprecated": false,
"digest": {
"length": 442.0,
"function_hash": "67127409959513623613861578492494286713"
}
},
{
"id": "CVE-2023-53363-f89e6fd4",
"source": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git@52b0343c7d628f37b38e3279ba585526b850ad3b",
"target": {
"file": "drivers/pci/remove.c",
"function": "pci_remove_root_bus"
},
"signature_type": "Function",
"signature_version": "v1",
"deprecated": false,
"digest": {
"length": 442.0,
"function_hash": "67127409959513623613861578492494286713"
}
},
{
"id": "CVE-2023-53363-f90b3332",
"source": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git@30ba2d09edb5ea857a1473ae3d820911347ada62",
"target": {
"file": "drivers/pci/remove.c"
},
"signature_type": "Line",
"signature_version": "v1",
"deprecated": false,
"digest": {
"line_hashes": [
"199828787599451668731756498442509895444",
"189641059283103732696537118155208939360",
"102328438276743736435673540839615800287",
"258886139854457535633754532298116363955",
"198841821230972913518633885120579148854",
"320065354642450382662019248122737917029",
"164375690487664290794901875821494674645",
"117429885199548767219468798721641823562"
],
"threshold": 0.9
}
},
{
"id": "CVE-2023-53363-fffc449a",
"source": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git@ad367516b1c09317111255ecfbf5e42c33e31918",
"target": {
"file": "drivers/pci/remove.c",
"function": "pci_remove_root_bus"
},
"signature_type": "Function",
"signature_version": "v1",
"deprecated": false,
"digest": {
"length": 442.0,
"function_hash": "67127409959513623613861578492494286713"
}
}
]