diff --git a/.gitignore b/.gitignore
index 3e8922f..f34d08b 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1 +1 @@
-SOURCES/rpm-ostree-2022.10.90.g4abaf4b4.tar.xz
+SOURCES/rpm-ostree-2022.10.112.g3d0ac35b.tar.xz
diff --git a/.rpm-ostree.metadata b/.rpm-ostree.metadata
index baf361a..f770273 100644
--- a/.rpm-ostree.metadata
+++ b/.rpm-ostree.metadata
@@ -1 +1 @@
-00674220f1468ad2f63062668cdd02022b2eba43 SOURCES/rpm-ostree-2022.10.90.g4abaf4b4.tar.xz
+cdce35bda2d188e33f236e06b4c6e1d39bf5f71b SOURCES/rpm-ostree-2022.10.112.g3d0ac35b.tar.xz
diff --git a/SOURCES/0001-compose-Handle-embedded-whiteouts.patch b/SOURCES/0001-compose-Handle-embedded-whiteouts.patch
deleted file mode 100644
index 39ad676..0000000
--- a/SOURCES/0001-compose-Handle-embedded-whiteouts.patch
+++ /dev/null
@@ -1,143 +0,0 @@
-From 0049dbdd91cc0c1900132374645c5114063db04d Mon Sep 17 00:00:00 2001
-From: Colin Walters <walters@verbum.org>
-Date: Thu, 29 Sep 2022 14:01:07 -0400
-Subject: [PATCH] compose: Handle embedded whiteouts
-
-This pairs with
-https://github.com/ostreedev/ostree/pull/2722/commits/0085494e350c72599fc5c0e00422885d80b3c660
-
-Basically, while I think it'd make sense actually for the baseline
-`ostree commit` process to handle this, for now let's put it
-here in rpm-ostree (where it can be in Rust too).  Though
-a definite negative is that we're now traversing the whole filesystem
-again.
-
-(cherry picked from commit fea26bdd5db59fcf0853a9bb4ab6dcb340be9470)
----
- rust/src/composepost.rs           | 63 ++++++++++++++++++++++++++++++-
- tests/compose/test-installroot.sh |  8 ++++
- 2 files changed, 70 insertions(+), 1 deletion(-)
-
-diff --git a/rust/src/composepost.rs b/rust/src/composepost.rs
-index ab5cc176..70a01497 100644
---- a/rust/src/composepost.rs
-+++ b/rust/src/composepost.rs
-@@ -202,6 +202,47 @@ fn postprocess_presets(rootfs_dfd: &Dir) -> Result<()> {
-     Ok(())
- }
- 
-+fn is_overlay_whiteout(meta: &cap_std::fs::Metadata) -> bool {
-+    (meta.mode() & libc::S_IFMT) == libc::S_IFCHR && meta.rdev() == 0
-+}
-+
-+/// Auto-synthesize embedded overlayfs whiteouts; for more information
-+/// see https://github.com/ostreedev/ostree/pull/2722/commits/0085494e350c72599fc5c0e00422885d80b3c660
-+#[context("Postprocessing embedded overlayfs")]
-+fn postprocess_embedded_ovl_whiteouts(root: &Dir) -> Result<()> {
-+    const OSTREE_WHITEOUT_PREFIX: &str = ".ostree-wh.";
-+    fn recurse(root: &Dir, path: &Utf8Path) -> Result<u32> {
-+        let mut n = 0;
-+        for entry in root.read_dir(path)? {
-+            let entry = entry?;
-+            let meta = entry.metadata()?;
-+            let name = PathBuf::from(entry.file_name());
-+            let name: Utf8PathBuf = name.try_into()?;
-+            if meta.is_dir() {
-+                n += recurse(root, &path.join(name))?;
-+                continue;
-+            }
-+            if !is_overlay_whiteout(&meta) {
-+                continue;
-+            };
-+            let srcpath = path.join(&name);
-+            let targetname = format!("{OSTREE_WHITEOUT_PREFIX}{name}");
-+            let destpath = path.join(&targetname);
-+            root.remove_file(srcpath)?;
-+            root.atomic_write_with_perms(destpath, "", meta.permissions())?;
-+            n += 1;
-+        }
-+        Ok(n)
-+    }
-+    let n = recurse(root, ".".into())?;
-+    if n > 0 {
-+        println!("Processed {n} embedded whiteouts");
-+    } else {
-+        println!("No embedded whiteouts found");
-+    }
-+    Ok(())
-+}
-+
- /// Write an RPM macro file to ensure the rpmdb path is set on the client side.
- pub fn compose_postprocess_rpm_macro(rootfs_dfd: i32) -> CxxResult<()> {
-     let rootfs = unsafe { &crate::ffiutil::ffi_dirfd(rootfs_dfd)? };
-@@ -290,13 +331,17 @@ pub(crate) fn postprocess_cleanup_rpmdb(rootfs_dfd: i32) -> CxxResult<()> {
- /// on the target host.
- pub fn compose_postprocess_final(rootfs_dfd: i32) -> CxxResult<()> {
-     let rootfs_dfd = unsafe { &crate::ffiutil::ffi_dirfd(rootfs_dfd)? };
-+    // These tasks can safely run in parallel, so just for fun we do so via rayon.
-     let tasks = [
-         postprocess_useradd,
-         postprocess_presets,
-         postprocess_subs_dist,
-         postprocess_rpm_macro,
-     ];
--    Ok(tasks.par_iter().try_for_each(|f| f(rootfs_dfd))?)
-+    tasks.par_iter().try_for_each(|f| f(rootfs_dfd))?;
-+    // This task recursively traverses the filesystem and hence should be serial.
-+    postprocess_embedded_ovl_whiteouts(rootfs_dfd)?;
-+    Ok(())
- }
- 
- #[context("Handling treefile 'units'")]
-@@ -1290,6 +1335,22 @@ OSTREE_VERSION='33.4'
-         Ok(())
-     }
- 
-+    #[test]
-+    fn test_overlay() -> Result<()> {
-+        // We don't actually test creating whiteout devices here as that
-+        // may not work.
-+        let td = cap_tempfile::tempdir(cap_std::ambient_authority())?;
-+        // Verify no-op case
-+        postprocess_embedded_ovl_whiteouts(&td).unwrap();
-+        td.create("foo")?;
-+        td.symlink("foo", "bar")?;
-+        postprocess_embedded_ovl_whiteouts(&td).unwrap();
-+        assert!(td.try_exists("foo")?);
-+        assert!(td.try_exists("bar")?);
-+
-+        Ok(())
-+    }
-+
-     #[test]
-     fn test_tmpfiles_d_translation() {
-         use nix::sys::stat::{umask, Mode};
-diff --git a/tests/compose/test-installroot.sh b/tests/compose/test-installroot.sh
-index 1ac09b9a..3e40f679 100755
---- a/tests/compose/test-installroot.sh
-+++ b/tests/compose/test-installroot.sh
-@@ -54,6 +54,8 @@ echo "ok postprocess with treefile"
- 
- testdate=$(date)
- runasroot sh -xec "
-+# https://github.com/ostreedev/ostree/pull/2717/commits/e234b630f85b97e48ecf45d5aaba9b1aa64e6b54
-+mknod -m 000 ${instroot}-directcommit/usr/share/foowhiteout c 0 0
- echo \"${testdate}\" > ${instroot}-directcommit/usr/share/rpm-ostree-composetest-split.txt
- ! test -f ${instroot}-directcommit/${integrationconf}
- rpm-ostree compose commit --repo=${repo} ${treefile} ${instroot}-directcommit
-@@ -61,6 +63,12 @@ ostree --repo=${repo} ls ${treeref} /usr/bin/bash
- if ostree --repo=${repo} ls ${treeref} /var/lib/rpm >/dev/null; then
-   echo found /var/lib/rpm in commit 1>&2; exit 1
- fi
-+
-+# Verify whiteout renames
-+ostree --repo=${repo} ls ${treeref} /usr/share
-+ostree --repo=${repo} ls ${treeref} /usr/share/.ostree-wh.foowhiteout >out.txt
-+grep -Ee '^-00000' out.txt
-+
- ostree --repo=${repo} cat ${treeref} /usr/share/rpm-ostree-composetest-split.txt >out.txt
- grep \"${testdate}\" out.txt
- ostree --repo=${repo} cat ${treeref} /${integrationconf}
--- 
-2.38.1
-
diff --git a/SOURCES/0001-daemon-Make-failure-to-query-base-image-non-fatal.patch b/SOURCES/0001-daemon-Make-failure-to-query-base-image-non-fatal.patch
new file mode 100644
index 0000000..aed7df0
--- /dev/null
+++ b/SOURCES/0001-daemon-Make-failure-to-query-base-image-non-fatal.patch
@@ -0,0 +1,74 @@
+From a0f1275dfbd835b704355d095e610ac1f1254f25 Mon Sep 17 00:00:00 2001
+From: Colin Walters <walters@verbum.org>
+Date: Sun, 11 Dec 2022 13:40:15 -0500
+Subject: [PATCH] daemon: Make failure to query base image non-fatal
+
+We had a GC bug which then propagates into a hard daemon
+failure right now because we try to gather data on all deployments.
+
+Make this non-fatal; we should try to stumble forward as much
+as possible so that one can e.g. perform an upgrade operation.
+
+(cherry picked from commit 8dd45f293afc1ca32b42bda86dde47c66e652dda)
+---
+ src/app/rpmostree-builtin-status.cxx       | 12 +++++++++---
+ src/daemon/rpmostreed-deployment-utils.cxx | 20 ++++++++++++++------
+ 2 files changed, 23 insertions(+), 9 deletions(-)
+
+diff --git a/src/app/rpmostree-builtin-status.cxx b/src/app/rpmostree-builtin-status.cxx
+index cec0a2e3..ee82e589 100644
+--- a/src/app/rpmostree-builtin-status.cxx
++++ b/src/app/rpmostree-builtin-status.cxx
+@@ -688,9 +688,15 @@ print_one_deployment (RPMOSTreeSysroot *sysroot_proxy, GVariant *child, gint ind
+           break;
+         case rpmostreecxx::RefspecType::Container:
+           {
+-            g_assert (g_variant_dict_lookup (dict, "container-image-reference-digest", "s",
+-                                             &container_image_reference_digest));
+-            g_print ("%s", origin_refspec);
++            if (g_variant_dict_lookup (dict, "container-image-reference-digest", "s",
++                                       &container_image_reference_digest))
++              {
++                g_print ("%s", origin_refspec);
++              }
++            else
++              {
++                g_print ("(error fetching image metadata)");
++              }
+           }
+           break;
+         }
+diff --git a/src/daemon/rpmostreed-deployment-utils.cxx b/src/daemon/rpmostreed-deployment-utils.cxx
+index b7b27fed..48480509 100644
+--- a/src/daemon/rpmostreed-deployment-utils.cxx
++++ b/src/daemon/rpmostreed-deployment-utils.cxx
+@@ -214,12 +214,20 @@ rpmostreed_deployment_generate_variant (OstreeSysroot *sysroot, OstreeDeployment
+     case rpmostreecxx::RefspecType::Container:
+       {
+         g_variant_dict_insert (dict, "container-image-reference", "s", refspec);
+-        CXX_TRY_VAR (state, rpmostreecxx::query_container_image_commit (*repo, base_checksum),
+-                     error);
+-        g_variant_dict_insert (dict, "container-image-reference-digest", "s",
+-                               state->image_digest.c_str ());
+-        if (state->version.size () > 0)
+-          g_variant_dict_insert (dict, "version", "s", state->version.c_str ());
++        // For now, make this non-fatal https://github.com/coreos/rpm-ostree/issues/4185
++        try
++          {
++            auto state = rpmostreecxx::query_container_image_commit (*repo, base_checksum);
++            g_variant_dict_insert (dict, "container-image-reference-digest", "s",
++                                   state->image_digest.c_str ());
++            if (state->version.size () > 0)
++              g_variant_dict_insert (dict, "version", "s", state->version.c_str ());
++          }
++        catch (std::exception &e)
++          {
++            sd_journal_print (LOG_ERR, "failed to query container image base metadata: %s",
++                              e.what ());
++          }
+       }
+       break;
+     case rpmostreecxx::RefspecType::Checksum:
+-- 
+2.31.1
+
diff --git a/SOURCES/0002-fix-printing-commits-on-status.patch b/SOURCES/0002-fix-printing-commits-on-status.patch
deleted file mode 100644
index bf9cf2d..0000000
--- a/SOURCES/0002-fix-printing-commits-on-status.patch
+++ /dev/null
@@ -1,29 +0,0 @@
-diff --color -urN rpm-ostree-2022.10.90.g4abaf4b4-orig/src/app/rpmostree-builtin-status.cxx rpm-ostree-2022.10.90.g4abaf4b4/src/app/rpmostree-builtin-status.cxx
---- rpm-ostree-2022.10.90.g4abaf4b4-orig/src/app/rpmostree-builtin-status.cxx	2022-08-16 08:40:32.000000000 -0400
-+++ rpm-ostree-2022.10.90.g4abaf4b4/src/app/rpmostree-builtin-status.cxx	2023-02-07 19:56:17.018048420 -0500
-@@ -489,10 +489,7 @@
-   g_autoptr (GVariant) reposdata = g_variant_dict_lookup_value (
-       commit_meta, "rpmostree.rpmmd-repos", G_VARIANT_TYPE ("aa{sv}"));
- 
--  if (!reposdata)
--    return;
--
--  const guint n = g_variant_n_children (reposdata);
-+  const guint n = reposdata ? g_variant_n_children (reposdata) : 0;
-   if (n == 0 || !opt_verbose)
-     {
-       /* no repos to print, so this is just a pure kv print */
-diff --color -urN rpm-ostree-2022.10.90.g4abaf4b4-orig/tests/vmcheck/test-misc-2.sh rpm-ostree-2022.10.90.g4abaf4b4/tests/vmcheck/test-misc-2.sh
---- rpm-ostree-2022.10.90.g4abaf4b4-orig/tests/vmcheck/test-misc-2.sh	2022-08-16 08:40:32.000000000 -0400
-+++ rpm-ostree-2022.10.90.g4abaf4b4/tests/vmcheck/test-misc-2.sh	2023-02-07 19:57:05.111019172 -0500
-@@ -26,6 +26,10 @@
- 
- # More miscellaneous tests
- 
-+# Verify that the commit is printed in the output
-+vm_rpmostree status > status.txt
-+assert_file_has_content status.txt 'Commit:'
-+
- # Locked finalization
- booted_csum=$(vm_get_booted_csum)
- commit=$(vm_cmd ostree commit -b vmcheck --tree=ref=vmcheck)
diff --git a/SPECS/rpm-ostree.spec b/SPECS/rpm-ostree.spec
index 3eb8acc..0facedd 100644
--- a/SPECS/rpm-ostree.spec
+++ b/SPECS/rpm-ostree.spec
@@ -3,17 +3,15 @@
 
 Summary: Hybrid image/package system
 Name: rpm-ostree
-Version: 2022.10.90.g4abaf4b4
-Release: 6%{?dist}
+Version: 2022.10.112.g3d0ac35b
+Release: 3%{?dist}
 License: LGPLv2+
 URL: https://github.com/coreos/rpm-ostree
 # This tarball is generated via "cd packaging && make -f Makefile.dist-packaging dist-snapshot"
 # in the upstream git.  It also contains vendored Rust sources.  This is generated from the "rhel8" branch.
 Source0: https://github.com/coreos/rpm-ostree/releases/download/v%{version}/rpm-ostree-%{version}.tar.xz
 
-# https://bugzilla.redhat.com/show_bug.cgi?id=2137905
-Patch0: 0001-compose-Handle-embedded-whiteouts.patch
-Patch1: 0002-fix-printing-commits-on-status.patch
+Patch0: 0001-daemon-Make-failure-to-query-base-image-non-fatal.patch 
 
 ExclusiveArch: %{rust_arches}
 
@@ -231,15 +229,28 @@ $PYTHON autofiles.py > files.devel \
 %files devel -f files.devel
 
 %changelog
-* Wed Feb 15 2023 Joseph Marrero <jmarrero@redhat.com> - 2022.10.90.g4abaf4b4-6
-- Backport
-  https://github.com/coreos/rpm-ostree/commit/9dc5dcd0594d122172493695e31b0c63e7ea2e74
-  Resolves: rhbz#2167476
-
-* Tue Dec 13 2022 Colin Walters <walters@verbum.org> - 2022.10.90.g4abaf4b4-5
-- Backport
-  https://github.com/coreos/rpm-ostree/commit/0049dbdd91cc0c1900132374645c5114063db04d
-  Resolves: rhbz#2137905
+* Thu Feb 16 2023 Colin Walters <walters@verbum.org> - 2022.10.112.g3d0ac35b-3
+- Cherry pick
+  https://github.com/coreos/rpm-ostree/pull/4311/commits/a0f1275dfbd835b704355d095e610ac1f1254f25
+  Resolves: rhbz#2170579
+
+* Tue Feb 14 2023 Colin Walters <walters@verbum.org> - 2022.10.112.g3d0ac35b-2
+- Sync to latest rhel8 branch
+  Resolves: rhbz#2169429
+
+* Fri Oct 14 2022 Colin Walters <walters@verbum.org> - 2022.10.99.g0049dbdd-3
+- Resolves: rhbz#2134630
+
+* Wed Sep 28 2022 Colin Walters <walters@verbum.org> - 2022.10.97.gade6df33-2
+- Update to latest https://github.com/coreos/rpm-ostree/tree/rhel8 at commit
+  https://github.com/coreos/rpm-ostree/commit/ac182cb920f84946bb155e9cf061db7f5f26e917
+- Resolves: rhbz#2122289
+
+* Wed Aug 31 2022 Colin Walters <walters@verbum.org> - 2022.10.94.g89f58028-2
+- Update to latest https://github.com/coreos/rpm-ostree/tree/rhel8 at commit
+  https://github.com/coreos/rpm-ostree/commit/89f58028f0bea5b6fa59bdb3506078e09957ec00
+- Resolves: rhbz#2122289
+- Resolves: rhbz#2122299
 
 * Tue Aug 16 2022 Colin Walters <walters@verbum.org> - 2022.10.90.g4abaf4b4-4
 - Update to latest https://github.com/coreos/rpm-ostree/tree/rhel8 at commit