diff --git a/toolkit/crashreporter/google-breakpad/src/client/windows/handler/exception_handler.cc b/toolkit/crashreporter/google-breakpad/src/client/windows/handler/exception_handler.cc
--- a/toolkit/crashreporter/google-breakpad/src/client/windows/handler/exception_handler.cc
+++ b/toolkit/crashreporter/google-breakpad/src/client/windows/handler/exception_handler.cc
@@ -721,20 +721,33 @@ bool ExceptionHandler::WriteMinidump(con
 bool ExceptionHandler::WriteMinidumpForChild(HANDLE child,
 					     const wstring &dump_path,
 					     MinidumpCallback callback,
 					     void *callback_context) {
   DWORD childId = GetProcId(child);
   if (0 == childId)
     return false;
 
+  HANDLE child_with_privs;
+  if (!DuplicateHandle(GetCurrentProcess(),
+                       child,
+                       GetCurrentProcess(),
+                       &child_with_privs,
+                       PROCESS_QUERY_INFORMATION | PROCESS_VM_READ,
+                       FALSE,   // don't inherit
+                       0)) {    // no additional options
+      return false;
+  }
+
   ExceptionHandler handler(dump_path, NULL, callback, callback_context,
                            HANDLER_NONE);
   bool success = handler.WriteMinidumpWithExceptionForProcess(
-      0, NULL, NULL, child, childId, false);
+      0, NULL, NULL, child_with_privs, childId, false);
+
+  CloseHandle(child_with_privs);
 
   if (callback) {
     success = callback(handler.dump_path_c_, handler.next_minidump_id_c_,
 		       callback_context, NULL, NULL, success);
   }
 
   return success;
 }
