Skip to contentSkip to conversation

ocfs2: Handle quota file corruption more gracefully

PATCH New Jan Kara 2 participants 2 messages Aug 3, 2009 – Aug 17, 2009 OCFS2

lore
Share & tools
lore

Jan Kara

author
#0 lore raw

PATCH 1/1 ocfs2: Handle quota file corruption more gracefully

ocfs2_read_virt_blocks() does BUG when we try to read a block from a file beyond its end. Since this can happen due to filesystem corruption, it is not really an appropriate answer. Make ocfs2_read_quota_block() check the condition and handle it by calling ocfs2_error() and returning EIO.

---
Joel, could you please merge this fix? Thanks.

 fs/ocfs2/quota_global.c |    9 +++++++++
 1 files changed, 9 insertions(+), 0 deletions(-)
fs/ocfs2/quota_global.c +9 -0
index d604a6a..8988d8b 100644
@@ -23,6 +23,7 @@
 #include "sysfile.h"
 #include "dlmglue.h"
 #include "uptodate.h"
+#include "super.h"
 #include "quota.h"
 
 static struct workqueue_struct *ocfs2_quota_wq = NULL;
@@ -114,6 +115,14 @@ int ocfs2_read_quota_block(struct inode *inode, u64 v_block,
 	int rc = 0;
 	struct buffer_head *tmp = *bh;
 
+	if (i_size_read(inode) >> inode->i_sb->s_blocksize_bits <= v_block) {
+		ocfs2_error(inode->i_sb,
+			    "Quota file %lu is probably corrupted! Requested "
+			    "to read block %Lu but file has size only %Lu\n",
+			    inode->i_ino, (unsigned long long)v_block,
+			    (unsigned long long)i_size_read(inode));
+		return -EIO;
+	}
 	rc = ocfs2_read_virt_blocks(inode, v_block, 1, &tmp, 0,
 				    ocfs2_validate_quota_block);
 	if (rc)
Signature · 1 line
1.6.0.2
#1 lore raw

PATCH 1/1 ocfs2: Handle quota file corruption more gracefully

Quoted 9 lines · Jan Kara

ocfs2_read_virt_blocks() does BUG when we try to read a block from a file beyond its end. Since this can happen due to filesystem corruption, it is not really an appropriate answer. Make ocfs2_read_quota_block() check the condition and handle it by calling ocfs2_error() and returning EIO.

---
Joel, could you please merge this fix? Thanks.

This is now in the fixes branch of ocfs2.git. That <= check is a little confusing, because it relies on quota files always being whole blocks.

Joel

Signature · 8 lines
"We'd better get back, `cause it'll be dark soon,
 and they mostly come at night.  Mostly."

Joel Becker
Principal Software Developer
Oracle
E-mail: [email protected]
Phone: (650) 506-8127