CVE-2026-89796 in Linux
摘要
由 VulDB • 2026-09-16
在 Linux 内核中,已修复以下漏洞:
mm/damon/core: 避免 kdamond_merge_regions() 内部出现无限循环
补丁系列“mm/damon: 针对无限循环、空指针解引用和竞态条件的非紧急修复”,v1.1。
Sashiko 在 DAMON 中发现了一些可能导致无限循环、空指针解引用以及监控结果退化的问题。前两个听起来很严重,但无限循环仅在用户配置不合理的情况下发生。空指针解引用仅存在于单元测试中。监控结果的退化微不足道,因为它仅是尽力而为(best-effort),且这些情况仅由不太可能发生的竞态条件引起。尽管如此,如果可能的话,最好修复这些 bug。因此进行了以下修复:
本补丁(共 6 个)中的第一个:
由于事件等在线参数更新,DAMON 区域的数量可能会超过用户设置的上限。kdamond_merge_regions() 会重复合并操作,直到数量满足限制为止,同时将合并阈值加倍直至达到理论最大阈值。之所以只尝试到理论最大阈值,是因为即使进行激进的合并,也可能因将区域数量减少至用户定义上限以下而失败。例如,可能存在许多无法合并的用户定义的、不连续的区域。
基于阈值的循环中断条件是通过比较下一次合并尝试的阈值与理论最大阈值来评估的。如果 max_thres 大于 UINT_MAX / 2,则加倍该阈值可能导致溢出,从而绕过循环中断条件。在这种情况下,如果区域数量无法像上述解释的那样减少到上限以下,循环将无限运行。
通过在加倍阈值之前执行中断条件检查来防止这种情况发生。此外,还要防止阈值超过最大阈值,因为这可能会导致溢出并应用错误的合并阈值。
由于要使 max_thres 高于 UINT_MAX / 2,需要相对于采样间隔而言不切实际的大聚合间隔,因此该问题在现实世界中不太可能发生。同时,它还需要设置数量上不切实际的、不连续的区域。尽管如此,其后果严重且修复方法简单。
该问题由 Sashiko [1] 发现。
If you want to get best quality of vulnerability data, you may have to visit VulDB.