Liu Bo 2932505abe Btrfs: fix use-after-free bug during umount
Commit be283b2e674a09457d4563729015adb637ce7cc1
(    Btrfs: use helper to cleanup tree roots) introduced the following bug,

 BUG: unable to handle kernel NULL pointer dereference at 0000000000000034
 IP: [<ffffffffa039368c>] extent_buffer_get+0x4/0xa [btrfs]
[...]
 Pid: 2463, comm: btrfs-cache-1 Tainted: G           O 3.9.0+ #4 innotek GmbH VirtualBox/VirtualBox
 RIP: 0010:[<ffffffffa039368c>]  [<ffffffffa039368c>] extent_buffer_get+0x4/0xa [btrfs]
 Process btrfs-cache-1 (pid: 2463, threadinfo ffff880112d60000, task ffff880117679730)
[...]
 Call Trace:
  [<ffffffffa0398a99>] btrfs_search_slot+0x104/0x64d [btrfs]
  [<ffffffffa039aea4>] btrfs_next_old_leaf+0xa7/0x334 [btrfs]
  [<ffffffffa039b141>] btrfs_next_leaf+0x10/0x12 [btrfs]
  [<ffffffffa039ea13>] caching_thread+0x1a3/0x2e0 [btrfs]
  [<ffffffffa03d8811>] worker_loop+0x14b/0x48e [btrfs]
  [<ffffffffa03d86c6>] ? btrfs_queue_worker+0x25c/0x25c [btrfs]
  [<ffffffff81068d3d>] kthread+0x8d/0x95
  [<ffffffff81068cb0>] ? kthread_freezable_should_stop+0x43/0x43
  [<ffffffff8151e5ac>] ret_from_fork+0x7c/0xb0
  [<ffffffff81068cb0>] ? kthread_freezable_should_stop+0x43/0x43
RIP  [<ffffffffa039368c>] extent_buffer_get+0x4/0xa [btrfs]

We've free'ed commit_root before actually getting to free block groups where
caching thread needs valid extent_root->commit_root.

Signed-off-by: Liu Bo <bo.li.liu@oracle.com>
Signed-off-by: Josef Bacik <jbacik@fusionio.com>
Signed-off-by: Chris Mason <chris.mason@fusionio.com>
2013-06-08 15:10:01 -04:00
..
2013-04-09 14:08:16 -04:00
2013-03-11 22:05:56 +01:00
2013-03-12 18:55:21 -07:00
2013-04-05 17:55:13 +01:00
2013-03-12 18:55:21 -07:00
2013-04-10 10:26:49 -07:00
2013-03-26 16:18:27 -04:00
2013-03-28 15:52:14 -07:00
2013-03-12 18:55:21 -07:00
2013-02-22 23:31:31 -05:00
2013-02-22 23:31:31 -05:00
2012-10-22 08:50:37 +03:00
2013-02-22 23:31:31 -05:00
2013-03-26 18:25:57 -04:00
2013-02-22 23:31:31 -05:00
2013-02-28 13:21:44 -08:00
2013-02-22 23:31:31 -05:00
2012-12-20 18:46:29 -05:00
2013-02-22 23:31:31 -05:00
2012-12-11 13:43:42 +09:00
2013-03-12 08:29:17 -07:00
2013-02-22 23:31:31 -05:00
2012-12-17 17:15:27 -08:00
2013-02-26 02:46:08 -05:00
2013-02-22 23:31:31 -05:00