In the Linux kernel, the following vulnerability has been resolved:
cgroup,freezer: hold cpuhotpluglock before freezer_mutex
syzbot is reporting circular locking dependency between cpuhotpluglock and freezermutex, for commit f5d39b020809 ("freezer,sched: Rewrite core freezer logic") replaced atomicinc() in freezerapplystate() with staticbranchinc() which holds cpuhotpluglock.
cpuhotpluglock => cgroupthreadgrouprwsem => freezer_mutex
cgroupfilewrite() { cgroupprocswrite() { _cgroupprocswrite() { cgroupprocswritestart() { cgroupattachlock() { cpusreadlock() { percpudownread(&cpuhotpluglock); } percpudownwrite(&cgroupthreadgrouprwsem); } } cgroupattachtask() { cgroupmigrate() { cgroupmigrateexecute() { freezerattach() { mutexlock(&freezermutex); (...snipped...) } } } } (...snipped...) } } }
freezermutex => cpuhotplug_lock
cgroupfilewrite() { freezerwrite() { freezerchangestate() { mutexlock(&freezermutex); freezerapplystate() { staticbranchinc(&freezeractive) { statickeyslowinc() { cpusreadlock(); statickeyslowinccpuslocked(); cpusreadunlock(); } } } mutexunlock(&freezer_mutex); } } }
Swap locking order by moving cpusreadlock() in freezerapplystate() to before mutexlock(&freezermutex) in freezerchangestate().
{
"cna_assigner": "Linux",
"osv_generated_from": "https://github.com/CVEProject/cvelistV5/tree/main/cves/2023/53xxx/CVE-2023-53522.json"
}[
{
"signature_type": "Line",
"deprecated": false,
"id": "CVE-2023-53522-19d2d352",
"target": {
"file": "kernel/cgroup/legacy_freezer.c"
},
"digest": {
"threshold": 0.9,
"line_hashes": [
"241445978640685781987447783395532207842",
"133127142757676610038920533382006955795",
"164697580597447498412311477918818008655",
"92943256199724136006664817444074477219",
"35151015174202458026127374736652706485",
"306661769402342123217647162327975679917",
"68639707973845971433485121959390363888",
"266610805211352865526035141588412682404",
"228028837465649958373889593833664616574",
"162992251641926747166955740772940806431",
"313865265327860167308693113032547797835",
"292165508847298937550348822049537912974",
"39376146763818377142787604157839148545",
"119200567288906494697717777471223331732",
"675538389298870792209634558985086791",
"313724464891238294626069417481658755850",
"21387746192836123156525154647300024650",
"33332663833320998087976029197660217395",
"27642729059667171778661562813319427320"
]
},
"signature_version": "v1",
"source": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git@3756171b97c307d9df8b8ded1d883eec30172085"
},
{
"signature_type": "Function",
"deprecated": false,
"id": "CVE-2023-53522-4a559ac5",
"target": {
"file": "kernel/cgroup/legacy_freezer.c",
"function": "freezer_change_state"
},
"digest": {
"length": 524.0,
"function_hash": "323541569648794365536492287699664758674"
},
"signature_version": "v1",
"source": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git@3756171b97c307d9df8b8ded1d883eec30172085"
}
]
"https://storage.googleapis.com/cve-osv-conversion/osv-output/CVE-2023-53522.json"