Hi Mauricio,
Mauricio Faria de Oliveira:
> The key change is very simple (set `path.mnt` in vfsub_lookup_one_len())
> but its caller chain is large enough (reviewed/modified ~30 functions).
> Fortunately most of them already had `path.mnt` set or easy to obtain.
Thanx for the report. You made a good analysis again.
But I am afraid I cannot fully understand the problem yet. Let me make
sure a few things.
- What is the "real" trigger?
I mean the "root cause of the problem."
If your branches were tmpfs+ext4 or something, the problem should not
happen. Simple open(2) should succeed obviously. Is it because of
the writable FUSE branch?
As you might know, the behaviour of vfsub_update_h_iattr() depends
upon whether the branch is FUSE or not.
- vfs_getattr_nosec() (in AppArmor disabled case)
and
common_perm_cond() (in AppArmor enabled case),
they refer path->mnt since the commits
549c7297717c3 2021-01-24 fs: make helpers idmap mount aware
3cee6079f62f4 2021-01-24 apparmor: handle idmapped mounts
Currently I guess these commits are largely related to this problem,
and I don't agree that the bug was born 10 years ago.
Assuming the writable FUSE branch is close to one of the cause, I will
find the simplest and minimalst FUSE fs and try reproducing the problem
on my side.
ntfs-3g (you mentioned) didn't co-work well on my test environment.
Installing the package (I'm a debian user) complains about EFI brabra
and I gave up ntfs-3g.
Anyway I think I should try the old bug report on unix.stackexchange.com
you mentioned, which I didn't know, after finishing this problem.
About the patch:
Instead of adding a parameter 'struct vfsmount *mnt' to
vfsub_lookup_one_len() family, I'd rather convert the type of parameter
'parent' into struct path.
J. R. Okajima