btrfs-progs/common
David Sterba 09a5fe669f btrfs-progs: receive: fix reading header on strict alignment hosts
There's a report:

ERROR: Failed to send/receive subvolume: .../testbackup.20240330T1102  -> .../testbackup.20240330T1102
ERROR: ... Command execution failed (exitcode=1)
ERROR: ... sh: btrfs send '.../testbackup.20240330T1102' | ssh user@host.lan 'sudo -n btrfs receive '\''...'\'''
ERROR: ... invalid tlv in cmd tlv_type = 816

This is send/receive between arm64 and armv5el hosts, with btrfs-progs
6.2.1. Last known working version is 5.16. This looked like another
custom protocol extension by NAS vendors but this was a false trace and
this is indeed a bug in stream parsing after changes to the v2 protocol.

The most likely explanation is that the armv5 host requires strict
alignment for reads (32bit type must be 4 byte aligned) but the way the
raw data buffer is mapped to the cmd structure in read_cmd() does not
guarantee that.

Issue: #770
Fixes: aa1ca3789e ("btrfs-progs: receive: support v2 send stream DATA tlv format")
Signed-off-by: David Sterba <dsterba@suse.com>
2024-05-25 00:37:51 +02:00
..
array.c btrfs-progs: add an extensible pointer array struct 2023-08-28 17:24:24 +02:00
array.h btrfs-progs: add an extensible pointer array struct 2023-08-28 17:24:24 +02:00
box.h btrfs-progs: add btrfs-find-root to btrfs.box 2023-07-26 15:00:48 +02:00
clear-cache.c btrfs-progs: handle btfs_del_items() failure in truncate_free_ino_items() 2024-03-15 00:07:40 +01:00
clear-cache.h btrfs-progs: move clear-cache.[ch] from check/ to common/ directory 2023-10-13 18:13:12 +02:00
cpu-utils.c btrfs-progs: clean up includes, using include-what-you-use 2023-10-03 01:11:57 +02:00
cpu-utils.h btrfs-progs: detect PCLMUL CPU support for accelerated crc32c 2023-09-13 00:38:50 +02:00
defs.h
device-scan.c btrfs-progs: fix freeing of device after error in btrfs_add_to_fsid() 2024-04-18 19:16:15 +02:00
device-scan.h btrfs-progs: replace btrfs_open_dir with btrfs_open_dir_fd 2024-02-20 11:40:08 +01:00
device-utils.c btrfs-progs: add basename wrappers for unified semantics 2024-04-30 19:34:52 +02:00
device-utils.h btrfs-progs: convert defined constants to enums 2024-02-08 08:30:37 +01:00
extent-cache.c btrfs-progs: make all parameters of rb_tree search/insert const 2024-03-12 21:43:54 +01:00
extent-cache.h
extent-tree-utils.c btrfs-progs: reorder key initializations 2024-04-30 21:49:15 +02:00
extent-tree-utils.h btrfs-progs: clean up includes, using include-what-you-use 2023-10-03 01:11:57 +02:00
filesystem-utils.c btrfs-progs: handle transaction start failure in set_label_unmounted() 2024-03-15 01:53:25 +01:00
filesystem-utils.h
format-output.c btrfs-progs: properly close va_copy in fmt_set_unquoted() 2024-04-18 19:16:15 +02:00
format-output.h btrfs-progs: rename time-long format name to date-time 2023-08-28 17:24:23 +02:00
fsfeatures.c btrfs-progs: reorder key initializations 2024-04-30 21:49:15 +02:00
fsfeatures.h btrfs-progs: convert: add raid-stripe-tree to allowed features 2024-01-31 09:49:43 +01:00
help.c btrfs-progs: clean up includes, using include-what-you-use 2023-10-03 01:11:57 +02:00
help.h btrfs-progs: add support for dry-run options 2023-11-03 18:04:37 +01:00
inject-error.c btrfs-progs: clean up includes, using include-what-you-use 2023-10-03 01:11:57 +02:00
inject-error.h btrfs-progs: clean up includes, using include-what-you-use 2023-10-03 01:11:57 +02:00
internal.h btrfs-progs: pull in the full max/min/clamp implementation from kernel 2023-10-10 19:16:29 +02:00
messages.c btrfs-progs: handle write errors in btrfs_add_to_fsid() 2024-03-16 22:25:50 +01:00
messages.h btrfs-progs: handle write errors in btrfs_add_to_fsid() 2024-03-16 22:25:50 +01:00
open-utils.c btrfs-progs: rename btrfs_open_fd2() to btrfs_open_path() 2024-02-20 12:59:29 +01:00
open-utils.h btrfs-progs: rename btrfs_open_fd2() to btrfs_open_path() 2024-02-20 12:59:29 +01:00
parse-utils.c btrfs-progs: implement arg_strtou64_with_suffix() with a new helper 2024-01-18 02:14:23 +01:00
parse-utils.h btrfs-progs: implement arg_strtou64_with_suffix() with a new helper 2024-01-18 02:14:23 +01:00
path-utils.c btrfs-progs: use POSIX semantics of basename 2024-04-30 21:34:40 +02:00
path-utils.h btrfs-progs: use POSIX semantics of basename 2024-04-30 21:34:40 +02:00
rbtree-utils.c btrfs-progs: make all parameters of rb_tree search/insert const 2024-03-12 21:43:54 +01:00
rbtree-utils.h btrfs-progs: make all parameters of rb_tree search/insert const 2024-03-12 21:43:54 +01:00
send-stream.c btrfs-progs: receive: fix reading header on strict alignment hosts 2024-05-25 00:37:51 +02:00
send-stream.h btrfs-progs: clean up includes, using include-what-you-use 2023-10-03 01:11:57 +02:00
send-utils.c btrfs-progs: reorder key initializations 2024-04-30 21:49:15 +02:00
send-utils.h btrfs-progs: clean up includes, using include-what-you-use 2023-10-03 01:11:57 +02:00
sort-utils.c btrfs-progs: add sorting API 2023-08-28 17:24:24 +02:00
sort-utils.h btrfs-progs: add sorting API 2023-08-28 17:24:24 +02:00
string-table.c btrfs-progs: string-table: fix memory leak on exit path in table_vprintf() 2024-04-18 19:16:15 +02:00
string-table.h
string-utils.c btrfs-progs: implement arg_strtou64_with_suffix() with a new helper 2024-01-18 02:14:23 +01:00
string-utils.h btrfs-progs: implement arg_strtou64_with_suffix() with a new helper 2024-01-18 02:14:23 +01:00
sysfs-utils.c btrfs-progs: change all sysfs helpers to return errno 2023-12-09 01:17:22 +01:00
sysfs-utils.h btrfs-progs: add write helpers for sysfs files 2023-12-09 01:17:22 +01:00
task-utils.c
task-utils.h
tree-search.h btrfs-progs: add API for selecting tree search support and ioctl 2024-03-16 18:08:38 +01:00
units.c btrfs-progs: introduce UASSERT() for purely userspace code 2023-05-26 18:02:28 +02:00
units.h
utils.c btrfs-progs: reorder key initializations 2024-04-30 21:49:15 +02:00
utils.h btrfs-progs: convert: insert a dummy inode item before inode ref for ext2/4 2024-01-17 01:47:39 +01:00