Re: [PATCH] overlay: add a test for multiple redirects to the same lower dir

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Thanks for your detailed explanation!
I think it's much more clear about overlayfs's duty is to detect
inconsistency and warn user to run fsck.overlay. :)

Cheers,
Yi.

On 2017/11/25 11:45, Amir Goldstein Wrote:
> On Fri, Nov 24, 2017 at 9:32 AM, zhangyi (F) <yi.zhang@xxxxxxxxxx> wrote:
>> On 2017/11/23 22:27, Amir Goldstein Wrote:
>>> Multiple redirects to the same lower dir will falsely return the
>>> same st_ino/st_dev for two different upper dirs and will cause 'diff'
>>> to falsely report that content of directories is the same when it is not.
>>>
>>> This is a test for a regression introduced in kernel v4.12 by
>>> commit 72b608f08528 ("ovl: constant st_ino/st_dev across copy up"),
>>> but also the first xfstest to require the redirect_dir feature that
>>> was introduced as an opt-in feature in kernel v4.10.
>>>
>>> Signed-off-by: Amir Goldstein <amir73il@xxxxxxxxx>
>>> ---
>>>
>>> Eryu,
>>>
>>> This test is for a "bug" that has not been acknoledges by Miklos
>>> as a kernel bug yet. It may well fall within the jurisdiction of
>>> fsck.overlayfs.
>>>
>>> IMO, cp -a of upper files and dirs qualifies to the statement in
>>> Documentation/filesystems/overlayfs.txt:
>>> "Offline changes, when the overlay is not mounted, are allowed to either
>>> the upper or the lower trees."
>>>
>> Hi Amir:
>>
>> I have some persional opinions.
>>
>> If I understand right, I think we need to change this statement and add
>> some limitations.
> 
> Maybe it is a good idea to clarify this statement, but that doesn't mean
> that overlayfs should ignore an inconsistency when one is detected or
> that it shouldn't make an effort to detect an inconsistency.
> 
>> I make an analogy with Ext4 filesystem:
> 
> I like this analogy, so I will use it to explain why the proposed kernel
> fix makes sense.
> 
>>
>> 1) Creating lower layers and upper dirs in overlayfs before first mount
>>    is like mkfs.ext4 to create an image in Ext4fs. Ext4 filesystem can
>>    guarantee consistency in this step but overlayfs cannot, so It's better
>>    to hint users to check the "overlay image" through fsck.overlay after
>>    he finish this "image".
>>
> 
> One problem with this analogy: there is no mkfs.overlay, so users do
> manually craft overlay layers today and no documentation change is
> going to stop users from doing that for decades.
> 
> Another reason why it is desired to let even unprivileged users
> craft layers is because it is a long outstanding goal to allow
> unprivileged users to create an fs and mount it in their own
> a usrens/mountns. Allowing unprivileged users to mount an fs
> is supported only for a whitelist of file systems that are marked
> with flag FS_USERNS_MOUNT. Overlayfs does not qualify for
> that yet, but it is a much easier goal to qualify overlayfs for userns
> mount than it is to qualify ext4 for userns mount and this is
> desired for some use cases.
> 
> 
>> 2) Change lower layers or upper dirs when overlayfs is offline is like
>>    user modify ext4 image through tune2fs/debugfs or even modify it in
>>    block device directly. Ext4fs also cannot guarantee everything is right
>>    when user modify fs image limitless(should not crash), so fsck.ext4 is
>>    necessary after modifing image(except fault injection). From overlayfs's
>>    point of view, modify "overlay image" when it's offline is okay, but it
>>    should pass fsck.overlay's check before next mount.
>>
> 
> One problem with this analogy: users do have a way to manually change
> overlay layers today and no documentation change is going to stop users
> from doing that for decades. Because it is easy to change layers and often
> does not ever require root privileges, it is not really a valid analogy to
> debugfs. A user modifying ext4 with debugfs is either very smart, very stupid
> very malicious or any combination of the above, but unlike modifying layers,
> it cannot be an innocent user making an innocent mistake.
> 
> Therefore, it is very sensible for the kernel to check for inconsistencies.
> Staying with the ext4 analogy: ext4 doesn't require that you run
> e2fsck before mount, that was the situation 2-3 decades ago. Instead
> ext4 will try to detect inconsistencies at runtime and return an error
> (-EFSCORRUPTED) to user with a strong hint for user to run e2fsck.
> Ext4 will also optionally panic or mount ro in such case.
> Xfs will forcefully shut itself down in such case forcing repair.
> 
>> I guess most general users don't know which one the redirect xattr points to
>> or even what the redirect xattr is, they maybe just want to copy whole
>> directory in upperdir when they call "cp -a", so I think it can handled by
>> fsck.overlay.
>>
>> Do I understand this correctly, any thoughts ?
>>
> 
> I think you do understand this correctly and I think fsck.overlay is a very
> much needed tool as overlayfs on-disk format is becoming less naiive,
> but the only way to *make* users run fsck.overlay is for the kernel to hint
> them or force them to do so.
> 
>>
>>> So unless Miklos objects to ever fixing this "bug"?
>>> I suggest that we include the failing test until kernel is fixed.
>>>
>>> Incidently, I already have patches for 'verify' feature [1], which
>>> I intend to post after the merge window closes.
>>> With 'verify' feature enabled this test passes.
>>>
>>>
>>> [1] https://github.com/amir73il/linux/commits/ovl-index-all
> 
> I may have made it sound like I have a kernel fix which is an
> alternative to running fsck.overlay, but this is very much not the case.
> The test "passes" because kernel returns an error instead of
> allowing diff to mistake two different dirs as the same.
> 
> [ Before the kernel fix:]
> root@kvm-xfstests:~# diff -q /mnt/scratch/redirect1 /mnt/scratch/redirect2
> [ Silence is not golden]
> 
> [ After the kernel fix:]
> root@kvm-xfstests:~# diff -q /mnt/scratch/redirect1 /mnt/scratch/redirect2
> [  226.143718] overlayfs: failed to verify origin
> (ovl-upper/redirect2, ino=16777539, err=-116)
> [  226.146100] overlayfs: suspected multiply redirected dir found
> (ovl-lower/origin, upper=ovl-upper/redirect2,
> index=index/00fb21008199b53994a1f94164ba995bab052f5e0a840000000000000030e947a6).
> diff: /mnt/scratch/redirect2: Input/output error
> 
> If there was an official fsck.overlay tool, this warning is where kernel would
> tell user: "...please run fsck.overlay"
> 
> Cheers,
> Amir.
> 
> .
> 

--
To unsubscribe from this list: send the line "unsubscribe linux-unionfs" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html



[Index of Archives]     [Linux Filesystems Devel]     [Linux NFS]     [Linux NILFS]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux