main.c: reload the directory on stat

make sure the directory is reloaded so the correct number of links can
be retrieved.

Closes: https://github.com/containers/fuse-overlayfs/issues/131

Signed-off-by: Giuseppe Scrivano <gscrivan@redhat.com>
This commit is contained in:
Giuseppe Scrivano 2019-10-15 12:31:22 +02:00
parent 098d9ad79f
commit 45c902ea87
No known key found for this signature in database
GPG Key ID: E4730F97F60286ED
2 changed files with 25 additions and 0 deletions

20
main.c
View File

@ -1862,6 +1862,16 @@ ovl_lookup (fuse_req_t req, fuse_ino_t parent, const char *name)
return;
}
if (node_dirp (node))
{
node = reload_dir (lo, node);
if (node == NULL)
{
fuse_reply_err (req, errno);
return;
}
}
err = rpl_stat (req, node, -1, NULL, NULL, &e.attr);
if (err)
{
@ -2108,6 +2118,16 @@ ovl_do_readdir (fuse_req_t req, fuse_ino_t ino, size_t size,
}
else
{
if (node_dirp (node))
{
node = reload_dir (lo, node);
if (node == NULL)
{
fuse_reply_err (req, errno);
return;
}
}
memset (&e, 0, sizeof (e));
ret = rpl_stat (req, node, -1, NULL, NULL, st);
if (ret < 0)

View File

@ -21,6 +21,11 @@ fuse-overlayfs -o sync=0,threaded=1,lowerdir=lower,upperdir=upper,workdir=workdi
SUID_TEST=$(pwd)/suid-test
(cd merged; $SUID_TEST)
# Test the number of hard links for populated directories is > 2
test $(stat -c %h merged/etc) -gt 2
ls merged/usr
test $(stat -c %h merged/usr) -gt 2
stat -c %A upper/suid | grep s
stat -c %a upper/nosuid | grep -v s