0044-fs-Disable-many-filesystems-under-lockdown.patch 9.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396
  1. From f0846530aef66583064a6707430437912dda5fa9 Mon Sep 17 00:00:00 2001
  2. From: Daniel Axtens <dja@axtens.net>
  3. Date: Sat, 23 Mar 2024 16:20:45 +1100
  4. Subject: [PATCH] fs: Disable many filesystems under lockdown
  5. The idea is to permit the following: btrfs, cpio, exfat, ext, f2fs, fat,
  6. hfsplus, iso9660, squash4, tar, xfs and zfs.
  7. The JFS, ReiserFS, romfs, UDF and UFS security vulnerabilities were
  8. reported by Jonathan Bar Or <jonathanbaror@gmail.com>.
  9. Fixes: CVE-2025-0677
  10. Fixes: CVE-2025-0684
  11. Fixes: CVE-2025-0685
  12. Fixes: CVE-2025-0686
  13. Fixes: CVE-2025-0689
  14. Suggested-by: Daniel Axtens <dja@axtens.net>
  15. Signed-off-by: Daniel Axtens <dja@axtens.net>
  16. Reviewed-by: Daniel Kiper <daniel.kiper@oracle.com>
  17. Upstream: c4bc55da28543d2522a939ba4ee0acde45f2fa74
  18. Signed-off-by: Thomas Petazzoni <thomas.petazzoni@bootlin.com>
  19. ---
  20. grub-core/fs/affs.c | 11 ++++++++---
  21. grub-core/fs/cbfs.c | 11 ++++++++---
  22. grub-core/fs/jfs.c | 11 ++++++++---
  23. grub-core/fs/minix.c | 11 ++++++++---
  24. grub-core/fs/nilfs2.c | 11 ++++++++---
  25. grub-core/fs/ntfs.c | 11 ++++++++---
  26. grub-core/fs/reiserfs.c | 11 ++++++++---
  27. grub-core/fs/romfs.c | 11 ++++++++---
  28. grub-core/fs/sfs.c | 11 ++++++++---
  29. grub-core/fs/udf.c | 11 ++++++++---
  30. grub-core/fs/ufs.c | 11 ++++++++---
  31. 11 files changed, 88 insertions(+), 33 deletions(-)
  32. diff --git a/grub-core/fs/affs.c b/grub-core/fs/affs.c
  33. index 9b0afb954..520a001c7 100644
  34. --- a/grub-core/fs/affs.c
  35. +++ b/grub-core/fs/affs.c
  36. @@ -26,6 +26,7 @@
  37. #include <grub/types.h>
  38. #include <grub/fshelp.h>
  39. #include <grub/charset.h>
  40. +#include <grub/lockdown.h>
  41. GRUB_MOD_LICENSE ("GPLv3+");
  42. @@ -703,12 +704,16 @@ static struct grub_fs grub_affs_fs =
  43. GRUB_MOD_INIT(affs)
  44. {
  45. - grub_affs_fs.mod = mod;
  46. - grub_fs_register (&grub_affs_fs);
  47. + if (!grub_is_lockdown ())
  48. + {
  49. + grub_affs_fs.mod = mod;
  50. + grub_fs_register (&grub_affs_fs);
  51. + }
  52. my_mod = mod;
  53. }
  54. GRUB_MOD_FINI(affs)
  55. {
  56. - grub_fs_unregister (&grub_affs_fs);
  57. + if (!grub_is_lockdown ())
  58. + grub_fs_unregister (&grub_affs_fs);
  59. }
  60. diff --git a/grub-core/fs/cbfs.c b/grub-core/fs/cbfs.c
  61. index 2332745fe..b62c8777c 100644
  62. --- a/grub-core/fs/cbfs.c
  63. +++ b/grub-core/fs/cbfs.c
  64. @@ -26,6 +26,7 @@
  65. #include <grub/dl.h>
  66. #include <grub/i18n.h>
  67. #include <grub/cbfs_core.h>
  68. +#include <grub/lockdown.h>
  69. GRUB_MOD_LICENSE ("GPLv3+");
  70. @@ -390,13 +391,17 @@ GRUB_MOD_INIT (cbfs)
  71. #if (defined (__i386__) || defined (__x86_64__)) && !defined (GRUB_UTIL) && !defined (GRUB_MACHINE_EMU) && !defined (GRUB_MACHINE_XEN)
  72. init_cbfsdisk ();
  73. #endif
  74. - grub_cbfs_fs.mod = mod;
  75. - grub_fs_register (&grub_cbfs_fs);
  76. + if (!grub_is_lockdown ())
  77. + {
  78. + grub_cbfs_fs.mod = mod;
  79. + grub_fs_register (&grub_cbfs_fs);
  80. + }
  81. }
  82. GRUB_MOD_FINI (cbfs)
  83. {
  84. - grub_fs_unregister (&grub_cbfs_fs);
  85. + if (!grub_is_lockdown ())
  86. + grub_fs_unregister (&grub_cbfs_fs);
  87. #if (defined (__i386__) || defined (__x86_64__)) && !defined (GRUB_UTIL) && !defined (GRUB_MACHINE_EMU) && !defined (GRUB_MACHINE_XEN)
  88. fini_cbfsdisk ();
  89. #endif
  90. diff --git a/grub-core/fs/jfs.c b/grub-core/fs/jfs.c
  91. index b0283ac00..ab175c7f1 100644
  92. --- a/grub-core/fs/jfs.c
  93. +++ b/grub-core/fs/jfs.c
  94. @@ -26,6 +26,7 @@
  95. #include <grub/types.h>
  96. #include <grub/charset.h>
  97. #include <grub/i18n.h>
  98. +#include <grub/lockdown.h>
  99. GRUB_MOD_LICENSE ("GPLv3+");
  100. @@ -1005,12 +1006,16 @@ static struct grub_fs grub_jfs_fs =
  101. GRUB_MOD_INIT(jfs)
  102. {
  103. - grub_jfs_fs.mod = mod;
  104. - grub_fs_register (&grub_jfs_fs);
  105. + if (!grub_is_lockdown ())
  106. + {
  107. + grub_jfs_fs.mod = mod;
  108. + grub_fs_register (&grub_jfs_fs);
  109. + }
  110. my_mod = mod;
  111. }
  112. GRUB_MOD_FINI(jfs)
  113. {
  114. - grub_fs_unregister (&grub_jfs_fs);
  115. + if (!grub_is_lockdown ())
  116. + grub_fs_unregister (&grub_jfs_fs);
  117. }
  118. diff --git a/grub-core/fs/minix.c b/grub-core/fs/minix.c
  119. index b7679c3e2..4440fcca8 100644
  120. --- a/grub-core/fs/minix.c
  121. +++ b/grub-core/fs/minix.c
  122. @@ -25,6 +25,7 @@
  123. #include <grub/dl.h>
  124. #include <grub/types.h>
  125. #include <grub/i18n.h>
  126. +#include <grub/lockdown.h>
  127. GRUB_MOD_LICENSE ("GPLv3+");
  128. @@ -734,8 +735,11 @@ GRUB_MOD_INIT(minix)
  129. #endif
  130. #endif
  131. {
  132. - grub_minix_fs.mod = mod;
  133. - grub_fs_register (&grub_minix_fs);
  134. + if (!grub_is_lockdown ())
  135. + {
  136. + grub_minix_fs.mod = mod;
  137. + grub_fs_register (&grub_minix_fs);
  138. + }
  139. my_mod = mod;
  140. }
  141. @@ -757,5 +761,6 @@ GRUB_MOD_FINI(minix)
  142. #endif
  143. #endif
  144. {
  145. - grub_fs_unregister (&grub_minix_fs);
  146. + if (!grub_is_lockdown ())
  147. + grub_fs_unregister (&grub_minix_fs);
  148. }
  149. diff --git a/grub-core/fs/nilfs2.c b/grub-core/fs/nilfs2.c
  150. index 4e1e71738..26e6077ff 100644
  151. --- a/grub-core/fs/nilfs2.c
  152. +++ b/grub-core/fs/nilfs2.c
  153. @@ -34,6 +34,7 @@
  154. #include <grub/dl.h>
  155. #include <grub/types.h>
  156. #include <grub/fshelp.h>
  157. +#include <grub/lockdown.h>
  158. GRUB_MOD_LICENSE ("GPLv3+");
  159. @@ -1231,12 +1232,16 @@ GRUB_MOD_INIT (nilfs2)
  160. grub_nilfs2_dat_entry));
  161. COMPILE_TIME_ASSERT (1 << LOG_INODE_SIZE
  162. == sizeof (struct grub_nilfs2_inode));
  163. - grub_nilfs2_fs.mod = mod;
  164. - grub_fs_register (&grub_nilfs2_fs);
  165. + if (!grub_is_lockdown ())
  166. + {
  167. + grub_nilfs2_fs.mod = mod;
  168. + grub_fs_register (&grub_nilfs2_fs);
  169. + }
  170. my_mod = mod;
  171. }
  172. GRUB_MOD_FINI (nilfs2)
  173. {
  174. - grub_fs_unregister (&grub_nilfs2_fs);
  175. + if (!grub_is_lockdown ())
  176. + grub_fs_unregister (&grub_nilfs2_fs);
  177. }
  178. diff --git a/grub-core/fs/ntfs.c b/grub-core/fs/ntfs.c
  179. index 560917dc2..bce81947c 100644
  180. --- a/grub-core/fs/ntfs.c
  181. +++ b/grub-core/fs/ntfs.c
  182. @@ -27,6 +27,7 @@
  183. #include <grub/fshelp.h>
  184. #include <grub/ntfs.h>
  185. #include <grub/charset.h>
  186. +#include <grub/lockdown.h>
  187. GRUB_MOD_LICENSE ("GPLv3+");
  188. @@ -1320,12 +1321,16 @@ static struct grub_fs grub_ntfs_fs =
  189. GRUB_MOD_INIT (ntfs)
  190. {
  191. - grub_ntfs_fs.mod = mod;
  192. - grub_fs_register (&grub_ntfs_fs);
  193. + if (!grub_is_lockdown ())
  194. + {
  195. + grub_ntfs_fs.mod = mod;
  196. + grub_fs_register (&grub_ntfs_fs);
  197. + }
  198. my_mod = mod;
  199. }
  200. GRUB_MOD_FINI (ntfs)
  201. {
  202. - grub_fs_unregister (&grub_ntfs_fs);
  203. + if (!grub_is_lockdown ())
  204. + grub_fs_unregister (&grub_ntfs_fs);
  205. }
  206. diff --git a/grub-core/fs/reiserfs.c b/grub-core/fs/reiserfs.c
  207. index c3850e013..5d3c85950 100644
  208. --- a/grub-core/fs/reiserfs.c
  209. +++ b/grub-core/fs/reiserfs.c
  210. @@ -39,6 +39,7 @@
  211. #include <grub/types.h>
  212. #include <grub/fshelp.h>
  213. #include <grub/i18n.h>
  214. +#include <grub/lockdown.h>
  215. GRUB_MOD_LICENSE ("GPLv3+");
  216. @@ -1417,12 +1418,16 @@ static struct grub_fs grub_reiserfs_fs =
  217. GRUB_MOD_INIT(reiserfs)
  218. {
  219. - grub_reiserfs_fs.mod = mod;
  220. - grub_fs_register (&grub_reiserfs_fs);
  221. + if (!grub_is_lockdown ())
  222. + {
  223. + grub_reiserfs_fs.mod = mod;
  224. + grub_fs_register (&grub_reiserfs_fs);
  225. + }
  226. my_mod = mod;
  227. }
  228. GRUB_MOD_FINI(reiserfs)
  229. {
  230. - grub_fs_unregister (&grub_reiserfs_fs);
  231. + if (!grub_is_lockdown ())
  232. + grub_fs_unregister (&grub_reiserfs_fs);
  233. }
  234. diff --git a/grub-core/fs/romfs.c b/grub-core/fs/romfs.c
  235. index 56b0b2b2f..eafab03b2 100644
  236. --- a/grub-core/fs/romfs.c
  237. +++ b/grub-core/fs/romfs.c
  238. @@ -23,6 +23,7 @@
  239. #include <grub/disk.h>
  240. #include <grub/fs.h>
  241. #include <grub/fshelp.h>
  242. +#include <grub/lockdown.h>
  243. GRUB_MOD_LICENSE ("GPLv3+");
  244. @@ -475,11 +476,15 @@ static struct grub_fs grub_romfs_fs =
  245. GRUB_MOD_INIT(romfs)
  246. {
  247. - grub_romfs_fs.mod = mod;
  248. - grub_fs_register (&grub_romfs_fs);
  249. + if (!grub_is_lockdown ())
  250. + {
  251. + grub_romfs_fs.mod = mod;
  252. + grub_fs_register (&grub_romfs_fs);
  253. + }
  254. }
  255. GRUB_MOD_FINI(romfs)
  256. {
  257. - grub_fs_unregister (&grub_romfs_fs);
  258. + if (!grub_is_lockdown ())
  259. + grub_fs_unregister (&grub_romfs_fs);
  260. }
  261. diff --git a/grub-core/fs/sfs.c b/grub-core/fs/sfs.c
  262. index f0d7cac43..88705b3a2 100644
  263. --- a/grub-core/fs/sfs.c
  264. +++ b/grub-core/fs/sfs.c
  265. @@ -26,6 +26,7 @@
  266. #include <grub/types.h>
  267. #include <grub/fshelp.h>
  268. #include <grub/charset.h>
  269. +#include <grub/lockdown.h>
  270. #include <grub/safemath.h>
  271. GRUB_MOD_LICENSE ("GPLv3+");
  272. @@ -779,12 +780,16 @@ static struct grub_fs grub_sfs_fs =
  273. GRUB_MOD_INIT(sfs)
  274. {
  275. - grub_sfs_fs.mod = mod;
  276. - grub_fs_register (&grub_sfs_fs);
  277. + if (!grub_is_lockdown ())
  278. + {
  279. + grub_sfs_fs.mod = mod;
  280. + grub_fs_register (&grub_sfs_fs);
  281. + }
  282. my_mod = mod;
  283. }
  284. GRUB_MOD_FINI(sfs)
  285. {
  286. - grub_fs_unregister (&grub_sfs_fs);
  287. + if (!grub_is_lockdown ())
  288. + grub_fs_unregister (&grub_sfs_fs);
  289. }
  290. diff --git a/grub-core/fs/udf.c b/grub-core/fs/udf.c
  291. index 8765c633c..3d5ee5af5 100644
  292. --- a/grub-core/fs/udf.c
  293. +++ b/grub-core/fs/udf.c
  294. @@ -27,6 +27,7 @@
  295. #include <grub/fshelp.h>
  296. #include <grub/charset.h>
  297. #include <grub/datetime.h>
  298. +#include <grub/lockdown.h>
  299. #include <grub/udf.h>
  300. #include <grub/safemath.h>
  301. @@ -1455,12 +1456,16 @@ static struct grub_fs grub_udf_fs = {
  302. GRUB_MOD_INIT (udf)
  303. {
  304. - grub_udf_fs.mod = mod;
  305. - grub_fs_register (&grub_udf_fs);
  306. + if (!grub_is_lockdown ())
  307. + {
  308. + grub_udf_fs.mod = mod;
  309. + grub_fs_register (&grub_udf_fs);
  310. + }
  311. my_mod = mod;
  312. }
  313. GRUB_MOD_FINI (udf)
  314. {
  315. - grub_fs_unregister (&grub_udf_fs);
  316. + if (!grub_is_lockdown ())
  317. + grub_fs_unregister (&grub_udf_fs);
  318. }
  319. diff --git a/grub-core/fs/ufs.c b/grub-core/fs/ufs.c
  320. index e82d9356d..8b5adbd48 100644
  321. --- a/grub-core/fs/ufs.c
  322. +++ b/grub-core/fs/ufs.c
  323. @@ -25,6 +25,7 @@
  324. #include <grub/dl.h>
  325. #include <grub/types.h>
  326. #include <grub/i18n.h>
  327. +#include <grub/lockdown.h>
  328. GRUB_MOD_LICENSE ("GPLv3+");
  329. @@ -899,8 +900,11 @@ GRUB_MOD_INIT(ufs1)
  330. #endif
  331. #endif
  332. {
  333. - grub_ufs_fs.mod = mod;
  334. - grub_fs_register (&grub_ufs_fs);
  335. + if (!grub_is_lockdown ())
  336. + {
  337. + grub_ufs_fs.mod = mod;
  338. + grub_fs_register (&grub_ufs_fs);
  339. + }
  340. my_mod = mod;
  341. }
  342. @@ -914,6 +918,7 @@ GRUB_MOD_FINI(ufs1)
  343. #endif
  344. #endif
  345. {
  346. - grub_fs_unregister (&grub_ufs_fs);
  347. + if (!grub_is_lockdown ())
  348. + grub_fs_unregister (&grub_ufs_fs);
  349. }
  350. --
  351. 2.50.1