summaryrefslogtreecommitdiffstats
path: root/fs/ext3/namei.c
diff options
context:
space:
mode:
authorJeff Garzik <jeff@garzik.org>2006-08-03 23:20:37 +0200
committerJeff Garzik <jeff@garzik.org>2006-08-03 23:20:37 +0200
commit23946a8a980d13af7b84bcf3ce023e0d166ec83f (patch)
tree193d2959a7b62b48aaf2236447f1378779e55104 /fs/ext3/namei.c
parentMerge branch 'master' into upstream (diff)
parentMerge branch 'upstream-fixes' of git://git.kernel.org/pub/scm/linux/kernel/gi... (diff)
downloadlinux-23946a8a980d13af7b84bcf3ce023e0d166ec83f.tar.xz
linux-23946a8a980d13af7b84bcf3ce023e0d166ec83f.zip
Merge branch 'upstream-fixes' into upstream
Diffstat (limited to 'fs/ext3/namei.c')
-rw-r--r--fs/ext3/namei.c15
1 files changed, 13 insertions, 2 deletions
diff --git a/fs/ext3/namei.c b/fs/ext3/namei.c
index d9176dba3698..2aa7101b27cd 100644
--- a/fs/ext3/namei.c
+++ b/fs/ext3/namei.c
@@ -1000,7 +1000,12 @@ static struct dentry *ext3_lookup(struct inode * dir, struct dentry *dentry, str
if (bh) {
unsigned long ino = le32_to_cpu(de->inode);
brelse (bh);
- inode = iget(dir->i_sb, ino);
+ if (!ext3_valid_inum(dir->i_sb, ino)) {
+ ext3_error(dir->i_sb, "ext3_lookup",
+ "bad inode number: %lu", ino);
+ inode = NULL;
+ } else
+ inode = iget(dir->i_sb, ino);
if (!inode)
return ERR_PTR(-EACCES);
@@ -1028,7 +1033,13 @@ struct dentry *ext3_get_parent(struct dentry *child)
return ERR_PTR(-ENOENT);
ino = le32_to_cpu(de->inode);
brelse(bh);
- inode = iget(child->d_inode->i_sb, ino);
+
+ if (!ext3_valid_inum(child->d_inode->i_sb, ino)) {
+ ext3_error(child->d_inode->i_sb, "ext3_get_parent",
+ "bad inode number: %lu", ino);
+ inode = NULL;
+ } else
+ inode = iget(child->d_inode->i_sb, ino);
if (!inode)
return ERR_PTR(-EACCES);