diff options
author | gVisor bot <gvisor-bot@google.com> | 2020-04-29 20:18:37 +0000 |
---|---|---|
committer | gVisor bot <gvisor-bot@google.com> | 2020-04-29 20:18:37 +0000 |
commit | 3c9938407e3139ada541743ed65434a498c746be (patch) | |
tree | cb8a8f80a4ae58f112434065033fbe7a351d8a55 | |
parent | 633d413b30734e629996821342b81d4e67e0cb22 (diff) | |
parent | d5c34ba2ffef0b0aee38d4f96f06bc00b04b0a53 (diff) |
Merge release-20200413.0-22-gd5c34ba (automated)
-rw-r--r-- | runsc/boot/fs.go | 13 | ||||
-rw-r--r-- | runsc/specutils/specutils.go | 14 |
2 files changed, 26 insertions, 1 deletions
diff --git a/runsc/boot/fs.go b/runsc/boot/fs.go index 98cce60af..4875452e2 100644 --- a/runsc/boot/fs.go +++ b/runsc/boot/fs.go @@ -219,6 +219,9 @@ func mountFlags(opts []string) fs.MountSourceFlags { mf.NoAtime = true case "noexec": mf.NoExec = true + case "bind", "rbind": + // When options include either "bind" or "rbind", + // it's converted to a 9P mount. default: log.Warningf("ignoring unknown mount option %q", o) } @@ -765,6 +768,16 @@ func (c *containerMounter) getMountNameAndOptions(conf *Config, m specs.Mount) ( useOverlay bool ) + for _, opt := range m.Options { + // When options include either "bind" or "rbind", this behaves as + // bind mount even if the mount type is equal to a filesystem supported + // on runsc. + if opt == "bind" || opt == "rbind" { + m.Type = bind + break + } + } + switch m.Type { case devpts, devtmpfs, proc, sysfs: fsName = m.Type diff --git a/runsc/specutils/specutils.go b/runsc/specutils/specutils.go index 837d5e238..202518b58 100644 --- a/runsc/specutils/specutils.go +++ b/runsc/specutils/specutils.go @@ -311,7 +311,19 @@ func capsFromNames(names []string, skipSet map[linux.Capability]struct{}) (auth. // Is9PMount returns true if the given mount can be mounted as an external gofer. func Is9PMount(m specs.Mount) bool { - return m.Type == "bind" && m.Source != "" && IsSupportedDevMount(m) + var isBind bool + switch m.Type { + case "bind": + isBind = true + default: + for _, opt := range m.Options { + if opt == "bind" || opt == "rbind" { + isBind = true + break + } + } + } + return isBind && m.Source != "" && IsSupportedDevMount(m) } // IsSupportedDevMount returns true if the mount is a supported /dev mount. |