Problem:

- the ext4 filesystem is detected correctly at the beginning of the partition.
- the nilfs2 filesystem is detected incorrectly at the end of the partition.
- the nilfs2 checksum is invalid, but that is ignored by udev builtin blkid.
- the detection of more than one filesystems causes an error and stop blkid.

# LIBBLKID_DEBUG=all udevadm test-builtin blkid /sys/block/loop0/loop0p1
...
30555: libblkid: LOWPROBE: [28] ext4:                                           
30555: libblkid: LOWPROBE:      reuse buffer: off=1024 len=1024 
pr=0x558f3ea3dec0
30555: libblkid: LOWPROBE:      magic sboff=56, kboff=1                         
30555: libblkid: LOWPROBE:      call probefunc()                                
    
30555: libblkid: LOWPROBE:      reuse buffer: off=1024 len=1024 
pr=0x558f3ea3dec0       
30555: libblkid:    PROBE: ext2_sb.compat = 0000003C:00000246:0000007B          
        
30555: libblkid: LOWPROBE: assigning UUID [superblocks]                         
30555: libblkid: LOWPROBE: assigning VERSION [superblocks]                      
     
30555: libblkid: LOWPROBE: assigning TYPE [superblocks]                         
 
30555: libblkid: LOWPROBE: assigning USAGE [superblocks]
...
30555: libblkid: LOWPROBE: [63] nilfs2:                                         
              
30555: libblkid: LOWPROBE:      call probefunc()                                
                   
30555: libblkid: LOWPROBE:      reuse buffer: off=1024 len=1024 
pr=0x558f3ea3dec0
30555: libblkid: LOWPROBE:      reuse buffer: off=1072689152 len=4096 
pr=0x558f3ea3dec0
30555: libblkid: LOWPROBE: incorrect checksum for type nilfs2, got 3F8DC6BA, 
expected 2D2D206B
30555: libblkid: LOWPROBE: assigning SBBADCSUM [superblocks]                    
        
30555: libblkid: LOWPROBE: nilfs2: primary=0, backup=1, swap=1                  
 
30555: libblkid: LOWPROBE: assigning LABEL [superblocks]                        
 
30555: libblkid: LOWPROBE: assigning UUID [superblocks]                         
 
30555: libblkid: LOWPROBE: assigning VERSION [superblocks]                      
 
30555: libblkid: LOWPROBE: assigning TYPE [superblocks]                         
30555: libblkid: LOWPROBE: assigning USAGE [superblocks]                        
 
...
30555: libblkid: LOWPROBE: ERROR: superblocks chain: ambivalent result detected 
(2 filesystems)!
...

# echo $?
1

-- 
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:
  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