udev builtin blkid ignores the checksum error: nilfs_valid_sb() @ nilfs.c:96
return blkid_probe_verify_csum(pr, crc, le32_to_cpu(sb->s_sum)); blkid_probe_verify_csum() @ probe.c:1576-1687 if (csum != expected) { ... DBG(LOWPROBE, ul_debug( "incorrect checksum for type %s," " got %"PRIX64", expected %"PRIX64"", ... * Accept bad checksum if BLKID_SUBLKS_BADCSUM flags is set ... blkid_probe_set_value(pr, "SBBADCSUM", (unsigned char *) "1", 2); goto accept; } return 0; /* bad checksum */ ... accept: return 1; from debug: 586: libblkid: LOWPROBE: incorrect checksum for type nilfs2, got 56C7A81B, expected 2D2D206B 586: libblkid: LOWPROBE: assigning SBBADCSUM [superblocks] and udev blkid uses that flag: builtin_blkid() @ udev-builtin-blkid.c:264-268 blkid_probe_set_superblocks_flags(pr, ... BLKID_SUBLKS_BADCSUM); -- 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