From d47a15901160f63af0a690247efa7741ef015430 Mon Sep 17 00:00:00 2001 From: Ben Hutchings Date: Sun, 11 Oct 2009 02:20:45 +0000 Subject: [PATCH] hfsplus: Refuse to mount volumes larger than 2TB, which may otherwise be corrupted (Closes: #550010) svn path=/dists/trunk/linux-2.6/; revision=14373 --- debian/changelog | 2 ++ .../bugfix/all/hfsplus-limit-to-2tb.patch | 36 +++++++++++++++++++ debian/patches/series/base | 1 + 3 files changed, 39 insertions(+) create mode 100644 debian/patches/bugfix/all/hfsplus-limit-to-2tb.patch diff --git a/debian/changelog b/debian/changelog index fc6c85c00..d77e3346e 100644 --- a/debian/changelog +++ b/debian/changelog @@ -17,6 +17,8 @@ linux-2.6 (2.6.31-1~experimental.2) UNRELEASED; urgency=low * Remove /usr/include/scsi from linux-libc-dev; these headers are provided by libc6-dev (Closes: #550130) * Remove dummy dot-files from linux-libc-dev + * hfsplus: Refuse to mount volumes larger than 2TB, which may otherwise + be corrupted (Closes: #550010) [ maximilian attems ] * Add stable release 2.6.31.2 diff --git a/debian/patches/bugfix/all/hfsplus-limit-to-2tb.patch b/debian/patches/bugfix/all/hfsplus-limit-to-2tb.patch new file mode 100644 index 000000000..325a420f0 --- /dev/null +++ b/debian/patches/bugfix/all/hfsplus-limit-to-2tb.patch @@ -0,0 +1,36 @@ +From: Ben Hutchings +Subject: [PATCH] hfsplus: Refuse to mount volumes larger than 2TB + +As found in , hfsplus is using type u32 +rather than sector_t for some sector number calculations. + +In particular, 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)); + +I am not confident that I can find and fix all cases where a sector +number may be truncated. For now, avoid data loss by refusing to mount +HFS+ volumes with more than 2^32 sectors (2TB). + +Signed-off-by: Ben Hutchings +Cc: stable@kernel.org +--- +--- a/fs/hfsplus/wrapper.c ++++ b/fs/hfsplus/wrapper.c +@@ -99,6 +99,10 @@ + + if (hfsplus_get_last_session(sb, &part_start, &part_size)) + return -EINVAL; ++ if (part_start + part_size > 0x100000000) { ++ pr_err("hfs: volumes larger than 2TB are not supported yet\n"); ++ return -EINVAL; ++ } + while (1) { + bh = sb_bread512(sb, part_start + HFSPLUS_VOLHEAD_SECTOR, vhdr); + if (!bh) + +-- +Ben Hutchings +Quantity is no substitute for quality, but it's the only one we've got. diff --git a/debian/patches/series/base b/debian/patches/series/base index 114bd3548..47830b82a 100644 --- a/debian/patches/series/base +++ b/debian/patches/series/base @@ -42,3 +42,4 @@ + bugfix/all/stable/2.6.31.2.patch + bugfix/all/drivers-net-sfc-fix-initial-link-state.patch + bugfix/all/stable/2.6.31.3.patch ++ bugfix/all/hfsplus-limit-to-2tb.patch