实现命名空间隔离时对pivot_root中mnt_has_parent检查的疑问
关于pivot_root中根挂载父挂载检查的疑问
在实现命名空间隔离方案时,我碰到了pivot_root代码里的这处检查(对应Linux 4.6内核代码):
if (!mnt_has_parent(root_mnt)) goto out4; /* not attached */
我对此完全摸不着头脑。按我的理解,root_mnt是调用进程视角下的当前根挂载——比如initrd环境里就是initrd,我的场景里是主机rootfs。我查看/proc/self/mountinfo得到的内容是:
cat /proc/self/mountinfo 27 27 0:2 / / rw - rootfs rootfs rw,size=469616k,nr_inodes=117404
正常主机系统的根挂载怎么会有父挂载?我想不出任何合理场景。虽然我可以通过以下操作绕过这个检查:
mkdir /wtf mount --rbind / wtf chroot /wtf
此时当前根挂载就有了父挂载,但我还是搞不懂这个检查存在的原因。
内容的提问来源于stack exchange,提问作者aep
相关产品推荐
相关产品推荐

