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


Reply via email to