[Bug 1842437] Re: Xenial: libblkid: fix false-positive/misdetection of nilfs2 filesystem with udev
Mauricio Faria de Oliveira
mfo at canonical.com
Thu Oct 10 19:40:08 UTC 2019
Verification done with xenial-proposed.
# dpkg -s libblkid1 | grep -i version
Version: 2.27.1-6ubuntu3.9
# apt-cache madison libblkid1 | grep xenial-proposed
libblkid1 | 2.27.1-6ubuntu3.9 | http://archive.ubuntu.com/ubuntu xenial-proposed/main amd64 Packages
Test steps are described in comment #6.
Only one filesystem (ext4) is detected:
# udevadm test-builtin blkid /sys/block/$(basename $dev)/$(basename $part)
...
ID_FS_UUID=aadbf085-7ce7-43e4-a149-ad11d997b710
ID_FS_UUID_ENC=aadbf085-7ce7-43e4-a149-ad11d997b710
ID_FS_VERSION=1.0
ID_FS_TYPE=ext4
ID_FS_USAGE=filesystem
...
# echo $?
0
The verbose log shows nilfs is not detected:
# LIBBLKID_DEBUG=all udevadm test-builtin blkid /sys/block/$(basename $dev)/$(basename $part)
...
2177: libblkid: LOWPROBE: [63] nilfs2:
2177: libblkid: LOWPROBE: call probefunc()
2177: libblkid: LOWPROBE: reuse buffer: off=1024 len=1024 pr=0x5598289abc80
2177: libblkid: LOWPROBE: reuse buffer: off=16772608 len=4096 pr=0x5598289abc80
2177: libblkid: LOWPROBE: [64] exfat:
...
** Tags added: verification-done-xenial
--
You received this bug notification because you are a member of Ubuntu
Foundations Bugs, which is subscribed to util-linux in Ubuntu.
https://bugs.launchpad.net/bugs/1842437
Title:
Xenial: libblkid: fix false-positive/misdetection of nilfs2 filesystem
with udev
Status in util-linux package in Ubuntu:
Fix Released
Status in util-linux source package in Xenial:
Fix Committed
Bug description:
[Impact]
* Users / systemd can fail to mount a filesystem by UUID
(e.g., during boot, triggering emergency shell prompt)
if the magic bytes for the nilfs filesystem are written
to the right place in a partition of another filesystem,
(for whatever reason or coincidence).
* Note this can happen after the filesystem/mount is working
correctly, so a change of behavior/problem can potentially
be noticed when trying to mount the filesystem again, which
can very well be the next time the system boots.
* This happens because if udev blkid detects more than one
filesystem, it does not print the UUID env vars required
to create the /dev/disk/by-id symlinks and other things.
* The fix enhances the check for valid nilfs superblock by
specifically checking a value read from disk to be valid/
within a value range, which addresses this one occurrence
and prevents a lot more.
[Test Case]
* Synthetic test case written for this problem on comment #6.
[Regression Potential]
* Low. The code is contained in the probe for the nilfs filesystem.
* This just makes it be more restrictive about the possibly valid
values for a few bytes read from disk (that now need to be within
the acceptable range of valid values) so this only decreases false-
positives, and cannot increase false-negatives of valid filesystems.
[Original Description]
The nilfs filesystem has a backup superblock at the end of the device.
If the magic number is coincidentally found at the right position
and the filesystem is on a partition/not-wholedisk device,
the only check left is for checksum verification,
which is explicitly ignored in 'udev built-in blkid'.
This causes blkid to detect one actually valid filesystem with a
superblock at the beginning of the device (e.g., ext4), and then
an invalid nilfs2 filesystem due to a coincidental magic number
at the end of the device.
And this causes blkid to break out of the safeprobe routine
(which expects a single filesystem to be detected), and not
print the UUIDs, thus not creating /dev/disk/by-uuid/ links
which prevent mounting the partition by-uuid at boot time,
causing emergency shell/boot failures.
This upstream fix resolved the problem by introducing a check
for the 'bytes' paramenters in the superblock, which is read
from disk, and turns out to have an out-of-range value.
- 'liblkid: Add length check in probe_nilfs2 before crc32'
https://git.kernel.org/pub/scm/utils/util-linux/util-linux.git/commit/?id=ac681a310c32319423297544833932f4d689a7a2
$ git describe --contains ac681a310c32319423297544833932f4d689a7a2
v2.29-rc1~172
Xenial, which is v2.27.1-based, is the only release that needs it.
Bionic is v2.31.1, so all post-Xenial supported releases have it.
To manage notifications about this bug go to:
https://bugs.launchpad.net/ubuntu/+source/util-linux/+bug/1842437/+subscriptions
More information about the foundations-bugs
mailing list