diff --git a/src/bwrap.c b/src/bwrap.c
index 0bdbfa5d9d52d02d71759346d1c60f423e93ae07..157afd2adef24631f7cf47ebc2278da47486637e 100644
--- a/src/bwrap.c
+++ b/src/bwrap.c
@@ -29,6 +29,8 @@
 /**
  * pv_bwrap_run_sync:
  * @bwrap: A #FlatpakBwrap on which flatpak_bwrap_finish() has been called
+ * @exit_status_out: (out) (optional): Used to return the exit status,
+ *  or -1 if it could not be launched or was killed by a signal
  * @error: Used to raise an error on failure
  *
  * Try to run a command. Its standard output and standard error go to
@@ -38,6 +40,7 @@
  */
 gboolean
 pv_bwrap_run_sync (FlatpakBwrap *bwrap,
+                   int *exit_status_out,
                    GError **error)
 {
   gint exit_status;
@@ -53,6 +56,9 @@ pv_bwrap_run_sync (FlatpakBwrap *bwrap,
   g_return_val_if_fail (pv_bwrap_was_finished (bwrap), FALSE);
   g_return_val_if_fail (error == NULL || *error == NULL, FALSE);
 
+  if (exit_status_out != NULL)
+    *exit_status_out = -1;
+
   for (i = 0; i < bwrap->argv->len; i++)
     {
       g_autofree gchar *quoted = NULL;
@@ -87,6 +93,12 @@ pv_bwrap_run_sync (FlatpakBwrap *bwrap,
   g_print ("%s", output);
   g_printerr ("%s", errors);
 
+  if (exit_status_out != NULL)
+    {
+      if (WIFEXITED (exit_status))
+        *exit_status_out = WEXITSTATUS (exit_status);
+    }
+
   if (!g_spawn_check_exit_status (exit_status, error))
     return FALSE;
 
diff --git a/src/bwrap.h b/src/bwrap.h
index a374a004e40daf8a2e17847eedaa5b721f6bcaf7..34b5f281d1ad5760705331f2331431a834539abf 100644
--- a/src/bwrap.h
+++ b/src/bwrap.h
@@ -28,6 +28,7 @@
 #include "glib-backports.h"
 
 gboolean pv_bwrap_run_sync (FlatpakBwrap *bwrap,
+                            int *exit_status_out,
                             GError **error);
 gboolean pv_bwrap_execve (FlatpakBwrap *bwrap,
                           GError **error);
diff --git a/src/wrap.c b/src/wrap.c
index 23ee4dc33eb95d622042f3cfdd8d6fb49e25af8e..ab1da9b6a4ded9b318e1304c0e5869b16918fc52 100644
--- a/src/wrap.c
+++ b/src/wrap.c
@@ -272,7 +272,7 @@ try_bind_dri (FlatpakBwrap *bwrap,
                               NULL);
       flatpak_bwrap_finish (temp_bwrap);
 
-      if (!pv_bwrap_run_sync (temp_bwrap, error))
+      if (!pv_bwrap_run_sync (temp_bwrap, NULL, error))
         return FALSE;
 
       g_clear_pointer (&temp_bwrap, flatpak_bwrap_free);
@@ -294,7 +294,7 @@ try_bind_dri (FlatpakBwrap *bwrap,
                               NULL);
       flatpak_bwrap_finish (temp_bwrap);
 
-      if (!pv_bwrap_run_sync (temp_bwrap, error))
+      if (!pv_bwrap_run_sync (temp_bwrap, NULL, error))
         return FALSE;
     }
 
@@ -316,7 +316,7 @@ try_bind_dri (FlatpakBwrap *bwrap,
                               NULL);
       flatpak_bwrap_finish (temp_bwrap);
 
-      if (!pv_bwrap_run_sync (temp_bwrap, error))
+      if (!pv_bwrap_run_sync (temp_bwrap, NULL, error))
         return FALSE;
     }
 
@@ -600,7 +600,7 @@ bind_runtime (FlatpakBwrap *bwrap,
                                   NULL);
           flatpak_bwrap_finish (temp_bwrap);
 
-          if (!pv_bwrap_run_sync (temp_bwrap, error))
+          if (!pv_bwrap_run_sync (temp_bwrap, NULL, error))
             return FALSE;
 
           g_clear_pointer (&temp_bwrap, flatpak_bwrap_free);
@@ -655,7 +655,7 @@ bind_runtime (FlatpakBwrap *bwrap,
                                       NULL);
               flatpak_bwrap_finish (temp_bwrap);
 
-              if (!pv_bwrap_run_sync (temp_bwrap, NULL, NULL, error))
+              if (!pv_bwrap_run_sync (temp_bwrap, NULL, error))
                 return FALSE;
 
               g_clear_pointer (&temp_bwrap, flatpak_bwrap_free);