In the Linux kernel, the following vulnerability has been resolved:
dm thin: fix use-after-free crash in dmsmregisterthresholdcallback
Fault inject on pool metadata device reports: BUG: KASAN: use-after-free in dmpoolregistermetadatathreshold+0x40/0x80 Read of size 8 at addr ffff8881b9d50068 by task dmsetup/950
CPU: 7 PID: 950 Comm: dmsetup Tainted: G W 5.19.0-rc6 #1 Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS 1.14.0-1.fc33 04/01/2014 Call Trace: <TASK> dumpstacklvl+0x34/0x44 printaddressdescription.constprop.0.cold+0xeb/0x3f4 kasanreport.cold+0xe6/0x147 dmpoolregistermetadatathreshold+0x40/0x80 poolctr+0xa0a/0x1150 dmtableaddtarget+0x2c8/0x640 tableload+0x1fd/0x430 ctlioctl+0x2c4/0x5a0 dmctl_ioctl+0xa/0x10 __x64sysioctl+0xb3/0xd0 dosyscall64+0x35/0x80 entrySYSCALL64afterhwframe+0x46/0xb0
This can be easily reproduced using: echo offline > /sys/block/sda/device/state dd if=/dev/zero of=/dev/mapper/thin bs=4k count=10 dmsetup load pool --table "0 20971520 thin-pool /dev/sda /dev/sdb 128 0 0"
If a metadata commit fails, the transaction will be aborted and the metadata space maps will be destroyed. If a DM table reload then happens for this failed thin-pool, a use-after-free will occur in dmsmregisterthresholdcallback (called from dmpoolregistermetadatathreshold).
Fix this by in dmpoolregistermetadatathreshold() by returning the -EINVAL error if the thin-pool is in fail mode. Also fail pool_ctr() with a new error message: "Error registering metadata threshold".
{
"cna_assigner": "Linux",
"osv_generated_from": "https://github.com/CVEProject/cvelistV5/tree/main/cves/2022/50xxx/CVE-2022-50092.json"
}[
{
"signature_version": "v1",
"digest": {
"length": 213.0,
"function_hash": "59074473449400742917679790223617021667"
},
"deprecated": false,
"signature_type": "Function",
"id": "CVE-2022-50092-035c907b",
"target": {
"function": "dm_pool_register_metadata_threshold",
"file": "drivers/md/dm-thin-metadata.c"
},
"source": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git@f83131a3071a0b61a4d7dca70f95adb3ffad920e"
},
{
"signature_version": "v1",
"digest": {
"threshold": 0.9,
"line_hashes": [
"30150166429201985097763208018852617551",
"155397136384879686460318878852014603421",
"273977688126330814617688085524651016023",
"313378237857658491376535391438551343071",
"294664963946119690832316526080174507177"
]
},
"deprecated": false,
"signature_type": "Line",
"id": "CVE-2022-50092-604244e1",
"target": {
"file": "drivers/md/dm-thin.c"
},
"source": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git@f83131a3071a0b61a4d7dca70f95adb3ffad920e"
},
{
"signature_version": "v1",
"digest": {
"length": 2768.0,
"function_hash": "249858341471208346482158551493190612383"
},
"deprecated": false,
"signature_type": "Function",
"id": "CVE-2022-50092-e3bcac93",
"target": {
"function": "pool_ctr",
"file": "drivers/md/dm-thin.c"
},
"source": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git@f83131a3071a0b61a4d7dca70f95adb3ffad920e"
},
{
"digest": {
"threshold": 0.9,
"line_hashes": [
"16529511490967792599669371931843741040",
"297114256853781335659224176034712310776",
"113720803604668716485215466463148646942",
"4855201950401957708749467998283793346",
"308852000970892712432794245964722370818",
"129335565632235321763874397543097556867"
]
},
"signature_version": "v1",
"deprecated": false,
"signature_type": "Line",
"id": "CVE-2022-50092-fae51066",
"target": {
"file": "drivers/md/dm-thin-metadata.c"
},
"source": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git@f83131a3071a0b61a4d7dca70f95adb3ffad920e"
}
]
"https://storage.googleapis.com/cve-osv-conversion/osv-output/CVE-2022-50092.json"