UPSTREAM: fs/ext4: Fix group descriptor checksum calculation
The current code doesn't compute the group descriptor checksum correctly for the filesystems that e2fsprogs 1.43.4 creates (they have 'Group descriptor size: 64' as reported by tune2fs). Extend the checksum calculation to be done as ext4_group_desc_csum() does in Linux. This fixes these errors in dmesg from running fs-test.sh and makes it succeed again: [1671902.620699] EXT4-fs (loop1): ext4_check_descriptors: Checksum for group 0 failed (35782!=10965) [1671902.620706] EXT4-fs (loop1): group descriptors corrupted! Change-Id: I362747a60cc16886c1a215867471b0a83fcf5e47 Signed-off-by: Tuomas Tynkkynen <tuomas.tynkkynen@iki.fi> Signed-off-by: Kever Yang <kever.yang@rock-chips.com> (cherry picked from commit 385b73185596cfc9e2acb74ab66abe91c06177f3)
This commit is contained in:
parent
8f3d02601c
commit
e47a88c41f
|
|
@ -432,6 +432,10 @@ uint16_t ext4fs_checksum_update(uint32_t i)
|
||||||
crc = ext2fs_crc16(crc, desc, offset);
|
crc = ext2fs_crc16(crc, desc, offset);
|
||||||
offset += sizeof(desc->bg_checksum); /* skip checksum */
|
offset += sizeof(desc->bg_checksum); /* skip checksum */
|
||||||
assert(offset == sizeof(*desc));
|
assert(offset == sizeof(*desc));
|
||||||
|
if (offset < fs->gdsize) {
|
||||||
|
crc = ext2fs_crc16(crc, (__u8 *)desc + offset,
|
||||||
|
fs->gdsize - offset);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return crc;
|
return crc;
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue