Btrfs: send, fix corrupted path strings for long paths

If a path has more than 230 characters, we allocate a new buffer to
use for the path, but we were forgotting to copy the contents of the
previous buffer into the new one, which has random content from the
kmalloc call.

Test:

mkfs.btrfs -f /dev/sdd
mount /dev/sdd /mnt

TEST_PATH="/mnt/fdmanana/.config/google-chrome-mysetup/Default/Pepper_Data/Shockwave_Flash/WritableRoot/#SharedObjects/JSHJ4ZKN/s.wsj.net/[[IMPORT]]/players.edgesuite.net/flash/plugins/osmf/advanced-streaming-plugin/v2.7/osmf1.6/Ak#"
mkdir -p $TEST_PATH
echo "hello world" > $TEST_PATH/amaiAdvancedStreamingPlugin.txt

btrfs subvolume snapshot -r /mnt /mnt/mysnap1
btrfs send /mnt/mysnap1 -f /tmp/1.snap

A test for xfstests follows.

Signed-off-by: Filipe David Borba Manana <fdmanana@gmail.com>
Cc: Marc Merlin <marc@merlins.org>
Tested-by: Marc MERLIN <marc@merlins.org>
Signed-off-by: Chris Mason <clm@fb.com>

authored by Filipe Manana and committed by Chris Mason 01a9a8a9 fad01e86

Changed files
+5 -2
fs
btrfs
+5 -2
fs/btrfs/send.c
··· 360 360 /* 361 361 * First time the inline_buf does not suffice 362 362 */ 363 - if (p->buf == p->inline_buf) 363 + if (p->buf == p->inline_buf) { 364 364 tmp_buf = kmalloc(len, GFP_NOFS); 365 - else 365 + if (tmp_buf) 366 + memcpy(tmp_buf, p->buf, old_buf_len); 367 + } else { 366 368 tmp_buf = krealloc(p->buf, len, GFP_NOFS); 369 + } 367 370 if (!tmp_buf) 368 371 return -ENOMEM; 369 372 p->buf = tmp_buf;