diff options
author | plougher <plougher> | 2008-10-19 20:02:57 +0000 |
---|---|---|
committer | Mohamad Ayyash <mkayyash@google.com> | 2015-02-23 12:34:07 -0800 |
commit | d02958dbfa047db2b8c8b22209be21822b4a8015 (patch) | |
tree | 0c45353b32ea614451da81aec0b4a892f26b6444 /kernel/fs | |
parent | bfffe327332facc323af287277f68fe905ce7a8a (diff) | |
download | squashfs-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.c | 4 | ||||
-rw-r--r-- | kernel/fs/squashfs/inode.c | 20 |
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); |