]> git.ipfire.org Git - thirdparty/grub.git/log
thirdparty/grub.git
8 days agolib/b64dec: Use grub_size_t instead of size_t for _gpgrt_b64dec_proc() function defin... master
Anaëlle Cazuc [Tue, 2 Sep 2025 10:26:44 +0000 (12:26 +0200)] 
lib/b64dec: Use grub_size_t instead of size_t for _gpgrt_b64dec_proc() function definition

On some targets, size_t and grub_size_t may not be the same type
(unsigned long / unsigned int). This breaks the compilation because the
definition of _gpgrt_b64dec_proc() differs from gpgrt_b64dec_proc()
declaration. Fix it by using grub_size_t in the _gpgrt_b64dec_proc()
definition.

Signed-off-by: Anaëlle Cazuc <acazuc@acazuc.fr>
Reviewed-by: Daniel Kiper <daniel.kiper@oracle.com>
8 days agoutil/grub-mkimagexx: Fix riscv32 relocation offset
Anaëlle Cazuc [Tue, 2 Sep 2025 09:50:51 +0000 (11:50 +0200)] 
util/grub-mkimagexx: Fix riscv32 relocation offset

When using grub-mkrescue for a riscv32 target, an invalid implicit cast
on the offset calculation produces an error during the relocation process:

  grub-mkrescue: error: target XXX not reachable from pc=fc.

This patch adds an explicit grub_int64_t cast to compute the offset
as a 64-bit subtraction.

Signed-off-by: Anaëlle Cazuc <acazuc@acazuc.fr>
Reviewed-by: Daniel Kiper <daniel.kiper@oracle.com>
8 days agolibgcrypt: Allow GRUB to build with Clang
Andrew Hamilton [Sun, 31 Aug 2025 03:32:39 +0000 (22:32 -0500)] 
libgcrypt: Allow GRUB to build with Clang

Attempts to build GRUB with Clang were failing due to errors such as:

  error: redefinition of typedef 'gcry_md_hd_t' is a C11 feature

Correct this by adding a compiler pragma to disable the Clang
"typedef-redefinition" warnings. This required an update to
include/grub/crypto.h and the util/import_gcry.py script to add the
pragma to libgcrypt-grub's types.h due to u16 and similar types.

Signed-off-by: Andrew Hamilton <adhamilt@gmail.com>
Reviewed-by: Daniel Kiper <daniel.kiper@oracle.com>
8 days agotests: Add test ISO files to dist package
Andrew Hamilton [Mon, 1 Sep 2025 02:40:49 +0000 (21:40 -0500)] 
tests: Add test ISO files to dist package

Add test ISO files to dist package to allow ISO test to pass.

Signed-off-by: Andrew Hamilton <adhamilt@gmail.com>
Reviewed-by: Daniel Kiper <daniel.kiper@oracle.com>
8 days agotests: Test dates outside of 32-bit Unix range
Vladimir Serbinenko [Wed, 27 Aug 2025 22:32:14 +0000 (17:32 -0500)] 
tests: Test dates outside of 32-bit Unix range

Add tests outside the date range possible with 32-bit time calculation.

Signed-off-by: Vladimir Serbinenko <phcoder@gmail.com>
Signed-off-by: Andrew Hamilton <adhamilt@gmail.com>
Reviewed-by: Daniel Kiper <daniel.kiper@oracle.com>
8 days agolib/datetime: Support dates outside of 1901..2038 range
Vladimir Serbinenko [Wed, 27 Aug 2025 22:32:13 +0000 (17:32 -0500)] 
lib/datetime: Support dates outside of 1901..2038 range

Fixes: https://savannah.gnu.org/bugs/?63894
Fixes: https://savannah.gnu.org/bugs/?66301
Signed-off-by: Vladimir Serbinenko <phcoder@gmail.com>
Signed-off-by: Andrew Hamilton <adhamilt@gmail.com>
Reviewed-by: Daniel Kiper <daniel.kiper@oracle.com>
2 weeks agobootstrap: Ensure shallow gnulib clone works on newer git
Andrew Hamilton [Mon, 25 Aug 2025 01:38:41 +0000 (20:38 -0500)] 
bootstrap: Ensure shallow gnulib clone works on newer git

Update the bootstrap script to be compatible with newer versions of git
that changed the "git clone -h" output from containing:

  --depth

to:

  --[no-]depth

This bootstrap script is pulled the latest gnulib version from gnulib
git, commit 9a1a6385 (Silence 'time-stamp' warnings with bleeding-edge
Emacs.). This change avoids a full clone on gnulib, saving something
like 50 MB.

Fixes: https://savannah.gnu.org/bugs/?66357
Signed-off-by: Andrew Hamilton <adhamilt@gmail.com>
Reviewed-by: Daniel Kiper <daniel.kiper@oracle.com>
2 weeks agodocs: Correct some URLs
Andrew Hamilton [Mon, 25 Aug 2025 02:50:14 +0000 (21:50 -0500)] 
docs: Correct some URLs

Correct some outdated links to various websites and change
http to https in a few places.

Signed-off-by: Andrew Hamilton <adhamilt@gmail.com>
Reviewed-by: Daniel Kiper <daniel.kiper@oracle.com>
2 weeks agodocs: Update Future section to reflect current release
Andrew Hamilton [Mon, 25 Aug 2025 02:50:13 +0000 (21:50 -0500)] 
docs: Update Future section to reflect current release

Update the Future section of the GRUB manual to reflect
current work on the 2.x series.

Signed-off-by: Andrew Hamilton <adhamilt@gmail.com>
Reviewed-by: Daniel Kiper <daniel.kiper@oracle.com>
2 weeks agodocs: Document new libgrypt modules
Andrew Hamilton [Mon, 25 Aug 2025 02:50:12 +0000 (21:50 -0500)] 
docs: Document new libgrypt modules

Add documentation for new libgcrypt modules imported into GRUB.

Signed-off-by: Andrew Hamilton <adhamilt@gmail.com>
Reviewed-by: Daniel Kiper <daniel.kiper@oracle.com>
2 weeks agodocs: Clarify section heading and fix wording
Andrew Hamilton [Mon, 25 Aug 2025 02:50:11 +0000 (21:50 -0500)] 
docs: Clarify section heading and fix wording

Update chapter name from "Outline" to "Platform-specific operations" to
improve readability. Also slightly improve some wording in this section.

Signed-off-by: Andrew Hamilton <adhamilt@gmail.com>
Reviewed-by: Daniel Kiper <daniel.kiper@oracle.com>
2 weeks agoBUGS: Update to point to bug tracking system
Andrew Hamilton [Sat, 23 Aug 2025 23:09:18 +0000 (18:09 -0500)] 
BUGS: Update to point to bug tracking system

Update the BUGS file to just point to the GRUB bug tracking system.

Signed-off-by: Andrew Hamilton <adhamilt@gmail.com>
Reviewed-by: Daniel Kiper <daniel.kiper@oracle.com>
2 weeks agoINSTALL: Document libtasn1 needed for grub-protect
Andrew Hamilton [Sat, 23 Aug 2025 23:09:17 +0000 (18:09 -0500)] 
INSTALL: Document libtasn1 needed for grub-protect

Update INSTALL documentation to note that the optional grub-protect
utility requires libtasn1 to build.

Signed-off-by: Andrew Hamilton <adhamilt@gmail.com>
Reviewed-by: Daniel Kiper <daniel.kiper@oracle.com>
2 weeks agopo: Update translations to build with gettext 0.26
Andrew Hamilton [Sat, 23 Aug 2025 03:43:17 +0000 (22:43 -0500)] 
po: Update translations to build with gettext 0.26

Gettext 0.26 validates format strings. In some cases before
the GRUB build process was converting newlines sequences (\n)
to (\<translated character>) which is invalid. Update the
impacted language sed script files to ensure newlines use
the correct escape sequence.

This avoids build errors such as:

  de@hebrew.po:8192: 'msgstr' is not a valid Shell printf format string, unlike 'msgid'. Reason: This escape sequence is invalid.

Fixes: https://savannah.gnu.org/bugs/?67353
Signed-off-by: Andrew Hamilton <adhamilt@gmail.com>
Reviewed-by: Vladimir Serbinenko <phcoder@gmail.com>
Reviewed-by: Daniel Kiper <daniel.kiper@oracle.com>
2 weeks agoterm/efi/console: Treat key.scan_code 0x0102 (suspend) as Enter
Kancy Joe [Tue, 19 Aug 2025 15:12:03 +0000 (23:12 +0800)] 
term/efi/console: Treat key.scan_code 0x0102 (suspend) as Enter

Some Qualcomm-based UEFI platforms only provide volume up, volume down,
and power keys. The volume keys are already mapped to SCAN_UP and SCAN_DOWN,
while the power key is mapped to SCAN_SUSPEND (key.scan_code 0x0102).

On such devices, the power key is commonly used as the Enter (confirm)
button, since no dedicated Enter key exists. This patch treats key.scan_code
0x0102 as Enter to improve usability on these platforms.

Signed-off-by: Kancy Joe <kancy2333@outlook.com>
Reviewed-by: Daniel Kiper <daniel.kiper@oracle.com>
2 weeks agoutil/bash-completion.d/Makefile.am: s/mkrescure/mkrescue/g
Mate Kukri [Tue, 19 Aug 2025 13:13:10 +0000 (14:13 +0100)] 
util/bash-completion.d/Makefile.am: s/mkrescure/mkrescue/g

This is a typo that was stopping this bash-completion from being installed.

Signed-off-by: Mate Kukri <mate.kukri@canonical.com>
Reviewed-by: Daniel Kiper <daniel.kiper@oracle.com>
2 weeks agoblsuki: Add uki command to load Unified Kernel Image entries
Alec Brown [Tue, 12 Aug 2025 03:45:36 +0000 (03:45 +0000)] 
blsuki: Add uki command to load Unified Kernel Image entries

A Unified Kernel Image (UKI) is a single UEFI PE file that combines
a UEFI boot stub, a Linux kernel image, an initrd, and further resources.
The uki command will locate where the UKI file is and create a GRUB menu
entry to load it.

The Unified Kernel Image Specification: https://uapi-group.org/specifications/specs/unified_kernel_image/

Signed-off-by: Alec Brown <alec.r.brown@oracle.com>
Reviewed-by: Daniel Kiper <daniel.kiper@oracle.com>
2 weeks agoblsuki: Check for mounted /boot in emu
Robbie Harwood [Tue, 12 Aug 2025 03:45:35 +0000 (03:45 +0000)] 
blsuki: Check for mounted /boot in emu

Irritatingly, BLS defines paths relative to the mountpoint of the
filesystem which contains its snippets, not / or any other fixed
location. So grub-emu needs to know whether /boot is a separate
filesystem from / and conditionally prepend a path.

Signed-off-by: Robbie Harwood <rharwood@redhat.com>
Signed-off-by: Alec Brown <alec.r.brown@oracle.com>
Reviewed-by: Daniel Kiper <daniel.kiper@oracle.com>
2 weeks agoutil/misc.c: Change offset type for grub_util_write_image_at()
Alec Brown [Tue, 12 Aug 2025 03:45:34 +0000 (03:45 +0000)] 
util/misc.c: Change offset type for grub_util_write_image_at()

Adding filevercmp support to grub-core/commands/blsuki.c from gnulib will cause
issues with the type of the offset parameter for grub_util_write_image_at() for
emu builds. To fix this issue, we can change the type from off_t to grub_off_t.

Signed-off-by: Alec Brown <alec.r.brown@oracle.com>
Reviewed-by: Daniel Kiper <daniel.kiper@oracle.com>
2 weeks agoblsuki: Add blscfg command to parse Boot Loader Specification snippets
Peter Jones [Tue, 12 Aug 2025 03:45:33 +0000 (03:45 +0000)] 
blsuki: Add blscfg command to parse Boot Loader Specification snippets

The BootLoaderSpec (BLS) defines a scheme where different bootloaders can
share a format for boot items and a configuration directory that accepts
these common configurations as drop-in files.

The BLS Specification: https://uapi-group.org/specifications/specs/boot_loader_specification/

Signed-off-by: Peter Jones <pjones@redhat.com>
Signed-off-by: Javier Martinez Canillas <javierm@redhat.com>
Signed-off-by: Will Thompson <wjt@endlessm.com>
Signed-off-by: Alec Brown <alec.r.brown@oracle.com>
Reviewed-by: Daniel Kiper <daniel.kiper@oracle.com>
2 weeks agokern/misc: Implement grub_strtok()
Alec Brown [Tue, 12 Aug 2025 03:45:32 +0000 (03:45 +0000)] 
kern/misc: Implement grub_strtok()

Add the functions grub_strtok() and grub_strtok_r() to help parse strings into
tokens separated by characters in the "delim" parameter. These functions are
present in gnulib but calling them directly from the gnulib code is quite
challenging since the call "#include <string.h>" would include the header file
grub-core/lib/posix_wrap/string.h instead of grub-core/lib/gnulib/string.h,
where strtok() and strtok_r() are declared. Since this overlap is quite
problematic, the simpler solution was to implement the code in the GRUB based
on gnulib's implementation. For more information on these functions, visit the
Linux Programmer's Manual, man strtok.

Signed-off-by: Alec Brown <alec.r.brown@oracle.com>
Reviewed-by: Daniel Kiper <daniel.kiper@oracle.com>
2 weeks agokern/xen: Add Xen command line parsing
Aaron Rainbolt [Thu, 14 Aug 2025 01:36:45 +0000 (20:36 -0500)] 
kern/xen: Add Xen command line parsing

Xen traditionally allows customizing guest behavior by passing arguments
to the VM kernel via the kernel command line. This is no longer possible
when using GRUB with Xen, as the kernel command line is decided by the
GRUB configuration file within the guest, not data passed to the guest
by Xen.

To work around this limitation, enable GRUB to parse a command line
passed to it by Xen, and expose data from the command line to the GRUB
configuration as environment variables. These variables can be used in
the GRUB configuration for any desired purpose, such as extending the
kernel command line passed to the guest. The command line format is
inspired by the Linux kernel's command line format.

To reduce the risk of misuse, abuse, or accidents in production, the
command line will only be parsed if it consists entirely of 7-bit ASCII
characters, only alphabetical characters and underscores are permitted
in variable names, and all variable names must start with the string
"xen_grub_env_". This also allows room for expanding the command line
arguments accepted by GRUB in the future, should other arguments end up
becoming desirable in the future.

Signed-off-by: Aaron Rainbolt <arraybolt3@gmail.com>
Reviewed-by: Daniel Kiper <daniel.kiper@oracle.com>
2 weeks agoinclude/xen/xen.h: Add warning comment for cmd_line
Aaron Rainbolt [Thu, 14 Aug 2025 01:36:44 +0000 (20:36 -0500)] 
include/xen/xen.h: Add warning comment for cmd_line

The cmd_line field of the start_info struct is not guaranteed to be
NUL-terminated, even though it is intended to contain a NUL-terminated
string. Add a warning about this in a comment so future consumers of
this field know to check it for a NUL terminator before using it.

Signed-off-by: Aaron Rainbolt <arraybolt3@gmail.com>
Reviewed-by: Daniel Kiper <daniel.kiper@oracle.com>
4 weeks agozfs: Fix LINUX_ROOT_DEVICE when grub-probe fails
Doug Goldstein [Wed, 23 Jul 2025 15:40:04 +0000 (16:40 +0100)] 
zfs: Fix LINUX_ROOT_DEVICE when grub-probe fails

When grub-probe fails, the current code is to just stuff an empty result
in which causes the user to not knowingly have a system that no longer
boots. grub-probe can fail because the ZFS pool that contains the root
filesystem might have features that GRUB does not yet support which is
a common configuration for people with a rpool and a bpool. This behavior
uses the zdb utility to dump the same value as the filesystem label
would print.

Signed-off-by: Doug Goldstein <cardoe@cardoe.com>
Reviewed-by: Daniel Kiper <daniel.kiper@oracle.com>
4 weeks agorelocator: Switch to own page table while moving chunks
Vladimir Serbinenko [Mon, 11 Aug 2025 18:02:54 +0000 (18:02 +0000)] 
relocator: Switch to own page table while moving chunks

We need to avoid clobbering existing table between starting of chunk movers
and the moment we install target page table. Generate temporary table for
this rather than hoping that we don't clobber existing one.

Fixes 64-bit GhostBSD on 64-bit EFI.

Signed-off-by: Vladimir Serbinenko <phcoder@gmail.com>
Reviewed-by: Daniel Kiper <daniel.kiper@oracle.com>
4 weeks agoconfigure: Generate tar-ustar tarball instead of tar-v7
Mate Kukri [Thu, 24 Jul 2025 17:06:29 +0000 (18:06 +0100)] 
configure: Generate tar-ustar tarball instead of tar-v7

Some of our paths are too long for tar-v7 at this point but tar-ustar
is supported by essentially everything. So, let's use that.

Signed-off-by: Mate Kukri <mate.kukri@canonical.com>
Reviewed-by: Daniel Kiper <daniel.kiper@oracle.com>
4 weeks agobuild: Add new libgcrypt and libtasn1 related files to EXTRA_DISTS
Mate Kukri [Thu, 14 Aug 2025 15:12:03 +0000 (17:12 +0200)] 
build: Add new libgcrypt and libtasn1 related files to EXTRA_DISTS

These files were not added to EXTRA_DISTS during the libgcrypt
and libtasn1 imports but are required for autogen.sh to work.

Signed-off-by: Mate Kukri <mate.kukri@canonical.com>
Reviewed-by: Daniel Kiper <daniel.kiper@oracle.com>
4 weeks agobuild: Add util/import_gcrypt_inth.sed to EXTRA_DISTS
Mate Kukri [Thu, 24 Jul 2025 09:33:44 +0000 (10:33 +0100)] 
build: Add util/import_gcrypt_inth.sed to EXTRA_DISTS

This new file was not added to the distribution tarball during the last
libgcrypt import.

Fixes: 0739d24cd164 (libgcrypt: Adjust import script, definitions and API users for libgcrypt 1.11)
Signed-off-by: Mate Kukri <mate.kukri@canonical.com>
Reviewed-by: Daniel Kiper <daniel.kiper@oracle.com>
4 weeks agoinclude/xen/xen.h: Rename MAX_GUEST_CMDLINE to GRUB_XEN_MAX_GUEST_CMDLINE
Aaron Rainbolt [Thu, 14 Aug 2025 01:36:43 +0000 (20:36 -0500)] 
include/xen/xen.h: Rename MAX_GUEST_CMDLINE to GRUB_XEN_MAX_GUEST_CMDLINE

The include/xen/xen.h header was using an overly generic name to refer
to the maximum length of the command line passed from Xen to a guest.
Rename it to avoid confusion or conflicts in the future.

Signed-off-by: Aaron Rainbolt <arraybolt3@gmail.com>
Reviewed-by: Daniel Kiper <daniel.kiper@oracle.com>
4 weeks agoloader/arm64/xen_boot: Set correctly bootargs property for modules
Frediano Ziglio [Mon, 21 Jul 2025 16:25:57 +0000 (17:25 +0100)] 
loader/arm64/xen_boot: Set correctly bootargs property for modules

The cmdline_size already account for NUL terminator, you can see
this in xen_boot_binary_load(). The same property is set correctly
for Xen command line.

Signed-off-by: Frediano Ziglio <frediano.ziglio@cloud.com>
Reviewed-by: Daniel Kiper <daniel.kiper@oracle.com>
4 weeks agoloader/efi/linux: Return correct size from LoadFile2
Frediano Ziglio [Wed, 16 Jul 2025 08:06:09 +0000 (09:06 +0100)] 
loader/efi/linux: Return correct size from LoadFile2

From UEFI specifications 2.10, section 13.2.2, EFI_LOAD_FILE2_PROTOCOL.LoadFile
(see https://uefi.org/specs/UEFI/2.10/13_Protocols_Media_Access.html), for BufferSize:

  On input the size of Buffer in bytes. On output with a return code
  of EFI_SUCCESS, the amount of data transferred to Buffer. On output
  with a return code of EFI_BUFFER_TOO_SMALL, the size of Buffer
  required to retrieve the requested file.

So, set *buffer_size correctly.

Signed-off-by: Frediano Ziglio <frediano.ziglio@cloud.com>
Reviewed-by: Daniel Kiper <daniel.kiper@oracle.com>
4 weeks agocommands/bli: Set LoaderTpm2ActivePcrBanks runtime variable
Luca Boccassi [Fri, 25 Jul 2025 13:47:05 +0000 (14:47 +0100)] 
commands/bli: Set LoaderTpm2ActivePcrBanks runtime variable

It turns out checking from userspace is not 100% reliable to figure out
whether the firmware had TPM2 support enabled or not. For example with
EDK2 arm64, the default upstream build config bundles TPM2 support with
SecureBoot support, so if the latter is disabled, TPM2 is also unavailable.
But still, the ACPI TPM2 table is created just as if it was enabled. So,
/sys/firmware/acpi/tables/TPM2 exists and looks correct but there are no
measurements, neither the firmware nor the loader/stub can do them, and
/sys/kernel/security/tpm0/binary_bios_measurements does not exist.
So, userspace cannot really tell what was going on in UEFI mode.

The loader can use the apposite UEFI protocol to check, which is a more
definitive answer. Export the bitmask with the list of active banks as-is.
If it's not 0, then in userspace we can be sure a working TPM2 was available
in UEFI mode.

systemd-boot and systemd-stub v258 (current main) set this variable and
userspace portion consumes it to be able to tell what was available in
the firmware context.

Signed-off-by: Luca Boccassi <luca.boccassi@gmail.com>
Reviewed-by: Daniel Kiper <daniel.kiper@oracle.com>
2 months agodocs: Write how to import new libgcrypt
Vladimir Serbinenko [Mon, 7 Jul 2025 14:52:21 +0000 (14:52 +0000)] 
docs: Write how to import new libgcrypt

Signed-off-by: Vladimir Serbinenko <phcoder@gmail.com>
Reviewed-by: Daniel Kiper <daniel.kiper@oracle.com>
2 months agolibgcrypt: Fix a memory leak
Vladimir Serbinenko [Mon, 7 Jul 2025 14:52:20 +0000 (14:52 +0000)] 
libgcrypt: Fix a memory leak

Fixes: CID 468917
Signed-off-by: Vladimir Serbinenko <phcoder@gmail.com>
Reviewed-by: Daniel Kiper <daniel.kiper@oracle.com>
2 months agolibgcrypt: Don't use 64-bit division on platforms where it's slow
Vladimir Serbinenko [Mon, 7 Jul 2025 14:52:19 +0000 (14:52 +0000)] 
libgcrypt: Don't use 64-bit division on platforms where it's slow

Signed-off-by: Vladimir Serbinenko <phcoder@gmail.com>
Reviewed-by: Daniel Kiper <daniel.kiper@oracle.com>
2 months agoutil/import_gcry: Fix pylint warnings
Vladimir Serbinenko [Mon, 7 Jul 2025 14:52:18 +0000 (14:52 +0000)] 
util/import_gcry: Fix pylint warnings

Signed-off-by: Vladimir Serbinenko <phcoder@gmail.com>
Reviewed-by: Daniel Kiper <daniel.kiper@oracle.com>
2 months agoutil/import_gcry: Make compatible with Python 3.4
Vladimir Serbinenko [Mon, 7 Jul 2025 14:52:17 +0000 (14:52 +0000)] 
util/import_gcry: Make compatible with Python 3.4

Signed-off-by: Vladimir Serbinenko <phcoder@gmail.com>
Reviewed-by: Daniel Kiper <daniel.kiper@oracle.com>
2 months agolibgcrypt: Import blake family of hashes
Vladimir Serbinenko [Mon, 7 Jul 2025 14:52:16 +0000 (14:52 +0000)] 
libgcrypt: Import blake family of hashes

Signed-off-by: Vladimir Serbinenko <phcoder@gmail.com>
Reviewed-by: Daniel Kiper <daniel.kiper@oracle.com>
2 months agolibgcrypt: Ignore sign-compare warnings
Vladimir Serbinenko [Mon, 7 Jul 2025 14:52:15 +0000 (14:52 +0000)] 
libgcrypt: Ignore sign-compare warnings

libgcrypt itself is compiled with -Wno-sign-compare. Do the same for consistency.

Signed-off-by: Vladimir Serbinenko <phcoder@gmail.com>
Reviewed-by: Daniel Kiper <daniel.kiper@oracle.com>
2 months agolibgcrypt: Remove now unneeded compilation flag
Vladimir Serbinenko [Mon, 7 Jul 2025 14:52:14 +0000 (14:52 +0000)] 
libgcrypt: Remove now unneeded compilation flag

HAVE_STRTOUL is now defined in stdlib.h. Include it in g10lib.h rather
than defining on command line.

Signed-off-by: Vladimir Serbinenko <phcoder@gmail.com>
Reviewed-by: Daniel Kiper <daniel.kiper@oracle.com>
2 months agolibgcrypt: Fix Coverity warnings
Vladimir Serbinenko [Mon, 7 Jul 2025 14:52:13 +0000 (14:52 +0000)] 
libgcrypt: Fix Coverity warnings

Signed-off-by: Vladimir Serbinenko <phcoder@gmail.com>
Reviewed-by: Daniel Kiper <daniel.kiper@oracle.com>
2 months agokeccak: Disable acceleration with SSE asm
Vladimir Serbinenko [Mon, 7 Jul 2025 14:52:12 +0000 (14:52 +0000)] 
keccak: Disable acceleration with SSE asm

Libgcrypt code assumes that on x64 all SSE registers are fair game.
While it's true that CPUs in question support it, we disable it in
our compilation options. Disable the offending optimization.

Signed-off-by: Vladimir Serbinenko <phcoder@gmail.com>
Reviewed-by: Daniel Kiper <daniel.kiper@oracle.com>
2 months agotests: Add DSA and RSA SEXP tests
Vladimir Serbinenko [Mon, 7 Jul 2025 14:52:11 +0000 (14:52 +0000)] 
tests: Add DSA and RSA SEXP tests

This allows us to test purely the integration of the implementation of
DSA and RSA from libgcrypt without concerning with additional code.

Signed-off-by: Vladimir Serbinenko <phcoder@gmail.com>
Reviewed-by: Daniel Kiper <daniel.kiper@oracle.com>
2 months agolibgcrypt: Adjust import script, definitions and API users for libgcrypt 1.11
Vladimir Serbinenko [Mon, 7 Jul 2025 14:52:10 +0000 (14:52 +0000)] 
libgcrypt: Adjust import script, definitions and API users for libgcrypt 1.11

This patches modifies the GRUB-libgcrypt API to match new libgcrypt 1.11.

Signed-off-by: Vladimir Serbinenko <phcoder@gmail.com>
Reviewed-by: Daniel Kiper <daniel.kiper@oracle.com>
2 months agob64dec: Add harness for compilation in GRUB environment
Vladimir Serbinenko [Mon, 7 Jul 2025 14:52:09 +0000 (14:52 +0000)] 
b64dec: Add harness for compilation in GRUB environment

Signed-off-by: Vladimir Serbinenko <phcoder@gmail.com>
Reviewed-by: Daniel Kiper <daniel.kiper@oracle.com>
2 months agob64dec: Import b64dec from gpg-error
Vladimir Serbinenko [Mon, 7 Jul 2025 14:52:08 +0000 (14:52 +0000)] 
b64dec: Import b64dec from gpg-error

Imported from libgpg-error 1.51.

Signed-off-by: Vladimir Serbinenko <phcoder@gmail.com>
Reviewed-by: Daniel Kiper <daniel.kiper@oracle.com>
2 months agolibgcrypt: Import libgcrypt 1.11
Vladimir Serbinenko [Mon, 7 Jul 2025 14:52:07 +0000 (14:52 +0000)] 
libgcrypt: Import libgcrypt 1.11

We currently use an old version of libgcrypt which results in us having
fewer ciphers and missing on many other improvements.

Signed-off-by: Vladimir Serbinenko <phcoder@gmail.com>
Reviewed-by: Daniel Kiper <daniel.kiper@oracle.com>
2 months agoloader/efi/linux: Use shim loader image handle where available
Mate Kukri [Tue, 8 Jul 2025 20:21:17 +0000 (21:21 +0100)] 
loader/efi/linux: Use shim loader image handle where available

Not reusing these handles will result in image measurements showing up
twice in the event log.

On the occasion add missing grub_free() call.

Signed-off-by: Mate Kukri <mate.kukri@canonical.com>
Reviewed-by: Daniel Kiper <daniel.kiper@oracle.com>
2 months agoloader/efi/chainloader: Use shim loader image handle where available
Mate Kukri [Tue, 8 Jul 2025 20:21:16 +0000 (21:21 +0100)] 
loader/efi/chainloader: Use shim loader image handle where available

Not reusing these handles will result in image measurements showing up
twice in the event log.

Signed-off-by: Mate Kukri <mate.kukri@canonical.com>
Reviewed-by: Daniel Kiper <daniel.kiper@oracle.com>
2 months agoefi/sb: Add API for retrieving shim loader image handles
Mate Kukri [Tue, 8 Jul 2025 20:21:15 +0000 (21:21 +0100)] 
efi/sb: Add API for retrieving shim loader image handles

Not reusing these handles will result in image measurements showing up
twice in the event log.

Signed-off-by: Mate Kukri <mate.kukri@canonical.com>
Reviewed-by: Daniel Kiper <daniel.kiper@oracle.com>
2 months agoefi/sb: Add support for the shim loader protocol
Mate Kukri [Tue, 8 Jul 2025 20:21:14 +0000 (21:21 +0100)] 
efi/sb: Add support for the shim loader protocol

Use loader protocol for image verification where available, otherwise
fall back to the old shim lock protocol.

Signed-off-by: Mate Kukri <mate.kukri@canonical.com>
Reviewed-by: Daniel Kiper <daniel.kiper@oracle.com>
2 months agoefi: Provide wrappers for load_image, start_image and unload_image
Julian Andres Klode [Tue, 8 Jul 2025 20:21:13 +0000 (21:21 +0100)] 
efi: Provide wrappers for load_image, start_image and unload_image

These can be used to register a different implementation later,
for example, when shim provides a protocol with those functions.

Signed-off-by: Julian Andres Klode <julian.klode@canonical.com>
Signed-off-by: Mate Kukri <mate.kukri@canonical.com>
Reviewed-by: Daniel Kiper <daniel.kiper@oracle.com>
2 months agoloader/arm64/xen_boot: Consider alignment calling grub_arch_efi_linux_boot_image()
Frediano Ziglio [Fri, 4 Jul 2025 14:06:16 +0000 (15:06 +0100)] 
loader/arm64/xen_boot: Consider alignment calling grub_arch_efi_linux_boot_image()

The Xen image is loaded with an alignment, not always at "start".

Signed-off-by: Frediano Ziglio <frediano.ziglio@cloud.com>
Reviewed-by: Daniel Kiper <daniel.kiper@oracle.com>
Reviewed-by: Sudhakar Kuppusamy <sudhakar@linux.ibm.com>
2 months agoloader/arm64/xen_boot: Use bool instead of int
Frediano Ziglio [Fri, 4 Jul 2025 14:05:12 +0000 (15:05 +0100)] 
loader/arm64/xen_boot: Use bool instead of int

More readable, could consume less space.

Signed-off-by: Frediano Ziglio <frediano.ziglio@cloud.com>
Reviewed-by: Sudhakar Kuppusamy <sudhakar@linux.ibm.com>
Reviewed-by: Daniel Kiper <daniel.kiper@oracle.com>
2 months agoloader/arm64/xen_boot: Remove correctly all modules loaded by xen_module command
Frediano Ziglio [Fri, 4 Jul 2025 08:39:08 +0000 (09:39 +0100)] 
loader/arm64/xen_boot: Remove correctly all modules loaded by xen_module command

We need to use FOR_LIST_ELEMENTS_SAFE() instead of FOR_LIST_ELEMENTS()
as single_binary_unload(), called during the loop, is changing the list
using grub_list_remove(). Given the environment probably the old code
simply removed only the first module on the list not freeing all the others.

Signed-off-by: Frediano Ziglio <frediano.ziglio@cloud.com>
Reviewed-by: Daniel Kiper <daniel.kiper@oracle.com>
Reviewed-by: Sudhakar Kuppusamy <sudhakar@linux.ibm.com>
2 months agodl: Fix grub_dl_is_persistent() for emu
Gary Lin [Thu, 3 Jul 2025 06:09:41 +0000 (14:09 +0800)] 
dl: Fix grub_dl_is_persistent() for emu

When attempting to build grub-emu the compilation failed with the
following error message:

  include/grub/dl.h: In function ‘grub_dl_is_persistent’:
  include/grub/dl.h:262:1: error: no return statement in function returning non-void [-Werror=return-type]

To avoid the error make the function always return 0.

Fixes: ba8eadde6be1 (dl: Provide a fake grub_dl_set_persistent() and grub_dl_is_persistent() for the emu target)
Signed-off-by: Gary Lin <glin@suse.com>
Cc: Daniel Axtens <dja@axtens.net>
Cc: Sudhakar Kuppusamy <sudhakar@linux.ibm.com>
Reviewed-by: Sudhakar Kuppusamy <sudhakar@linux.ibm.com>
Reviewed-by: Daniel Kiper <daniel.kiper@oracle.com>
2 months agoloader/i386/pc/linux: Fix resource leak
Lidong Chen [Mon, 23 Jun 2025 17:46:01 +0000 (17:46 +0000)] 
loader/i386/pc/linux: Fix resource leak

In grub_cmd_initrd(), memory is allocated for variable initrd_ctx
before calling grub_relocator_alloc_chunk_align_safe(). When the
function call fails, initrd_ctx should be freed before exiting
grub_cmd_initrd().

Fixes: CID 473852
Signed-off-by: Lidong Chen <lidong.chen@oracle.com>
Reviewed-by: Sudhakar Kuppusamy <sudhakar@linux.ibm.com>
Reviewed-by: Daniel Kiper <daniel.kiper@oracle.com>
2 months agoloader/efi/linux: Unload previous Linux kernel/initrd before updating kernel size
Adriano Cordova [Wed, 18 Jun 2025 15:38:14 +0000 (11:38 -0400)] 
loader/efi/linux: Unload previous Linux kernel/initrd before updating kernel size

Unload previous Linux kernel/initrd before updating the global variable
kernel_size. Otherwise the previous Linux kernel gets deallocated with
the kernel_size of the Linux kernel that is being currently loaded.

Signed-off-by: Adriano Cordova <adriano.cordova@canonical.com>
Reviewed-by: Daniel Kiper <daniel.kiper@oracle.com>
2 months agoloader/efi/linux: Correctly terminate load_options member
Frediano Ziglio [Wed, 25 Jun 2025 13:42:43 +0000 (14:42 +0100)] 
loader/efi/linux: Correctly terminate load_options member

If a simple string for arguments are passed it should be NUL terminated.
This is true for other code but not for "linux" command.

Signed-off-by: Frediano Ziglio <frediano.ziglio@cloud.com>
Reviewed-by: Daniel Kiper <daniel.kiper@oracle.com>
2 months agoloader/efi/linux: Use sizeof() instead of constant
Frediano Ziglio [Wed, 25 Jun 2025 13:42:42 +0000 (14:42 +0100)] 
loader/efi/linux: Use sizeof() instead of constant

This is more consistent with the above code using sizeof(grub_efi_char16_t).

Signed-off-by: Frediano Ziglio <frediano.ziglio@cloud.com>
Reviewed-by: Daniel Kiper <daniel.kiper@oracle.com>
2 months agoloader/efi/linux: Use proper type for len variable
Frediano Ziglio [Wed, 25 Jun 2025 13:42:41 +0000 (14:42 +0100)] 
loader/efi/linux: Use proper type for len variable

Although the length should not exceed 2^31 grub_size_t is more
suitable for that variable. len is used to compute the size
of buffers which in C is a size_t, not a int. It is used
for GRUB_EFI_BYTES_TO_PAGES which expects unsigned values.
It is assigned to load_options_size which is unsigned, not signed.

Signed-off-by: Frediano Ziglio <frediano.ziglio@cloud.com>
Reviewed-by: Daniel Kiper <daniel.kiper@oracle.com>
2 months agoloader/efi/linux: Do not pass excessive size for source string
Frediano Ziglio [Wed, 25 Jun 2025 13:42:40 +0000 (14:42 +0100)] 
loader/efi/linux: Do not pass excessive size for source string

The size passed to grub_utf8_to_utf16() for the source string is
used as a limit for the string if NUL character is not encountered.
However, len, which is "strlen(src) * 2 + 2" is surely greater than
strlen(src). Pass the exact correct length.

Signed-off-by: Frediano Ziglio <frediano.ziglio@cloud.com>
Reviewed-by: Daniel Kiper <daniel.kiper@oracle.com>
2 months agoloader/efi/linux: Remove useless assignment
Frediano Ziglio [Wed, 25 Jun 2025 13:42:38 +0000 (14:42 +0100)] 
loader/efi/linux: Remove useless assignment

If the following allocation fails this would leave load_options NULL
while load_options_size not valid. If the allocation succeed
load_options_size is overwritten.

Signed-off-by: Frediano Ziglio <frediano.ziglio@cloud.com>
Reviewed-by: Daniel Kiper <daniel.kiper@oracle.com>
2 months agoinclude/grub/charset.h: Update documentation
Frediano Ziglio [Wed, 25 Jun 2025 13:42:39 +0000 (14:42 +0100)] 
include/grub/charset.h: Update documentation

(grub_size_t) -1 is never returned, the function always return
a not negative values. This is important for overflows considerations.

Signed-off-by: Frediano Ziglio <frediano.ziglio@cloud.com>
Reviewed-by: Daniel Kiper <daniel.kiper@oracle.com>
2 months agoRevert "lzma: Make sure we don't dereference past array"
Lidong Chen [Mon, 23 Jun 2025 17:42:32 +0000 (17:42 +0000)] 
Revert "lzma: Make sure we don't dereference past array"

Commit 40e261b89b71 (lib/LzmaEnc: Validate "len" before subtracting)
ensures that the variable len is at least 2. As a result, GetLenToPosState(len)
never returns a value greater than or equal to kNumLenToPosStates,
making the changes introduced in the commit 16c0dbf4bc6a (lzma: Make
sure we don't dereference past array) unreachable and no longer necessary.

This reverts commit 16c0dbf4bc6a (lzma: Make sure we don't dereference past array).

Fixes: CID 481982
Signed-off-by: Lidong Chen <lidong.chen@oracle.com>
Reviewed-by: Daniel Kiper <daniel.kiper@oracle.com>
2 months agotests/util/grub-shell: Correct netboot and file_filter test failure
Andrew Hamilton [Sat, 21 Jun 2025 15:50:38 +0000 (10:50 -0500)] 
tests/util/grub-shell: Correct netboot and file_filter test failure

Correct a test failure in netboot_test and file_filter_test caused by an
issue cleaning up the tmp directory created for netboot. Netboot creates
a subdirectory in the tmp folder that causes the rmdir to fail - so
cleanup the subdirectory first.

Fixes: 1d59f39b5f1b (tests/util/grub-shell: Remove the work directory on successful run and debug is not on)
Signed-off-by: Andrew Hamilton <adhamilt@gmail.com>
Tested-by: Leo Sandoval <lsandova@redhat.com>
Reviewed-by: Daniel Kiper <daniel.kiper@oracle.com>
2 months agonormal/charset: Fix underflow and overflow in loop init
Lidong Chen [Wed, 18 Jun 2025 19:24:23 +0000 (19:24 +0000)] 
normal/charset: Fix underflow and overflow in loop init

In bidi_line_wrap(), "kk - 1" in the for loop init, "i = kk - 1",
underflows when "kk" (unsigned int) is 0. Assigning the result of
"kk - 1" to signed int "i" may cause overflow. To address both
issues, cast "kk" to a signed type before subtraction to ensure
safe arithmetic and assignment.

Fixed: CID 473874

Signed-off-by: Lidong Chen <lidong.chen@oracle.com>
Reviewed-by: Daniel Kiper <daniel.kiper@oracle.com>
Reviewed-by: Sudhakar Kuppusamy <sudhakar@linux.ibm.com>
2 months agodl: Provide a fake grub_dl_set_persistent() and grub_dl_is_persistent() for the emu...
Daniel Axtens [Tue, 10 Jun 2025 15:50:38 +0000 (21:20 +0530)] 
dl: Provide a fake grub_dl_set_persistent() and grub_dl_is_persistent() for the emu target

Trying to start grub-emu with a module that calls grub_dl_set_persistent()
and grub_dl_is_persistent() will crash because grub-emu fakes modules and
passes NULL to the module init function.

Provide an empty function for the emu case.

Fixes: ee7808e2197c (dl: Add support for persistent modules)
Signed-off-by: Daniel Axtens <dja@axtens.net>
Signed-off-by: Sudhakar Kuppusamy <sudhakar@linux.ibm.com>
Reviewed-by: Stefan Berger <stefanb@linux.ibm.com>
Reviewed-by: Avnish Chouhan <avnish@linux.ibm.com>
Reviewed-by: Daniel Kiper <daniel.kiper@oracle.com>
2 months agoutil/grub-protect: Correct uninit "err" variable
Andrew Hamilton [Wed, 18 Jun 2025 01:58:26 +0000 (20:58 -0500)] 
util/grub-protect: Correct uninit "err" variable

In function protect_tpm2_export_tpm2key(), the "err" variable
is uninitialized in the normal (error free) path, so ensure this
defaults to GRUB_ERR_NONE.

This causes the GRUB build to fail with clang (observed with clang-14).

Fixes: 5934bf51c (util/grub-protect: Support NV index mode)
Signed-off-by: Andrew Hamilton <adhamilt@gmail.com>
Reviewed-by: Sudhakar Kuppusamy <sudhakar@linux.ibm.com>
Reviewed-by: Daniel Kiper <daniel.kiper@oracle.com>
2 months agognulib: Bring back the fix for resolving unused variable issue
Lidong Chen [Thu, 26 Jun 2025 15:05:01 +0000 (17:05 +0200)] 
gnulib: Bring back the fix for resolving unused variable issue

This patch resolved a minor issue spotted by Coverity:
  a983d36bd917 (gnulib/regexec: Resolve unused variable)

But, it was removed by the Gnulib update:
  2b7902459803 (Update gnulib version and drop most gnulib patches)

It caused Coverity to continue to flag the issue. Daniel Kiper
suggested to bring back the patch a983d36bd917 (gnulib/regexec: Resolve
unused variable).

Fixes: CID 292459
Signed-off-by: Lidong Chen <lidong.chen@oracle.com>
Reviewed-by: Daniel Kiper <daniel.kiper@oracle.com>
2 months agognulib: Add patch to allow GRUB w/GCC-15 compile
Andrew Hamilton [Wed, 18 Jun 2025 01:58:25 +0000 (20:58 -0500)] 
gnulib: Add patch to allow GRUB w/GCC-15 compile

Pull in Gnulib fix to allow lib/base64.c to compile using GCC 15 or newer.

Pulled from Gnulib commit 25df6dc425 (Silence some
-Wunterminated-string-initialization warnings.)

GCC 15 adds a new compiler warning "-Wunterminated-string-initialization"
that will trigger what is considered a false-positive in lib/base64.c as
this array is not treated as a string but an array of characters so the
lack of NUL string terminator is expected.

GCC team has added ability to flag such instances of arrays that the
compiler may think are strings as "nonstring" arrays to avoid this
warning: __attribute__((nonstring)).

Fixes: https://savannah.gnu.org/bugs/?66470
Signed-off-by: Andrew Hamilton <adhamilt@gmail.com>
Reviewed-by: Sudhakar Kuppusamy <sudhakar@linux.ibm.com>
Reviewed-by: Daniel Kiper <daniel.kiper@oracle.com>
3 months agognulib/regexec: Fix resource leak
Alec Brown [Tue, 10 Jun 2025 15:19:45 +0000 (15:19 +0000)] 
gnulib/regexec: Fix resource leak

In the function merge_state_with_log(), memory is allocated for the variable
next_nodes when creating a union of the variables table_nodes and log_nodes.
However, if next_state->entrance_nodes is NULL, then table_nodes becomes NULL
and we still allocate memory to copy the content of log_nodes. This can cause
a resource leak since we only free the memory for next_nodes if table_nodes
isn't NULL. To prevent this, we need to check that next_state->entrance_nodes
isn't NULL before allocating memory for the union.

This issue has been fixed in the latest version of gnulib and I've backported
this change to maintain consistency.

This issue was found by a Coverity scan of GRUB2 under the CID 473887.

Fixes: CID 473887
Signed-off-by: Alec Brown <alec.r.brown@oracle.com>
Reviewed-by: Daniel Kiper <daniel.kiper@oracle.com>
3 months agognulib/regcomp: Fix resource leak
Alec Brown [Tue, 10 Jun 2025 15:19:44 +0000 (15:19 +0000)] 
gnulib/regcomp: Fix resource leak

In the functions create_initial_state() and calc_eclosure_iter(), memory
is allocated for the elems member of a re_node_set structure but that
memory isn't freed on error. Before returning an error, a call to
re_node_set_free() should be made to prevent the resource leak.

This issue has been fixed in the latest version of gnulib and I've
backported this change to maintain consistency.

This issue was found by a Coverity scan of GRUB2 under the following
CIDs: 473869, 473888.

Fixes: CID 473869
Fixes: CID 473888
Signed-off-by: Alec Brown <alec.r.brown@oracle.com>
Reviewed-by: Daniel Kiper <daniel.kiper@oracle.com>
3 months agotests/tpm2_key_protector_test: Add tests for SHA-384 PCR bank
Gary Lin [Fri, 13 Jun 2025 07:02:35 +0000 (15:02 +0800)] 
tests/tpm2_key_protector_test: Add tests for SHA-384 PCR bank

Add a few more tests to seal and unseal the key with the SHA-384 PCR
bank instead of the default SHA-256 PCR bank.

Signed-off-by: Gary Lin <glin@suse.com>
Reviewed-by: Sudhakar Kuppusamy <sudhakar@linux.ibm.com>
Reviewed-by: Stefan Berger <stefanb@linux.ibm.com>
Reviewed-by: Daniel Kiper <daniel.kiper@oracle.com>
3 months agotpm2_key_protector: Dump the PCR bank for key unsealing
Gary Lin [Fri, 13 Jun 2025 07:02:34 +0000 (15:02 +0800)] 
tpm2_key_protector: Dump the PCR bank for key unsealing

TPM 2.0 Key File format stores the PCR selection in the parameters
for TPM2_PolicyPCR and it already contains the selected PCR bank.
Currently, tpm2_key_protector dumped the PCR bank specified by the
--bank option, and it may not be the PCR bank for key unsealing.

To dump the real PCR bank for key unsealing, this commit records the PCR
bank used by TPM2_PolicyPCR and dumps PCR values from that bank when
necessary.

Signed-off-by: Gary Lin <glin@suse.com>
Reviewed-by: Stefan Berger <stefanb@linux.ibm.com>
Reviewed-by: Sudhakar Kuppusamy <sudhakar@linux.ibm.com>
Reviewed-by: Daniel Kiper <daniel.kiper@oracle.com>
3 months agoutil/grub-protect: Fix the hash algorithm of PCR digest
Gary Lin [Fri, 13 Jun 2025 07:02:33 +0000 (15:02 +0800)] 
util/grub-protect: Fix the hash algorithm of PCR digest

For tpm2_key_protector and grub-protect, SHA-256 is chosen as the hash
algorithm for the TPM session. However, grub-protect mistakenly used the
hash algorithm of the PCR bank to calculate PCR digest. If the user
chose a PCR bank other than SHA-256, grub-protect created a non-SHA-256
PCR digest to seal the key. But, tpm2_key_protector expects a SHA-256
PCR digest to the TPM unsealing session, so it would fail due to digest
mismatch.

This commit fixes the hash algorithm of PCR digest in grub-protect to
avoid the potential unsealing failure.

Fixes: https://github.com/lcp/grub2/issues/4
Signed-off-by: Gary Lin <glin@suse.com>
Reviewed-by: Stefan Berger <stefanb@linux.ibm.com>
Reviewed-by: Sudhakar Kuppusamy <sudhakar@linux.ibm.com>
Reviewed-by: Daniel Kiper <daniel.kiper@oracle.com>
3 months agobuild: Add new header files to dist to allow building from tar
Andrew Hamilton [Wed, 11 Jun 2025 03:15:46 +0000 (22:15 -0500)] 
build: Add new header files to dist to allow building from tar

Several new header files have been added to GRUB which need
to be manually added to the dist archive. This allows building
from the tar archive created by "make dist".

Signed-off-by: Andrew Hamilton <adhamilt@gmail.com>
Reviewed-by: Daniel Kiper <daniel.kiper@oracle.com>
3 months agobuild: Remove extra_deps.lst from EXTRA_DIST
Andrew Hamilton [Wed, 11 Jun 2025 03:15:45 +0000 (22:15 -0500)] 
build: Remove extra_deps.lst from EXTRA_DIST

This file is auto-generated based on the selected platform and should
not be included in the source tarball.

Fixes: 6744840b (build: Track explicit module dependencies in Makefile.core.def)
Signed-off-by: Mike Gilbert <floppym@gentoo.org>
Signed-off-by: Andrew Hamilton <adhamilt@gmail.com>
Reviewed-by: Daniel Kiper <daniel.kiper@oracle.com>
3 months agolib/LzmaEnc: Validate "len" before subtracting
Lidong Chen [Thu, 12 Jun 2025 00:03:58 +0000 (00:03 +0000)] 
lib/LzmaEnc: Validate "len" before subtracting

In LzmaEnc_CodeOneBlock(), both GetOptimumFast() and GetOptimum()
returns a value of greater or equal to 1, which is assigned to
"len". But since LZMA_MATCH_LEN_MIN == 2, "len" should be validated
before performing "len - LZMA_MATCH_LEN_MIN" to avoid underflow
when "len" equals to 1.

Fixes: CID 51508
Signed-off-by: Lidong Chen <lidong.chen@oracle.com>
Reviewed-by: Daniel Kiper <daniel.kiper@oracle.com>
Reviewed-by: Sudhakar Kuppusamy <sudhakar@linux.ibm.com>
3 months agoosdep/unix/hostdisk: Fix signed integer overflow
Lidong Chen [Thu, 5 Jun 2025 05:03:19 +0000 (05:03 +0000)] 
osdep/unix/hostdisk: Fix signed integer overflow

The potential overflow issue arises at "size += ret;" because "size"
is of type ssize_t (signed) while "len" is size_t (unsigned). Repeatedly
adding read sizes, "ret", to "size" can potentially exceed the maximum
value of ssize_t, causing it to overflow into a negative or incorrect value.
The fix is to ensure "len" is within the range of SSIZE_MAX.

Fixes: CID 473850
Fixes: CID 473863
Signed-off-by: Lidong Chen <lidong.chen@oracle.com>
Reviewed-by: Daniel Kiper <daniel.kiper@oracle.com>
3 months agodisk/luks2: Add attempting to decrypt message to align with luks and geli modules
Egor Ignatov [Tue, 27 May 2025 08:28:45 +0000 (11:28 +0300)] 
disk/luks2: Add attempting to decrypt message to align with luks and geli modules

Signed-off-by: Egor Ignatov <egori@altlinux.org>
Reviewed-by: Daniel Kiper <daniel.kiper@oracle.com>
3 months agoosdep/linux/getroot: Detect DDF container similar to IMSM
Renaud Métrich [Thu, 24 Apr 2025 09:43:28 +0000 (11:43 +0200)] 
osdep/linux/getroot: Detect DDF container similar to IMSM

Similarly to Intel IMSM, there are BIOS and UEFI implementations that
support DDF containers natively.

DDF and IMSM are very similar in handling, especially these should not
be considered as RAID abstraction. This fixes the requirement of having
a device map when probing DDF containers.

Fixes: https://issues.redhat.com/browse/RHEL-44336
Signed-off-by: Renaud Métrich <rmetrich@redhat.com>
Reviewed-by: Daniel Kiper <daniel.kiper@oracle.com>
3 months agofs/fshelp: Avoid possible NULL pointer deference
Andrew Hamilton [Thu, 22 May 2025 03:20:41 +0000 (22:20 -0500)] 
fs/fshelp: Avoid possible NULL pointer deference

Avoid attempting to defererence a NULL pointer to call read_symlink() when
the given filesystem does not provide a read_symlink() function. This could
be triggered if the calling filesystem had a file marked as a symlink.
This appears possible for HFS and was observed during fuzzing of NTFS.

Signed-off-by: Andrew Hamilton <adhamilt@gmail.com>
Reviewed-by: Vladimir Serbinenko <phcoder@gmail.com>
Reviewed-by: Daniel Kiper <daniel.kiper@oracle.com>
3 months agofs/ntfs: Correct possible infinite loops/hangs
Andrew Hamilton [Thu, 22 May 2025 03:20:40 +0000 (22:20 -0500)] 
fs/ntfs: Correct possible infinite loops/hangs

Correct several infinite loops/hangs found during fuzzing. The issues
fixed here could occur if certain specific malformed NTFS file systems
were presented to GRUB. Currently, GRUB does not allow NTFS file system
access when lockdown mode is enforced, so these should be of minimal
impact.

The changes made in this commit generally correct issues such as attempting
to iterate through a buffer using a length read from the NTFS file system
without confirming the length is larger than 0.

Signed-off-by: Andrew Hamilton <adhamilt@gmail.com>
Reviewed-by: Daniel Kiper <daniel.kiper@oracle.com>
3 months agofs/ntfs: Correct possible access violations
Andrew Hamilton [Thu, 22 May 2025 03:20:39 +0000 (22:20 -0500)] 
fs/ntfs: Correct possible access violations

Correct several memory access violations found during fuzzing.
The issues fixed here could occur if certain specific malformed NTFS
file systems were presented to GRUB. Currently, GRUB does not allow NTFS
file system access when lockdown mode is enforced, so these should be of
minimal impact.

The changes made in this commit generally correct issues where pointers
into data buffers were being calculated using lengths read from the
NTFS file system without sufficient bounds/sanity checking; or
attempting to access elements of a structure to free them, when the
structure pointer is NULL.

Signed-off-by: Andrew Hamilton <adhamilt@gmail.com>
Reviewed-by: Daniel Kiper <daniel.kiper@oracle.com>
3 months agofs/ntfs: Correct attribute vs attribute list validation
Andrew Hamilton [Thu, 22 May 2025 03:20:38 +0000 (22:20 -0500)] 
fs/ntfs: Correct attribute vs attribute list validation

Correct ntfs_test test failures around attempting to validate attribute
list entries as attributes. The NTFS code uses common logic in some
places to parse both attributes and attribute_lists which complicates
validation. Attribute lists contain different headers including a
different size of the length field (2 bytes) at offset 4 instead of the
4 byte length field used in attributes at offset 4. There are other
differences as well, but attempting to validate attribute list types
using attribute header validation was causing failure of the NTFS test
suite. This change restores some of the validation logic which may be
shared between attributes and attribute lists to be closer to the
original logic prior to fixes for previous CVEs. A following commit will
address some of the implications of removing this validation logic by
correcting some fuzzer failures (some which are exposed by removing the
validation in some of the cases).

Fixes: 067b6d225 (fs/ntfs: Implement attribute verification)
Signed-off-by: Andrew Hamilton <adhamilt@gmail.com>
Reviewed-by: Daniel Kiper <daniel.kiper@oracle.com>
3 months agofs/ntfs: Correct regression with run list calculation
Andrew Hamilton [Thu, 22 May 2025 03:20:37 +0000 (22:20 -0500)] 
fs/ntfs: Correct regression with run list calculation

Correct ntfs_test test failures around attempting to validate attribute
run list values. The calculation was incorrect for the "curr" variable.
With previous calculation, some file systems would fail validation
despite being well-formed and valid. This was caused by incrementing
"curr" by min_size which included both the (already accounted for)
min_size as well as the size of the run list. Correct by making a new
variable "run_size" to denote the current run list size to increment
both "curr" and "min_size" separately.

Fixes: 067b6d225 (fs/ntfs: Implement attribute verification)
Signed-off-by: Andrew Hamilton <adhamilt@gmail.com>
Reviewed-by: Daniel Kiper <daniel.kiper@oracle.com>
3 months agolib/envblk: Ignore empty new lines while parsing env files
Shreenidhi Shedi [Mon, 19 May 2025 18:19:54 +0000 (23:49 +0530)] 
lib/envblk: Ignore empty new lines while parsing env files

Environment files may contain empty lines, which should be ignored
during parsing. Currently, these lines are not skipped and resulting in
incorrect behavior. This patch adds a check to skip empty lines along
with those starting with "#".

Signed-off-by: Shreenidhi Shedi <shreenidhi.shedi@broadcom.com>
Reviewed-by: Alexey Makhalov <alexey.makhalov@broadcom.com>
Reviewed-by: Daniel Kiper <daniel.kiper@oracle.com>
3 months agofs/zfs: Fix another memory leak in ZFS code
Glenn Washburn [Mon, 5 May 2025 22:09:19 +0000 (17:09 -0500)] 
fs/zfs: Fix another memory leak in ZFS code

Commit b66c6f918 (fs/zfs: Fix a number of memory leaks in ZFS code)
fixes many of the same leaks detected in bug #63846 except one, which
is fixed here.

Fixes: https://savannah.gnu.org/bugs/?63846
Fixes: b66c6f918 (fs/zfs: Fix a number of memory leaks in ZFS code)
Signed-off-by: Glenn Washburn <development@efficientek.com>
Reviewed-by: Daniel Kiper <daniel.kiper@oracle.com>
3 months agotests: Disable gfxterm_menu and cmdline_cat tests
Glenn Washburn [Mon, 5 May 2025 21:11:36 +0000 (16:11 -0500)] 
tests: Disable gfxterm_menu and cmdline_cat tests

Those tests fail depending on the version of unifont. As we don't distribute
our own unifont it fails for most users. Disable them so that they don't mask
real failures. They can be reinstated once we solve unifont problem.

Signed-off-by: Glenn Washburn <development@efficientek.com>
Reviewed-by: Daniel Kiper <daniel.kiper@oracle.com>
4 months agocryptocheck: Add --quiet option
Michael Chang [Fri, 14 Mar 2025 11:03:39 +0000 (19:03 +0800)] 
cryptocheck: Add --quiet option

The option can be used to suppress output if we only want to test the
return value of the command.

Also, mention this option in the documentation.

Signed-off-by: Michael Chang <mchang@suse.com>
Signed-off-by: Maxim Suhanov <dfirblog@gmail.com>
Reviewed-by: Daniel Kiper <daniel.kiper@oracle.com>
4 months agodisk/cryptodisk: Wipe the passphrase from memory
Maxim Suhanov [Tue, 4 Mar 2025 12:27:59 +0000 (15:27 +0300)] 
disk/cryptodisk: Wipe the passphrase from memory

Switching to another EFI boot application while there are secrets in
RAM is dangerous, because not all firmware is wiping memory on free.

To reduce the attack surface, wipe the passphrase acquired when
unlocking an encrypted volume.

Signed-off-by: Maxim Suhanov <dfirblog@gmail.com>
Reviewed-by: Daniel Kiper <daniel.kiper@oracle.com>
4 months agodisk/cryptodisk: Add the "erase secrets" function
Maxim Suhanov [Tue, 4 Mar 2025 11:02:25 +0000 (14:02 +0300)] 
disk/cryptodisk: Add the "erase secrets" function

This commit adds the grub_cryptodisk_erasesecrets() function to wipe
master keys from all cryptodisks. This function is EFI-only.

Since there is no easy way to "force unmount" a given encrypted disk,
this function renders all mounted cryptodisks unusable. An attempt to
read them will return garbage.

This is why this function must be used in "no way back" conditions.

Currently, it is used when unloading the cryptodisk module and when
performing the "exit" command (it is often used to switch to the next
EFI application). This function is not called when performing the
"chainloader" command, because the callee may return to GRUB. For this
reason, users are encouraged to use "exit" instead of "chainloader" to
execute third-party boot applications.

This function does not guarantee that all secrets are wiped from RAM.
Console output, chunks from disk read requests and other may remain.

This function does not clear the IV prefix and rekey key for geli disks.

Also, this commit adds the relevant documentation improvements.

Signed-off-by: Maxim Suhanov <dfirblog@gmail.com>
Reviewed-by: Daniel Kiper <daniel.kiper@oracle.com>
4 months agodocs: Document available crypto disks checks
Maxim Suhanov [Mon, 10 Mar 2025 12:33:46 +0000 (15:33 +0300)] 
docs: Document available crypto disks checks

Document the --cryptodisk-only argument. Also, document the
"cryptocheck" command invoked when that argument is processed.

Signed-off-by: Maxim Suhanov <dfirblog@gmail.com>
Reviewed-by: Daniel Kiper <daniel.kiper@oracle.com>
4 months agocommands/search: Add the diskfilter support
Maxim Suhanov [Sun, 2 Mar 2025 20:32:43 +0000 (23:32 +0300)] 
commands/search: Add the diskfilter support

When the --cryptodisk-only argument is given, also check the target
device using the "cryptocheck" command, if available.

This extends the checks to common layouts like LVM-on-LUKS, so the
--cryptodisk-only argument transparently handles such setups.

Signed-off-by: Maxim Suhanov <dfirblog@gmail.com>
Reviewed-by: Daniel Kiper <daniel.kiper@oracle.com>
4 months agodisk/diskfilter: Introduce the "cryptocheck" command
Maxim Suhanov [Sun, 2 Mar 2025 15:08:22 +0000 (18:08 +0300)] 
disk/diskfilter: Introduce the "cryptocheck" command

This command examines a given diskfilter device, e.g., an LVM disk,
and checks if underlying disks, physical volumes, are cryptodisks,
e.g., LUKS disks, this layout is called "LVM-on-LUKS".

The return value is 0 when all underlying disks (of a given device)
are cryptodisks (1 if at least one disk is unencrypted or in an
unknown state).

Users are encouraged to include the relevant check before loading
anything from an LVM disk that is supposed to be encrypted.

This further supports the CLI authentication, blocking bypass
attempts when booting from an encrypted LVM disk.

Signed-off-by: Maxim Suhanov <dfirblog@gmail.com>
Reviewed-by: Daniel Kiper <daniel.kiper@oracle.com>
4 months agocommands/search: Introduce the --cryptodisk-only argument
Maxim Suhanov [Sat, 1 Mar 2025 11:16:48 +0000 (14:16 +0300)] 
commands/search: Introduce the --cryptodisk-only argument

This allows users to restrict the "search" command's scope to
encrypted disks only.

Typically, this command is used to "rebase" $root and $prefix
before loading additional configuration files via "source" or
"configfile". Unfortunately, this leads to security problems,
like CVE-2023-4001, when an unexpected, attacker-controlled
device is chosen by the "search" command.

The --cryptodisk-only argument allows users to ensure that the
file system picked is encrypted.

This feature supports the CLI authentication, blocking bypass
attempts.

Signed-off-by: Maxim Suhanov <dfirblog@gmail.com>
Reviewed-by: Daniel Kiper <daniel.kiper@oracle.com>
4 months agokern/rescue_reader: Block the rescue mode until the CLI authentication
Maxim Suhanov [Fri, 28 Feb 2025 14:00:53 +0000 (17:00 +0300)] 
kern/rescue_reader: Block the rescue mode until the CLI authentication

This further mitigates potential misuse of the CLI after the
root device has been successfully unlocked via TPM.

Fixes: CVE-2025-4382
Signed-off-by: Maxim Suhanov <dfirblog@gmail.com>
Reviewed-by: Daniel Kiper <daniel.kiper@oracle.com>
4 months agofs/xfs: Fix large extent counters incompat feature support
Eric Sandeen [Wed, 4 Dec 2024 13:50:28 +0000 (07:50 -0600)] 
fs/xfs: Fix large extent counters incompat feature support

When large extent counter / NREXT64 support was added to GRUB, it missed
a couple of direct reads of nextents which need to be changed to the new
NREXT64-aware helper as well. Without this, we'll have mis-reads of some
directories with this feature enabled.

The large extent counter fix likely raced on merge with commit 07318ee7e
(fs/xfs: Fix XFS directory extent parsing) which added the new direct
nextents reads just prior, causing this issue.

Fixes: aa7c1322671e (fs/xfs: Add large extent counters incompat feature support)
Signed-off-by: Eric Sandeen <sandeen@redhat.com>
Reviewed-by: Anthony Iliopoulos <ailiop@suse.com>
Reviewed-by: Jon DeVree <nuxi@vault24.org>
Reviewed-by: Vladimir Serbinenko <phcoder@gmail.com>
Reviewed-by: Daniel Kiper <daniel.kiper@oracle.com>
5 months agoutil/grub-install: Include raid5rec module for RAID 4 as well
Egor Ignatov [Thu, 10 Apr 2025 07:55:02 +0000 (10:55 +0300)] 
util/grub-install: Include raid5rec module for RAID 4 as well

RAID 4 requires the same recovery module as RAID 5. Extend the condition to
cover both RAID levels.

Signed-off-by: Egor Ignatov <egori@altlinux.org>
Reviewed-by: Daniel Kiper <daniel.kiper@oracle.com>