Author: pschweitzer
Date: Tue May 10 21:07:56 2016
New Revision: 71314

URL: http://svn.reactos.org/svn/reactos?rev=71314&view=rev
Log:
[BTRFS]
Cherry pick aa04ca0ea4cadb0c70ff6d659916cc98b7b02c27: uninit: don't free roots 
before FCBs are freed

This avoids use-after-free on shutdown

Modified:
    trunk/reactos/drivers/filesystems/btrfs/btrfs.c

Modified: trunk/reactos/drivers/filesystems/btrfs/btrfs.c
URL: 
http://svn.reactos.org/svn/reactos/trunk/reactos/drivers/filesystems/btrfs/btrfs.c?rev=71314&r1=71313&r2=71314&view=diff
==============================================================================
--- trunk/reactos/drivers/filesystems/btrfs/btrfs.c     [iso-8859-1] (original)
+++ trunk/reactos/drivers/filesystems/btrfs/btrfs.c     [iso-8859-1] Tue May 10 
21:07:56 2016
@@ -2374,6 +2374,13 @@
 
         release_tree_lock(Vcb, TRUE);
     }
+    
+    // FIXME - stop async threads
+    
+    free_fcb(Vcb->volume_fcb);
+    free_fileref(Vcb->root_fileref);
+    
+    // FIXME - free any open fcbs?
 
     while (!IsListEmpty(&Vcb->roots)) {
         LIST_ENTRY* le = RemoveHeadList(&Vcb->roots);
@@ -2401,9 +2408,6 @@
         ExFreePool(c->chunk_item);
         ExFreePool(c);
     }
-    
-    free_fcb(Vcb->volume_fcb);
-    free_fileref(Vcb->root_fileref);
     
     for (i = 0; i < Vcb->superblock.num_devices; i++) {
         while (!IsListEmpty(&Vcb->devices[i].disk_holes)) {


Reply via email to