Attaching the debdiff with the fix.

This is waiting on validation from the reported user
that the boot problem does not happen anymore -- but
has already been validated on the running system to
produce the correct/expected behavior (UUID / other
values are printed by 'udevadm test-builtin blkdid').

I'll be out the next week, so this should probably
be handled by Guilherme Piccoli during this time.

** Description changed:

+ [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.

** Patch added: "lp1842437_util-linux.debdiff"
   
https://bugs.launchpad.net/ubuntu/+source/util-linux/+bug/1842437/+attachment/5287043/+files/lp1842437_util-linux.debdiff

** Changed in: util-linux (Ubuntu Xenial)
     Assignee: Mauricio Faria de Oliveira (mfo) => Guilherme G. Piccoli 
(gpiccoli)

-- 
You received this bug notification because you are a member of Ubuntu
Touch seeded packages, 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:
  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

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

Reply via email to