ovl: Warn on copy up if a process has a R/O fd open to the lower file
authorDavid Howells <dhowells@redhat.com>
Tue, 7 Jul 2015 14:04:44 +0000 (15:04 +0100)
committerMiklos Szeredi <miklos@szeredi.hu>
Mon, 21 Mar 2016 16:31:45 +0000 (17:31 +0100)
commitfb5bb2c3b73df060d588b6521de5ab03589283f7
tree1b55a911a8e69efee962e65e7935b815a0c15fd6
parent07f2af7bfd247857b1bf16ae7f479b5b6f4ef305
ovl: Warn on copy up if a process has a R/O fd open to the lower file

Print a warning when overlayfs copies up a file if the process that
triggered the copy up has a R/O fd open to the lower file being copied up.

This can help catch applications that do things like the following:

fd1 = open("foo", O_RDONLY);
fd2 = open("foo", O_RDWR);

where they expect fd1 and fd2 to refer to the same file - which will no
longer be the case post-copy up.

With this patch, the following commands:

bash 5</mnt/a/foo128
6<>/mnt/a/foo128

assuming /mnt/a/foo128 to be an un-copied up file on an overlay will
produce the following warning in the kernel log:

overlayfs: Copying up foo129, but open R/O on fd 5 which will cease
to be coherent [pid=3818 bash]

This is enabled by setting:

/sys/module/overlay/parameters/check_copy_up

to 1.

The warnings are ratelimited and are also limited to one warning per file -
assuming the copy up completes in each case.

Signed-off-by: David Howells <dhowells@redhat.com>
Signed-off-by: Miklos Szeredi <mszeredi@redhat.com>
fs/overlayfs/copy_up.c