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

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

Squashfs: Fix sanity check patches on big-endian systems



le64 values should be swapped when accessing on
big-endian systems.

Signed-off-by: default avatarPhillip Lougher <phillip@lougher.demon.co.uk>
parent d7f2ff67
Loading
Loading
Loading
Loading
+1 −1
Original line number Original line Diff line number Diff line
@@ -147,7 +147,7 @@ __le64 *squashfs_read_inode_lookup_table(struct super_block *sb,
	 * table[0] points to the first inode lookup table metadata block,
	 * table[0] points to the first inode lookup table metadata block,
	 * this should be less than lookup_table_start
	 * this should be less than lookup_table_start
	 */
	 */
	if (!IS_ERR(table) && table[0] >= lookup_table_start) {
	if (!IS_ERR(table) && le64_to_cpu(table[0]) >= lookup_table_start) {
		kfree(table);
		kfree(table);
		return ERR_PTR(-EINVAL);
		return ERR_PTR(-EINVAL);
	}
	}
+1 −1
Original line number Original line Diff line number Diff line
@@ -90,7 +90,7 @@ __le64 *squashfs_read_fragment_index_table(struct super_block *sb,
	 * table[0] points to the first fragment table metadata block, this
	 * table[0] points to the first fragment table metadata block, this
	 * should be less than fragment_table_start
	 * should be less than fragment_table_start
	 */
	 */
	if (!IS_ERR(table) && table[0] >= fragment_table_start) {
	if (!IS_ERR(table) && le64_to_cpu(table[0]) >= fragment_table_start) {
		kfree(table);
		kfree(table);
		return ERR_PTR(-EINVAL);
		return ERR_PTR(-EINVAL);
	}
	}
+1 −1
Original line number Original line Diff line number Diff line
@@ -93,7 +93,7 @@ __le64 *squashfs_read_id_index_table(struct super_block *sb,
	 * table[0] points to the first id lookup table metadata block, this
	 * table[0] points to the first id lookup table metadata block, this
	 * should be less than id_table_start
	 * should be less than id_table_start
	 */
	 */
	if (!IS_ERR(table) && table[0] >= id_table_start) {
	if (!IS_ERR(table) && le64_to_cpu(table[0]) >= id_table_start) {
		kfree(table);
		kfree(table);
		return ERR_PTR(-EINVAL);
		return ERR_PTR(-EINVAL);
	}
	}
+3 −3
Original line number Original line Diff line number Diff line
@@ -245,7 +245,7 @@ allocate_id_index_table:
		msblk->id_table = NULL;
		msblk->id_table = NULL;
		goto failed_mount;
		goto failed_mount;
	}
	}
	next_table = msblk->id_table[0];
	next_table = le64_to_cpu(msblk->id_table[0]);


	/* Handle inode lookup table */
	/* Handle inode lookup table */
	lookup_table_start = le64_to_cpu(sblk->lookup_table_start);
	lookup_table_start = le64_to_cpu(sblk->lookup_table_start);
@@ -261,7 +261,7 @@ allocate_id_index_table:
		msblk->inode_lookup_table = NULL;
		msblk->inode_lookup_table = NULL;
		goto failed_mount;
		goto failed_mount;
	}
	}
	next_table = msblk->inode_lookup_table[0];
	next_table = le64_to_cpu(msblk->inode_lookup_table[0]);


	sb->s_export_op = &squashfs_export_ops;
	sb->s_export_op = &squashfs_export_ops;


@@ -286,7 +286,7 @@ handle_fragments:
		msblk->fragment_index = NULL;
		msblk->fragment_index = NULL;
		goto failed_mount;
		goto failed_mount;
	}
	}
	next_table = msblk->fragment_index[0];
	next_table = le64_to_cpu(msblk->fragment_index[0]);


check_directory_table:
check_directory_table:
	/* Sanity check directory_table */
	/* Sanity check directory_table */