In the Linux kernel, the following vulnerability has been resolved:
usb: gadget: rndis: add spinlock for rndis response list
There’s no lock for rndis response list. It could cause list corruption
if there’re two different list_add at the same time like below.
It’s better to add in rndis_add_response / rndis_free_response
/ rndis_get_next_response to prevent any race condition on response list.
[ 361.894299] [1: irq/191-dwc3:16979] list_add corruption.
next->prev should be prev (ffffff80651764d0),
but was ffffff883dc36f80. (next=ffffff80651764d0).
[ 361.904380] [1: irq/191-dwc3:16979] Call trace:
[ 361.904391] [1: irq/191-dwc3:16979] __list_add_valid+0x74/0x90
[ 361.904401] [1: irq/191-dwc3:16979] rndis_msg_parser+0x168/0x8c0
[ 361.904409] [1: irq/191-dwc3:16979] rndis_command_complete+0x24/0x84
[ 361.904417] [1: irq/191-dwc3:16979] usb_gadget_giveback_request+0x20/0xe4
[ 361.904426] [1: irq/191-dwc3:16979] dwc3_gadget_giveback+0x44/0x60
[ 361.904434] [1: irq/191-dwc3:16979] dwc3_ep0_complete_data+0x1e8/0x3a0
[ 361.904442] [1: irq/191-dwc3:16979] dwc3_ep0_interrupt+0x29c/0x3dc
[ 361.904450] [1: irq/191-dwc3:16979] dwc3_process_event_entry+0x78/0x6cc
[ 361.904457] [1: irq/191-dwc3:16979] dwc3_process_event_buf+0xa0/0x1ec
[ 361.904465] [1: irq/191-dwc3:16979] dwc3_thread_interrupt+0x34/0x5c
[
{
"product": "Linux",
"vendor": "Linux",
"defaultStatus": "unaffected",
"repo": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git",
"programFiles": [
"drivers/usb/gadget/function/rndis.c",
"drivers/usb/gadget/function/rndis.h"
],
"versions": [
{
"version": "f6281af9d62e",
"lessThan": "9f5d8ba538ef",
"status": "affected",
"versionType": "git"
},
{
"version": "f6281af9d62e",
"lessThan": "669c2b178956",
"status": "affected",
"versionType": "git"
},
{
"version": "f6281af9d62e",
"lessThan": "9f688aadede6",
"status": "affected",
"versionType": "git"
},
{
"version": "f6281af9d62e",
"lessThan": "9ab652d41dea",
"status": "affected",
"versionType": "git"
},
{
"version": "f6281af9d62e",
"lessThan": "4ce247af3f30",
"status": "affected",
"versionType": "git"
},
{
"version": "f6281af9d62e",
"lessThan": "da514063440b",
"status": "affected",
"versionType": "git"
},
{
"version": "f6281af9d62e",
"lessThan": "33222d1571d7",
"status": "affected",
"versionType": "git"
},
{
"version": "f6281af9d62e",
"lessThan": "aaaba1c86d04",
"status": "affected",
"versionType": "git"
}
]
},
{
"product": "Linux",
"vendor": "Linux",
"defaultStatus": "affected",
"repo": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git",
"programFiles": [
"drivers/usb/gadget/function/rndis.c",
"drivers/usb/gadget/function/rndis.h"
],
"versions": [
{
"version": "4.6",
"status": "affected"
},
{
"version": "0",
"lessThan": "4.6",
"status": "unaffected",
"versionType": "custom"
},
{
"version": "4.9.304",
"lessThanOrEqual": "4.9.*",
"status": "unaffected",
"versionType": "custom"
},
{
"version": "4.14.269",
"lessThanOrEqual": "4.14.*",
"status": "unaffected",
"versionType": "custom"
},
{
"version": "4.19.232",
"lessThanOrEqual": "4.19.*",
"status": "unaffected",
"versionType": "custom"
},
{
"version": "5.4.182",
"lessThanOrEqual": "5.4.*",
"status": "unaffected",
"versionType": "custom"
},
{
"version": "5.10.103",
"lessThanOrEqual": "5.10.*",
"status": "unaffected",
"versionType": "custom"
},
{
"version": "5.15.26",
"lessThanOrEqual": "5.15.*",
"status": "unaffected",
"versionType": "custom"
},
{
"version": "5.16.12",
"lessThanOrEqual": "5.16.*",
"status": "unaffected",
"versionType": "custom"
},
{
"version": "5.17",
"lessThanOrEqual": "*",
"status": "unaffected",
"versionType": "original_commit_for_fix"
}
]
}
]
git.kernel.org/stable/c/33222d1571d7ce8c1c75f6b488f38968fa93d2d9
git.kernel.org/stable/c/4ce247af3f30078d5b97554f1ae6200a0222c15a
git.kernel.org/stable/c/669c2b178956718407af5631ccbc61c24413f038
git.kernel.org/stable/c/9ab652d41deab49848673c3dadb57ad338485376
git.kernel.org/stable/c/9f5d8ba538ef81cd86ea587ca3f8c77e26bea405
git.kernel.org/stable/c/9f688aadede6b862a0a898792b1a35421c93636f
git.kernel.org/stable/c/aaaba1c86d04dac8e49bf508b492f81506257da3
git.kernel.org/stable/c/da514063440b53a27309a4528b726f92c3cfe56f