mirror of
https://github.com/kdave/btrfs-progs
synced 2025-01-11 08:19:32 +00:00
btrfs-progs: fix unaligned loads in receive
A user reported corruption after receiving subvolumes. Turning up the logging during the receive showed that the commands and string attributes were being received correctly but the u64 attrbutes were sometimes corrupted by having variable number of low order bytes introduced. It turned out they were on a platform that corrupts unaligned userspace loads. Loading the u64s from the unaligned pointers into the received command stream with get_unaligned() fixed the problem. Reported-By: Klaus Holler <kho@gmx.at> Tested-By: Klaus Holler <kho@gmx.at> Signed-off-by: Zach Brown <zab@zabbo.net> Signed-off-by: David Sterba <dsterba@suse.cz>
This commit is contained in:
parent
3db4c0a3d3
commit
dace60fc82
@ -204,7 +204,7 @@ out:
|
||||
int __len; \
|
||||
TLV_GET(s, attr, (void**)&__tmp, &__len); \
|
||||
TLV_CHECK_LEN(sizeof(*__tmp), __len); \
|
||||
*v = le##bits##_to_cpu(*__tmp); \
|
||||
*v = get_unaligned_le##bits(__tmp); \
|
||||
} while (0)
|
||||
|
||||
#define TLV_GET_U8(s, attr, v) TLV_GET_INT(s, attr, 8, v)
|
||||
|
Loading…
Reference in New Issue
Block a user