In the Linux kernel, the following vulnerability has been resolved:
riscv: fix race when vmap stack overflow
Currently, when detecting vmap stack overflow, riscv firstly switches to the so called shadow stack, then use this shadow stack to call the getoverflowstack() to get the overflow stack. However, there's a race here if two or more harts use the same shadow stack at the same time.
To solve this race, we introduce spinshadowstack atomic var, which will be swap between its own address and 0 in atomic way, when the var is set, it means the shadowstack is being used; when the var is cleared, it means the shadowstack isn't being used.
[Palmer: Add AQ to the swap, and also some comments.]
{
"cna_assigner": "Linux",
"osv_generated_from": "https://github.com/CVEProject/cvelistV5/tree/main/cves/2022/49xxx/CVE-2022-49001.json"
}[
{
"signature_version": "v1",
"deprecated": false,
"id": "CVE-2022-49001-025f7e2a",
"source": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git@ac00301adb19df54f2eae1efc4bad7447c0156ce",
"digest": {
"line_hashes": [
"189438437295657685950611903961053416686",
"274801965056376310915837951660848685551",
"80300010743415969679268657004821860997",
"232094737266503657333396784105288871092",
"236617716362753625487486000900160576790",
"271000660120824427882109894256512522388",
"105731649179634276627484702522870203683"
],
"threshold": 0.9
},
"target": {
"file": "arch/riscv/kernel/traps.c"
},
"signature_type": "Line"
},
{
"signature_version": "v1",
"deprecated": false,
"id": "CVE-2022-49001-46bfc245",
"source": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git@879fabc5a95401d9bce357e4b1d24ae4a360a81f",
"digest": {
"length": 504.0,
"function_hash": "261051262998256476965719214614071769477"
},
"target": {
"function": "handle_bad_stack",
"file": "arch/riscv/kernel/traps.c"
},
"signature_type": "Function"
},
{
"signature_version": "v1",
"deprecated": false,
"id": "CVE-2022-49001-85b3ff38",
"source": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git@879fabc5a95401d9bce357e4b1d24ae4a360a81f",
"digest": {
"line_hashes": [
"189438437295657685950611903961053416686",
"274801965056376310915837951660848685551",
"80300010743415969679268657004821860997",
"232094737266503657333396784105288871092",
"236617716362753625487486000900160576790",
"271000660120824427882109894256512522388",
"105731649179634276627484702522870203683"
],
"threshold": 0.9
},
"target": {
"file": "arch/riscv/kernel/traps.c"
},
"signature_type": "Line"
},
{
"signature_version": "v1",
"deprecated": false,
"id": "CVE-2022-49001-8a46fbd5",
"source": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git@7e1864332fbc1b993659eab7974da9fe8bf8c128",
"digest": {
"length": 504.0,
"function_hash": "261051262998256476965719214614071769477"
},
"target": {
"function": "handle_bad_stack",
"file": "arch/riscv/kernel/traps.c"
},
"signature_type": "Function"
},
{
"signature_version": "v1",
"deprecated": false,
"id": "CVE-2022-49001-b7e9d898",
"source": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git@ac00301adb19df54f2eae1efc4bad7447c0156ce",
"digest": {
"length": 504.0,
"function_hash": "261051262998256476965719214614071769477"
},
"target": {
"function": "handle_bad_stack",
"file": "arch/riscv/kernel/traps.c"
},
"signature_type": "Function"
},
{
"signature_version": "v1",
"deprecated": false,
"id": "CVE-2022-49001-f6510ac0",
"source": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git@7e1864332fbc1b993659eab7974da9fe8bf8c128",
"digest": {
"line_hashes": [
"189438437295657685950611903961053416686",
"274801965056376310915837951660848685551",
"80300010743415969679268657004821860997",
"232094737266503657333396784105288871092",
"236617716362753625487486000900160576790",
"271000660120824427882109894256512522388",
"105731649179634276627484702522870203683"
],
"threshold": 0.9
},
"target": {
"file": "arch/riscv/kernel/traps.c"
},
"signature_type": "Line"
}
]