You have been subscribed to a public bug by Eric Desrochers (slashd):

[Impact]

 * Under certain conditions (such as when selinux is enabled and
probably other ways) xfsprogs on Trusty may report a error "illegal
inode type" and SIGABRT, generating a coredump as follow :

sing host libthread_db library "/lib/x86_64-linux-gnu/libthread_db.so.1".
Core was generated by `xfs_logprint -c /dev/mapper/image-glance'.
Program terminated with signal SIGABRT, Aborted.

when more than one flag is set on f->ilf_fields.

[Explanation]

As we speak, the switch() statement is doing a Binary AND between
ifl_fields & XFS_ILOG_NONCORE.

switch (f->ilf_fields & XFS_ILOG_NONCORE) {

XFS_ILOG_NONCORE being the sum of a Binary OR for all the Inode changes
to log:

#define XFS_ILOG_NONCORE        (XFS_ILOG_DDATA | XFS_ILOG_DEXT | \
                                 XFS_ILOG_DBROOT | XFS_ILOG_DEV | \
                                 XFS_ILOG_UUID | XFS_ILOG_ADATA | \
                                 XFS_ILOG_AEXT | XFS_ILOG_ABROOT)

When more than 1 flag is set in "ifl_fields"
(Example took from the coredump in gdb "ilf_fields = 133")

----------------------------------
#define XFS_ILOG_DDATA  0x002   /* log i_df.if_data */
#define XFS_ILOG_DEXT   0x004   /* log i_df.if_extents */
#define XFS_ILOG_DBROOT 0x008   /* log i_df.i_broot */
#define XFS_ILOG_DEV    0x010   /* log the dev field */
#define XFS_ILOG_UUID   0x020   /* log the uuid field */
#define XFS_ILOG_ADATA  0x040   /* log i_af.if_data */
#define XFS_ILOG_AEXT   0x080   /* log i_af.if_extents */
#define XFS_ILOG_ABROOT 0x100   /* log i_af.i_broot */

ifl_field = 133 & XFS_ILOG_NONCORE= 510 = 132
----------------------------------

and cannot match any case statement based on the inode flags value above
and has no choice but to use default: statement because none of them are
true and call xlog_panic().

[Test Case]

1) Create a XFS device (dev/vdb1)
2) apt-get dist-upgrade
3) Remove apparmor   # To avoid potential conflict with selinux.
4) Reboot
5) Installed selinux # so that data+attr is set, and logprinting.
6) Reboot
7) Run xfs_logprint against /dev/vdb1
   - sudo xfs_logprint -c /dev/vdb1

There is probably other ways but that is the one I used based on the git
commit log:

"I've tested this by a simple test such as creating one
file on an selinux box, so that data+attr is set, and
logprinting"

[Regression Potential]

 * This is a rework of "xlog_print_trans_inode()" to handle more than
one flag on f->ilf_fields if set in order to stop going in error and
abort when facing the situation. The change has been there for a while
now (Jan 2013).

The rework offer a better detection instead of a one size fits all, and
provide various switch() statement context and appropriate actions.

It is also capable to handle multiply-logged inode fields which current
Trusty version can't handle.

[Other Info]

 * The patch never land in Trusty because the package was a copy from
it's predecessor release, saucy, and never been SRU since then.

 * Upstream commit:
https://git.kernel.org/pub/scm/fs/xfs/xfsprogs-dev.git/commit/?id=dda4129

 * Trusty AFFECTED ONLY.

$ git describe --contains dda4129
v3.1.11~29

$ rmadison xfsprogs
==> xfsprogs | 3.1.9ubuntu2        | trusty <==
 xfsprogs | 4.3.0+nmu1ubuntu1   | xenial
 xfsprogs | 4.3.0+nmu1ubuntu1.1 | xenial-updates
 xfsprogs | 4.9.0+nmu1ubuntu1   | artful
 xfsprogs | 4.9.0+nmu1ubuntu1   | bionic

[Orig Description]
It has been brought to my attention that the following :

"
The command 'xfs_logprint -c <DEVICE>' coredump on Trusty and display the error 
:
xlog_print_trans_inode: illegal inode type
"

** Affects: xfsprogs (Ubuntu)
     Importance: Undecided
         Status: Fix Released

** Affects: xfsprogs (Ubuntu Trusty)
     Importance: Medium
     Assignee: Eric Desrochers (slashd)
         Status: In Progress


** Tags: sts
-- 
xfs_logprint  can't handle multiply-logged inode fields
https://bugs.launchpad.net/bugs/1763086
You received this bug notification because you are a member of STS Sponsors, 
which is subscribed to the bug report.

-- 
Mailing list: https://launchpad.net/~sts-sponsors
Post to     : sts-sponsors@lists.launchpad.net
Unsubscribe : https://launchpad.net/~sts-sponsors
More help   : https://help.launchpad.net/ListHelp

Reply via email to