[Libguestfs] [PATCH 2/2] lib, v2v: Use unsafe flag when reading (but NOT writing) hives.

Richard W.M. Jones rjones at redhat.com
Fri Feb 17 10:25:00 UTC 2017


Pass the HIVEX_OPEN_UNSAFE flag when opening hives for reading.
Do NOT pass it when opening hives for writing.

This should make inspection and virt-v2v more tolerant about handling
Windows Registry corruption, without increasing the risk of causing
new corruption in hives.
---
 lib/inspect-apps.c       | 4 +++-
 lib/inspect-fs-windows.c | 8 ++++++--
 v2v/windows.ml           | 3 ++-
 3 files changed, 11 insertions(+), 4 deletions(-)

diff --git a/lib/inspect-apps.c b/lib/inspect-apps.c
index b377f57..0f2b505 100644
--- a/lib/inspect-apps.c
+++ b/lib/inspect-apps.c
@@ -792,7 +792,9 @@ list_applications_windows (guestfs_h *g, struct inspect_fs *fs)
     return NULL;
 
   if (guestfs_hivex_open (g, software_path,
-                          GUESTFS_HIVEX_OPEN_VERBOSE, g->verbose, -1) == -1)
+                          GUESTFS_HIVEX_OPEN_VERBOSE, g->verbose,
+                          GUESTFS_HIVEX_OPEN_UNSAFE, 1,
+                          -1) == -1)
     return NULL;
 
   /* Allocate apps list. */
diff --git a/lib/inspect-fs-windows.c b/lib/inspect-fs-windows.c
index c139051..fc0b42b 100644
--- a/lib/inspect-fs-windows.c
+++ b/lib/inspect-fs-windows.c
@@ -283,7 +283,9 @@ check_windows_software_registry (guestfs_h *g, struct inspect_fs *fs)
   bool ignore_currentversion = false;
 
   if (guestfs_hivex_open (g, software_path,
-                          GUESTFS_HIVEX_OPEN_VERBOSE, g->verbose, -1) == -1)
+                          GUESTFS_HIVEX_OPEN_VERBOSE, g->verbose,
+                          GUESTFS_HIVEX_OPEN_UNSAFE, 1,
+                          -1) == -1)
     return -1;
 
   node = guestfs_hivex_root (g);
@@ -405,7 +407,9 @@ check_windows_system_registry (guestfs_h *g, struct inspect_fs *fs)
     { NULL /* current control set */, "Services", "Tcpip", "Parameters" };
 
   if (guestfs_hivex_open (g, system_path,
-                          GUESTFS_HIVEX_OPEN_VERBOSE, g->verbose, -1) == -1)
+                          GUESTFS_HIVEX_OPEN_VERBOSE, g->verbose,
+                          GUESTFS_HIVEX_OPEN_UNSAFE, 1,
+                          -1) == -1)
     goto out;
 
   root = guestfs_hivex_root (g);
diff --git a/v2v/windows.ml b/v2v/windows.ml
index 9e8ef1e..79a14aa 100644
--- a/v2v/windows.ml
+++ b/v2v/windows.ml
@@ -49,7 +49,8 @@ and (=~) str rex =
 
 let with_hive_readonly (g : Guestfs.guestfs) hive_filename f =
   let verbose = verbose () in
-  g#hivex_open ~write:false ~verbose (* ~debug:verbose *) hive_filename;
+  g#hivex_open ~write:false ~unsafe:true ~verbose (* ~debug:verbose *)
+               hive_filename;
   protect ~f:(
     fun () ->
       let root = g#hivex_root () in
-- 
2.10.2




More information about the Libguestfs mailing list