调用kern_path获取挂载点devt异常:首次挂载返回根设备问题求助
内核挂载后kern_path获取错误设备号问题
在LSM钩子中尝试通过kern_path()获取挂载点的devt,场景如下:
/dev/mmcblk0p5挂载到/mnt/photos
预期调用:
kern_path("/mnt/photos", ...)
返回的struct path中,path.mnt->mnt_sb->s_dev应为0x0b300005(对应/dev/mmcblk0p5的设备号179:5),但首次挂载后实际总是得到根文件系统的设备号0x0b300002(179:2)。只有**再次将/dev/mmcblk0p5挂载到/mnt/photos**后,kern_path才会返回正确的0x0b300005。
该问题在4.14和5.15内核版本中均会出现。
补充信息:
- 首次挂载后,
path.mnt->mnt_sb的地址与根目录"/"的地址相同(对应0x0b300002) - 第二次挂载后,
path.mnt->mnt_sb的地址则不同
推测mnt_sb会在首次与第二次挂载之间的某个时间点更新,请问:
- 这个更新何时发生?
- 如何能在更新后获得通知/钩子?
内容的提问来源于stack exchange,提问作者Dekel N
相关产品推荐
相关产品推荐

