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

Commit 16759392 authored by Daniel Rosenberg's avatar Daniel Rosenberg
Browse files

ANDROID: squashfs: Fix endianness issue



Code in squashfs_process_blocks was not correctly assigning
length. Casting to u16* introduced endianness issues on some
architectures.

Signed-off-by: default avatarDaniel Rosenberg <drosen@google.com>
Bug: 35257858
Change-Id: I9efaef4bc531b7469de79cf94738ade2dd6e6a8c
parent 575a44c7
Loading
Loading
Loading
Loading
+6 −5
Original line number Diff line number Diff line
@@ -121,11 +121,12 @@ static void squashfs_process_blocks(struct squashfs_read_request *req)

	if (req->data_processing == SQUASHFS_METADATA) {
		/* Extract the length of the metadata block */
		if (req->offset != msblk->devblksize - 1)
			length = *((u16 *)(bh[0]->b_data + req->offset));
		else {
			length = bh[0]->b_data[req->offset];
			length |= bh[1]->b_data[0] << 8;
		if (req->offset != msblk->devblksize - 1) {
			length = le16_to_cpup((__le16 *)
					(bh[0]->b_data + req->offset));
		} else {
			length = (unsigned char)bh[0]->b_data[req->offset];
			length |= (unsigned char)bh[1]->b_data[0] << 8;
		}
		req->compressed = SQUASHFS_COMPRESSED(length);
		req->data_processing = req->compressed ? SQUASHFS_DECOMPRESS