* [Buildroot] [PATCH 1/1] boot/grub2: fix incompat e2fsprogs feature use
@ 2023-09-17 20:01 Jens Maus via buildroot
2023-09-22 18:04 ` Arnout Vandecappelle via buildroot
2023-09-22 18:48 ` [Buildroot] [PATCH v2] " Jens Maus via buildroot
0 siblings, 2 replies; 5+ messages in thread
From: Jens Maus via buildroot @ 2023-09-17 20:01 UTC (permalink / raw)
To: buildroot; +Cc: Thomas Petazzoni
With bump of package/e2fsprogs to 1.47.0 [1] a freshly generated
ext4 fs has unfortunately different default features enabled
(e.g. metadata_csum_seed). This and some other newer fs features
(e.g. large_dir) are however not supported by our grub2.
Thus, newly generated ext-based rootfs won't be recognized by grub2
and are therefore not bootable/usable from grub2 anymore. This is
an issue already known to other Linux derivates [2],[3],[4].
This commit introduces two additional upstream patches to
package/grub2 which adds EXT4_FEATURE_INCOMPAT_CSUM_SEED and
EXT4_FEATURE_INCOMPAT_LARGEDIR to the EXT2_DRIVER_IGNORED_INCOMPAT
list of ignored incompatible ext features, allowing grub2 to
use ext filesystems with these newer default feature sets.
[1] https://git.buildroot.net/buildroot/commit/?id=6a21733f839478d902f3eab287a82b456e55f708
[2] https://bugs.launchpad.net/ubuntu/+source/grub2/+bug/1844012
[3] https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=1031325
[4] https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=1030939
Signed-off-by: Jens Maus <mail@jens-maus.de>
---
...gnore-checksum-seed-incompat-feature.patch | 59 +++++++++++++++++++
...gnore-the-large_dir-incompat-feature.patch | 58 ++++++++++++++++++
2 files changed, 117 insertions(+)
create mode 100644 boot/grub2/0019-Ignore-checksum-seed-incompat-feature.patch
create mode 100644 boot/grub2/0020-Ignore-the-large_dir-incompat-feature.patch
diff --git a/boot/grub2/0019-Ignore-checksum-seed-incompat-feature.patch b/boot/grub2/0019-Ignore-checksum-seed-incompat-feature.patch
new file mode 100644
index 0000000000..27b2277c40
--- /dev/null
+++ b/boot/grub2/0019-Ignore-checksum-seed-incompat-feature.patch
@@ -0,0 +1,59 @@
+From 7fd5feff97c4b1f446f8fcf6d37aca0c64e7c763 Mon Sep 17 00:00:00 2001
+From: Javier Martinez Canillas <javierm@redhat.com>
+Date: Fri, 11 Jun 2021 21:36:16 +0200
+Subject: fs/ext2: Ignore checksum seed incompat feature
+
+This incompat feature is used to denote that the filesystem stored its
+metadata checksum seed in the superblock. This is used to allow tune2fs
+changing the UUID on a mounted metdata_csum filesystem without having
+to rewrite all the disk metadata. However, the GRUB doesn't use the
+metadata checksum at all. So, it can just ignore this feature if it
+is enabled. This is consistent with the GRUB filesystem code in general
+which just does a best effort to access the filesystem's data.
+
+The checksum seed incompat feature has to be removed from the ignore
+list if the support for metadata checksum verification is added to the
+GRUB ext2 driver later.
+
+Suggested-by: Eric Sandeen <esandeen@redhat.com>
+Suggested-by: Lukas Czerner <lczerner@redhat.com>
+Signed-off-by: Javier Martinez Canillas <javierm@redhat.com>
+Reviewed-by: Lukas Czerner <lczerner@redhat.com>
+Reviewed-by: Daniel Kiper <daniel.kiper@oracle.com>
+---
+ grub-core/fs/ext2.c | 10 ++++++++--
+ 1 file changed, 8 insertions(+), 2 deletions(-)
+
+diff --git a/grub-core/fs/ext2.c b/grub-core/fs/ext2.c
+index e7dd78e..4953a15 100644
+--- a/grub-core/fs/ext2.c
++++ b/grub-core/fs/ext2.c
+@@ -103,6 +103,7 @@ GRUB_MOD_LICENSE ("GPLv3+");
+ #define EXT4_FEATURE_INCOMPAT_64BIT 0x0080
+ #define EXT4_FEATURE_INCOMPAT_MMP 0x0100
+ #define EXT4_FEATURE_INCOMPAT_FLEX_BG 0x0200
++#define EXT4_FEATURE_INCOMPAT_CSUM_SEED 0x2000
+ #define EXT4_FEATURE_INCOMPAT_ENCRYPT 0x10000
+
+ /* The set of back-incompatible features this driver DOES support. Add (OR)
+@@ -123,10 +124,15 @@ GRUB_MOD_LICENSE ("GPLv3+");
+ * mmp: Not really back-incompatible - was added as such to
+ * avoid multiple read-write mounts. Safe to ignore for this
+ * RO driver.
++ * checksum seed: Not really back-incompatible - was added to allow tools
++ * such as tune2fs to change the UUID on a mounted metadata
++ * checksummed filesystem. Safe to ignore for now since the
++ * driver doesn't support checksum verification. However, it
++ * has to be removed from this list if the support is added later.
+ */
+ #define EXT2_DRIVER_IGNORED_INCOMPAT ( EXT3_FEATURE_INCOMPAT_RECOVER \
+- | EXT4_FEATURE_INCOMPAT_MMP)
+-
++ | EXT4_FEATURE_INCOMPAT_MMP \
++ | EXT4_FEATURE_INCOMPAT_CSUM_SEED)
+
+ #define EXT3_JOURNAL_MAGIC_NUMBER 0xc03b3998U
+
+--
+cgit v1.1
+
diff --git a/boot/grub2/0020-Ignore-the-large_dir-incompat-feature.patch b/boot/grub2/0020-Ignore-the-large_dir-incompat-feature.patch
new file mode 100644
index 0000000000..957b66f2c1
--- /dev/null
+++ b/boot/grub2/0020-Ignore-the-large_dir-incompat-feature.patch
@@ -0,0 +1,58 @@
+From 2e9fa73a040462b81bfbfe56c0bc7ad2d30b446b Mon Sep 17 00:00:00 2001
+From: Theodore Ts'o <tytso@mit.edu>
+Date: Tue, 30 Aug 2022 22:41:59 -0400
+Subject: fs/ext2: Ignore the large_dir incompat feature
+
+Recently, ext4 added the large_dir feature, which adds support for
+a 3 level htree directory support.
+
+The GRUB supports existing file systems with htree directories by
+ignoring their existence, and since the index nodes for the hash tree
+look like deleted directory entries (by design), the GRUB can simply do
+a brute force O(n) linear search of directories. The same is true for
+3 level deep htrees indicated by large_dir feature flag.
+
+Hence, it is safe for the GRUB to ignore the large_dir incompat feature.
+
+Fixes: https://savannah.gnu.org/bugs/?61606
+
+Signed-off-by: Theodore Ts'o <tytso@mit.edu>
+Reviewed-by: Daniel Kiper <daniel.kiper@oracle.com>
+---
+ grub-core/fs/ext2.c | 10 +++++++++-
+ 1 file changed, 9 insertions(+), 1 deletion(-)
+
+diff --git a/grub-core/fs/ext2.c b/grub-core/fs/ext2.c
+index 0989e26..e1cc5e6 100644
+--- a/grub-core/fs/ext2.c
++++ b/grub-core/fs/ext2.c
+@@ -104,6 +104,7 @@ GRUB_MOD_LICENSE ("GPLv3+");
+ #define EXT4_FEATURE_INCOMPAT_MMP 0x0100
+ #define EXT4_FEATURE_INCOMPAT_FLEX_BG 0x0200
+ #define EXT4_FEATURE_INCOMPAT_CSUM_SEED 0x2000
++#define EXT4_FEATURE_INCOMPAT_LARGEDIR 0x4000 /* >2GB or 3 level htree */
+ #define EXT4_FEATURE_INCOMPAT_ENCRYPT 0x10000
+
+ /* The set of back-incompatible features this driver DOES support. Add (OR)
+@@ -129,10 +130,17 @@ GRUB_MOD_LICENSE ("GPLv3+");
+ * checksummed filesystem. Safe to ignore for now since the
+ * driver doesn't support checksum verification. However, it
+ * has to be removed from this list if the support is added later.
++ * large_dir: Not back-incompatible given that the GRUB ext2 driver does
++ * not implement EXT2_FEATURE_COMPAT_DIR_INDEX. If the GRUB
++ * eventually supports the htree feature (aka dir_index)
++ * it should support 3 level htrees and then move
++ * EXT4_FEATURE_INCOMPAT_LARGEDIR to
++ * EXT2_DRIVER_SUPPORTED_INCOMPAT.
+ */
+ #define EXT2_DRIVER_IGNORED_INCOMPAT ( EXT3_FEATURE_INCOMPAT_RECOVER \
+ | EXT4_FEATURE_INCOMPAT_MMP \
+- | EXT4_FEATURE_INCOMPAT_CSUM_SEED)
++ | EXT4_FEATURE_INCOMPAT_CSUM_SEED \
++ | EXT4_FEATURE_INCOMPAT_LARGEDIR)
+
+ #define EXT3_JOURNAL_MAGIC_NUMBER 0xc03b3998U
+
+--
+cgit v1.1
+
--
2.34.1
_______________________________________________
buildroot mailing list
buildroot@buildroot.org
https://lists.buildroot.org/mailman/listinfo/buildroot
^ permalink raw reply related [flat|nested] 5+ messages in thread
* Re: [Buildroot] [PATCH 1/1] boot/grub2: fix incompat e2fsprogs feature use
2023-09-17 20:01 [Buildroot] [PATCH 1/1] boot/grub2: fix incompat e2fsprogs feature use Jens Maus via buildroot
@ 2023-09-22 18:04 ` Arnout Vandecappelle via buildroot
2023-09-22 18:48 ` [Buildroot] [PATCH v2] " Jens Maus via buildroot
1 sibling, 0 replies; 5+ messages in thread
From: Arnout Vandecappelle via buildroot @ 2023-09-22 18:04 UTC (permalink / raw)
To: Jens Maus, buildroot; +Cc: Thomas Petazzoni
Hi Jens,
On 17/09/2023 22:01, Jens Maus via buildroot wrote:
> With bump of package/e2fsprogs to 1.47.0 [1] a freshly generated
> ext4 fs has unfortunately different default features enabled
> (e.g. metadata_csum_seed). This and some other newer fs features
> (e.g. large_dir) are however not supported by our grub2.
> Thus, newly generated ext-based rootfs won't be recognized by grub2
> and are therefore not bootable/usable from grub2 anymore. This is
> an issue already known to other Linux derivates [2],[3],[4].
>
> This commit introduces two additional upstream patches to
> package/grub2 which adds EXT4_FEATURE_INCOMPAT_CSUM_SEED and
> EXT4_FEATURE_INCOMPAT_LARGEDIR to the EXT2_DRIVER_IGNORED_INCOMPAT
> list of ignored incompatible ext features, allowing grub2 to
> use ext filesystems with these newer default feature sets.
>
> [1] https://git.buildroot.net/buildroot/commit/?id=6a21733f839478d902f3eab287a82b456e55f708
> [2] https://bugs.launchpad.net/ubuntu/+source/grub2/+bug/1844012
> [3] https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=1031325
> [4] https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=1030939
>
> Signed-off-by: Jens Maus <mail@jens-maus.de>
> ---
> ...gnore-checksum-seed-incompat-feature.patch | 59 +++++++++++++++++++
> ...gnore-the-large_dir-incompat-feature.patch | 58 ++++++++++++++++++
> 2 files changed, 117 insertions(+)
> create mode 100644 boot/grub2/0019-Ignore-checksum-seed-incompat-feature.patch
> create mode 100644 boot/grub2/0020-Ignore-the-large_dir-incompat-feature.patch
>
> diff --git a/boot/grub2/0019-Ignore-checksum-seed-incompat-feature.patch b/boot/grub2/0019-Ignore-checksum-seed-incompat-feature.patch
> new file mode 100644
> index 0000000000..27b2277c40
> --- /dev/null
> +++ b/boot/grub2/0019-Ignore-checksum-seed-incompat-feature.patch
> @@ -0,0 +1,59 @@
> +From 7fd5feff97c4b1f446f8fcf6d37aca0c64e7c763 Mon Sep 17 00:00:00 2001
> +From: Javier Martinez Canillas <javierm@redhat.com>
> +Date: Fri, 11 Jun 2021 21:36:16 +0200
> +Subject: fs/ext2: Ignore checksum seed incompat feature
> +
> +This incompat feature is used to denote that the filesystem stored its
> +metadata checksum seed in the superblock. This is used to allow tune2fs
> +changing the UUID on a mounted metdata_csum filesystem without having
> +to rewrite all the disk metadata. However, the GRUB doesn't use the
> +metadata checksum at all. So, it can just ignore this feature if it
> +is enabled. This is consistent with the GRUB filesystem code in general
> +which just does a best effort to access the filesystem's data.
> +
> +The checksum seed incompat feature has to be removed from the ignore
> +list if the support for metadata checksum verification is added to the
> +GRUB ext2 driver later.
> +
> +Suggested-by: Eric Sandeen <esandeen@redhat.com>
> +Suggested-by: Lukas Czerner <lczerner@redhat.com>
> +Signed-off-by: Javier Martinez Canillas <javierm@redhat.com>
> +Reviewed-by: Lukas Czerner <lczerner@redhat.com>
> +Reviewed-by: Daniel Kiper <daniel.kiper@oracle.com>
This is missing your Signed-off-by and upstream link (as reported by
check-package).
The signed-off-by is needed separately on patches because the patches may be
copied outside of Buildroot, thus loosing the provenance trail.
For the upstream link, preferably point to the right commit in
https://git.savannah.gnu.org/cgit/grub.git
Regards,
Arnout
> +---
> + grub-core/fs/ext2.c | 10 ++++++++--
> + 1 file changed, 8 insertions(+), 2 deletions(-)
> +
> +diff --git a/grub-core/fs/ext2.c b/grub-core/fs/ext2.c
> +index e7dd78e..4953a15 100644
> +--- a/grub-core/fs/ext2.c
> ++++ b/grub-core/fs/ext2.c
> +@@ -103,6 +103,7 @@ GRUB_MOD_LICENSE ("GPLv3+");
> + #define EXT4_FEATURE_INCOMPAT_64BIT 0x0080
> + #define EXT4_FEATURE_INCOMPAT_MMP 0x0100
> + #define EXT4_FEATURE_INCOMPAT_FLEX_BG 0x0200
> ++#define EXT4_FEATURE_INCOMPAT_CSUM_SEED 0x2000
> + #define EXT4_FEATURE_INCOMPAT_ENCRYPT 0x10000
> +
> + /* The set of back-incompatible features this driver DOES support. Add (OR)
> +@@ -123,10 +124,15 @@ GRUB_MOD_LICENSE ("GPLv3+");
> + * mmp: Not really back-incompatible - was added as such to
> + * avoid multiple read-write mounts. Safe to ignore for this
> + * RO driver.
> ++ * checksum seed: Not really back-incompatible - was added to allow tools
> ++ * such as tune2fs to change the UUID on a mounted metadata
> ++ * checksummed filesystem. Safe to ignore for now since the
> ++ * driver doesn't support checksum verification. However, it
> ++ * has to be removed from this list if the support is added later.
> + */
> + #define EXT2_DRIVER_IGNORED_INCOMPAT ( EXT3_FEATURE_INCOMPAT_RECOVER \
> +- | EXT4_FEATURE_INCOMPAT_MMP)
> +-
> ++ | EXT4_FEATURE_INCOMPAT_MMP \
> ++ | EXT4_FEATURE_INCOMPAT_CSUM_SEED)
> +
> + #define EXT3_JOURNAL_MAGIC_NUMBER 0xc03b3998U
> +
> +--
> +cgit v1.1
> +
> diff --git a/boot/grub2/0020-Ignore-the-large_dir-incompat-feature.patch b/boot/grub2/0020-Ignore-the-large_dir-incompat-feature.patch
> new file mode 100644
> index 0000000000..957b66f2c1
> --- /dev/null
> +++ b/boot/grub2/0020-Ignore-the-large_dir-incompat-feature.patch
> @@ -0,0 +1,58 @@
> +From 2e9fa73a040462b81bfbfe56c0bc7ad2d30b446b Mon Sep 17 00:00:00 2001
> +From: Theodore Ts'o <tytso@mit.edu>
> +Date: Tue, 30 Aug 2022 22:41:59 -0400
> +Subject: fs/ext2: Ignore the large_dir incompat feature
> +
> +Recently, ext4 added the large_dir feature, which adds support for
> +a 3 level htree directory support.
> +
> +The GRUB supports existing file systems with htree directories by
> +ignoring their existence, and since the index nodes for the hash tree
> +look like deleted directory entries (by design), the GRUB can simply do
> +a brute force O(n) linear search of directories. The same is true for
> +3 level deep htrees indicated by large_dir feature flag.
> +
> +Hence, it is safe for the GRUB to ignore the large_dir incompat feature.
> +
> +Fixes: https://savannah.gnu.org/bugs/?61606
> +
> +Signed-off-by: Theodore Ts'o <tytso@mit.edu>
> +Reviewed-by: Daniel Kiper <daniel.kiper@oracle.com>
> +---
> + grub-core/fs/ext2.c | 10 +++++++++-
> + 1 file changed, 9 insertions(+), 1 deletion(-)
> +
> +diff --git a/grub-core/fs/ext2.c b/grub-core/fs/ext2.c
> +index 0989e26..e1cc5e6 100644
> +--- a/grub-core/fs/ext2.c
> ++++ b/grub-core/fs/ext2.c
> +@@ -104,6 +104,7 @@ GRUB_MOD_LICENSE ("GPLv3+");
> + #define EXT4_FEATURE_INCOMPAT_MMP 0x0100
> + #define EXT4_FEATURE_INCOMPAT_FLEX_BG 0x0200
> + #define EXT4_FEATURE_INCOMPAT_CSUM_SEED 0x2000
> ++#define EXT4_FEATURE_INCOMPAT_LARGEDIR 0x4000 /* >2GB or 3 level htree */
> + #define EXT4_FEATURE_INCOMPAT_ENCRYPT 0x10000
> +
> + /* The set of back-incompatible features this driver DOES support. Add (OR)
> +@@ -129,10 +130,17 @@ GRUB_MOD_LICENSE ("GPLv3+");
> + * checksummed filesystem. Safe to ignore for now since the
> + * driver doesn't support checksum verification. However, it
> + * has to be removed from this list if the support is added later.
> ++ * large_dir: Not back-incompatible given that the GRUB ext2 driver does
> ++ * not implement EXT2_FEATURE_COMPAT_DIR_INDEX. If the GRUB
> ++ * eventually supports the htree feature (aka dir_index)
> ++ * it should support 3 level htrees and then move
> ++ * EXT4_FEATURE_INCOMPAT_LARGEDIR to
> ++ * EXT2_DRIVER_SUPPORTED_INCOMPAT.
> + */
> + #define EXT2_DRIVER_IGNORED_INCOMPAT ( EXT3_FEATURE_INCOMPAT_RECOVER \
> + | EXT4_FEATURE_INCOMPAT_MMP \
> +- | EXT4_FEATURE_INCOMPAT_CSUM_SEED)
> ++ | EXT4_FEATURE_INCOMPAT_CSUM_SEED \
> ++ | EXT4_FEATURE_INCOMPAT_LARGEDIR)
> +
> + #define EXT3_JOURNAL_MAGIC_NUMBER 0xc03b3998U
> +
> +--
> +cgit v1.1
> +
_______________________________________________
buildroot mailing list
buildroot@buildroot.org
https://lists.buildroot.org/mailman/listinfo/buildroot
^ permalink raw reply [flat|nested] 5+ messages in thread
* [Buildroot] [PATCH v2] boot/grub2: fix incompat e2fsprogs feature use
2023-09-17 20:01 [Buildroot] [PATCH 1/1] boot/grub2: fix incompat e2fsprogs feature use Jens Maus via buildroot
2023-09-22 18:04 ` Arnout Vandecappelle via buildroot
@ 2023-09-22 18:48 ` Jens Maus via buildroot
2023-09-30 9:55 ` Peter Korsgaard
1 sibling, 1 reply; 5+ messages in thread
From: Jens Maus via buildroot @ 2023-09-22 18:48 UTC (permalink / raw)
To: buildroot; +Cc: Thomas Petazzoni
With bump of package/e2fsprogs to 1.47.0 [1] a freshly generated
ext4 fs has unfortunately different default features enabled
(e.g. metadata_csum_seed). This and some other newer fs features
(e.g. large_dir) are however not supported by our grub2.
Thus, newly generated ext-based rootfs won't be recognized by grub2
and are therefore not bootable/usable from grub2 anymore. This is
an issue already known to other Linux derivates [2],[3],[4].
This commit introduces two additional upstream patches to
package/grub2 which adds EXT4_FEATURE_INCOMPAT_CSUM_SEED and
EXT4_FEATURE_INCOMPAT_LARGEDIR to the EXT2_DRIVER_IGNORED_INCOMPAT
list of ignored incompatible ext features, allowing grub2 to
use ext filesystems with these newer default feature sets.
[1] https://git.buildroot.net/buildroot/commit/?id=6a21733f839478d902f3eab287a82b456e55f708
[2] https://bugs.launchpad.net/ubuntu/+source/grub2/+bug/1844012
[3] https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=1031325
[4] https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=1030939
Signed-off-by: Jens Maus <mail@jens-maus.de>
---
Changes v1 -> v2:
- added Signed-off-by and Upstream link in patches (Arnout)
Signed-off-by: Jens Maus <mail@jens-maus.de>
---
...gnore-checksum-seed-incompat-feature.patch | 61 +++++++++++++++++++
...gnore-the-large_dir-incompat-feature.patch | 60 ++++++++++++++++++
2 files changed, 121 insertions(+)
create mode 100644 boot/grub2/0019-fs-ext2-Ignore-checksum-seed-incompat-feature.patch
create mode 100644 boot/grub2/0020-fs-ext2-Ignore-the-large_dir-incompat-feature.patch
diff --git a/boot/grub2/0019-fs-ext2-Ignore-checksum-seed-incompat-feature.patch b/boot/grub2/0019-fs-ext2-Ignore-checksum-seed-incompat-feature.patch
new file mode 100644
index 0000000000..9a913e2279
--- /dev/null
+++ b/boot/grub2/0019-fs-ext2-Ignore-checksum-seed-incompat-feature.patch
@@ -0,0 +1,61 @@
+From 7fd5feff97c4b1f446f8fcf6d37aca0c64e7c763 Mon Sep 17 00:00:00 2001
+From: Javier Martinez Canillas <javierm@redhat.com>
+Date: Fri, 11 Jun 2021 21:36:16 +0200
+Subject: [PATCH] fs/ext2: Ignore checksum seed incompat feature
+
+This incompat feature is used to denote that the filesystem stored its
+metadata checksum seed in the superblock. This is used to allow tune2fs
+changing the UUID on a mounted metdata_csum filesystem without having
+to rewrite all the disk metadata. However, the GRUB doesn't use the
+metadata checksum at all. So, it can just ignore this feature if it
+is enabled. This is consistent with the GRUB filesystem code in general
+which just does a best effort to access the filesystem's data.
+
+The checksum seed incompat feature has to be removed from the ignore
+list if the support for metadata checksum verification is added to the
+GRUB ext2 driver later.
+
+Suggested-by: Eric Sandeen <esandeen@redhat.com>
+Suggested-by: Lukas Czerner <lczerner@redhat.com>
+Signed-off-by: Javier Martinez Canillas <javierm@redhat.com>
+Reviewed-by: Lukas Czerner <lczerner@redhat.com>
+Reviewed-by: Daniel Kiper <daniel.kiper@oracle.com>
+Upstream: 7fd5feff97c4b1f446f8fcf6d37aca0c64e7c763
+Signed-off-by: Jens Maus <mail@jens-maus.de>
+---
+ grub-core/fs/ext2.c | 10 ++++++++--
+ 1 file changed, 8 insertions(+), 2 deletions(-)
+
+diff --git a/grub-core/fs/ext2.c b/grub-core/fs/ext2.c
+index e7dd78e66..4953a1591 100644
+--- a/grub-core/fs/ext2.c
++++ b/grub-core/fs/ext2.c
+@@ -103,6 +103,7 @@ GRUB_MOD_LICENSE ("GPLv3+");
+ #define EXT4_FEATURE_INCOMPAT_64BIT 0x0080
+ #define EXT4_FEATURE_INCOMPAT_MMP 0x0100
+ #define EXT4_FEATURE_INCOMPAT_FLEX_BG 0x0200
++#define EXT4_FEATURE_INCOMPAT_CSUM_SEED 0x2000
+ #define EXT4_FEATURE_INCOMPAT_ENCRYPT 0x10000
+
+ /* The set of back-incompatible features this driver DOES support. Add (OR)
+@@ -123,10 +124,15 @@ GRUB_MOD_LICENSE ("GPLv3+");
+ * mmp: Not really back-incompatible - was added as such to
+ * avoid multiple read-write mounts. Safe to ignore for this
+ * RO driver.
++ * checksum seed: Not really back-incompatible - was added to allow tools
++ * such as tune2fs to change the UUID on a mounted metadata
++ * checksummed filesystem. Safe to ignore for now since the
++ * driver doesn't support checksum verification. However, it
++ * has to be removed from this list if the support is added later.
+ */
+ #define EXT2_DRIVER_IGNORED_INCOMPAT ( EXT3_FEATURE_INCOMPAT_RECOVER \
+- | EXT4_FEATURE_INCOMPAT_MMP)
+-
++ | EXT4_FEATURE_INCOMPAT_MMP \
++ | EXT4_FEATURE_INCOMPAT_CSUM_SEED)
+
+ #define EXT3_JOURNAL_MAGIC_NUMBER 0xc03b3998U
+
+--
+2.34.1
+
diff --git a/boot/grub2/0020-fs-ext2-Ignore-the-large_dir-incompat-feature.patch b/boot/grub2/0020-fs-ext2-Ignore-the-large_dir-incompat-feature.patch
new file mode 100644
index 0000000000..43b182f968
--- /dev/null
+++ b/boot/grub2/0020-fs-ext2-Ignore-the-large_dir-incompat-feature.patch
@@ -0,0 +1,60 @@
+From 2e9fa73a040462b81bfbfe56c0bc7ad2d30b446b Mon Sep 17 00:00:00 2001
+From: Theodore Ts'o <tytso@mit.edu>
+Date: Tue, 30 Aug 2022 22:41:59 -0400
+Subject: [PATCH] fs/ext2: Ignore the large_dir incompat feature
+
+Recently, ext4 added the large_dir feature, which adds support for
+a 3 level htree directory support.
+
+The GRUB supports existing file systems with htree directories by
+ignoring their existence, and since the index nodes for the hash tree
+look like deleted directory entries (by design), the GRUB can simply do
+a brute force O(n) linear search of directories. The same is true for
+3 level deep htrees indicated by large_dir feature flag.
+
+Hence, it is safe for the GRUB to ignore the large_dir incompat feature.
+
+Fixes: https://savannah.gnu.org/bugs/?61606
+
+Signed-off-by: Theodore Ts'o <tytso@mit.edu>
+Reviewed-by: Daniel Kiper <daniel.kiper@oracle.com>
+Upstream: 2e9fa73a040462b81bfbfe56c0bc7ad2d30b446b
+Signed-off-by: Jens Maus <mail@jens-maus.de>
+---
+ grub-core/fs/ext2.c | 10 +++++++++-
+ 1 file changed, 9 insertions(+), 1 deletion(-)
+
+diff --git a/grub-core/fs/ext2.c b/grub-core/fs/ext2.c
+index 0989e26e1..e1cc5e62a 100644
+--- a/grub-core/fs/ext2.c
++++ b/grub-core/fs/ext2.c
+@@ -104,6 +104,7 @@ GRUB_MOD_LICENSE ("GPLv3+");
+ #define EXT4_FEATURE_INCOMPAT_MMP 0x0100
+ #define EXT4_FEATURE_INCOMPAT_FLEX_BG 0x0200
+ #define EXT4_FEATURE_INCOMPAT_CSUM_SEED 0x2000
++#define EXT4_FEATURE_INCOMPAT_LARGEDIR 0x4000 /* >2GB or 3 level htree */
+ #define EXT4_FEATURE_INCOMPAT_ENCRYPT 0x10000
+
+ /* The set of back-incompatible features this driver DOES support. Add (OR)
+@@ -129,10 +130,17 @@ GRUB_MOD_LICENSE ("GPLv3+");
+ * checksummed filesystem. Safe to ignore for now since the
+ * driver doesn't support checksum verification. However, it
+ * has to be removed from this list if the support is added later.
++ * large_dir: Not back-incompatible given that the GRUB ext2 driver does
++ * not implement EXT2_FEATURE_COMPAT_DIR_INDEX. If the GRUB
++ * eventually supports the htree feature (aka dir_index)
++ * it should support 3 level htrees and then move
++ * EXT4_FEATURE_INCOMPAT_LARGEDIR to
++ * EXT2_DRIVER_SUPPORTED_INCOMPAT.
+ */
+ #define EXT2_DRIVER_IGNORED_INCOMPAT ( EXT3_FEATURE_INCOMPAT_RECOVER \
+ | EXT4_FEATURE_INCOMPAT_MMP \
+- | EXT4_FEATURE_INCOMPAT_CSUM_SEED)
++ | EXT4_FEATURE_INCOMPAT_CSUM_SEED \
++ | EXT4_FEATURE_INCOMPAT_LARGEDIR)
+
+ #define EXT3_JOURNAL_MAGIC_NUMBER 0xc03b3998U
+
+--
+2.34.1
+
--
2.34.1
_______________________________________________
buildroot mailing list
buildroot@buildroot.org
https://lists.buildroot.org/mailman/listinfo/buildroot
^ permalink raw reply related [flat|nested] 5+ messages in thread
* Re: [Buildroot] [PATCH v2] boot/grub2: fix incompat e2fsprogs feature use
2023-09-22 18:48 ` [Buildroot] [PATCH v2] " Jens Maus via buildroot
@ 2023-09-30 9:55 ` Peter Korsgaard
2023-10-12 16:40 ` Peter Korsgaard
0 siblings, 1 reply; 5+ messages in thread
From: Peter Korsgaard @ 2023-09-30 9:55 UTC (permalink / raw)
To: Jens Maus via buildroot; +Cc: Thomas Petazzoni, Jens Maus
>>>>> "Jens" == Jens Maus via buildroot <buildroot@buildroot.org> writes:
> With bump of package/e2fsprogs to 1.47.0 [1] a freshly generated
> ext4 fs has unfortunately different default features enabled
> (e.g. metadata_csum_seed). This and some other newer fs features
> (e.g. large_dir) are however not supported by our grub2.
> Thus, newly generated ext-based rootfs won't be recognized by grub2
> and are therefore not bootable/usable from grub2 anymore. This is
> an issue already known to other Linux derivates [2],[3],[4].
> This commit introduces two additional upstream patches to
> package/grub2 which adds EXT4_FEATURE_INCOMPAT_CSUM_SEED and
> EXT4_FEATURE_INCOMPAT_LARGEDIR to the EXT2_DRIVER_IGNORED_INCOMPAT
> list of ignored incompatible ext features, allowing grub2 to
> use ext filesystems with these newer default feature sets.
> [1] https://git.buildroot.net/buildroot/commit/?id=6a21733f839478d902f3eab287a82b456e55f708
> [2] https://bugs.launchpad.net/ubuntu/+source/grub2/+bug/1844012
> [3] https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=1031325
> [4] https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=1030939
> Signed-off-by: Jens Maus <mail@jens-maus.de>
> ---
> Changes v1 -> v2:
> - added Signed-off-by and Upstream link in patches (Arnout)
Committed, thanks.
Hopefully other bootloaders will not have similar issues.
--
Bye, Peter Korsgaard
_______________________________________________
buildroot mailing list
buildroot@buildroot.org
https://lists.buildroot.org/mailman/listinfo/buildroot
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [Buildroot] [PATCH v2] boot/grub2: fix incompat e2fsprogs feature use
2023-09-30 9:55 ` Peter Korsgaard
@ 2023-10-12 16:40 ` Peter Korsgaard
0 siblings, 0 replies; 5+ messages in thread
From: Peter Korsgaard @ 2023-10-12 16:40 UTC (permalink / raw)
To: Jens Maus via buildroot; +Cc: Jens Maus, Thomas Petazzoni
>>>>> "Peter" == Peter Korsgaard <peter@korsgaard.com> writes:
>>>>> "Jens" == Jens Maus via buildroot <buildroot@buildroot.org> writes:
>> With bump of package/e2fsprogs to 1.47.0 [1] a freshly generated
>> ext4 fs has unfortunately different default features enabled
>> (e.g. metadata_csum_seed). This and some other newer fs features
>> (e.g. large_dir) are however not supported by our grub2.
>> Thus, newly generated ext-based rootfs won't be recognized by grub2
>> and are therefore not bootable/usable from grub2 anymore. This is
>> an issue already known to other Linux derivates [2],[3],[4].
>> This commit introduces two additional upstream patches to
>> package/grub2 which adds EXT4_FEATURE_INCOMPAT_CSUM_SEED and
>> EXT4_FEATURE_INCOMPAT_LARGEDIR to the EXT2_DRIVER_IGNORED_INCOMPAT
>> list of ignored incompatible ext features, allowing grub2 to
>> use ext filesystems with these newer default feature sets.
>> [1] https://git.buildroot.net/buildroot/commit/?id=6a21733f839478d902f3eab287a82b456e55f708
>> [2] https://bugs.launchpad.net/ubuntu/+source/grub2/+bug/1844012
>> [3] https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=1031325
>> [4] https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=1030939
>> Signed-off-by: Jens Maus <mail@jens-maus.de>
>> ---
>> Changes v1 -> v2:
>> - added Signed-off-by and Upstream link in patches (Arnout)
> Committed, thanks.
> Hopefully other bootloaders will not have similar issues.
Committed to 2023.08.x, thanks.
--
Bye, Peter Korsgaard
_______________________________________________
buildroot mailing list
buildroot@buildroot.org
https://lists.buildroot.org/mailman/listinfo/buildroot
^ permalink raw reply [flat|nested] 5+ messages in thread
end of thread, other threads:[~2023-10-12 16:40 UTC | newest]
Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2023-09-17 20:01 [Buildroot] [PATCH 1/1] boot/grub2: fix incompat e2fsprogs feature use Jens Maus via buildroot
2023-09-22 18:04 ` Arnout Vandecappelle via buildroot
2023-09-22 18:48 ` [Buildroot] [PATCH v2] " Jens Maus via buildroot
2023-09-30 9:55 ` Peter Korsgaard
2023-10-12 16:40 ` Peter Korsgaard
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.