Description
Ash.Actions.Read.AsyncLimiter busy-spins a scheduler while awaiting slow async reads
Summary
Uncontrolled Resource Consumption vulnerability in ash-project ash lets a slow asynchronous read spin a scheduler thread at full CPU while the framework waits for it.
Ash.Actions.Read.AsyncLimiter.await_at_least_one/1 (lib/ash/actions/read/async_limiter.ex) waited for concurrent async read tasks by polling each with Task.yield(task, 0) in a tight loop rather than blocking. While every outstanding task is still running (a slow related-data load or calculation), the loop returns immediately and repeats, busy-spinning and holding a BEAM scheduler at full CPU for the whole duration of the slow read; concurrent slow reads tie up further schedulers. The fix waits with Task.yield_many (a non-blocking sweep followed by a blocking wait with timeout: :infinity), so the process sleeps until a task completes instead of spinning.
This issue affects ash: from 2.19.0 before 3.32.2.
Mitigation
Minimal update. May introduce new vulnerabilities or breaking changes.
|
 hex | | =2.19.0 || =2.19.1 || =2.19.10 || =2.19.11 || =2.19.12 || =2.19.13 || =2.19.14 || =2.19.2 || =2.19.3 || =2.19.4 || =2.19.5 || =2.19.6 || =2.19.7 || =2.19.8 || =2.19.9 || =2.20.0 || =2.20.1 || =2.20.2 || =2.20.3 || =2.21.0 || =2.21.1 || =2.21.10 || =2.21.11 || =2.21.12 || =2.21.13 || =2.21.14 || =2.21.15 || =2.21.2 || =2.21.3 || =2.21.4 || =2.21.5 || =2.21.6 || =2.21.7 || =2.21.8 || =2.21.9 || =3.0.0 || =3.0.0-rc.0 || =3.0.0-rc.1 || =3.0.0-rc.10 || =3.0.0-rc.11 || =3.0.0-rc.12 || =3.0.0-rc.13 || =3.0.0-rc.14 || =3.0.0-rc.15 || =3.0.0-rc.16 || =3.0.0-rc.17 || =3.0.0-rc.18 || =3.0.0-rc.19 || =3.0.0-rc.20 || =3.0.0-rc.21 || =3.0.0-rc.22 || =3.0.0-rc.23 || =3.0.0-rc.24 || =3.0.0-rc.25 || =3.0.0-rc.26 || =3.0.0-rc.27 || =3.0.0-rc.28 || =3.0.0-rc.29 || =3.0.0-rc.3 || =3.0.0-rc.31 || =3.0.0-rc.32 || =3.0.0-rc.33 || =3.0.0-rc.34 || =3.0.0-rc.35 || =3.0.0-rc.36 || =3.0.0-rc.37 || =3.0.0-rc.38 || =3.0.0-rc.39 || =3.0.0-rc.4 || =3.0.0-rc.40 || =3.0.0-rc.41 || =3.0.0-rc.42 || =3.0.0-rc.43 || =3.0.0-rc.44 || =3.0.0-rc.45 || =3.0.0-rc.46 || =3.0.0-rc.5 || =3.0.0-rc.6 || =3.0.0-rc.7 || =3.0.0-rc.8 || =3.0.0-rc.9 || =3.0.1 || =3.0.10 || =3.0.11 || =3.0.12 || =3.0.13 || =3.0.14 || =3.0.15 || =3.0.16 || =3.0.2 || =3.0.3 || =3.0.4 || =3.0.5 || =3.0.6 || =3.0.7 || =3.0.8 || =3.0.9 || =3.1.0 || =3.1.1 || =3.1.2 || =3.1.3 || =3.1.4 || =3.1.5 || =3.1.6 || =3.1.7 || =3.1.8 || =3.10.0 || =3.10.1 || =3.11.0 || =3.11.1 || =3.11.2 || =3.11.3 || =3.12.0 || =3.13.0 || =3.13.1 || =3.13.2 || =3.14.0 || =3.14.1 || =3.15.0 || =3.16.0 || =3.17.0 || =3.17.1 || =3.18.0 || =3.19.0 || =3.19.1 || =3.19.2 || =3.19.3 || =3.2.0 || =3.2.1 || =3.2.2 || =3.2.3 || =3.2.4 || =3.2.5 || =3.2.6 || =3.20.0 || =3.21.0 || =3.21.1 || =3.21.2 || =3.21.3 || =3.22.0 || =3.22.1 || =3.22.2 || =3.23.0 || =3.23.1 || =3.24.0 || =3.24.1 || =3.24.2 || =3.24.3 || =3.24.4 || =3.24.5 || =3.24.6 || =3.24.7 || =3.25.0 || =3.25.1 || =3.25.2 || =3.26.0 || =3.27.0 || =3.27.1 || =3.27.2 || =3.27.3 || =3.27.4 || =3.27.5 || =3.27.6 || =3.27.7 || =3.27.8 || =3.28.0 || =3.29.0 || =3.29.1 || =3.29.2 || =3.29.3 || =3.3.0 || =3.3.1 || =3.3.2 || =3.3.3 || =3.30.0 || =3.30.1 || =3.31.0 || =3.31.1 || =3.31.2 || =3.31.3 || =3.32.0 || =3.32.1 || =3.4.0 || =3.4.1 || =3.4.10 || =3.4.11 || =3.4.12 || =3.4.13 || =3.4.14 || =3.4.15 || =3.4.16 || =3.4.17 || =3.4.18 || =3.4.19 || =3.4.2 || =3.4.20 || =3.4.21 || =3.4.22 || =3.4.23 || =3.4.24 || =3.4.25 || =3.4.26 || =3.4.27 || =3.4.28 || =3.4.29 || =3.4.3 || =3.4.30 || =3.4.31 || =3.4.32 || =3.4.33 || =3.4.34 || =3.4.35 || =3.4.36 || =3.4.37 || =3.4.38 || =3.4.39 || =3.4.4 || =3.4.40 || =3.4.41 || =3.4.42 || =3.4.43 || =3.4.44 || =3.4.45 || =3.4.46 || =3.4.47 || =3.4.48 || =3.4.49 || =3.4.5 || =3.4.50 || =3.4.51 || =3.4.52 || =3.4.53 || =3.4.54 || =3.4.55 || =3.4.56 || =3.4.57 || =3.4.58 || =3.4.59 || =3.4.6 || =3.4.60 || =3.4.61 || =3.4.62 || =3.4.63 || =3.4.64 || =3.4.65 || =3.4.66 || =3.4.67 || =3.4.68 || =3.4.69 || =3.4.7 || =3.4.70 || =3.4.71 || =3.4.72 || =3.4.73 || =3.4.74 || =3.4.8 || =3.4.9 || =3.5.0 || =3.5.1 || =3.5.10 || =3.5.11 || =3.5.12 || =3.5.13 || =3.5.14 || =3.5.15 || =3.5.16 || =3.5.17 || =3.5.18 || =3.5.19 || =3.5.2 || =3.5.20 || =3.5.21 || =3.5.22 || =3.5.23 || =3.5.24 || =3.5.25 || =3.5.26 || =3.5.27 || =3.5.28 || =3.5.29 || =3.5.3 || =3.5.30 || =3.5.31 || =3.5.32 || =3.5.33 || =3.5.34 || =3.5.35 || =3.5.36 || =3.5.37 || =3.5.38 || =3.5.39 || =3.5.4 || =3.5.40 || =3.5.41 || =3.5.42 || =3.5.43 || =3.5.5 || =3.5.6 || =3.5.7 || =3.5.8 || =3.5.9 || =3.6.0 || =3.6.1 || =3.6.2 || =3.6.3 || =3.7.0 || =3.7.1 || =3.7.2 || =3.7.3 || =3.7.4 || =3.7.5 || =3.7.6 || =3.8.0 || =3.9.0 || >=2.19.0 <3.32.2 | 3.32.2 |