| To: | xfs-oss <xfs@xxxxxxxxxxx> |
|---|---|
| Subject: | [PATCH] xfs_repair: catch bad depth in traverse_int_dir2block |
| From: | Eric Sandeen <sandeen@xxxxxxxxxxx> |
| Date: | Sun, 07 Jun 2009 22:51:52 -0500 |
| Cc: | Richard Kolkovich <richard@xxxxxxxxxxxxx> |
| User-agent: | Thunderbird 2.0.0.21 (Macintosh/20090302) |
A bad on-disk tree depth in traverse_int_dir2block() can
later cause a segfault when it's used as an array index in
this function; if we get something beyond the max depth,
just error out and the dir will get rebuilt.
Reported-by: Richard Kolkovich <richard@xxxxxxxxxxxxx>
Signed-off-by: Eric Sandeen <sandeen@xxxxxxxxxxx>
---
diff --git a/repair/dir2.c b/repair/dir2.c
index 9575fb1..2723e3b 100644
--- a/repair/dir2.c
+++ b/repair/dir2.c
@@ -339,9 +339,17 @@ traverse_int_dir2block(xfs_mount_t *mp,
/*
* maintain level counter
*/
- if (i == -1)
+ if (i == -1) {
i = da_cursor->active = be16_to_cpu(node->hdr.level);
- else {
+ if (i >= XFS_DA_NODE_MAXDEPTH) {
+ do_warn(_("bad header depth for directory "
+ "inode %llu\n"),
+ da_cursor->ino);
+ da_brelse(bp);
+ i = -1;
+ goto error_out;
+ }
+ } else {
if (be16_to_cpu(node->hdr.level) == i - 1) {
i--;
} else {
|
| <Prev in Thread] | Current Thread | [Next in Thread> |
|---|---|---|
| ||
| Previous by Date: | Re: Kernel crash with 2.6.29 + nfs + xfs (radix-tree), Martin Spott |
|---|---|
| Next by Date: | Рассылка_"Секреты_в_Интернете"_, Lazareva |
| Previous by Thread: | UPGRADE NOTICE!!, Erasmusmc Technical Services |
| Next by Thread: | Re: [PATCH] xfs_repair: catch bad depth in traverse_int_dir2block, Christoph Hellwig |
| Indexes: | [Date] [Thread] [Top] [All Lists] |