btrfs-progs/check
Qu Wenruo 0a472ef887 btrfs-progs: check/original: Fix uninitialized stack memory access for deal_root_from_list()
[BUG]
With valgrind, fsck/002 test with original mode would report the
following valgrind error:
  ==90600== Conditional jump or move depends on uninitialised value(s)
  ==90600==    at 0x15C280: pick_next_pending (main.c:4949)
  ==90600==    by 0x15F3CF: run_next_block (main.c:6175)
  ==90600==    by 0x1655CC: deal_root_from_list (main.c:8486)
  ==90600==    by 0x1660C7: check_chunks_and_extents (main.c:8762)
  ==90600==    by 0x166439: do_check_chunks_and_extents (main.c:8842)
  ==90600==    by 0x169D0B: cmd_check (main.c:10324)
  ==90600==    by 0x11CDC6: cmd_execute (commands.h:125)
  ==90600==    by 0x11D712: main (btrfs.c:386)

[CAUSE]
The problem happens like this:
deal_root_from_list(@list is empty)
|- stack @last is not initialized
|- while(!list_empty(list)) {} is skipped
|- run_next_block(&last);
   |- pick_next_pending(*last);
      |- node_start = last;

Since the stack @last is not initialized in deal_root_from_list(), the
final node_start = last assignment would just fetch the garbage from
stack.

[FIX]
Fix the problem by initializing @last to 0, as that's exactly what the
first while loop did.

Signed-off-by: Qu Wenruo <wqu@suse.com>
Signed-off-by: David Sterba <dsterba@suse.com>
2020-03-31 18:37:37 +02:00
..
common.h btrfs-progs: check: move device_record to main.c 2019-10-14 17:27:41 +02:00
main.c btrfs-progs: check/original: Fix uninitialized stack memory access for deal_root_from_list() 2020-03-31 18:37:37 +02:00
mode-common.c btrfs-progs: move name hashing functions to ctree.h and delete hash.h 2020-03-31 18:37:35 +02:00
mode-common.h btrfs-progs: check/original: Fix inode mode in subvolume trees 2019-11-18 19:21:07 +01:00
mode-lowmem.c btrfs-progs: check/lowmem: Fix access on uninitialized memory 2020-03-31 18:37:36 +02:00
mode-lowmem.h btrfs-progs: check/lowmem: Check and repair root generation 2019-09-04 16:06:50 +02:00
mode-original.h btrfs-progs: check/original: Add check and repair for invalid inode generation 2019-11-18 19:21:07 +01:00
qgroup-verify.c btrfs-progs: qgroup-verify: Remove duplicated message in report_qgroups 2020-03-31 18:37:36 +02:00
qgroup-verify.h btrfs-progs: move qgroup-verify.[ch] to check/ 2019-10-14 17:27:35 +02:00