From 464965e6b4897f9c6d4487ca10eb5bc60ad9a670 Mon Sep 17 00:00:00 2001 From: Colin Walters Date: Mon, 16 Oct 2017 15:29:38 -0400 Subject: [PATCH] lib/sysroot: Fix error handling when mounting overlayfs fails This isn't perfect, but at least we fix an error-overwrite error, and in practice `ostree admin unlock` isn't wrapped by `rpm-ostree` yet, so spew to stderr is OK. Closes: https://github.com/ostreedev/ostree/issues/1273 Closes: #1279 Approved by: guyshapiro --- src/libostree/ostree-sysroot.c | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/src/libostree/ostree-sysroot.c b/src/libostree/ostree-sysroot.c index d320e220..ac418486 100644 --- a/src/libostree/ostree-sysroot.c +++ b/src/libostree/ostree-sysroot.c @@ -22,6 +22,7 @@ #include "otutil.h" #include #include +#include #include #include "ostree.h" @@ -1764,11 +1765,15 @@ ostree_sysroot_deployment_unlock (OstreeSysroot *self, return glnx_throw_errno_prefix (error, "fork"); else if (mount_child == 0) { - /* Child process. Do NOT use any GLib API here. */ + /* Child process. Do NOT use any GLib API here; it's not generally fork() safe. + * + * TODO: report errors across a pipe (or use the journal?) rather than + * spewing to stderr. + */ if (fchdir (deployment_dfd) < 0) - exit (EXIT_FAILURE); + err (1, "fchdir"); if (mount ("overlay", "/usr", "overlay", 0, ovl_options) < 0) - exit (EXIT_FAILURE); + err (1, "mount"); exit (EXIT_SUCCESS); } else @@ -1779,7 +1784,7 @@ ostree_sysroot_deployment_unlock (OstreeSysroot *self, if (TEMP_FAILURE_RETRY (waitpid (mount_child, &estatus, 0)) < 0) return glnx_throw_errno_prefix (error, "waitpid() on mount helper"); if (!g_spawn_check_exit_status (estatus, error)) - return glnx_throw_errno_prefix (error, "overlayfs mount helper"); + return glnx_prefix_error (error, "Failed overlayfs mount"); } }