In message <1859.1589054580@jrobl>, J. R. Okajima <hooanon...@gmail.com>
writes
"J. R. Okajima":
Unfortunately this Call Trace looks unreliable, and I cannot see the
behaviour exactly. But I can assume that there is a call chain such
like this.
- "ls" issues lgetxattr(2)
+ SyS_lgetxattr()
+ aufs_getxattr()
+ au_lgxattr()
+ si_read_lock()
It might be this.
- "ls" issues lgetxattr(2)
+ SyS_lgetxattr()
+ vfs: lookup
+ aufs: lookup
+ vfs: d_splice_alias
+ selinux: d_instantiate
+ vfs: getxattr
+ aufs: getxattr
--> BANG!! coz d_inode is unset
In other words,
- aufs calls vfs:d_splice_alias() which sets d_inode.
- vfs:d_splice_alias() calls selinux's hook selinux_d_instantiate()
BEFORE setting d_inode.
- selinux wants xattr and it reaches aufs_getxattr() which expects
d_inode is set.
- aufs gets unset d_inode and crash.
I have a patch to fix this problem, but it is for aufs4.19 which is my
current development base version. Now I am testing.
It won't be applied cleanly to aufs3.16. Jon, if you want the patch and
will fix manually for your version, I will post here.
That would be useful yes. I should be picking up actively looking at
this again from Monday, I'll also be able to provide some more debug as
well.
Rgs,
Jon.
--
== jon bird - software engineer
== <reply to address _may_ be invalid, real mail below>
== <reduce rsi, stop using the shift key>
== posted as: news 'at' onasticksoftware 'dot' co 'dot' uk