Skip to content

riscv: strnlen: fix ZBB path overflow and SIZE_MAX fallback #339

Description

@uestc-gr

Fixes: 5ba15d4 riscv: lib: add strnlen() implementation

故障现象
dm设备名出现了截断,只能显示8个字符
sh-5.2# dmsetup create testname9 --table "0 8 zero"
sh-5.2# cat /sys/block/dm-*/dm/name
testname

故障原因
故障触发是通过sys接口查看设备名称,内核调用dm_attr_name_show->strcat->strlcat->strnlen,而count为SIZE_MAX,由于strnlen代码出现了溢出导致了截断或panic

代码修改
功能正确性:原先的 ZBB 优化路径在 SIZE_MAX 或地址溢出情况下可能出现错误行为,需要强制回退到安全的通用实现。
边界安全:通过调整对齐边界和增加溢出检查,避免在极端输入下访问越界内存。
测试覆盖率:KUnit 增加了 SIZE_MAX 的测试,确保补丁中的回退逻辑在单元测试中得到验证,避免未来回归。

整体来说,这次修改既修复了 strnlen 在极值输入下的潜在 bug,又通过 KUnit 测试增强了验证覆盖率,保证实现和测试两方面都能覆盖边界情况。

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions