]> git.baikalelectronics.ru Git - kernel.git/commit
isofs: reject hardware sector size > 2048 bytes
authorEric Sandeen <sandeen@redhat.com>
Fri, 17 Aug 2018 02:44:02 +0000 (21:44 -0500)
committerJan Kara <jack@suse.cz>
Tue, 21 Aug 2018 09:37:41 +0000 (11:37 +0200)
commite2a599217cb91620c4e460c4f49fa23b32a87c19
tree9d4b485a463591aaa53757d5076c3f4ac2bb2950
parent3ffe4a819bed3aa8638f620bfe7529f1673e76e3
isofs: reject hardware sector size > 2048 bytes

The largest block size supported by isofs is ISOFS_BLOCK_SIZE (2048), but
isofs_fill_super calls sb_min_blocksize and sets the blocksize to the
device's logical block size if it's larger than what we ended up with after
option parsing.

If for some reason we try to mount a hard 4k device as an isofs filesystem,
we'll set opt.blocksize to 4096, and when we try to read the superblock
we found via:

        block = iso_blknum << (ISOFS_BLOCK_BITS - s->s_blocksize_bits)

with s_blocksize_bits greater than ISOFS_BLOCK_BITS, we'll have a negative
shift and the bread will fail somewhat cryptically:

  isofs_fill_super: bread failed, dev=sda, iso_blknum=17, block=-2147483648

It seems best to just catch and clearly reject mounts of such a device.

Reported-by: Bryan Gurney <bgurney@redhat.com>
Signed-off-by: Eric Sandeen <sandeen@redhat.com>
Signed-off-by: Jan Kara <jack@suse.cz>
fs/isofs/inode.c