CVE-2021-47584

In the Linux kernel, the following vulnerability has been resolved: iocost: Fix divide-by-zero on donation from low hweight cgroup The donation calculation logic assumes that the donor has non-zero after-donation hweight, so the lowest active hweight a donating cgroup can have is 2 so that it can donate 1 while keeping the other 1 for itself. Earlier, we only donated from cgroups with sizable surpluses so this condition was always true. However, with the precise donation algorithm implemented, f1de2439ec43 ("blk-iocost: revamp donation amount determination") made the donation amount calculation exact enabling even low hweight cgroups to donate. This means that in rare occasions, a cgroup with active hweight of 1 can enter donation calculation triggering the following warning and then a divide-by-zero oops. WARNING: CPU: 4 PID: 0 at block/blk-iocost.c:1928 transfer_surpluses.cold+0x0/0x53 [884/94867] ... RIP: 0010:transfer_surpluses.cold+0x0/0x53 Code: 92 ff 48 c7 c7 28 d1 ab b5 65 48 8b 34 25 00 ae 01 00 48 81 c6 90 06 00 00 e8 8b 3f fe ff 48 c7 c0 ea ff ff ff e9 95 ff 92 ff <0f> 0b 48 c7 c7 30 da ab b5 e8 71 3f fe ff 4c 89 e8 4d 85 ed 74 0 4 ... Call Trace: <IRQ> ioc_timer_fn+0x1043/0x1390 call_timer_fn+0xa1/0x2c0 __run_timers.part.0+0x1ec/0x2e0 run_timer_softirq+0x35/0x70 ... iocg: invalid donation weights in /a/b: active=1 donating=1 after=0 Fix it by excluding cgroups w/ active hweight < 2 from donating. Excluding these extreme low hweight donations shouldn't affect work conservation in any meaningful way.
Configurations

Configuration 1 (hide)

OR cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*
cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*

History

21 Nov 2024, 06:36

Type Values Removed Values Added
References () https://git.kernel.org/stable/c/3a1a4eb574178c21241a6200f4785572e661c472 - Patch () https://git.kernel.org/stable/c/3a1a4eb574178c21241a6200f4785572e661c472 - Patch
References () https://git.kernel.org/stable/c/a7c80674538f15f85d68138240aae440b8039519 - Patch () https://git.kernel.org/stable/c/a7c80674538f15f85d68138240aae440b8039519 - Patch
References () https://git.kernel.org/stable/c/edaa26334c117a584add6053f48d63a988d25a6e - Patch () https://git.kernel.org/stable/c/edaa26334c117a584add6053f48d63a988d25a6e - Patch

19 Aug 2024, 18:35

Type Values Removed Values Added
References () https://git.kernel.org/stable/c/3a1a4eb574178c21241a6200f4785572e661c472 - () https://git.kernel.org/stable/c/3a1a4eb574178c21241a6200f4785572e661c472 - Patch
References () https://git.kernel.org/stable/c/a7c80674538f15f85d68138240aae440b8039519 - () https://git.kernel.org/stable/c/a7c80674538f15f85d68138240aae440b8039519 - Patch
References () https://git.kernel.org/stable/c/edaa26334c117a584add6053f48d63a988d25a6e - () https://git.kernel.org/stable/c/edaa26334c117a584add6053f48d63a988d25a6e - Patch
First Time Linux
Linux linux Kernel
CVSS v2 : unknown
v3 : unknown
v2 : unknown
v3 : 5.5
CWE CWE-369
CPE cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*

20 Jun 2024, 12:43

Type Values Removed Values Added
Summary
  • (es) En el kernel de Linux, se ha resuelto la siguiente vulnerabilidad: iocost: corrige la división por cero en la donación de un grupo c de bajo peso. La lógica de cálculo de la donación supone que el donante tiene un peso posterior a la donación distinto de cero, por lo que el peso activo más bajo es una donación. cgroup puede tener 2 para poder donar 1 y conservar el otro para sí mismo. Anteriormente, solo donábamos de grupos comunitarios con excedentes considerables, por lo que esta condición siempre fue cierta. Sin embargo, con el algoritmo de donación preciso implementado, f1de2439ec43 ("blk-iocost: renovar la determinación del monto de la donación") hizo que el cálculo del monto de la donación fuera exacto, permitiendo que incluso los grupos de bajo peso donaran. Esto significa que, en raras ocasiones, un grupo con un peso activo de 1 puede ingresar al cálculo de la donación, lo que genera la siguiente advertencia y luego una división por cero. ADVERTENCIA: CPU: 4 PID: 0 en block/blk-iocost.c:1928 transfer_surpluses.cold+0x0/0x53 [884/94867] ... RIP: 0010:transfer_surpluses.cold+0x0/0x53 Código: 92 y siguientes 48 c7 c7 28 d1 ab b5 65 48 8b 34 25 00 ae 01 00 48 81 c6 90 06 00 00 e8 8b 3f fe ff 48 c7 c0 ea ff ff ff e9 95 ff 92 ff &lt;0f&gt; 0b 48 c7 c7 30 da ab b5 e8 71 3f fe ff 4c 89 e8 4d 85 ed 74 0 4 ... Seguimiento de llamadas: ioc_timer_fn+0x1043/0x1390 call_timer_fn+0xa1/0x2c0 __run_timers.part.0+0x1ec/0x2e0 run_timer_softirq+0x35/0x70 ... iocg : pesos de donación no válidos en /a/b: activo=1 donación=1 después=0 Corríjalo excluyendo cgroups con hweight activo &lt; 2 de la donación. Excluir estas donaciones de peso extremadamente bajo no debería afectar la conservación del trabajo de ninguna manera significativa.

19 Jun 2024, 15:15

Type Values Removed Values Added
New CVE

Information

Published : 2024-06-19 15:15

Updated : 2024-11-21 06:36


NVD link : CVE-2021-47584

Mitre link : CVE-2021-47584

CVE.ORG link : CVE-2021-47584


JSON object : View

Products Affected

linux

  • linux_kernel
CWE
CWE-369

Divide By Zero