From e35c31290b8be31a0809ec240b49b2b2ecb24f4a Mon Sep 17 00:00:00 2001 From: Colin Walters Date: Thu, 20 Jul 2023 15:24:28 -0400 Subject: [PATCH] Backport for https://bugzilla.redhat.com/show_bug.cgi?id=2224102 Resolves: rhbz#2224102 --- ...ostree-deployment-on-64-bit-inode-fs.patch | 57 +++++++++++++++++++ 0017-Add-an-always-on-inode64-feature.patch | 33 +++++++++++ ostree.spec | 9 ++- 3 files changed, 98 insertions(+), 1 deletion(-) create mode 100644 0016-commit-fix-ostree-deployment-on-64-bit-inode-fs.patch create mode 100644 0017-Add-an-always-on-inode64-feature.patch diff --git a/0016-commit-fix-ostree-deployment-on-64-bit-inode-fs.patch b/0016-commit-fix-ostree-deployment-on-64-bit-inode-fs.patch new file mode 100644 index 0000000..5f312fc --- /dev/null +++ b/0016-commit-fix-ostree-deployment-on-64-bit-inode-fs.patch @@ -0,0 +1,57 @@ +From 9053aaffab2ec02ed377a82389422cc4e77dff8a Mon Sep 17 00:00:00 2001 +From: Abylay Ospan +Date: Tue, 6 Jun 2023 02:13:14 +0000 +Subject: [PATCH 16/17] commit: fix ostree deployment on 64-bit inode fs + +This commit addresses a bug that was causing ostree deployment +to become corrupted on the large fs, when any package was installed using +'rpm-ostree install'. + +In such instances, multiple files were assigned the same inode. For +example, the '/home' directory and a regular file 'pkg-get' were +assigned the same inode (2147484070), making the deployment unusable. + +A root cause analysis was performed, running the process under gdb, +which revealed a lossy conversion from guint64 to guint32, for example +6442451366 converted to 2147484070: + +(gdb) p name +$10 = 0x7fe9224d2d70 "home" + +(gdb) p inode +$73 = 6442451366 + +(gdb) s + device=66311, modifier=0x7fe914791840) at +src/libostree/ostree-repo-commit.c:1590 + +The conversion resulted in entirely independent files potentially +receiving the same inode. + +The issue was discovered on PoC machine equipped with a large NVME +(3.4TB), but the bug can be easily reproduced using `cosa run -m 4000 +--qemu-size +3TB', followed by installation of any package using +`rpm-ostree install`. The resulting deployment will be unusable due to +many files being "corrupted" by the aforementioned issue. + +(cherry picked from commit de6fddc6adee09a93901243dc7074090828a1912) +--- + src/libostree/ostree-repo-commit.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/src/libostree/ostree-repo-commit.c b/src/libostree/ostree-repo-commit.c +index dba98c32..e224d1cb 100644 +--- a/src/libostree/ostree-repo-commit.c ++++ b/src/libostree/ostree-repo-commit.c +@@ -1584,7 +1584,7 @@ static const char * + devino_cache_lookup (OstreeRepo *self, + OstreeRepoCommitModifier *modifier, + guint32 device, +- guint32 inode) ++ guint64 inode) + { + OstreeDevIno dev_ino_key; + OstreeDevIno *dev_ino_val; +-- +2.40.1 + diff --git a/0017-Add-an-always-on-inode64-feature.patch b/0017-Add-an-always-on-inode64-feature.patch new file mode 100644 index 0000000..2c64d02 --- /dev/null +++ b/0017-Add-an-always-on-inode64-feature.patch @@ -0,0 +1,33 @@ +From 8b86c6c0b520f6856f9f8dba09c97114113d3244 Mon Sep 17 00:00:00 2001 +From: Colin Walters +Date: Thu, 20 Jul 2023 09:13:43 -0400 +Subject: [PATCH 17/17] Add an always-on `inode64` feature + +As I (and others) will be backporting the fix in +https://github.com/ostreedev/ostree/pull/2874/commits/de6fddc6adee09a93901243dc7074090828a1912 +pretty far, I want a way for sysadmins and OS builders to +be able to reliably see when their version of ostree has this fix +(Because comparing version numbers isn't portable). +--- + configure.ac | 5 ++++- + 1 file changed, 4 insertions(+), 1 deletion(-) + +diff --git a/configure.ac b/configure.ac +index 3bd735ed..b58d0a67 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -82,7 +82,10 @@ AM_COND_IF([BUILDOPT_TSAN], + LT_PREREQ([2.2.4]) + LT_INIT([disable-static]) + +-OSTREE_FEATURES="" ++dnl We have an always-on feature now to signify the fix for ++dnl https://github.com/ostreedev/ostree/pull/2874/commits/de6fddc6adee09a93901243dc7074090828a1912 ++dnl "commit: fix ostree deployment on 64-bit inode fs" ++OSTREE_FEATURES="inode64" + AC_SUBST([OSTREE_FEATURES]) + + GLIB_TESTS +-- +2.40.1 + diff --git a/ostree.spec b/ostree.spec index ba12776..f139079 100644 --- a/ostree.spec +++ b/ostree.spec @@ -8,7 +8,7 @@ Summary: Tool for managing bootable, immutable filesystem trees Name: ostree Version: 2022.2 -Release: 6%{?dist} +Release: 7%{?dist} Source0: https://github.com/ostreedev/%{name}/releases/download/v%{version}/libostree-%{version}.tar.xz License: LGPLv2+ URL: https://ostree.readthedocs.io/en/latest/ @@ -24,6 +24,10 @@ Patch5: 0006-deploy-Be-a-bit-more-verbose-about-SELinux-bits.patch Patch6: 0007-backport-GH2694-secure-execution-enablement-s390x.patch Patch7: 0008-backport-GH2696-ed25519-verify-signatures-minimum-length.patch Patch8: 0001-Support-overlayfs-whiteouts-on-checkout.patch +# The original intention was to sync to the rhel8 branch upstream; that appears not to have happened +# Patches for https://bugzilla.redhat.com/show_bug.cgi?id=2224102 +Patch16: 0016-commit-fix-ostree-deployment-on-64-bit-inode-fs.patch +Patch17: 0017-Add-an-always-on-inode64-feature.patch BuildRequires: make BuildRequires: git @@ -175,6 +179,9 @@ find %{buildroot} -name '*.la' -delete %endif %changelog +* Thu Jul 20 2023 Colin Walters - 2022.2-7 +- Backport for https://bugzilla.redhat.com/show_bug.cgi?id=2224102 + * Fri Oct 14 2022 Colin Walters - 2022.2-6 - Backport https://github.com/ostreedev/ostree/commit/0085494e350c72599fc5c0e00422885d80b3c660 - Resolves: rhbz#2134629