In the Linux kernel, the following vulnerability has been resolved:
blk-iocost: fix divide by 0 error in calc_lcoefs()
echo max of u64 to cost.model can cause divide by 0 error.
# echo 8:0 rbps=18446744073709551615 > /sys/fs/cgroup/io.cost.model
divide error: 0000 [#1] PREEMPT SMP RIP: 0010:calclcoefs+0x4c/0xc0 Call Trace: <TASK> iocrefreshparams+0x2b3/0x4f0 ioccostmodelwrite+0x3cb/0x4c0 ? copyfromiter+0x6d/0x6c0 ? kernfsfopwriteiter+0xfc/0x270 cgroupfilewrite+0xa0/0x200 kernfsfopwriteiter+0x17d/0x270 vfswrite+0x414/0x620 ksyswrite+0x73/0x160 _x64syswrite+0x1e/0x30 dosyscall64+0x35/0x80 entrySYSCALL64afterhwframe+0x63/0xcd
calclcoefs() uses the input value of cost.model in DIVROUNDUPULL, overflow would happen if bps plus IOCPAGESIZE is greater than ULLONG_MAX, it can cause divide by 0 error.
Fix the problem by setting basecost
{
"osv_generated_from": "https://github.com/CVEProject/cvelistV5/tree/main/cves/2023/53xxx/CVE-2023-53783.json",
"cna_assigner": "Linux"
}