Deep Down the Rabbit Hole: Bash, OverlayFS, and a 30-Year-Old Surprise
a year ago
- #OverlayFS
- #Bash
- #Debugging
- 客户报告在切换到OverlayFS后出现OpenSSH scp故障,Bash报错显示获取当前目录时出错
- 由于交叉编译问题,Bash使用了自实现的getcwd()函数而非glibc版本
- 问题根源在于Bash的备用getcwd()实现对文件系统行为的假设与OverlayFS不兼容
- OverlayFS的设计导致readdir()返回的inode号可能与stat()获取的不一致,破坏了Bash的目录遍历逻辑
- Bash的getcwd()实现还存在errno处理不当的问题,导致产生ENOTTY等误导性错误信息
- 最终通过调整构建配置强制Bash使用系统getcwd()解决了该问题
- 此次调查暴露出Bash在可移植性假设和遗留代码方面存在更深层次问题