sts-sponsors team mailing list archive
-
sts-sponsors team
-
Mailing list archive
-
Message #01438
[Bug 1842437] Re: Xenial: libblkid: fix false-positive/misdetection of nilfs2 filesystem with udev
Eric, thanks for reporting that.
I couldn't reproduce the build failure on LXC with apt dist-upgrade on
xenial-updates nor xenial-proposed, and it built successfully on PPAs a
while ago (for the test packages), so it seems something changed in the
PPA builders.
I'll investigate this as per our discussion on IRC, and get back to you.
Thanks,
Mauricio
--
You received this bug notification because you are a member of STS
Sponsors, which is subscribed to the bug report.
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:
In Progress
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