概述
公开的 Linux CVE 描述了 fs/jfs/jfs_dmap.c 中 dbExtendFS() 的整数宽度问题。JFS 使用表达式 1 << l2agsize 计算分配组大小。对 32 位操作数进行较大的移位,可能导致未定义行为并产生无效的分组大小。
修复在移位之前将左操作数转换为 s64:(s64)1 << l2agsize。这样计算就使用 64 位算术,与存储分配组大小的类型保持一致。如果只转换结果,出问题的运算仍会保持原来的宽度。
无效的分配组大小会影响后续的文件系统操作。公开公告提到了可能出现的文件系统损坏和内核崩溃,并附有上游修复及受影响版本的记录链接;各发行版的具体修复情况应以软件包厂商的安全公告为准。
对代码审计而言,更普遍的经验是检查中间算术运算的类型,尤其是移位和大小计算。目标变量足够宽,并不能让较窄的表达式自动变得安全。
要点
- CVE 记录
- 2025
- 公开记录
- Linux kernel · National Vulnerability Database
- 受影响代码
- JFS filesystem · dbExtendFS() in fs/jfs/jfs_dmap.c
- 主题
- CVE-2025-37858 · JFS · 整数运算 · 中间类型