In the Linux kernel, the following vulnerability has been resolved:
usb: xhci: tegra: fix sleep in atomic call
When we set the dual-role port to Host mode, we observed the following splat: [ 167.057718] BUG: sleeping function called from invalid context at include/linux/sched/mm.h:229 [ 167.057872] Workqueue: events tegraxusbusbphywork [ 167.057954] Call trace: [ 167.057962] dumpbacktrace+0x0/0x210 [ 167.057996] showstack+0x30/0x50 [ 167.058020] dumpstacklvl+0x64/0x84 [ 167.058065] dumpstack+0x14/0x34 [ 167.058100] _mightresched+0x144/0x180 [ 167.058140] _mightsleep+0x64/0xd0 [ 167.058171] slabpreallochook.constprop.0+0xa8/0x110 [ 167.058202] _kmalloctrackcaller+0x74/0x2b0 [ 167.058233] kvasprintf+0xa4/0x190 [ 167.058261] kasprintf+0x58/0x90 [ 167.058285] tegraxusbfindportnode.isra.0+0x58/0xd0 [ 167.058334] tegraxusbfindport+0x38/0xa0 [ 167.058380] tegraxusbpadctlgetusb3companion+0x38/0xd0 [ 167.058430] tegraxhciidnotify+0x8c/0x1e0 [ 167.058473] notifiercallchain+0x88/0x100 [ 167.058506] atomicnotifiercallchain+0x44/0x70 [ 167.058537] tegraxusbusbphywork+0x60/0xd0 [ 167.058581] processonework+0x1dc/0x4c0 [ 167.058618] workerthread+0x54/0x410 [ 167.058650] kthread+0x188/0x1b0 [ 167.058672] retfromfork+0x10/0x20
The function tegraxusbpadctlgetusb3companion eventually calls tegraxusbfindport and this in turn calls kasprintf which might sleep and so cannot be called from an atomic context.
Fix this by moving the call to tegraxusbpadctlgetusb3companion to the tegraxhciidwork function where it is really needed.
[
{
"signature_version": "v1",
"source": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git@b4b4f17aa46c025da77aed5133b08971959c9684",
"deprecated": false,
"id": "CVE-2023-53475-00f45231",
"target": {
"function": "tegra_xhci_id_work",
"file": "drivers/usb/host/xhci-tegra.c"
},
"digest": {
"function_hash": "218147755464398749105661481893753772862",
"length": 1268.0
},
"signature_type": "Function"
},
{
"signature_version": "v1",
"source": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git@4c7f9d2e413dc06a157c4e5dccde84aaf4655eb3",
"deprecated": false,
"id": "CVE-2023-53475-208c3acf",
"target": {
"file": "drivers/usb/host/xhci-tegra.c"
},
"digest": {
"threshold": 0.9,
"line_hashes": [
"187958888318192224120385752805229136958",
"203318686306182268766779414814627730218",
"17303210367516675597705464987028292099",
"203133415507091614045689761650465075934",
"322259370211716411268877253465343347122",
"293756683156240544873301531455160018465",
"54527777088621193470741066969475283208",
"118496860505603409350986156385905945899",
"185535232699533448082253851369066722463"
]
},
"signature_type": "Line"
},
{
"signature_version": "v1",
"source": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git@4c7f9d2e413dc06a157c4e5dccde84aaf4655eb3",
"deprecated": false,
"id": "CVE-2023-53475-35b42c9f",
"target": {
"function": "tegra_xhci_id_work",
"file": "drivers/usb/host/xhci-tegra.c"
},
"digest": {
"function_hash": "218147755464398749105661481893753772862",
"length": 1268.0
},
"signature_type": "Function"
},
{
"signature_version": "v1",
"source": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git@130c61c516cd0684282a8f6ab163281d60642fc5",
"deprecated": false,
"id": "CVE-2023-53475-415a750b",
"target": {
"function": "tegra_xhci_id_work",
"file": "drivers/usb/host/xhci-tegra.c"
},
"digest": {
"function_hash": "218147755464398749105661481893753772862",
"length": 1268.0
},
"signature_type": "Function"
},
{
"signature_version": "v1",
"source": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git@1fe6015aa92cc0dfd875c1d3c7c1750a1b0767d9",
"deprecated": false,
"id": "CVE-2023-53475-51743917",
"target": {
"function": "tegra_xhci_id_notify",
"file": "drivers/usb/host/xhci-tegra.c"
},
"digest": {
"function_hash": "310164968971268259818940047431579704059",
"length": 780.0
},
"signature_type": "Function"
},
{
"signature_version": "v1",
"source": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git@4c7f9d2e413dc06a157c4e5dccde84aaf4655eb3",
"deprecated": false,
"id": "CVE-2023-53475-755062a8",
"target": {
"function": "tegra_xhci_id_notify",
"file": "drivers/usb/host/xhci-tegra.c"
},
"digest": {
"function_hash": "310164968971268259818940047431579704059",
"length": 780.0
},
"signature_type": "Function"
},
{
"signature_version": "v1",
"source": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git@b4b4f17aa46c025da77aed5133b08971959c9684",
"deprecated": false,
"id": "CVE-2023-53475-8756d1ec",
"target": {
"file": "drivers/usb/host/xhci-tegra.c"
},
"digest": {
"threshold": 0.9,
"line_hashes": [
"187958888318192224120385752805229136958",
"203318686306182268766779414814627730218",
"17303210367516675597705464987028292099",
"203133415507091614045689761650465075934",
"322259370211716411268877253465343347122",
"293756683156240544873301531455160018465",
"54527777088621193470741066969475283208",
"118496860505603409350986156385905945899",
"185535232699533448082253851369066722463"
]
},
"signature_type": "Line"
},
{
"signature_version": "v1",
"source": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git@130c61c516cd0684282a8f6ab163281d60642fc5",
"deprecated": false,
"id": "CVE-2023-53475-abcf5504",
"target": {
"file": "drivers/usb/host/xhci-tegra.c"
},
"digest": {
"threshold": 0.9,
"line_hashes": [
"187958888318192224120385752805229136958",
"203318686306182268766779414814627730218",
"17303210367516675597705464987028292099",
"203133415507091614045689761650465075934",
"322259370211716411268877253465343347122",
"293756683156240544873301531455160018465",
"54527777088621193470741066969475283208",
"118496860505603409350986156385905945899",
"185535232699533448082253851369066722463"
]
},
"signature_type": "Line"
},
{
"signature_version": "v1",
"source": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git@130c61c516cd0684282a8f6ab163281d60642fc5",
"deprecated": false,
"id": "CVE-2023-53475-b47ab888",
"target": {
"function": "tegra_xhci_id_notify",
"file": "drivers/usb/host/xhci-tegra.c"
},
"digest": {
"function_hash": "310164968971268259818940047431579704059",
"length": 780.0
},
"signature_type": "Function"
},
{
"signature_version": "v1",
"source": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git@1122474b757a5dd8b2b50008a97f33cdb10dff6e",
"deprecated": false,
"id": "CVE-2023-53475-c908c27a",
"target": {
"function": "tegra_xhci_id_notify",
"file": "drivers/usb/host/xhci-tegra.c"
},
"digest": {
"function_hash": "310164968971268259818940047431579704059",
"length": 780.0
},
"signature_type": "Function"
},
{
"signature_version": "v1",
"source": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git@1fe6015aa92cc0dfd875c1d3c7c1750a1b0767d9",
"deprecated": false,
"id": "CVE-2023-53475-d1a45866",
"target": {
"function": "tegra_xhci_id_work",
"file": "drivers/usb/host/xhci-tegra.c"
},
"digest": {
"function_hash": "218147755464398749105661481893753772862",
"length": 1268.0
},
"signature_type": "Function"
},
{
"signature_version": "v1",
"source": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git@1122474b757a5dd8b2b50008a97f33cdb10dff6e",
"deprecated": false,
"id": "CVE-2023-53475-d8ea669d",
"target": {
"file": "drivers/usb/host/xhci-tegra.c"
},
"digest": {
"threshold": 0.9,
"line_hashes": [
"187958888318192224120385752805229136958",
"203318686306182268766779414814627730218",
"17303210367516675597705464987028292099",
"203133415507091614045689761650465075934",
"322259370211716411268877253465343347122",
"293756683156240544873301531455160018465",
"54527777088621193470741066969475283208",
"118496860505603409350986156385905945899",
"185535232699533448082253851369066722463"
]
},
"signature_type": "Line"
},
{
"signature_version": "v1",
"source": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git@b4b4f17aa46c025da77aed5133b08971959c9684",
"deprecated": false,
"id": "CVE-2023-53475-e56a2cd0",
"target": {
"function": "tegra_xhci_id_notify",
"file": "drivers/usb/host/xhci-tegra.c"
},
"digest": {
"function_hash": "310164968971268259818940047431579704059",
"length": 780.0
},
"signature_type": "Function"
},
{
"signature_version": "v1",
"source": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git@1122474b757a5dd8b2b50008a97f33cdb10dff6e",
"deprecated": false,
"id": "CVE-2023-53475-e6d6a6a8",
"target": {
"function": "tegra_xhci_id_work",
"file": "drivers/usb/host/xhci-tegra.c"
},
"digest": {
"function_hash": "218147755464398749105661481893753772862",
"length": 1268.0
},
"signature_type": "Function"
},
{
"signature_version": "v1",
"source": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git@1fe6015aa92cc0dfd875c1d3c7c1750a1b0767d9",
"deprecated": false,
"id": "CVE-2023-53475-f57491e7",
"target": {
"file": "drivers/usb/host/xhci-tegra.c"
},
"digest": {
"threshold": 0.9,
"line_hashes": [
"187958888318192224120385752805229136958",
"203318686306182268766779414814627730218",
"17303210367516675597705464987028292099",
"203133415507091614045689761650465075934",
"322259370211716411268877253465343347122",
"293756683156240544873301531455160018465",
"54527777088621193470741066969475283208",
"118496860505603409350986156385905945899",
"185535232699533448082253851369066722463"
]
},
"signature_type": "Line"
}
]