* [PATCH] ovl: relax WARN_ON() when decoding lower directory file handle
@ 2020-06-17 6:57 Amir Goldstein
2020-07-15 19:40 ` Miklos Szeredi
0 siblings, 1 reply; 2+ messages in thread
From: Amir Goldstein @ 2020-06-17 6:57 UTC (permalink / raw)
To: Miklos Szeredi; +Cc: linux-unionfs
Decoding a lower directory file handle to overlay path with cold
inode/dentry cache may go as follows:
1. Decode real lower file handle to lower dir path
2. Check if lower dir is indexed (was copied up)
3. If indexed, get the upper dir path from index
4. Lookup upper dir path in overlay
5. If overlay path found, verify that overlay lower is the lower dir
from step 1
On failure to verify step 5 above, user will get an ESTALE error and
a WARN_ON will be printed.
A mismatch in step 5 could be a result of lower directory that was renamed
while overlay was offline, after that lower directory has been copied
up and indexed.
This is a scripted reproducer based on xfstest overlay/052:
# Create lower subdir
create_dirs
create_test_files $lower/lowertestdir/subdir
mount_dirs
# Copy up lower dir and encode lower subdir file handle
touch $SCRATCH_MNT/lowertestdir
test_file_handles $SCRATCH_MNT/lowertestdir/subdir -p -o $tmp.fhandle
# Rename lower dir offline
unmount_dirs
mv $lower/lowertestdir $lower/lowertestdir.new/
mount_dirs
# Attempt to decode lower subdir file handle
test_file_handles $SCRATCH_MNT -p -i $tmp.fhandle
Since this WARN_ON() can be triggered by user we need to relax it.
Fixes: 4b91c30a5a19 ("ovl: lookup connected ancestor of dir in inode...")
Cc: <stable@vger.kernel.org> # v4.16+
Signed-off-by: Amir Goldstein <amir73il@gmail.com>
---
fs/overlayfs/export.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/fs/overlayfs/export.c b/fs/overlayfs/export.c
index 8f4286450f92..0e696f72cf65 100644
--- a/fs/overlayfs/export.c
+++ b/fs/overlayfs/export.c
@@ -476,7 +476,7 @@ static struct dentry *ovl_lookup_real_inode(struct super_block *sb,
if (IS_ERR_OR_NULL(this))
return this;
- if (WARN_ON(ovl_dentry_real_at(this, layer->idx) != real)) {
+ if (ovl_dentry_real_at(this, layer->idx) != real) {
dput(this);
this = ERR_PTR(-EIO);
}
--
2.17.1
^ permalink raw reply related [flat|nested] 2+ messages in thread
* Re: [PATCH] ovl: relax WARN_ON() when decoding lower directory file handle
2020-06-17 6:57 [PATCH] ovl: relax WARN_ON() when decoding lower directory file handle Amir Goldstein
@ 2020-07-15 19:40 ` Miklos Szeredi
0 siblings, 0 replies; 2+ messages in thread
From: Miklos Szeredi @ 2020-07-15 19:40 UTC (permalink / raw)
To: Amir Goldstein; +Cc: overlayfs
On Wed, Jun 17, 2020 at 8:57 AM Amir Goldstein <amir73il@gmail.com> wrote:
>
> Decoding a lower directory file handle to overlay path with cold
> inode/dentry cache may go as follows:
>
> 1. Decode real lower file handle to lower dir path
> 2. Check if lower dir is indexed (was copied up)
> 3. If indexed, get the upper dir path from index
> 4. Lookup upper dir path in overlay
> 5. If overlay path found, verify that overlay lower is the lower dir
> from step 1
>
> On failure to verify step 5 above, user will get an ESTALE error and
> a WARN_ON will be printed.
>
> A mismatch in step 5 could be a result of lower directory that was renamed
> while overlay was offline, after that lower directory has been copied
> up and indexed.
>
> This is a scripted reproducer based on xfstest overlay/052:
>
> # Create lower subdir
> create_dirs
> create_test_files $lower/lowertestdir/subdir
> mount_dirs
> # Copy up lower dir and encode lower subdir file handle
> touch $SCRATCH_MNT/lowertestdir
> test_file_handles $SCRATCH_MNT/lowertestdir/subdir -p -o $tmp.fhandle
> # Rename lower dir offline
> unmount_dirs
> mv $lower/lowertestdir $lower/lowertestdir.new/
> mount_dirs
> # Attempt to decode lower subdir file handle
> test_file_handles $SCRATCH_MNT -p -i $tmp.fhandle
>
> Since this WARN_ON() can be triggered by user we need to relax it.
>
> Fixes: 4b91c30a5a19 ("ovl: lookup connected ancestor of dir in inode...")
> Cc: <stable@vger.kernel.org> # v4.16+
> Signed-off-by: Amir Goldstein <amir73il@gmail.com>
Applied, thanks.
Miklos
^ permalink raw reply [flat|nested] 2+ messages in thread
end of thread, other threads:[~2020-07-15 19:40 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-06-17 6:57 [PATCH] ovl: relax WARN_ON() when decoding lower directory file handle Amir Goldstein
2020-07-15 19:40 ` Miklos Szeredi
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).