grub2/grub-core/fs
Daniel Drake 25d64bb273 fs/minix: Avoid mistakenly probing ext2 filesystems
The ext2 (and ext3, ext4) filesystems write the number of free inodes to
location 0x410.

On a MINIX filesystem, that same location is used for the MINIX superblock
magic number.

If the number of free inodes on an ext2 filesystem is equal to any
of the four MINIX superblock magic values plus any multiple of 65536,
GRUB's MINIX filesystem code will probe it as a MINIX filesystem.

In the case of an OS using ext2 as the root filesystem, since there will
ordinarily be some amount of file creation and deletion on every bootup,
it effectively means that this situation has a 1:16384 chance of being hit
on every reboot.

This will cause GRUB's filesystem probing code to mistakenly identify an
ext2 filesystem as MINIX. This can be seen by e.g. "search --label"
incorrectly indicating that no such ext2 partition with matching label
exists, whereas in fact it does.

After spotting the rough cause of the issue I was facing here, I borrowed
much of the diagnosis/explanation from meierfra who found and investigated
the same issue in util-linux in 2010:

  https://bugs.launchpad.net/ubuntu/+source/util-linux/+bug/518582

This was fixed in util-linux by having the MINIX code check for the
ext2 magic. Do the same here.

Signed-off-by: Daniel Drake <drake@endlessm.com>
Reviewed-by: Derek Foreman <derek@endlessos.org>
Reviewed-by: Daniel Kiper <daniel.kiper@oracle.com>
2021-04-12 16:22:44 +02:00
..
zfs fs/zfs/zfs: Use format code "%llu" for 64-bit uint bp->blk_prop in grub_error() 2021-03-10 15:23:33 +01:00
affs.c affs: Fix memory leaks 2021-03-02 15:54:16 +01:00
afs.c Leverage BFS implementation to read AFS. 2011-10-30 16:10:18 +01:00
archelp.c archelp: Never pass NULL as mtime. 2015-07-27 13:19:02 +02:00
bfs.c Change fs functions to add fs_ prefix 2019-04-09 10:03:29 +10:00
btrfs.c fs/btrfs: Squash some uninitialized reads 2021-03-02 15:54:19 +01:00
cbfs.c disk: Rename grub_disk_get_size() to grub_disk_native_sectors() 2020-12-12 01:19:03 +01:00
cpio_be.c Add gcc_struct to all packed structures when compiling with mingw. 2013-12-15 14:14:30 +01:00
cpio_common.c cpio: Disable gcc9 -Waddress-of-packed-member 2019-04-23 11:37:08 +02:00
cpio.c Add gcc_struct to all packed structures when compiling with mingw. 2013-12-15 14:14:30 +01:00
exfat.c exfat reader 2011-04-11 18:13:00 +02:00
ext2.c fs/ext2: Fix a file not found error when a symlink filesize is equal to 60 2021-03-10 13:14:25 +01:00
f2fs.c f2fs: Disable gcc9 -Waddress-of-packed-member 2019-06-03 11:18:31 +02:00
fat.c fat: Support file modification times 2020-03-10 21:52:07 +01:00
fshelp.c fs/fshelp: Catch impermissibly large block sizes in read helper 2021-03-02 15:54:18 +01:00
hfs.c fs/hfs: Disable under lockdown 2021-03-02 15:54:18 +01:00
hfsplus.c fs/hfsplus: Use format code PRIuGRUB_UINT64_T for 64-bit typed fileblock in grub_error() 2021-03-10 15:23:33 +01:00
hfspluscomp.c Make grub_zlib_decompress handle incomplete chunks. 2013-12-18 23:39:49 +01:00
iso9660.c iso9660: Don't leak memory on realloc() failures 2020-07-29 16:55:48 +02:00
jfs.c fs/jfs: Catch infinite recursion 2021-03-02 15:54:18 +01:00
minix2_be.c Handle big-endian minixfs (fixes minixfs tests on bigendian). 2012-04-01 21:35:18 +02:00
minix2.c Split minix.mod into minix.mod and minix2.mod. 2010-09-08 19:13:48 +02:00
minix3_be.c Handle big-endian minixfs (fixes minixfs tests on bigendian). 2012-04-01 21:35:18 +02:00
minix3.c minix3fs support 2011-04-11 08:16:13 +02:00
minix_be.c Handle big-endian minixfs (fixes minixfs tests on bigendian). 2012-04-01 21:35:18 +02:00
minix.c fs/minix: Avoid mistakenly probing ext2 filesystems 2021-04-12 16:22:44 +02:00
newc.c Add gcc_struct to all packed structures when compiling with mingw. 2013-12-15 14:14:30 +01:00
nilfs2.c fs/nilfs2: Properly bail on errors in grub_nilfs2_btree_node_lookup() 2021-03-02 15:54:18 +01:00
ntfs.c calloc: Use calloc() at most places 2020-07-29 16:55:47 +02:00
ntfscomp.c Fix warnings when compiling with -O3 2016-02-17 17:56:41 +01:00
odc.c Add gcc_struct to all packed structures when compiling with mingw. 2013-12-15 14:14:30 +01:00
proc.c Change fs functions to add fs_ prefix 2019-04-09 10:03:29 +10:00
reiserfs.c Change fs functions to add fs_ prefix 2019-04-09 10:03:29 +10:00
romfs.c Change fs functions to add fs_ prefix 2019-04-09 10:03:29 +10:00
sfs.c fs/sfs: Fix over-read of root object name 2021-03-02 15:54:18 +01:00
squash4.c malloc: Use overflow checking primitives where we do complex allocations 2020-07-29 16:55:47 +02:00
tar.c calloc: Use calloc() at most places 2020-07-29 16:55:47 +02:00
udf.c udf: Fix memory leak 2020-07-29 16:55:48 +02:00
ufs2.c automake commit without merge history 2010-05-06 11:34:04 +05:30
ufs_be.c Support big-endian UFS1. 2012-12-08 20:56:58 +01:00
ufs.c Change fs functions to add fs_ prefix 2019-04-09 10:03:29 +10:00
xfs.c style: Format string macro should have a space between quotes 2021-03-10 15:23:34 +01:00