From dace60fc82c10f746a6db89885ef02485fbaaba1 Mon Sep 17 00:00:00 2001 From: Zach Brown Date: Thu, 21 Aug 2014 14:24:04 -0700 Subject: 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 Tested-By: Klaus Holler Signed-off-by: Zach Brown Signed-off-by: David Sterba --- send-stream.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'send-stream.c') diff --git a/send-stream.c b/send-stream.c index ef4d8899..10b36b6a 100644 --- a/send-stream.c +++ b/send-stream.c @@ -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) -- cgit v1.2.3