• Andrey Vagin's avatar
    mntns: rework validation to support non-root shared bind-mounts (v2) · 1cf5168c
    Andrey Vagin authored
    A problem which is solved in this path is that some children can be
    unaccessiable (unvisiable) for non-root bind-mounts
    
    root	mount point
    -------------------
    /	/a (shared:1)
    /	/a/x
    /	/a/x/y
    /	/a/z
    /x	/b (shared:1)
    /	/b/y
    
    /b is a non-root bind-mount of /a
    /y is visiable to both mounts
    /z is vidiable only for /a
    
    Before this patch we checked that the set of children is the same for
    all mount in a shared group. Now we check that a visiable set of mounts
    is the same for all mounts in a shared group.
    
    Now we take the next mount in the shared group, which is wider or equal
    to current and compare children between them.
    
    Before this patch validate_shared(m) validates the m->parent mount.
    Now it validates the "m" mount. So you can find following lines in the
    patch:
    -               if (m->parent->shared_id && validate_shared(m))
    +               if (m->shared_id && validate_shared(m))
    
    We doesn't support shared mounts with different set of children.
    Here is an example of such case can be created:
    mount tmpfs a /a
    mount --make-shared /a
    mkdir /a/b
    mount tmpfs b /a/b
    mount --bind /a /c
    
    In this case /c doesn't have the /b child. To support such cases,
    we need to sort all shared mounts accoding with a set of children.
    
    v2: If root is equal to "/", its len should be zero. We expect that the
    last symbol in a path is not "/".
    Signed-off-by: 's avatarAndrey Vagin <avagin@openvz.org>
    Signed-off-by: 's avatarPavel Emelyanov <xemul@parallels.com>
    1cf5168c
Name
Last commit
Last update
Documentation Loading commit data...
arch Loading commit data...
contrib Loading commit data...
include Loading commit data...
lib Loading commit data...
pie Loading commit data...
protobuf Loading commit data...
scripts Loading commit data...
test Loading commit data...
.gitignore Loading commit data...
.mailmap Loading commit data...
.travis.yml Loading commit data...
COPYING Loading commit data...
CREDITS Loading commit data...
Makefile Loading commit data...
Makefile.config Loading commit data...
Makefile.crtools Loading commit data...
Makefile.inc Loading commit data...
README Loading commit data...
action-scripts.c Loading commit data...
bfd.c Loading commit data...
cgroup.c Loading commit data...
cr-check.c Loading commit data...
cr-dedup.c Loading commit data...
cr-dump.c Loading commit data...
cr-exec.c Loading commit data...
cr-restore.c Loading commit data...
cr-service.c Loading commit data...
cr-show.c Loading commit data...
crtools Loading commit data...
crtools.c Loading commit data...
eventfd.c Loading commit data...
eventpoll.c Loading commit data...
fifo.c Loading commit data...
file-ids.c Loading commit data...
file-lock.c Loading commit data...
files-ext.c Loading commit data...
files-reg.c Loading commit data...
files.c Loading commit data...
fsnotify.c Loading commit data...
image-desc.c Loading commit data...
image.c Loading commit data...
ipc_ns.c Loading commit data...
irmap.c Loading commit data...
kcmp-ids.c Loading commit data...
kerndat.c Loading commit data...
libnetlink.c Loading commit data...
log.c Loading commit data...
mem.c Loading commit data...
mount.c Loading commit data...
namespaces.c Loading commit data...
net.c Loading commit data...
netfilter.c Loading commit data...
page-pipe.c Loading commit data...
page-read.c Loading commit data...
page-xfer.c Loading commit data...
pagemap-cache.c Loading commit data...
parasite-syscall.c Loading commit data...
pipes.c Loading commit data...
plugin.c Loading commit data...
proc_parse.c Loading commit data...
protobuf-desc.c Loading commit data...
protobuf.c Loading commit data...
pstree.c Loading commit data...
ptrace.c Loading commit data...
rbtree.c Loading commit data...
rst-malloc.c Loading commit data...
sd-daemon.c Loading commit data...
sd-daemon.h Loading commit data...
security.c Loading commit data...
shmem.c Loading commit data...
sigframe.c Loading commit data...
signalfd.c Loading commit data...
sk-inet.c Loading commit data...
sk-netlink.c Loading commit data...
sk-packet.c Loading commit data...
sk-queue.c Loading commit data...
sk-tcp.c Loading commit data...
sk-unix.c Loading commit data...
sockets.c Loading commit data...
stats.c Loading commit data...
string.c Loading commit data...
sysctl.c Loading commit data...
sysfs_parse.c Loading commit data...
timerfd.c Loading commit data...
tty.c Loading commit data...
tun.c Loading commit data...
util.c Loading commit data...
uts_ns.c Loading commit data...