aboutsummaryrefslogtreecommitdiff
path: root/kernel/fs
diff options
context:
space:
mode:
authorplougher <plougher>2008-10-19 20:02:57 +0000
committerMohamad Ayyash <mkayyash@google.com>2015-02-23 12:34:07 -0800
commitd02958dbfa047db2b8c8b22209be21822b4a8015 (patch)
tree0c45353b32ea614451da81aec0b4a892f26b6444 /kernel/fs
parentbfffe327332facc323af287277f68fe905ce7a8a (diff)
downloadsquashfs-tools-d02958dbfa047db2b8c8b22209be21822b4a8015.tar.gz
Fix squashfs_get_id and squashfs_new_inode to return negative errors
Diffstat (limited to 'kernel/fs')
-rw-r--r--kernel/fs/squashfs/id.c4
-rw-r--r--kernel/fs/squashfs/inode.c20
2 files changed, 14 insertions, 10 deletions
diff --git a/kernel/fs/squashfs/id.c b/kernel/fs/squashfs/id.c
index b2c00f3..3f2443a 100644
--- a/kernel/fs/squashfs/id.c
+++ b/kernel/fs/squashfs/id.c
@@ -51,10 +51,10 @@ int squashfs_get_id(struct super_block *s, unsigned int index, unsigned int *id)
if (!squashfs_read_metadata(s, &disk_id, &start_block, &offset,
sizeof(disk_id)))
- return 0;
+ return -EIO;
*id = le32_to_cpu(disk_id);
- return 1;
+ return 0;
}
diff --git a/kernel/fs/squashfs/inode.c b/kernel/fs/squashfs/inode.c
index 90c81a6..092a20a 100644
--- a/kernel/fs/squashfs/inode.c
+++ b/kernel/fs/squashfs/inode.c
@@ -55,9 +55,14 @@
static int squashfs_new_inode(struct super_block *s, struct inode *i,
struct squashfs_base_inode *inodeb)
{
- if (squashfs_get_id(s, le16_to_cpu(inodeb->uid), &i->i_uid) == 0)
+ int err;
+
+ err = squashfs_get_id(s, le16_to_cpu(inodeb->uid), &i->i_uid);
+ if (err)
goto out;
- if (squashfs_get_id(s, le16_to_cpu(inodeb->guid), &i->i_gid) == 0)
+
+ err = squashfs_get_id(s, le16_to_cpu(inodeb->guid), &i->i_gid);
+ if (err < 0)
goto out;
i->i_ino = le32_to_cpu(inodeb->inode_number);
@@ -67,10 +72,8 @@ static int squashfs_new_inode(struct super_block *s, struct inode *i,
i->i_mode = le16_to_cpu(inodeb->mode);
i->i_size = 0;
- return 1;
-
out:
- return 0;
+ return err;
}
@@ -100,7 +103,7 @@ int squashfs_read_inode(struct inode *i, long long inode)
struct squashfs_sb_info *msblk = s->s_fs_info;
long long block = SQUASHFS_INODE_BLK(inode) + msblk->inode_table_start;
unsigned int offset = SQUASHFS_INODE_OFFSET(inode);
- int type;
+ int err, type;
union squashfs_inode id;
struct squashfs_base_inode *inodeb = &id.base;
@@ -112,8 +115,9 @@ int squashfs_read_inode(struct inode *i, long long inode)
if (!squashfs_read_metadata(s, inodeb, &block, &offset, sizeof(*inodeb)))
goto failed_read;
- if (squashfs_new_inode(s, i, inodeb) == 0)
- goto failed_read;
+ err = squashfs_new_inode(s, i, inodeb);
+ if (err)
+ goto failed_read;
block = SQUASHFS_INODE_BLK(inode) + msblk->inode_table_start;
offset = SQUASHFS_INODE_OFFSET(inode);