|
@@ -0,0 +1,380 @@
|
|
|
+From 47b2dfc7953f70f98ddf35dfdd6e7f4f20283b10 Mon Sep 17 00:00:00 2001
|
|
|
+From: Daniel Axtens <dja@axtens.net>
|
|
|
+Date: Sat, 23 Mar 2024 16:20:45 +1100
|
|
|
+Subject: [PATCH] fs: Disable many filesystems under lockdown
|
|
|
+
|
|
|
+The idea is to permit the following: btrfs, cpio, exfat, ext, f2fs, fat,
|
|
|
+hfsplus, iso9660, squash4, tar, xfs and zfs.
|
|
|
+
|
|
|
+The JFS, ReiserFS, romfs, UDF and UFS security vulnerabilities were
|
|
|
+reported by Jonathan Bar Or <jonathanbaror@gmail.com>.
|
|
|
+
|
|
|
+Fixes: CVE-2025-0677
|
|
|
+Fixes: CVE-2025-0684
|
|
|
+Fixes: CVE-2025-0685
|
|
|
+Fixes: CVE-2025-0686
|
|
|
+Fixes: CVE-2025-0689
|
|
|
+
|
|
|
+Suggested-by: Daniel Axtens <dja@axtens.net>
|
|
|
+Signed-off-by: Daniel Axtens <dja@axtens.net>
|
|
|
+Reviewed-by: Daniel Kiper <daniel.kiper@oracle.com>
|
|
|
+
|
|
|
+CVE: CVE-2025-0677
|
|
|
+CVE: CVE-2025-0684
|
|
|
+CVE: CVE-2025-0685
|
|
|
+CVE: CVE-2025-0686
|
|
|
+CVE: CVE-2025-0689
|
|
|
+Upstream-Status: Backport [https://git.savannah.gnu.org/cgit/grub.git/commit/?id=47b2dfc7953f70f98ddf35dfdd6e7f4f20283b10]
|
|
|
+Signed-off-by: Hitendra Prajapati <hprajapati@mvista.com>
|
|
|
+---
|
|
|
+ grub-core/fs/affs.c | 9 +++++++--
|
|
|
+ grub-core/fs/cbfs.c | 9 +++++++--
|
|
|
+ grub-core/fs/jfs.c | 9 +++++++--
|
|
|
+ grub-core/fs/minix.c | 9 +++++++--
|
|
|
+ grub-core/fs/nilfs2.c | 9 +++++++--
|
|
|
+ grub-core/fs/ntfs.c | 9 +++++++--
|
|
|
+ grub-core/fs/reiserfs.c | 9 +++++++--
|
|
|
+ grub-core/fs/romfs.c | 9 +++++++--
|
|
|
+ grub-core/fs/sfs.c | 9 +++++++--
|
|
|
+ grub-core/fs/udf.c | 9 +++++++--
|
|
|
+ grub-core/fs/ufs.c | 9 +++++++--
|
|
|
+ 11 files changed, 77 insertions(+), 22 deletions(-)
|
|
|
+
|
|
|
+diff --git a/grub-core/fs/affs.c b/grub-core/fs/affs.c
|
|
|
+index cafcd0f..d676532 100644
|
|
|
+--- a/grub-core/fs/affs.c
|
|
|
++++ b/grub-core/fs/affs.c
|
|
|
+@@ -26,6 +26,7 @@
|
|
|
+ #include <grub/types.h>
|
|
|
+ #include <grub/fshelp.h>
|
|
|
+ #include <grub/charset.h>
|
|
|
++#include <grub/lockdown.h>
|
|
|
+
|
|
|
+ GRUB_MOD_LICENSE ("GPLv3+");
|
|
|
+
|
|
|
+@@ -699,11 +700,15 @@ static struct grub_fs grub_affs_fs =
|
|
|
+
|
|
|
+ GRUB_MOD_INIT(affs)
|
|
|
+ {
|
|
|
+- grub_fs_register (&grub_affs_fs);
|
|
|
++ if (!grub_is_lockdown ())
|
|
|
++ {
|
|
|
++ grub_fs_register (&grub_affs_fs);
|
|
|
++ }
|
|
|
+ my_mod = mod;
|
|
|
+ }
|
|
|
+
|
|
|
+ GRUB_MOD_FINI(affs)
|
|
|
+ {
|
|
|
+- grub_fs_unregister (&grub_affs_fs);
|
|
|
++ if (!grub_is_lockdown ())
|
|
|
++ grub_fs_unregister (&grub_affs_fs);
|
|
|
+ }
|
|
|
+diff --git a/grub-core/fs/cbfs.c b/grub-core/fs/cbfs.c
|
|
|
+index 581215e..477a14e 100644
|
|
|
+--- a/grub-core/fs/cbfs.c
|
|
|
++++ b/grub-core/fs/cbfs.c
|
|
|
+@@ -26,6 +26,7 @@
|
|
|
+ #include <grub/dl.h>
|
|
|
+ #include <grub/i18n.h>
|
|
|
+ #include <grub/cbfs_core.h>
|
|
|
++#include <grub/lockdown.h>
|
|
|
+
|
|
|
+ GRUB_MOD_LICENSE ("GPLv3+");
|
|
|
+
|
|
|
+@@ -390,12 +391,16 @@ GRUB_MOD_INIT (cbfs)
|
|
|
+ #if (defined (__i386__) || defined (__x86_64__)) && !defined (GRUB_UTIL) && !defined (GRUB_MACHINE_EMU) && !defined (GRUB_MACHINE_XEN)
|
|
|
+ init_cbfsdisk ();
|
|
|
+ #endif
|
|
|
+- grub_fs_register (&grub_cbfs_fs);
|
|
|
++ if (!grub_is_lockdown ())
|
|
|
++ {
|
|
|
++ grub_fs_register (&grub_cbfs_fs);
|
|
|
++ }
|
|
|
+ }
|
|
|
+
|
|
|
+ GRUB_MOD_FINI (cbfs)
|
|
|
+ {
|
|
|
+- grub_fs_unregister (&grub_cbfs_fs);
|
|
|
++ if (!grub_is_lockdown ())
|
|
|
++ grub_fs_unregister (&grub_cbfs_fs);
|
|
|
+ #if (defined (__i386__) || defined (__x86_64__)) && !defined (GRUB_UTIL) && !defined (GRUB_MACHINE_EMU) && !defined (GRUB_MACHINE_XEN)
|
|
|
+ fini_cbfsdisk ();
|
|
|
+ #endif
|
|
|
+diff --git a/grub-core/fs/jfs.c b/grub-core/fs/jfs.c
|
|
|
+index 6f7c439..c0bbab8 100644
|
|
|
+--- a/grub-core/fs/jfs.c
|
|
|
++++ b/grub-core/fs/jfs.c
|
|
|
+@@ -26,6 +26,7 @@
|
|
|
+ #include <grub/types.h>
|
|
|
+ #include <grub/charset.h>
|
|
|
+ #include <grub/i18n.h>
|
|
|
++#include <grub/lockdown.h>
|
|
|
+
|
|
|
+ GRUB_MOD_LICENSE ("GPLv3+");
|
|
|
+
|
|
|
+@@ -963,11 +964,15 @@ static struct grub_fs grub_jfs_fs =
|
|
|
+
|
|
|
+ GRUB_MOD_INIT(jfs)
|
|
|
+ {
|
|
|
+- grub_fs_register (&grub_jfs_fs);
|
|
|
++ if (!grub_is_lockdown ())
|
|
|
++ {
|
|
|
++ grub_fs_register (&grub_jfs_fs);
|
|
|
++ }
|
|
|
+ my_mod = mod;
|
|
|
+ }
|
|
|
+
|
|
|
+ GRUB_MOD_FINI(jfs)
|
|
|
+ {
|
|
|
+- grub_fs_unregister (&grub_jfs_fs);
|
|
|
++ if (!grub_is_lockdown ())
|
|
|
++ grub_fs_unregister (&grub_jfs_fs);
|
|
|
+ }
|
|
|
+diff --git a/grub-core/fs/minix.c b/grub-core/fs/minix.c
|
|
|
+index 3cd18c8..7588835 100644
|
|
|
+--- a/grub-core/fs/minix.c
|
|
|
++++ b/grub-core/fs/minix.c
|
|
|
+@@ -25,6 +25,7 @@
|
|
|
+ #include <grub/dl.h>
|
|
|
+ #include <grub/types.h>
|
|
|
+ #include <grub/i18n.h>
|
|
|
++#include <grub/lockdown.h>
|
|
|
+
|
|
|
+ GRUB_MOD_LICENSE ("GPLv3+");
|
|
|
+
|
|
|
+@@ -732,7 +733,10 @@ GRUB_MOD_INIT(minix)
|
|
|
+ #endif
|
|
|
+ #endif
|
|
|
+ {
|
|
|
+- grub_fs_register (&grub_minix_fs);
|
|
|
++ if (!grub_is_lockdown ())
|
|
|
++ {
|
|
|
++ grub_fs_register (&grub_minix_fs);
|
|
|
++ }
|
|
|
+ my_mod = mod;
|
|
|
+ }
|
|
|
+
|
|
|
+@@ -754,5 +758,6 @@ GRUB_MOD_FINI(minix)
|
|
|
+ #endif
|
|
|
+ #endif
|
|
|
+ {
|
|
|
+- grub_fs_unregister (&grub_minix_fs);
|
|
|
++ if (!grub_is_lockdown ())
|
|
|
++ grub_fs_unregister (&grub_minix_fs);
|
|
|
+ }
|
|
|
+diff --git a/grub-core/fs/nilfs2.c b/grub-core/fs/nilfs2.c
|
|
|
+index 3c248a9..3f8e495 100644
|
|
|
+--- a/grub-core/fs/nilfs2.c
|
|
|
++++ b/grub-core/fs/nilfs2.c
|
|
|
+@@ -34,6 +34,7 @@
|
|
|
+ #include <grub/dl.h>
|
|
|
+ #include <grub/types.h>
|
|
|
+ #include <grub/fshelp.h>
|
|
|
++#include <grub/lockdown.h>
|
|
|
+
|
|
|
+ GRUB_MOD_LICENSE ("GPLv3+");
|
|
|
+
|
|
|
+@@ -1231,11 +1232,15 @@ GRUB_MOD_INIT (nilfs2)
|
|
|
+ grub_nilfs2_dat_entry));
|
|
|
+ COMPILE_TIME_ASSERT (1 << LOG_INODE_SIZE
|
|
|
+ == sizeof (struct grub_nilfs2_inode));
|
|
|
+- grub_fs_register (&grub_nilfs2_fs);
|
|
|
++ if (!grub_is_lockdown ())
|
|
|
++ {
|
|
|
++ grub_fs_register (&grub_nilfs2_fs);
|
|
|
++ }
|
|
|
+ my_mod = mod;
|
|
|
+ }
|
|
|
+
|
|
|
+ GRUB_MOD_FINI (nilfs2)
|
|
|
+ {
|
|
|
+- grub_fs_unregister (&grub_nilfs2_fs);
|
|
|
++ if (!grub_is_lockdown ())
|
|
|
++ grub_fs_unregister (&grub_nilfs2_fs);
|
|
|
+ }
|
|
|
+diff --git a/grub-core/fs/ntfs.c b/grub-core/fs/ntfs.c
|
|
|
+index 8f63c83..713e24d 100644
|
|
|
+--- a/grub-core/fs/ntfs.c
|
|
|
++++ b/grub-core/fs/ntfs.c
|
|
|
+@@ -27,6 +27,7 @@
|
|
|
+ #include <grub/fshelp.h>
|
|
|
+ #include <grub/ntfs.h>
|
|
|
+ #include <grub/charset.h>
|
|
|
++#include <grub/lockdown.h>
|
|
|
+
|
|
|
+ GRUB_MOD_LICENSE ("GPLv3+");
|
|
|
+
|
|
|
+@@ -1254,11 +1255,15 @@ static struct grub_fs grub_ntfs_fs =
|
|
|
+
|
|
|
+ GRUB_MOD_INIT (ntfs)
|
|
|
+ {
|
|
|
+- grub_fs_register (&grub_ntfs_fs);
|
|
|
++ if (!grub_is_lockdown ())
|
|
|
++ {
|
|
|
++ grub_fs_register (&grub_ntfs_fs);
|
|
|
++ }
|
|
|
+ my_mod = mod;
|
|
|
+ }
|
|
|
+
|
|
|
+ GRUB_MOD_FINI (ntfs)
|
|
|
+ {
|
|
|
+- grub_fs_unregister (&grub_ntfs_fs);
|
|
|
++ if (!grub_is_lockdown ())
|
|
|
++ grub_fs_unregister (&grub_ntfs_fs);
|
|
|
+ }
|
|
|
+diff --git a/grub-core/fs/reiserfs.c b/grub-core/fs/reiserfs.c
|
|
|
+index af6a226..76cb231 100644
|
|
|
+--- a/grub-core/fs/reiserfs.c
|
|
|
++++ b/grub-core/fs/reiserfs.c
|
|
|
+@@ -39,6 +39,7 @@
|
|
|
+ #include <grub/types.h>
|
|
|
+ #include <grub/fshelp.h>
|
|
|
+ #include <grub/i18n.h>
|
|
|
++#include <grub/lockdown.h>
|
|
|
+
|
|
|
+ GRUB_MOD_LICENSE ("GPLv3+");
|
|
|
+
|
|
|
+@@ -1417,11 +1418,15 @@ static struct grub_fs grub_reiserfs_fs =
|
|
|
+
|
|
|
+ GRUB_MOD_INIT(reiserfs)
|
|
|
+ {
|
|
|
+- grub_fs_register (&grub_reiserfs_fs);
|
|
|
++ if (!grub_is_lockdown ())
|
|
|
++ {
|
|
|
++ grub_fs_register (&grub_reiserfs_fs);
|
|
|
++ }
|
|
|
+ my_mod = mod;
|
|
|
+ }
|
|
|
+
|
|
|
+ GRUB_MOD_FINI(reiserfs)
|
|
|
+ {
|
|
|
+- grub_fs_unregister (&grub_reiserfs_fs);
|
|
|
++ if (!grub_is_lockdown ())
|
|
|
++ grub_fs_unregister (&grub_reiserfs_fs);
|
|
|
+ }
|
|
|
+diff --git a/grub-core/fs/romfs.c b/grub-core/fs/romfs.c
|
|
|
+index d97b8fb..d174449 100644
|
|
|
+--- a/grub-core/fs/romfs.c
|
|
|
++++ b/grub-core/fs/romfs.c
|
|
|
+@@ -23,6 +23,7 @@
|
|
|
+ #include <grub/disk.h>
|
|
|
+ #include <grub/fs.h>
|
|
|
+ #include <grub/fshelp.h>
|
|
|
++#include <grub/lockdown.h>
|
|
|
+
|
|
|
+ GRUB_MOD_LICENSE ("GPLv3+");
|
|
|
+
|
|
|
+@@ -475,10 +476,14 @@ static struct grub_fs grub_romfs_fs =
|
|
|
+
|
|
|
+ GRUB_MOD_INIT(romfs)
|
|
|
+ {
|
|
|
+- grub_fs_register (&grub_romfs_fs);
|
|
|
++ if (!grub_is_lockdown ())
|
|
|
++ {
|
|
|
++ grub_fs_register (&grub_romfs_fs);
|
|
|
++ }
|
|
|
+ }
|
|
|
+
|
|
|
+ GRUB_MOD_FINI(romfs)
|
|
|
+ {
|
|
|
+- grub_fs_unregister (&grub_romfs_fs);
|
|
|
++ if (!grub_is_lockdown ())
|
|
|
++ grub_fs_unregister (&grub_romfs_fs);
|
|
|
+ }
|
|
|
+diff --git a/grub-core/fs/sfs.c b/grub-core/fs/sfs.c
|
|
|
+index 983e880..f64bdd2 100644
|
|
|
+--- a/grub-core/fs/sfs.c
|
|
|
++++ b/grub-core/fs/sfs.c
|
|
|
+@@ -26,6 +26,7 @@
|
|
|
+ #include <grub/types.h>
|
|
|
+ #include <grub/fshelp.h>
|
|
|
+ #include <grub/charset.h>
|
|
|
++#include <grub/lockdown.h>
|
|
|
+ #include <grub/safemath.h>
|
|
|
+
|
|
|
+ GRUB_MOD_LICENSE ("GPLv3+");
|
|
|
+@@ -779,11 +780,15 @@ static struct grub_fs grub_sfs_fs =
|
|
|
+
|
|
|
+ GRUB_MOD_INIT(sfs)
|
|
|
+ {
|
|
|
+- grub_fs_register (&grub_sfs_fs);
|
|
|
++ if (!grub_is_lockdown ())
|
|
|
++ {
|
|
|
++ grub_fs_register (&grub_sfs_fs);
|
|
|
++ }
|
|
|
+ my_mod = mod;
|
|
|
+ }
|
|
|
+
|
|
|
+ GRUB_MOD_FINI(sfs)
|
|
|
+ {
|
|
|
+- grub_fs_unregister (&grub_sfs_fs);
|
|
|
++ if (!grub_is_lockdown ())
|
|
|
++ grub_fs_unregister (&grub_sfs_fs);
|
|
|
+ }
|
|
|
+diff --git a/grub-core/fs/udf.c b/grub-core/fs/udf.c
|
|
|
+index 2ac5c1d..f89c6b0 100644
|
|
|
+--- a/grub-core/fs/udf.c
|
|
|
++++ b/grub-core/fs/udf.c
|
|
|
+@@ -27,6 +27,7 @@
|
|
|
+ #include <grub/fshelp.h>
|
|
|
+ #include <grub/charset.h>
|
|
|
+ #include <grub/datetime.h>
|
|
|
++#include <grub/lockdown.h>
|
|
|
+ #include <grub/udf.h>
|
|
|
+ #include <grub/safemath.h>
|
|
|
+
|
|
|
+@@ -1382,11 +1383,15 @@ static struct grub_fs grub_udf_fs = {
|
|
|
+
|
|
|
+ GRUB_MOD_INIT (udf)
|
|
|
+ {
|
|
|
+- grub_fs_register (&grub_udf_fs);
|
|
|
++ if (!grub_is_lockdown ())
|
|
|
++ {
|
|
|
++ grub_fs_register (&grub_udf_fs);
|
|
|
++ }
|
|
|
+ my_mod = mod;
|
|
|
+ }
|
|
|
+
|
|
|
+ GRUB_MOD_FINI (udf)
|
|
|
+ {
|
|
|
+- grub_fs_unregister (&grub_udf_fs);
|
|
|
++ if (!grub_is_lockdown ())
|
|
|
++ grub_fs_unregister (&grub_udf_fs);
|
|
|
+ }
|
|
|
+diff --git a/grub-core/fs/ufs.c b/grub-core/fs/ufs.c
|
|
|
+index 4727266..90fda07 100644
|
|
|
+--- a/grub-core/fs/ufs.c
|
|
|
++++ b/grub-core/fs/ufs.c
|
|
|
+@@ -25,6 +25,7 @@
|
|
|
+ #include <grub/dl.h>
|
|
|
+ #include <grub/types.h>
|
|
|
+ #include <grub/i18n.h>
|
|
|
++#include <grub/lockdown.h>
|
|
|
+
|
|
|
+ GRUB_MOD_LICENSE ("GPLv3+");
|
|
|
+
|
|
|
+@@ -899,7 +900,10 @@ GRUB_MOD_INIT(ufs1)
|
|
|
+ #endif
|
|
|
+ #endif
|
|
|
+ {
|
|
|
+- grub_fs_register (&grub_ufs_fs);
|
|
|
++ if (!grub_is_lockdown ())
|
|
|
++ {
|
|
|
++ grub_fs_register (&grub_ufs_fs);
|
|
|
++ }
|
|
|
+ my_mod = mod;
|
|
|
+ }
|
|
|
+
|
|
|
+@@ -913,6 +917,7 @@ GRUB_MOD_FINI(ufs1)
|
|
|
+ #endif
|
|
|
+ #endif
|
|
|
+ {
|
|
|
+- grub_fs_unregister (&grub_ufs_fs);
|
|
|
++ if (!grub_is_lockdown ())
|
|
|
++ grub_fs_unregister (&grub_ufs_fs);
|
|
|
+ }
|
|
|
+
|
|
|
+--
|
|
|
+2.25.1
|
|
|
+
|