Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit e552a596 authored by Phillip Lougher's avatar Phillip Lougher
Browse files

Squashfs: add missing block release on error condition



squashfs_read_metadata forgets to release the cache block if
an error has occurred.

Signed-off-by: default avatarPhillip Lougher <phillip@squashfs.org.uk>
parent 5f0a6e2d
Loading
Loading
Loading
Loading
+13 −6
Original line number Diff line number Diff line
@@ -332,17 +332,20 @@ int squashfs_read_metadata(struct super_block *sb, void *buffer,
		u64 *block, int *offset, int length)
{
	struct squashfs_sb_info *msblk = sb->s_fs_info;
	int bytes, copied = length;
	int bytes, res = length;
	struct squashfs_cache_entry *entry;

	TRACE("Entered squashfs_read_metadata [%llx:%x]\n", *block, *offset);

	while (length) {
		entry = squashfs_cache_get(sb, msblk->block_cache, *block, 0);
		if (entry->error)
			return entry->error;
		else if (*offset >= entry->length)
			return -EIO;
		if (entry->error) {
			res = entry->error;
			goto error;
		} else if (*offset >= entry->length) {
			res = -EIO;
			goto error;
		}

		bytes = squashfs_copy_data(buffer, entry, *offset, length);
		if (buffer)
@@ -358,7 +361,11 @@ int squashfs_read_metadata(struct super_block *sb, void *buffer,
		squashfs_cache_put(entry);
	}

	return copied;
	return res;

error:
	squashfs_cache_put(entry);
	return res;
}