fd filestat set times 向主机写入损坏的时间戳: 纳米秒为秒
描述错误
□ 总结
fd filestat set times' (POSIXfutimers') 返回`Errno::Success',并写出错误的时间戳给主机文件。
主机后端通过一个WASI nanosecond ** 时间戳入"filetime:Filetime: from unix time",其第一个参数为秒**. 纳米秒数作为第二个数使用逐字记录. 请求"1e9"ns(一秒过纪元)将主机时间设定为"1e9" seconds,即2001-09-09. 2446年,在ext4,`0x37FFFFF'上,今天的时间戳超过文件系统的可代表范围和饱和度。
客可见时间戳正确:内出自出自出自出自出自出自出自出自出自出自出自出自出自出自出自出自出自出自出自出自出自出自出自出自出自出自出自出自出自出自出自出自出自出自出自出自出自出自出自出自出自出自出自出自出自出自出自出自出自出自出自出自出自出自出自出自出自出自出自出自出自出自出自出自出自出自出自出自出自出自出自出自出自出自出自出自出自出自出自出自出自出自出自出自出自出自出自出自出自出自出自出自出自出自出自出自出自出自出自出自出自出自出自出自出自出自出自出自出自出自出自出自出自出自出自出自出自出自出自出自出自出自出自出 只有写入主机的值被损坏,所以一个将文件重排的来宾不会注意到.
相關:#6972 ("path filestat set times"默默地无所事事). 同样的代码区域。
** 组成部分:lib/virtual-fs'(host fs')
** 受影响版本: 7.2.1和7.4.0确认。
嘘 现值 - vV 7.4.0 (韩语). 二进制: 二进制 Cli 承诺-小时:32b50f8b600efa8e2d5f88593c453139bf1ca222 承诺日期:2026-08-31 主机: x86 64- 未知- linux- gnu CPU旗: sse2 sse3 sse3 sse4.1 sse4.2 popcnt avx bmi 2. avx2 avx512dq avx512vl avx512f lzcnt fma 运行时间:单行道、Cranelift、LLVM、V8 特性: 二进制、 二进制、 二进制、 二进制
* 复制步骤
(https://GitHub.com/user-attachments/files/31764988/wasmer-futimes-repro.zip)。 它只需要 " 危险 " 和 " 平通3 " 。
unzip wasmer-futimes-repro.zip (英语). cd 原创 - 假的 - 反的 ./运行.sh #或:.运行.sh/路径/去/去/去.
`run.sh'在 ' -- -- 卷'上挂载的主机目录上创建测试文件,打开,用`SET ATIM SET MTIM ' 调用`fud filestat set times',并按请求的值打印主机侧 mtime。 它重复了若干投入,以显示转变。
预期行为
主机时间与要求的时间戳相匹配:请求 " 1e18 " ns,主机时间为 " 10000000000 " s。
实际行为
请求 (ns) = 秒 主机 mtime (s) 来宾 mtim (s) 1 000 000 000 1 000 000 0001 20000000 2 20000000 2 (简体中文). 100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 1788400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
前两行清晰地显示机制:纳秒计数被逐字记录为第二计数. 最后两个饱和度为`15032385535' =`0x37FFFFF',ext4最大时间戳。
2001-09-09年的申请作为日期提出:
2446-05-10 22:38:55.00000000+00 (英语).
注意上一栏:宾客可见值全正确. 只有主机写错了.
其他背景
“lib/virtual-fs/src/host fs:447”:
[Rust]
fn set times( & mut self, atime: option<u64>, mtime: option<u64>) - > 箱子: Result<()>{
let atime = atime.map (|t|)
. . . . . . .内容来源: wasmerio/wasmer