Skip to content

Commit 1a89821

Browse files
committed
evaluate symlinks before relabeling mount source
Signed-off-by: Antonio Murdaca <runcom@redhat.com>
1 parent 059451e commit 1a89821

2 files changed

Lines changed: 12 additions & 7 deletions

File tree

daemon/volumes.go

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,6 @@ import (
1111
"github.com/docker/docker/volume"
1212
"github.com/docker/engine-api/types"
1313
containertypes "github.com/docker/engine-api/types/container"
14-
"github.com/opencontainers/runc/libcontainer/label"
1514
)
1615

1716
var (
@@ -149,11 +148,6 @@ func (daemon *Daemon) registerMountPoints(container *container.Container, hostCo
149148
if bind.Driver == "local" {
150149
bind = setBindModeIfNull(bind)
151150
}
152-
if label.RelabelNeeded(bind.Mode) {
153-
if err := label.Relabel(bind.Source, container.MountLabel, label.IsShared(bind.Mode)); err != nil {
154-
return err
155-
}
156-
}
157151
}
158152

159153
binds[bind.Destination] = true

volume/volume.go

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ package volume
33
import (
44
"fmt"
55
"os"
6+
"path/filepath"
67
"strings"
78
"syscall"
89

@@ -110,7 +111,17 @@ func (m *MountPoint) Setup(mountLabel string) (path string, err error) {
110111
defer func() {
111112
if err == nil {
112113
if label.RelabelNeeded(m.Mode) {
113-
if err = label.Relabel(m.Source, mountLabel, label.IsShared(m.Mode)); err != nil {
114+
sourcePath, err := filepath.EvalSymlinks(m.Source)
115+
if err != nil {
116+
path = ""
117+
err = fmt.Errorf("error evaluating symlink from mount source '%s': %v", m.Source, err)
118+
return
119+
}
120+
err = label.Relabel(sourcePath, mountLabel, label.IsShared(m.Mode))
121+
if err == syscall.ENOTSUP {
122+
err = nil
123+
}
124+
if err != nil {
114125
path = ""
115126
err = fmt.Errorf("error setting label on mount source '%s': %v", m.Source, err)
116127
return

0 commit comments

Comments
 (0)