mirror of
https://github.com/criyle/go-sandbox.git
synced 2025-09-26 23:19:11 +08:00
mount: ensure bind mount preserve the mount flag from source
This commit is contained in:
parent
5f66dc11f5
commit
63db3b54e6
@ -17,8 +17,15 @@ func (m *Mount) Mount() error {
|
|||||||
}
|
}
|
||||||
// Read-only bind mount need to be remounted
|
// Read-only bind mount need to be remounted
|
||||||
const bindRo = syscall.MS_BIND | syscall.MS_RDONLY
|
const bindRo = syscall.MS_BIND | syscall.MS_RDONLY
|
||||||
|
const mask = syscall.MS_NOSUID | syscall.MS_NODEV | syscall.MS_NOEXEC | syscall.MS_NOATIME | syscall.MS_NODIRATIME | syscall.MS_RELATIME
|
||||||
if m.Flags&bindRo == bindRo {
|
if m.Flags&bindRo == bindRo {
|
||||||
if err := syscall.Mount("", m.Target, m.FsType, m.Flags|syscall.MS_REMOUNT, m.Data); err != nil {
|
// Ensure the flag retains for bind mount
|
||||||
|
var s syscall.Statfs_t
|
||||||
|
if err := syscall.Statfs(m.Source, &s); err != nil {
|
||||||
|
return fmt.Errorf("statfs: %w", err)
|
||||||
|
}
|
||||||
|
flag := m.Flags | syscall.MS_REMOUNT | uintptr(s.Flags&mask)
|
||||||
|
if err := syscall.Mount("", m.Target, m.FsType, flag, m.Data); err != nil {
|
||||||
return fmt.Errorf("remount: %w", err)
|
return fmt.Errorf("remount: %w", err)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user