hfsplus corrupts filesystems >2TB

Ben Hutchings
2009-10-07T02:52:00Z

[-- Attachment #1: Type: text/plain, Size: 933 bytes --]

A Debian bug report <http://bugs.debian.org/550010> alerted me to the
fact that hfsplus is not using enough bits for some sector calculations.

hfsplus_get_block() does:

u32 ablock, dblock, mask;
...
map_bh(bh_result, sb, (dblock << HFSPLUS_SB(sb).fs_shift) + HFSPLUS_SB(sb).blockoffset + (iblock & mask));

which results in overflow when the sector number is >2^32. Now it might
be sufficient to change the last line to:

map_bh(bh_result, sb, ((sector_t)dblock << HFSPLUS_SB(sb).fs_shift) + HFSPLUS_SB(sb).blockoffset + (iblock & mask));

but there may be many other places where u32 must be changed to
sector_t.

For Debian's stable release, I'm intending to prevent mounting volumes
larger than 2^32 sectors (2TB). Is anyone interested in fixing this
properly or should I submit the same change for mainline?

Ben.

--
Ben Hutchings
To err is human; to really foul things up requires a computer.

[-- Attachment #2: This is a digitally signed message part --]
[-- Type: application/pgp-signature, Size: 828 bytes --]