aboutsummaryrefslogtreecommitdiffstats
path: root/fs/isofs
diff options
context:
space:
mode:
authorLinus Torvalds <torvalds@linux-foundation.org>2014-12-16 18:46:01 -0500
committerLinus Torvalds <torvalds@linux-foundation.org>2014-12-16 18:46:01 -0500
commit31f48fc8f226f968d6e6b9b9718abe8e16c51fe8 (patch)
treeb2f990f32448b097ec418d37c173483ebab18f54 /fs/isofs
parent0b233b7c79d2ba92c7fb5d60d4116693f1b3b0fe (diff)
parentf54e18f1b831c92f6512d2eedb224cd63d607d3d (diff)
Merge branch 'for_linus' of git://git.kernel.org/pub/scm/linux/kernel/git/jack/linux-fs
Pull isofs and reiserfs fixes from Jan Kara: "A reiserfs and an isofs fix. They arrived after I sent you my first pull request and I don't want to delay them unnecessarily till rc2" * 'for_linus' of git://git.kernel.org/pub/scm/linux/kernel/git/jack/linux-fs: isofs: Fix infinite looping over CE entries reiserfs: destroy allocated commit workqueue
Diffstat (limited to 'fs/isofs')
-rw-r--r--fs/isofs/rock.c6
1 files changed, 6 insertions, 0 deletions
diff --git a/fs/isofs/rock.c b/fs/isofs/rock.c
index f488bbae541a..bb63254ed848 100644
--- a/fs/isofs/rock.c
+++ b/fs/isofs/rock.c
@@ -30,6 +30,7 @@ struct rock_state {
30 int cont_size; 30 int cont_size;
31 int cont_extent; 31 int cont_extent;
32 int cont_offset; 32 int cont_offset;
33 int cont_loops;
33 struct inode *inode; 34 struct inode *inode;
34}; 35};
35 36
@@ -73,6 +74,9 @@ static void init_rock_state(struct rock_state *rs, struct inode *inode)
73 rs->inode = inode; 74 rs->inode = inode;
74} 75}
75 76
77/* Maximum number of Rock Ridge continuation entries */
78#define RR_MAX_CE_ENTRIES 32
79
76/* 80/*
77 * Returns 0 if the caller should continue scanning, 1 if the scan must end 81 * Returns 0 if the caller should continue scanning, 1 if the scan must end
78 * and -ve on error. 82 * and -ve on error.
@@ -105,6 +109,8 @@ static int rock_continue(struct rock_state *rs)
105 goto out; 109 goto out;
106 } 110 }
107 ret = -EIO; 111 ret = -EIO;
112 if (++rs->cont_loops >= RR_MAX_CE_ENTRIES)
113 goto out;
108 bh = sb_bread(rs->inode->i_sb, rs->cont_extent); 114 bh = sb_bread(rs->inode->i_sb, rs->cont_extent);
109 if (bh) { 115 if (bh) {
110 memcpy(rs->buffer, bh->b_data + rs->cont_offset, 116 memcpy(rs->buffer, bh->b_data + rs->cont_offset,