hfsplus: Refuse to mount volumes larger than 2TB, which may otherwise be corrupted (Closes: #550010)
svn path=/dists/trunk/linux-2.6/; revision=14373
This commit is contained in:
parent
5275ded9d3
commit
d47a159011
|
@ -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
|
* Remove /usr/include/scsi from linux-libc-dev; these headers are
|
||||||
provided by libc6-dev (Closes: #550130)
|
provided by libc6-dev (Closes: #550130)
|
||||||
* Remove dummy dot-files from linux-libc-dev
|
* 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 ]
|
[ maximilian attems ]
|
||||||
* Add stable release 2.6.31.2
|
* Add stable release 2.6.31.2
|
||||||
|
|
|
@ -0,0 +1,36 @@
|
||||||
|
From: Ben Hutchings <ben@decadent.org.uk>
|
||||||
|
Subject: [PATCH] hfsplus: Refuse to mount volumes larger than 2TB
|
||||||
|
|
||||||
|
As found in <http://bugs.debian.org/550010>, 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 <ben@decadent.org.uk>
|
||||||
|
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.
|
|
@ -42,3 +42,4 @@
|
||||||
+ bugfix/all/stable/2.6.31.2.patch
|
+ bugfix/all/stable/2.6.31.2.patch
|
||||||
+ bugfix/all/drivers-net-sfc-fix-initial-link-state.patch
|
+ bugfix/all/drivers-net-sfc-fix-initial-link-state.patch
|
||||||
+ bugfix/all/stable/2.6.31.3.patch
|
+ bugfix/all/stable/2.6.31.3.patch
|
||||||
|
+ bugfix/all/hfsplus-limit-to-2tb.patch
|
||||||
|
|
Loading…
Reference in New Issue