[Bug 1763086] Re: xfs_logprint can't handle multiply-logged inode fields
Eric Desrochers
eric.desrochers at canonical.com
Wed Apr 11 20:40:27 UTC 2018
** Description changed:
[Impact]
- * Under certains condition (such as when selinux is enabled and
+ * 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.
- [Test Case]
+ when more than one flag is set on f->ilf_fields.
- 1) Create a XFS device (dev/vdb1)
- 2) apt-get dist-upgrade
- 3) Remove apparmor
- 4) Reboot
- 5) Installed selinux
- 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). It never land in Trusty because the package it has was a
- copy from it's predecessor release, saucy.
+ [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
+ 4) Reboot
+ 5) Installed selinux
+ 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
"
--
You received this bug notification because you are a member of Ubuntu
Foundations Bugs, which is subscribed to xfsprogs in Ubuntu.
https://bugs.launchpad.net/bugs/1763086
Title:
xfs_logprint can't handle multiply-logged inode fields
Status in xfsprogs package in Ubuntu:
Fix Released
Status in xfsprogs source package in Trusty:
In Progress
Bug description:
[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
4) Reboot
5) Installed selinux
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
"
To manage notifications about this bug go to:
https://bugs.launchpad.net/ubuntu/+source/xfsprogs/+bug/1763086/+subscriptions
More information about the foundations-bugs
mailing list