]> git.ipfire.org Git - thirdparty/grub.git/log
thirdparty/grub.git
3 years agofs/affs: Fix resource leaks
Alec Brown [Thu, 3 Feb 2022 00:08:21 +0000 (19:08 -0500)] 
fs/affs: Fix resource leaks

In commit 178ac5107389 (affs: Fix memory leaks), fixes were made to
grub_affs_iterate_dir() to prevent memory leaks from occurring after it
returns without freeing node. However, there were still some instances
where node was causing a memory leak when the function returns after
calling grub_affs_create_node(). In this function, new memory is
allocated to node but doesn't get freed until the hook() function is
called near the end. Before hook() is called, node should be freed in
grub_affs_create_node() before returning out of it.

Fixes: 178ac5107389 (affs: Fix memory leaks)
Fixes: CID 73759
Signed-off-by: Alec Brown <alec.r.brown@oracle.com>
Reviewed-by: Darren Kenny <darren.kenny@oracle.com>
Reviewed-by: Daniel Kiper <daniel.kiper@oracle.com>
3 years agoRISC-V: Adjust -march flags for binutils 2.38
Heinrich Schuchardt [Sat, 29 Jan 2022 12:36:55 +0000 (13:36 +0100)] 
RISC-V: Adjust -march flags for binutils 2.38

As of version 2.38 binutils defaults to ISA specification version
2019-12-13. This version of the specification has has separated the
the csr read/write (csrr*/csrw*) instructions and the fence.i from
the I extension and put them into separate Zicsr and Zifencei
extensions.

This implies that we have to adjust the -march flag passed to the
compiler accordingly.

Signed-off-by: Heinrich Schuchardt <heinrich.schuchardt@canonical.com>
Reviewed-by: Daniel Kiper <daniel.kiper@oracle.com>
3 years agoefi: Correct struct grub_efi_boot_services
Heinrich Schuchardt [Sat, 22 Jan 2022 10:27:54 +0000 (11:27 +0100)] 
efi: Correct struct grub_efi_boot_services

The UEFI specification defines that the EFI_BOOT_SERVICES.Exit(() service may return
EFI_SUCCESS or EFI_INVALID_PARAMETER. So it cannot be __attribute__((noreturn)).

Signed-off-by: Heinrich Schuchardt <heinrich.schuchardt@canonical.com>
Reviewed-by: Daniel Kiper <daniel.kiper@oracle.com>
3 years agoconf/Makefile.common: Order alphabetically variables
Glenn Washburn [Thu, 13 Jan 2022 02:19:03 +0000 (20:19 -0600)] 
conf/Makefile.common: Order alphabetically variables

Signed-off-by: Glenn Washburn <development@efficientek.com>
Reviewed-by: Daniel Kiper <daniel.kiper@oracle.com>
3 years agonet/http: Allow use of non-standard TCP/IP ports
Stephen Balousek [Sun, 16 Jan 2022 22:46:08 +0000 (15:46 -0700)] 
net/http: Allow use of non-standard TCP/IP ports

Allow the use of HTTP servers listening on ports other 80. This is done
with an extension to the http notation:

  (http[,server[,port]])

 - or -

  (http[,server[:port]])

Signed-off-by: Stephen Balousek <sbalousek@wickedloop.com>
Reviewed-by: Daniel Kiper <daniel.kiper@oracle.com>
3 years agoMakefile: Only look for @MARKER@ at the start of a line when generating libgrub_a_ini...
Glenn Washburn [Thu, 13 Jan 2022 03:40:21 +0000 (21:40 -0600)] 
Makefile: Only look for @MARKER@ at the start of a line when generating libgrub_a_init.lst

Under certain conditions libgrub.pp gets generated with a such that it
contains a bunch of CPP defines, at least one of which contains "@MARKER@".
This line should not be used when generating libgrub_a_init.lst, otherwise
we get compiler errors like:

  libgrub_a_init.c:22:18: error: stray ‘#’ in program
     22 | extern void grub_#define_init (void);
        |                  ^
  libgrub_a_init.c:22:19: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘define_init’
     22 | extern void grub_#define_init (void);
        |                   ^~~~~~~~~~~
  libgrub_a_init.c:23:18: error: stray ‘#’ in program
     23 | extern void grub_#define_fini (void);
        |                  ^
  libgrub_a_init.c:23:19: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘define_fini’
     23 | extern void grub_#define_fini (void);
        |                   ^~~~~~~~~~~
  ...

When generating libgrub_a_init.lst only lines starting with "@MARKER@"
are desired.

Signed-off-by: Glenn Washburn <development@efficientek.com>
Reviewed-by: Daniel Kiper <daniel.kiper@oracle.com>
3 years agogentpl.py: Fix issue where sometimes marker files have CPP defines
Glenn Washburn [Thu, 13 Jan 2022 03:40:20 +0000 (21:40 -0600)] 
gentpl.py: Fix issue where sometimes marker files have CPP defines

When generating video.lst, modules whose marker file contains the string
VIDEO_LIST_MARKER are selected. But when the marker file contains the CPP
defines, one of the defines is VIDEO_LIST_MARKER and is present in all
marker files, so they are all selected. By removing the defines, the correct
modules are selected.

Signed-off-by: Glenn Washburn <development@efficientek.com>
Reviewed-by: Daniel Kiper <daniel.kiper@oracle.com>
3 years agoutil/resolve: Bail with error if moddep.lst file line is too long
Glenn Washburn [Thu, 13 Jan 2022 02:55:01 +0000 (20:55 -0600)] 
util/resolve: Bail with error if moddep.lst file line is too long

The code reads each line into a buffer of size 1024 and does not check if
the line is longer. So a line longer than 1024 will be read as a valid line
followed by an invalid line. Then an error confusing to the user is sent
with the test "invalid line format". But the line format is perfectly fine,
the problem is in GRUB's parser. Check if we've hit a line longer than the
size of the buffer, and if so send a more correct and reasonable error.

Signed-off-by: Glenn Washburn <development@efficientek.com>
Reviewed-by: Daniel Kiper <daniel.kiper@oracle.com>
3 years agoutil/resolve: Do not read past the end of the array in read_dep_list()
Glenn Washburn [Thu, 13 Jan 2022 02:55:00 +0000 (20:55 -0600)] 
util/resolve: Do not read past the end of the array in read_dep_list()

If the last non-NULL byte of "buf" is not a white-space character (such as
when a read line is longer than the size of "buf"), then "p" will eventually
point to the byte after the last byte in "buf". After which "p" will be
dereferenced in the while conditional leading to an out of bounds read. Make
sure that "p" is inside "buf" before dereferencing it.

Signed-off-by: Glenn Washburn <development@efficientek.com>
Reviewed-by: Daniel Kiper <daniel.kiper@oracle.com>
3 years agokern/misc: Allow selective disabling of debug facility names
Glenn Washburn [Sun, 2 Jan 2022 05:02:59 +0000 (23:02 -0600)] 
kern/misc: Allow selective disabling of debug facility names

Sometimes you only know which debug logging facility names you want to
turn off, not necessarily all the ones you want enabled. This patch allows
the debug string to contain facility names in the $debug variable which are
prefixed with a "-" to disable debug log messages for that conditional. Say
you want all debug logging on except for btrfs and scripting, then do:
"set debug=all,-btrfs,-scripting"

Note, that only the last occurrence of the facility name with or without a
leading "-" is considered. So simply appending ",-facilityname" to the
$debug variable will disable that conditional. To illustrate, the command
"set debug=all,-btrfs,-scripting,btrfs" will enable btrfs.

Also, add documentation explaining this new behavior.

Signed-off-by: Glenn Washburn <development@efficientek.com>
Reviewed-by: Daniel Kiper <daniel.kiper@oracle.com>
3 years agocryptodisk: Fix Coverity use after free bug
Glenn Washburn [Sat, 1 Jan 2022 21:48:25 +0000 (15:48 -0600)] 
cryptodisk: Fix Coverity use after free bug

The Coverity output is:

  *** CID 366905:  Memory - illegal accesses  (USE_AFTER_FREE)
  /grub-core/disk/cryptodisk.c: 1064 in grub_cryptodisk_scan_device_real()
  1058      cleanup:
  1059       if (askpass)
  1060         {
  1061           cargs->key_len = 0;
  1062           grub_free (cargs->key_data);
  1063         }
  >>>     CID 366905:  Memory - illegal accesses  (USE_AFTER_FREE)
  >>>     Using freed pointer "dev".
  1064       return dev;
  1065     }
  1066
  1067     #ifdef GRUB_UTIL
  1068     #include <grub/util/misc.h>
  1069     grub_err_t

Here the "dev" variable can point to a freed cryptodisk device if the
function grub_cryptodisk_insert() fails. This can happen only on a OOM
condition, but when this happens grub_cryptodisk_insert() calls grub_free on
the passed device. Since grub_cryptodisk_scan_device_real() assumes that
grub_cryptodisk_insert() is always successful, it will return the device,
though the device was freed.

Change grub_cryptodisk_insert() to not free the passed device on failure.
Then on grub_cryptodisk_insert() failure, free the device pointer. This is
done by going to the label "error", which will call cryptodisk_close() to
free the device and set the device pointer to NULL, so that a pointer to
freed memory is not returned.

Fixes: CID 366905
Signed-off-by: Glenn Washburn <development@efficientek.com>
Reviewed-by: Daniel Kiper <daniel.kiper@oracle.com>
3 years agomm: Document grub_mm_init_region()
Daniel Axtens [Wed, 24 Nov 2021 15:22:49 +0000 (02:22 +1100)] 
mm: Document grub_mm_init_region()

The grub_mm_init_region() does some things that seem magical, especially
around region merging. Make it a bit clearer.

Signed-off-by: Daniel Axtens <dja@axtens.net>
Reviewed-by: Daniel Kiper <daniel.kiper@oracle.com>
3 years agomm: Document grub_free()
Daniel Axtens [Wed, 24 Nov 2021 15:22:48 +0000 (02:22 +1100)] 
mm: Document grub_free()

The grub_free() possesses a surprising number of quirks, and also
uses single-letter variable names confusingly to iterate through
the free list.

Document what's going on.

Use prev and cur to iterate over the free list.

Signed-off-by: Daniel Axtens <dja@axtens.net>
Reviewed-by: Daniel Kiper <daniel.kiper@oracle.com>
3 years agomm: grub_real_malloc(): Make small allocs comment match code
Daniel Axtens [Wed, 24 Nov 2021 15:22:47 +0000 (02:22 +1100)] 
mm: grub_real_malloc(): Make small allocs comment match code

Small allocations move the region's *first pointer. The comment
says that this happens for allocations under 64K. The code says
it's for allocations under 32K. Commit 45bf8b3a7549 changed the
code intentionally: make the comment match.

Fixes: 45bf8b3a7549 (* grub-core/kern/mm.c (grub_real_malloc): Decrease cut-off of moving the)
Signed-off-by: Daniel Axtens <dja@axtens.net>
Reviewed-by: Daniel Kiper <daniel.kiper@oracle.com>
3 years agomm: Clarify grub_real_malloc()
Daniel Axtens [Wed, 24 Nov 2021 15:22:46 +0000 (02:22 +1100)] 
mm: Clarify grub_real_malloc()

When iterating through the singly linked list of free blocks,
grub_real_malloc() uses p and q for the current and previous blocks
respectively. This isn't super clear, so swap to using prev and cur.

This makes another quirk more obvious. The comment at the top of
grub_real_malloc() might lead you to believe that the function will
allocate from *first if there is space in that block.

It actually doesn't do that, and it can't do that with the current
data structures. If we used up all of *first, we would need to change
the ->next of the previous block to point to *first->next, but we
can't do that because it's a singly linked list and we don't have
access to *first's previous block.

What grub_real_malloc() actually does is set *first to the initial
previous block, and *first->next is the block we try to allocate
from. That allows us to keep all the data structures consistent.

Document that.

Signed-off-by: Daniel Axtens <dja@axtens.net>
Reviewed-by: Daniel Kiper <daniel.kiper@oracle.com>
3 years agomm: Document GRUB internal memory management structures
Daniel Axtens [Wed, 24 Nov 2021 15:22:45 +0000 (02:22 +1100)] 
mm: Document GRUB internal memory management structures

I spent more than a trivial quantity of time figuring out pre_size and
whether a memory region's size contains the header cell or not.

Document the meanings of all the properties. Hopefully now no-one else
has to figure it out!

Signed-off-by: Daniel Axtens <dja@axtens.net>
Reviewed-by: Daniel Kiper <daniel.kiper@oracle.com>
3 years agofs/btrfs: Use full btrfs bootloader area
Michael Chang [Mon, 13 Dec 2021 06:25:49 +0000 (14:25 +0800)] 
fs/btrfs: Use full btrfs bootloader area

Up to now GRUB can only embed to the first 64 KiB before primary
superblock of btrfs, effectively limiting the GRUB core size. That
could consequently pose restrictions to feature enablement like
advanced zstd compression.

This patch attempts to utilize full unused area reserved by btrfs for
the bootloader outlined in the document [1]:

  The first 1MiB on each device is unused with the exception of primary
  superblock that is on the offset 64KiB and spans 4KiB.

Apart from that, adjacent sectors to superblock and first block group
are not used for embedding in case of overflow and logged access to
adjacent sectors could be useful for tracing it up.

This patch has been tested to provide out of the box support for btrfs
zstd compression with which GRUB has been installed to the partition.

[1] https://btrfs.wiki.kernel.org/index.php/Manpage/btrfs(5)#BOOTLOADER_SUPPORT

Signed-off-by: Michael Chang <mchang@suse.com>
Reviewed-by: Daniel Kiper <daniel.kiper@oracle.com>
3 years agotests: Refactor building xorriso command for iso9660 tests
Glenn Washburn [Fri, 10 Dec 2021 08:41:44 +0000 (02:41 -0600)] 
tests: Refactor building xorriso command for iso9660 tests

The iso9660 tests test creating isos with different combinations of
Joliet, Rock Ridge, and ISO 9660 conformance level. Refactor xorriso
argument generation for more readability and extensibility.

Signed-off-by: Glenn Washburn <development@efficientek.com>
Reviewed-by: Thomas Schmitt <scdbackup@gmx.net>
Reviewed-by: Daniel Kiper <daniel.kiper@oracle.com>
3 years agocryptodisk: Improve handling of partition name in cryptomount password prompt
Glenn Washburn [Thu, 9 Dec 2021 17:14:58 +0000 (11:14 -0600)] 
cryptodisk: Improve handling of partition name in cryptomount password prompt

Call grub_partition_get_name() unconditionally to initialize the part
variable. Then part will only be NULL when grub_partition_get_name() errors.
Note that when source->partition is NULL, then grub_partition_get_name()
returns an allocated empty string. So no comma or partition will be printed,
as desired.

Signed-off-by: Glenn Washburn <development@efficientek.com>
Reviewed-by: Daniel Kiper <daniel.kiper@oracle.com>
3 years agocryptodisk: Move global variables into grub_cryptomount_args struct
Glenn Washburn [Thu, 9 Dec 2021 17:14:57 +0000 (11:14 -0600)] 
cryptodisk: Move global variables into grub_cryptomount_args struct

Note that cargs.search_uuid does not need to be initialized in various parts
of the cryptomount argument parsing, just once when cargs is declared with
a struct initializer. The previous code used a global variable which would
retain the value across cryptomount invocations.

Signed-off-by: Glenn Washburn <development@efficientek.com>
Reviewed-by: Daniel Kiper <daniel.kiper@oracle.com>
3 years agocryptodisk: Refactor password input out of crypto dev modules into cryptodisk
Glenn Washburn [Thu, 9 Dec 2021 17:14:56 +0000 (11:14 -0600)] 
cryptodisk: Refactor password input out of crypto dev modules into cryptodisk

The crypto device modules should only be setting up the crypto devices and
not getting user input. This has the added benefit of simplifying the code
such that three essentially duplicate pieces of code are merged into one.

Add documentation of passphrase option for cryptomount as it is now usable.

Signed-off-by: Glenn Washburn <development@efficientek.com>
Reviewed-by: Daniel Kiper <daniel.kiper@oracle.com>
3 years agocryptodisk: Add infrastructure to pass data from cryptomount to cryptodisk modules
Glenn Washburn [Thu, 9 Dec 2021 17:14:55 +0000 (11:14 -0600)] 
cryptodisk: Add infrastructure to pass data from cryptomount to cryptodisk modules

Previously, the cryptomount arguments were passed by global variable and
function call argument, neither of which are ideal. This change passes data
via a grub_cryptomount_args struct, which can be added to over time as
opposed to continually adding arguments to the cryptodisk scan and
recover_key.

As an example, passing a password as a cryptomount argument is implemented.
However, the backends are not implemented, so testing this will return a not
implemented error.

Also, add comments to cryptomount argument parsing to make it more obvious
which argument states are being handled.

Signed-off-by: Glenn Washburn <development@efficientek.com>
Reviewed-by: Daniel Kiper <daniel.kiper@oracle.com>
3 years agocryptodisk: Improve cryptomount -u error message
Glenn Washburn [Thu, 9 Dec 2021 17:14:54 +0000 (11:14 -0600)] 
cryptodisk: Improve cryptomount -u error message

When a cryptmount is specified with a UUID, but no cryptodisk backends find
a disk with that UUID, return a more detailed message giving telling the
user that they might not have a needed cryptobackend module loaded.

Signed-off-by: Glenn Washburn <development@efficientek.com>
Reviewed-by: Daniel Kiper <daniel.kiper@oracle.com>
3 years agocryptodisk: Improve error messaging in cryptomount invocations
Glenn Washburn [Thu, 9 Dec 2021 17:14:53 +0000 (11:14 -0600)] 
cryptodisk: Improve error messaging in cryptomount invocations

Update such that "cryptomount -u UUID" will not print two error messages
when an invalid passphrase is given and the most relevant error message
will be displayed.

Signed-off-by: Glenn Washburn <development@efficientek.com>
Reviewed-by: Daniel Kiper <daniel.kiper@oracle.com>
3 years agocryptodisk: Return failure in cryptomount when no cryptodisk modules are loaded
Glenn Washburn [Thu, 9 Dec 2021 17:14:52 +0000 (11:14 -0600)] 
cryptodisk: Return failure in cryptomount when no cryptodisk modules are loaded

This displays an error notifying the user that they'll want to load
a backend module to make cryptomount useful.

Signed-off-by: Glenn Washburn <development@efficientek.com>
Reviewed-by: Daniel Kiper <daniel.kiper@oracle.com>
3 years agocryptodisk: Refactor to discard have_it global
Glenn Washburn [Thu, 9 Dec 2021 17:14:51 +0000 (11:14 -0600)] 
cryptodisk: Refactor to discard have_it global

The global "have_it" was never used by the crypto-backends, but was used to
determine if a crypto-backend successfully mounted a cryptodisk with a given
UUID. This is not needed however, because grub_device_iterate() will return
1 if and only if grub_cryptodisk_scan_device() returns 1. And
grub_cryptodisk_scan_device() will now only return 1 if a search_uuid has
been specified and a cryptodisk was successfully setup by a crypto-backend or
a cryptodisk of the requested UUID is already open.

To implement this grub_cryptodisk_scan_device_real() is modified to return
a cryptodisk or NULL on failure and having the appropriate grub_errno set to
indicated failure. Note that grub_cryptodisk_scan_device_real() will fail now
with a new errno GRUB_ERR_BAD_MODULE when none of the cryptodisk backend
modules succeed in identifying the source disk.

With this change grub_device_iterate() will return 1 when a crypto device is
successfully decrypted or when the source device has already been successfully
opened. Prior to this change, trying to mount an already successfully opened
device would trigger an error with the message "no such cryptodisk found",
which is at best misleading. The mount should silently succeed in this case,
which is what happens with this patch.

Signed-off-by: Glenn Washburn <development@efficientek.com>
Reviewed-by: Daniel Kiper <daniel.kiper@oracle.com>
3 years agoluks2: Add debug message to align with luks and geli modules
Glenn Washburn [Thu, 9 Dec 2021 17:14:50 +0000 (11:14 -0600)] 
luks2: Add debug message to align with luks and geli modules

Signed-off-by: Glenn Washburn <development@efficientek.com>
Reviewed-by: Daniel Kiper <daniel.kiper@oracle.com>
3 years agoconfigure: Fix misspelled variable BUILD_LDFAGS -> BUILD_LDFLAGS
Glenn Washburn [Wed, 8 Dec 2021 05:36:31 +0000 (23:36 -0600)] 
configure: Fix misspelled variable BUILD_LDFAGS -> BUILD_LDFLAGS

Signed-off-by: Glenn Washburn <development@efficientek.com>
Reviewed-by: Daniel Kiper <daniel.kiper@oracle.com>
3 years agogrub-mkconfig: Restore umask for the grub.cfg
Michael Chang [Fri, 3 Dec 2021 08:13:28 +0000 (16:13 +0800)] 
grub-mkconfig: Restore umask for the grub.cfg

The commit ab2e53c8a (grub-mkconfig: Honor a symlink when generating
configuration by grub-mkconfig) has inadvertently discarded umask for
creating grub.cfg in the process of running grub-mkconfig. The resulting
wrong permission (0644) would allow unprivileged users to read GRUB
configuration file content. This presents a low confidentiality risk
as grub.cfg may contain non-secured plain-text passwords.

This patch restores the missing umask and sets the creation file mode
to 0600 preventing unprivileged access.

Fixes: CVE-2021-3981
Signed-off-by: Michael Chang <mchang@suse.com>
Reviewed-by: Daniel Kiper <daniel.kiper@oracle.com>
3 years agoefi: Create the grub_efi_close_protocol() library function
Heinrich Schuchardt [Mon, 29 Nov 2021 15:00:29 +0000 (16:00 +0100)] 
efi: Create the grub_efi_close_protocol() library function

Create a library function for CloseProtocol() and use it for the SNP driver.

Signed-off-by: Heinrich Schuchardt <heinrich.schuchardt@canonical.com>
Reviewed-by: Daniel Kiper <daniel.kiper@oracle.com>
3 years agoefinet: Correct closing of SNP protocol
Heinrich Schuchardt [Mon, 29 Nov 2021 15:00:28 +0000 (16:00 +0100)] 
efinet: Correct closing of SNP protocol

In the context of the implementation of the EFI_LOAD_FILE2_PROTOCOL for
the initial ramdisk it was observed that opening the SNP protocol failed.
https://lists.gnu.org/archive/html/grub-devel/2021-10/msg00020.html
This is due to an incorrect call to CloseProtocol().

The first parameter of CloseProtocol() is the handle, not the interface.

We call OpenProtocol() with ControllerHandle == NULL. Hence we must also
call CloseProtcol() with ControllerHandel == NULL.

Each call of OpenProtocol() for the same network card handle is expected to
return the same interface pointer. If we want to close the protocol which
we opened non-exclusively when searching for a card, we have to do this
before opening the protocol exclusively.

As there is no guarantee that we successfully open the protocol add checks
in the transmit and receive functions.

Reported-by: Andreas Schwab <schwab@linux-m68k.org>
Signed-off-by: Heinrich Schuchardt <heinrich.schuchardt@canonical.com>
Reviewed-by: Daniel Kiper <daniel.kiper@oracle.com>
3 years agominilzo: Update to minilzo-2.10
Colin Watson [Sun, 28 Nov 2021 23:54:28 +0000 (23:54 +0000)] 
minilzo: Update to minilzo-2.10

minilzo fails to build on a number of Debian release architectures
(armel, mips64el, mipsel, ppc64el) with errors such as:

  ../../grub-core/lib/minilzo/minilzo.c: In function 'lzo_memops_get_le16':
  ../../grub-core/lib/minilzo/minilzo.c:3479:11: error: dereferencing type-punned pointer will break strict-aliasing rules [-Werror=strict-aliasing]
   3479 |         * (lzo_memops_TU2p) (lzo_memops_TU0p) (dd) = * (const lzo_memops_TU2p) (const lzo_memops_TU0p) (ss); \
        |           ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  ../../grub-core/lib/minilzo/minilzo.c:3530:5: note: in expansion of macro 'LZO_MEMOPS_COPY2'
   3530 |     LZO_MEMOPS_COPY2(&v, ss);
        |     ^~~~~~~~~~~~~~~~

The latest upstream version is 2.10, so updating to it seems like a good
idea on general principles, and it fixes builds on all the above
architectures.

The update procedure documented in the GRUB Developers Manual worked; I
just updated the version numbers to make it clear that it's been
executed recently.

Signed-off-by: Colin Watson <cjwatson@debian.org>
Reviewed-by: Daniel Kiper <daniel.kiper@oracle.com>
3 years agodocs: Add documentation on packages for building documentation
Glenn Washburn [Fri, 5 Nov 2021 19:12:58 +0000 (14:12 -0500)] 
docs: Add documentation on packages for building documentation

Signed-off-by: Glenn Washburn <development@efficientek.com>
Reviewed-by: Daniel Kiper <daniel.kiper@oracle.com>
3 years agodocs: Fix broken links in development docs
Glenn Washburn [Fri, 5 Nov 2021 19:12:57 +0000 (14:12 -0500)] 
docs: Fix broken links in development docs

Use the Git Book as a reference for documentation on Git as no other link
was provided. Other links were broken because they used @url instead of
@uref and needed a comma separator between link and link text.

Signed-off-by: Glenn Washburn <development@efficientek.com>
Reviewed-by: Daniel Kiper <daniel.kiper@oracle.com>
3 years agodocs: Update development docs to include information on running test suite
Glenn Washburn [Fri, 5 Nov 2021 19:12:56 +0000 (14:12 -0500)] 
docs: Update development docs to include information on running test suite

Add a section with minimal description on setting up and running the test
suite with a link to the INSTALL documentation which is a little more
detailed in terms of package requirements.

Signed-off-by: Glenn Washburn <development@efficientek.com>
Reviewed-by: Daniel Kiper <daniel.kiper@oracle.com>
3 years agodocs: Add sentence on where Debian packages can be searched for online
Glenn Washburn [Fri, 5 Nov 2021 19:12:55 +0000 (14:12 -0500)] 
docs: Add sentence on where Debian packages can be searched for online

Signed-off-by: Glenn Washburn <development@efficientek.com>
Reviewed-by: Daniel Kiper <daniel.kiper@oracle.com>
3 years agofs/btrfs: Make extent item iteration to handle gaps
Qu Wenruo [Thu, 28 Oct 2021 09:44:57 +0000 (17:44 +0800)] 
fs/btrfs: Make extent item iteration to handle gaps

The GRUB btrfs implementation can't handle two very basic btrfs
file layouts:

1. Mixed inline/regualr extents
   # mkfs.btrfs -f test.img
   # mount test.img /mnt/btrfs
   # xfs_io -f -c "pwrite 0 1k" -c "sync" -c "falloc 0 4k" \
       -c "pwrite 4k 4k" /mnt/btrfs/file
   # umount /mnt/btrfs
   # ./grub-fstest ./grub-fstest --debug=btrfs ~/test.img hex "/file"

   Such mixed inline/regular extents case is not recommended layout,
   but all existing tools and kernel can handle it without problem.

2. NO_HOLES feature
   # mkfs.btrfs -f test.img -O no_holes
   # mount test.img /mnt/btrfs
   # xfs_io -f -c "pwrite 0 4k" -c "pwrite 8k 4k" /mnt/btrfs/file
   # umount /mnt/btrfs
   # ./grub-fstest ./grub-fstest --debug=btrfs ~/test.img hex "/file"

   NO_HOLES feature is going to be the default mkfs feature in the incoming
   v5.15 release, and kernel has support for it since v4.0.

The way GRUB btrfs code iterates through file extents relies on no gap
between extents.

If any gap is hit, then GRUB btrfs will error out, without any proper
reason to help debug the bug.

This is a bad assumption, since a long long time ago btrfs has a new
feature called NO_HOLES to allow btrfs to skip the padding hole extent
to reduce metadata usage.

The NO_HOLES feature is already stable since kernel v4.0 and is going to
be the default mkfs feature in the incoming v5.15 btrfs-progs release.

When there is a extent gap, instead of error out, just try next item.

This is still not ideal, as kernel/progs/U-boot all do the iteration
item by item, not relying on the file offset continuity.

But it will be way more time consuming to correct the whole behavior than
starting from scratch to build a proper designed btrfs module for GRUB.

Signed-off-by: Qu Wenruo <wqu@suse.com>
Reviewed-by: Daniel Kiper <daniel.kiper@oracle.com>
3 years agodisk/ldm: Fix resource leak
Alec Brown [Wed, 10 Nov 2021 20:49:29 +0000 (15:49 -0500)] 
disk/ldm: Fix resource leak

Commit 23e39f50ca7a (disk/ldm: Make sure comp data is freed before exiting from
make_vg()) fixed several spots in make_vg() where comp data was leaking memory
when an error was being handled but missed one. To avoid leaking memory, comp
should be freed when an error is being handled after comp has been successfully
allocated memory in the for loop.

Fixes: 23e39f50ca7a (disk/ldm: Make sure comp data is freed before exiting from make_vg())
Fixes: CID 73804
Signed-off-by: Alec Brown <alec.r.brown@oracle.com>
Reviewed-by: Daniel Kiper <daniel.kiper@oracle.com>
3 years agocommands/probe: Fix resource leaks
Alec Brown [Wed, 10 Nov 2021 20:49:28 +0000 (15:49 -0500)] 
commands/probe: Fix resource leaks

Commit 1fc860bb76bb (commands/probe: Fix a resource leak when probing disks),
missed other cases where grub_device_close() should be called before a return
statement is called. Also found that grub_disk_close() wasn't being called when
an error is being returned. To avoid conflict with grub_errno, grub_error_push()
should be called before either grub_device_close() or grub_disk_close() is
called and grub_error_pop() should be called before grub_errno is returned.

Fixes: 1fc860bb76bb (commands/probe: Fix a resource leak when probing disks)
Fixes: CID 292443
Signed-off-by: Alec Brown <alec.r.brown@oracle.com>
Reviewed-by: Daniel Kiper <daniel.kiper@oracle.com>
3 years agotemplates: Filter out POSIX locale for translation
Michael Chang [Tue, 26 Oct 2021 07:11:00 +0000 (15:11 +0800)] 
templates: Filter out POSIX locale for translation

The POSIX locale is default or native operating system's locale
identical to the C locale, so no translation to human speaking languages
are provided. For this reason we should filter out LANG=POSIX as well as
LANG=C upon generating grub.cfg to avoid looking up for it's gettext's
message catalogs that will consequently result in an unpleasant message:

  error: file `/boot/grub/locale/POSIX.gmo' not found

Signed-off-by: Michael Chang <mchang@suse.com>
Reviewed-by: Daniel Kiper <daniel.kiper@oracle.com>
3 years agoio/gzio: Fix possible use of uninitialized variable in huft_build()
Darren Kenny [Tue, 26 Oct 2021 15:02:40 +0000 (15:02 +0000)] 
io/gzio: Fix possible use of uninitialized variable in huft_build()

In huft_build() it is possible to reach the for loop where "r" is being
assigned to "q[j]" without "r.v" ever being initialized.

Fixes: CID 314024
Signed-off-by: Darren Kenny <darren.kenny@oracle.com>
Reviewed-by: Daniel Kiper <daniel.kiper@oracle.com>
3 years agofs/zfs/zfs: Fix possible insecure use of chunk size in zap_leaf_array_get()
Darren Kenny [Tue, 26 Oct 2021 15:02:39 +0000 (15:02 +0000)] 
fs/zfs/zfs: Fix possible insecure use of chunk size in zap_leaf_array_get()

In zap_leaf_array_get() the chunk size passed in is considered tainted
by Coverity, and is being used before it is tested for validity. To fix
this the assignment of "la" is moved until after the test of the value
of "chunk".

Fixes: CID 314014
Signed-off-by: Darren Kenny <darren.kenny@oracle.com>
Reviewed-by: Daniel Kiper <daniel.kiper@oracle.com>
3 years agoutil/grub-mkfont: Fix memory leak in write_font_pf2()
Darren Kenny [Tue, 26 Oct 2021 15:02:38 +0000 (15:02 +0000)] 
util/grub-mkfont: Fix memory leak in write_font_pf2()

In the function write_font_pf2() memory is allocated for font_name to
construct a new name, but it is not released before returning from the
function, leaking the allocated memory.

Fixes: CID 314015
Signed-off-by: Darren Kenny <darren.kenny@oracle.com>
Reviewed-by: Daniel Kiper <daniel.kiper@oracle.com>
3 years agoutil/grub-fstest: Fix resource leaks in cmd_cmp()
Darren Kenny [Tue, 26 Oct 2021 15:02:37 +0000 (15:02 +0000)] 
util/grub-fstest: Fix resource leaks in cmd_cmp()

In the function cmd_cmp() within the while loop, srcnew and destnew are
being allocated but are never freed either before leaving scope or in
the recursive calls being made to cmd_cmp().

Fixes: CID 314032
Fixes: CID 314045
Signed-off-by: Darren Kenny <darren.kenny@oracle.com>
Reviewed-by: Daniel Kiper <daniel.kiper@oracle.com>
3 years agoutil/grub-mkrescue: Fix memory leak in write_part()
Darren Kenny [Tue, 26 Oct 2021 15:02:36 +0000 (15:02 +0000)] 
util/grub-mkrescue: Fix memory leak in write_part()

In the function write_part(), the value of inname is not used beyond
the grub_util_fopen() call, so it should be freed to avoid leakage.

Fixes: CID 314028
Signed-off-by: Darren Kenny <darren.kenny@oracle.com>
Reviewed-by: Daniel Kiper <daniel.kiper@oracle.com>
3 years agoutil/grub-install-common: Fix memory leak in copy_all()
Darren Kenny [Tue, 26 Oct 2021 15:02:35 +0000 (15:02 +0000)] 
util/grub-install-common: Fix memory leak in copy_all()

The copy_all() function skips a section of code using continue, but
fails to free the memory in srcf first, leaking it.

Fixes: CID 314026
Signed-off-by: Darren Kenny <darren.kenny@oracle.com>
Reviewed-by: Daniel Kiper <daniel.kiper@oracle.com>
3 years agokern/dl: Print module name on license check failure
Robbie Harwood [Mon, 25 Oct 2021 22:17:03 +0000 (18:17 -0400)] 
kern/dl: Print module name on license check failure

Prior to this change, the GRUB would only indicate that the check had
been failed, but not by what module. This made it difficult to track
down either the problem module, or debug the false positive further.

Before performing the license check, resolve the module name so that
it can be printed if the license check fails.

Signed-off-by: Robbie Harwood <rharwood@redhat.com>
Reviewed-by: Daniel Kiper <daniel.kiper@oracle.com>
3 years agokern/misc: Add debug log condition to log output
Glenn Washburn [Tue, 19 Oct 2021 06:47:03 +0000 (01:47 -0500)] 
kern/misc: Add debug log condition to log output

Adding the conditional to debug log messages allows the GRUB user to
construct the $debug variable without needing to consult the source to
find the conditional (especially useful for situations where the source
is not readily available).

Signed-off-by: Glenn Washburn <development@efficientek.com>
Reviewed-by: Daniel Kiper <daniel.kiper@oracle.com>
3 years agotests: In partmap_test, use ${parted} variable when checking for binary
Glenn Washburn [Thu, 14 Oct 2021 20:58:08 +0000 (15:58 -0500)] 
tests: In partmap_test, use ${parted} variable when checking for binary

Signed-off-by: Glenn Washburn <development@efficientek.com>
Reviewed-by: Daniel Kiper <daniel.kiper@oracle.com>
3 years agotests: Test aborts due to missing requirements should be marked as error instead...
Glenn Washburn [Thu, 14 Oct 2021 20:58:07 +0000 (15:58 -0500)] 
tests: Test aborts due to missing requirements should be marked as error instead of skipped

Many tests abort due to not being root or missing tools, for instance mkfs
commands for file system tests. The tests are exited with code 77, which
means they were skipped. A skipped test is a test that should not be run,
e.g. a test specific to ARM64 should not be run on an x86 build. These aborts
are actually a hard error, code 99. That means that the test could not be
completed, but not because what was supposed to be tested failed, e.g. in
these cases where a missing tool prevents the running of a test.

Signed-off-by: Glenn Washburn <development@efficientek.com>
Reviewed-by: Daniel Kiper <daniel.kiper@oracle.com>
3 years agotests: Boot PowerPC using PMU instead of CUDA for power management
Glenn Washburn [Tue, 12 Oct 2021 07:29:50 +0000 (18:29 +1100)] 
tests: Boot PowerPC using PMU instead of CUDA for power management

A recent refactoring of CUDA command code has exposed a bug in OpenBIOS [1]
which was causing system powerdown and system reset to fail, thus causing
the QEMU instance to hang. This in turn caused the grub-shell command to
timeout causing it to return an error code when the test actually completed
successfully.

Since it could be a while before the patch fixing this issue in OpenBIOS
filters down to the average distro, switch to PMU to allow powerdowns and
reboots to work as expected.

[1] https://gitlab.com/qemu-project/qemu/-/issues/624

Signed-off-by: Glenn Washburn <development@efficientek.com>
Signed-off-by: Daniel Axtens <dja@axtens.net>
Reviewed-by: Daniel Kiper <daniel.kiper@oracle.com>
3 years agoosdep/linux: Fix md array device enumeration
Kees Cook [Thu, 7 Oct 2021 23:33:16 +0000 (16:33 -0700)] 
osdep/linux: Fix md array device enumeration

GET_ARRAY_INFO's info.nr_disks does not map to GET_DISK_INFO's
disk.number, which is an internal kernel index. If an array has had drives
added, removed, etc., there may be gaps in GET_DISK_INFO's results. But
since the consumer of devicelist cannot tolerate gaps (it expects to walk
a NULL-terminated list of device name strings), the devicelist index (j)
must be tracked separately from the disk.number index (i).

As part of this, since GRUB wants to only examine active (i.e. present
and non-failed) disks, the count of remaining disks (remaining) must be
tracked separately from the devicelist index (j).

Additionally, drop a line with empty spaces only.

Fixes: 49de079bbe1c (... (grub_util_raid_getmembers): Handle "removed" disks)
Fixes: 2b00217369ac (... Added support for RAID and LVM)
Fixes: https://bugs.launchpad.net/ubuntu/+source/grub2/+bug/1912043
Fixes: https://savannah.gnu.org/bugs/index.php?59887
Signed-off-by: Kees Cook <kees@ubuntu.com>
Reviewed-by: Petr Vorel <pvorel@suse.cz>
Reviewed-by: Daniel Kiper <daniel.kiper@oracle.com>
3 years agodocs: Add fuller accounting of "make check" prerequisites
Glenn Washburn [Tue, 12 Oct 2021 22:23:02 +0000 (17:23 -0500)] 
docs: Add fuller accounting of "make check" prerequisites

Many of the prerequisites for exercising the full "make check" test suite
have not been documented. This adds them along with a note that some tests
require elevated privileges to run.

Add an incomplete list of cross compiling toolchain packages for Debian
and trusted sources for other distros.

Add statement at the start of the document to clarify that package names
are from Debian 11.

Signed-off-by: Glenn Washburn <development@efficientek.com>
Reviewed-by: Daniel Kiper <daniel.kiper@oracle.com>
3 years agotests: Do not delete filesystem images on error
Glenn Washburn [Fri, 17 Sep 2021 23:04:04 +0000 (23:04 +0000)] 
tests: Do not delete filesystem images on error

The filesystem images created for the filesystem test can be useful when
debugging why a filesystem test failed. So, keep them around and let the
user clean them up.

Signed-off-by: Glenn Washburn <development@efficientek.com>
Reviewed-by: Daniel Kiper <daniel.kiper@oracle.com>
3 years agotests: Output list of devices when partmap fails
Glenn Washburn [Fri, 17 Sep 2021 23:04:03 +0000 (23:04 +0000)] 
tests: Output list of devices when partmap fails

Signed-off-by: Glenn Washburn <development@efficientek.com>
Reviewed-by: Daniel Kiper <daniel.kiper@oracle.com>
3 years agotests: Skip HFS test only when mac_roman module is not loaded and not loadable
Glenn Washburn [Fri, 17 Sep 2021 23:04:01 +0000 (23:04 +0000)] 
tests: Skip HFS test only when mac_roman module is not loaded and not loadable

Allow the HFS tests to not be skipped if the mac_roman modules is loaded in
the kernel, but not accessible to modprobe.

Signed-off-by: Glenn Washburn <development@efficientek.com>
Reviewed-by: Daniel Kiper <daniel.kiper@oracle.com>
3 years agotests: Change FAT volume label to be with in the valid character range
Glenn Washburn [Fri, 17 Sep 2021 23:04:00 +0000 (23:04 +0000)] 
tests: Change FAT volume label to be with in the valid character range

The ";", semi-colon, character is not a valid character for a FAT filesystem
label. This test used to succeed because prior to v4.2 of dosfstools
mkfs.vfat did not enforce the character restrictions for volume labels. So,
change the volume label string to be valid but contain symbol characters to
test odd volume labels.

Signed-off-by: Glenn Washburn <development@efficientek.com>
Reviewed-by: Daniel Kiper <daniel.kiper@oracle.com>
3 years agotests: Only test MINIX3 volumes of 1 KiB block size
Glenn Washburn [Fri, 17 Sep 2021 23:03:59 +0000 (23:03 +0000)] 
tests: Only test MINIX3 volumes of 1 KiB block size

Apparently there used to be a -B option for mkfs.minix to create a volume
with a specified block size. This version is hard to come by and does not
appear to be available in Debian distributions. So, remove support for
testing a variety of blocks sizes for MINIX3. This allows the MINIX tests
to run because they were being skipped due to not finding a mkfs.minix with
the -B option.

Signed-off-by: Glenn Washburn <development@efficientek.com>
Reviewed-by: Daniel Kiper <daniel.kiper@oracle.com>
3 years agotests: mkfs.btrfs now supports only 4 KiB sector sizes and above
Glenn Washburn [Fri, 17 Sep 2021 23:03:58 +0000 (23:03 +0000)] 
tests: mkfs.btrfs now supports only 4 KiB sector sizes and above

Signed-off-by: Glenn Washburn <development@efficientek.com>
Reviewed-by: Daniel Kiper <daniel.kiper@oracle.com>
3 years agotests: Disable ReiserFS tests for old format because newer kernels do not support...
Glenn Washburn [Fri, 17 Sep 2021 23:03:57 +0000 (23:03 +0000)] 
tests: Disable ReiserFS tests for old format because newer kernels do not support them

Signed-off-by: Glenn Washburn <development@efficientek.com>
Reviewed-by: Daniel Kiper <daniel.kiper@oracle.com>
3 years agotests: mkreiserfs only supports 4096 block size
Glenn Washburn [Fri, 17 Sep 2021 23:03:56 +0000 (23:03 +0000)] 
tests: mkreiserfs only supports 4096 block size

Signed-off-by: Glenn Washburn <development@efficientek.com>
Reviewed-by: Daniel Kiper <daniel.kiper@oracle.com>
3 years agotests: Rename variable filtime -> filetime as its meant to be
Glenn Washburn [Fri, 17 Sep 2021 23:03:55 +0000 (23:03 +0000)] 
tests: Rename variable filtime -> filetime as its meant to be

Signed-off-by: Glenn Washburn <development@efficientek.com>
Reviewed-by: Daniel Kiper <daniel.kiper@oracle.com>
3 years agotests: Use @BUILD_SHEBANG@ autoconf var instead of literal shell
Glenn Washburn [Wed, 13 Oct 2021 00:40:03 +0000 (19:40 -0500)] 
tests: Use @BUILD_SHEBANG@ autoconf var instead of literal shell

This bring this test in line with the rest of the test scripts.

Signed-off-by: Glenn Washburn <development@efficientek.com>
Reviewed-by: Daniel Kiper <daniel.kiper@oracle.com>
3 years agotests: Exit with skipped exit code when test not performed
Glenn Washburn [Wed, 13 Oct 2021 00:40:02 +0000 (19:40 -0500)] 
tests: Exit with skipped exit code when test not performed

These tests were not performed and therefore did not pass, nor fail. This
fixes misleading test exit code where, for instance, the pseries_test will
pass on i386-pc, which is not a pseries architecture.

Signed-off-by: Glenn Washburn <development@efficientek.com>
Reviewed-by: Daniel Kiper <daniel.kiper@oracle.com>
3 years agotests: A failure of mktemp should cause the test script to exit with code 99
Glenn Washburn [Wed, 13 Oct 2021 00:40:01 +0000 (19:40 -0500)] 
tests: A failure of mktemp should cause the test script to exit with code 99

A test exiting with code 99 means that there was an error in the test itself
and not a failure in the thing being tested (also known as a hard error).

Signed-off-by: Glenn Washburn <development@efficientek.com>
Reviewed-by: Daniel Kiper <daniel.kiper@oracle.com>
3 years agotests: Make setup errors in grub-fs-tester hard errors
Glenn Washburn [Wed, 13 Oct 2021 00:40:00 +0000 (19:40 -0500)] 
tests: Make setup errors in grub-fs-tester hard errors

When a test program fails because it failed to setup the test properly, this
does not indicate a failure in what is attempting to be tested because the
test is never run. So exit with a hard error exit status to note this
difference. This will allow easier detection of tests that are not actually
being run and those that are really failing.

Signed-off-by: Glenn Washburn <development@efficientek.com>
Reviewed-by: Daniel Kiper <daniel.kiper@oracle.com>
3 years agotests: Do not occlude grub-shell return code
Glenn Washburn [Wed, 13 Oct 2021 00:39:59 +0000 (19:39 -0500)] 
tests: Do not occlude grub-shell return code

The script grub-shell does the bulk of the testing. If it returns an error
code, that means that the test failed and the test should immediately exit
with that error code. When grub-shell is used as a non-terminating command
in a pipeline, e.g. when data needs to be extracted from its output, its
error code will be occluded by the last command in the pipeline. Refactor
tests so that the shell will error with the exit code of grub-shell by
breaking up pipelines such that grub-shell is always the last command in
the pipeline that it is used in.

Signed-off-by: Glenn Washburn <development@efficientek.com>
Reviewed-by: Daniel Kiper <daniel.kiper@oracle.com>
3 years agotests: Do not occlude subshell error codes when used as input to the test command
Glenn Washburn [Wed, 13 Oct 2021 00:39:58 +0000 (19:39 -0500)] 
tests: Do not occlude subshell error codes when used as input to the test command

When using the output of a subshell as input, its error code is ignored in
the context of "set -e". Many test scripts use grub-shell in a subshell with
output used as an argument to the test command to test for expected output.
Refactor these tests so that the subshell output goes to a shell variable,
so that if the subshell errors the script will immediately exit with an
error code.

Signed-off-by: Glenn Washburn <development@efficientek.com>
Reviewed-by: Daniel Kiper <daniel.kiper@oracle.com>
3 years agotests: Add set -e to missing tests
Glenn Washburn [Wed, 13 Oct 2021 00:39:57 +0000 (19:39 -0500)] 
tests: Add set -e to missing tests

This helps to ensure that error codes do not get ignored.

Signed-off-by: Glenn Washburn <development@efficientek.com>
Reviewed-by: Daniel Kiper <daniel.kiper@oracle.com>
3 years agotests: When checking squashfs fstime, use superblock last modified time
Glenn Washburn [Wed, 13 Oct 2021 00:39:56 +0000 (19:39 -0500)] 
tests: When checking squashfs fstime, use superblock last modified time

Currently, the filesystem timestamp check in grub-fs-tester uses the
squashfs image file's last modified timestamp and checks to see if that
time stamp is within 3 seconds of the superblock timestamp as determined by
grub. The image file's timestamp could be more than 3 seconds off if
mksquashfs takes more than 3 seconds to generate the image, as is the case
on a virtual machine. Instead use squashfs tools to get the filesystem
timestamp directly.

Signed-off-by: Glenn Washburn <development@efficientek.com>
Reviewed-by: Daniel Kiper <daniel.kiper@oracle.com>
3 years agotests: Fix partmap_test for arm*-efi, disk numbering has changed
Glenn Washburn [Wed, 13 Oct 2021 00:39:55 +0000 (19:39 -0500)] 
tests: Fix partmap_test for arm*-efi, disk numbering has changed

Perhaps using a newer UEFI firmware is the reason for the created test disk
showing up as hd2 instead of hd3.

Signed-off-by: Glenn Washburn <development@efficientek.com>
Reviewed-by: Daniel Kiper <daniel.kiper@oracle.com>
3 years agodocs/grub-dev: Fix typos
Nikolai Kostrigin [Thu, 23 Sep 2021 15:06:03 +0000 (18:06 +0300)] 
docs/grub-dev: Fix typos

Signed-off-by: Nikolai Kostrigin <nickel@altlinux.org>
Reviewed-by: Daniel Kiper <daniel.kiper@oracle.com>
3 years agobuild: Fix build error with binutils 2.36
Michael Chang [Tue, 28 Sep 2021 05:50:47 +0000 (13:50 +0800)] 
build: Fix build error with binutils 2.36

The following procedure to build xen/pvgrub is broken.

  git clone https://git.savannah.gnu.org/git/grub.git
  cd grub
  ./bootstrap
  mkdir build-xen
  cd build-xen
  ../configure --with-platform=xen
  make

It fails with the message:

  /usr/lib64/gcc/x86_64-suse-linux/10/../../../../x86_64-suse-linux/bin/ld:
  section .note.gnu.property VMA [0000000000400158,0000000000400187]
  overlaps section .bss VMA [000000000000f000,000000000041e1af]

The most significant factor is that new assembler (GNU as) generates the
.note.gnu.property section as default. This note section overlaps with
.bss because it doesn't reposition with -Wl,-Ttext,0 with which the base
address of .text section is set, rather the address of .note.gnu.property
is calculated for some reason from 0x400000 where the ELF executable
defaults to start.

Using -Ttext-segment doesn't help either, though it is said to set the
address of the first byte of the text segment according to "man ld".
What it actually does is to override the default 0x400000, aka the image
base address, to something else. The entire process can be observed in
the default linker script used by gcc [1]. Therefore we can't expect it
to achieve the same thing as -Ttext given that the first segment where
.text resides is offset by SIZEOF_HEADERS plus some sections may be
preceding it within the first segment. The end result is .text always
has to start with non-zero address with -Wl,-Ttext-segment,0 if using
default linker script.

It is also worth mentioning that binutils upstream apparently doesn't
seem to consider this as a bug [2] and proposed to use -Wl,-Ttext-segment,0
which is not fruitful as what has been tested by Gentoo [3].

As long as GRUB didn't use ISA information encoded in .note.gnu.property,
we can safely drop it via -Wa,-mx86-used-note=no assembler option to
fix the linker error above.

This is considered a better approach than using custom linker script to
drop the .note.gnu.property section because object file manipulation can
also be hampered one way or the other in that linker script may not be
helpful. See also this commit removing the section in the process of objcopy.

  6643507ce build: Fix GRUB i386-pc build with Ubuntu gcc

[1] In /usr/lib64/ldscripts/elf_x86_64.x or use 'gcc -Wl,--verbose ...'
    PROVIDE (__executable_start = SEGMENT_START("text-segment", 0x400000));
    . = SEGMENT_START("text-segment", 0x400000) + SIZEOF_HEADERS;
[2] https://sourceware.org/bugzilla/show_bug.cgi?id=27377
[3] https://bugs.gentoo.org/787221

Signed-off-by: Michael Chang <mchang@suse.com>
Reviewed-by: Daniel Kiper <daniel.kiper@oracle.com>
3 years agodisk/diskfilter: Use nodes in logical volume's segment as member device
Michael Chang [Mon, 27 Sep 2021 09:39:56 +0000 (17:39 +0800)] 
disk/diskfilter: Use nodes in logical volume's segment as member device

Currently the grub_diskfilter_memberlist() function returns all physical
volumes added to a volume group to which a logical volume (LV) belongs.
However, this is suboptimal as it doesn't fit the intended behavior of
returning underlying devices that make up the LV. To give a clear
picture, the result should be identical to running commands below to
display the logical volumes with underlying physical volumes in use.

  localhost:~ # lvs -o lv_name,vg_name,devices /dev/system/root
    LV   VG     Devices
    root system /dev/vda2(512)

  localhost:~ # lvdisplay --maps /dev/system/root
    --- Logical volume ---
      ...
    --- Segments ---
    Logical extents 0 to 4604:
      Type                linear
      Physical volume     /dev/vda2
      Physical extents    512 to 5116

As shown above, we can know system-root LV uses only /dev/vda2 to
allocate it's extents, or we can say that /dev/vda2 is the member device
comprising the system-root LV.

It is important to be precise on the member devices, because that helps
to avoid pulling in excessive dependency. Let's use an example to
demonstrate why it is needed.

  localhost:~ # findmnt /
  TARGET SOURCE                  FSTYPE OPTIONS
  /      /dev/mapper/system-root ext4   rw,relatime

  localhost:~ # pvs
    PV               VG     Fmt  Attr PSize    PFree
    /dev/mapper/data system lvm2 a--  1020.00m    0
    /dev/vda2        system lvm2 a--    19.99g    0

  localhost:~ # cryptsetup status /dev/mapper/data
  /dev/mapper/data is active and is in use.
    type:    LUKS1
    cipher:  aes-xts-plain64
    keysize: 512 bits
    key location: dm-crypt
    device:  /dev/vdb
    sector size:  512
    offset:  4096 sectors
    size:    2093056 sectors
    mode:    read/write

  localhost:~ # vgs
    VG     #PV #LV #SN Attr   VSize  VFree
    system   2   3   0 wz--n- 20.98g    0

  localhost:~ # lvs -o lv_name,vg_name,devices
    LV   VG     Devices
    data system /dev/mapper/data(0)
    root system /dev/vda2(512)
    swap system /dev/vda2(0)

We can learn from above that /dev/mapper/data is an encrypted volume and
also gets assigned to volume group "system" as one of it's physical
volumes. And also it is not used by root device, /dev/mapper/system-root,
for allocating extents, so it shouldn't be taking part in the process of
setting up GRUB to access root device.

However, running grub-install reports error as volume group "system"
contains encrypted volume.

  error: attempt to install to encrypted disk without cryptodisk
  enabled. Set `GRUB_ENABLE_CRYPTODISK=y' in file `/etc/default/grub'.

Certainly we can enable GRUB_ENABLE_CRYPTODISK=y and move on, but that
is not always acceptable since the server may need to be booted unattended.
Additionally, typing passphrase for every system startup can be a big
hassle of which most users would like to avoid.

This patch solves the problem by returning exact physical volume, /dev/vda2,
rightly used by system-root from the example above, thus grub-install will
not error out because the excessive encrypted device to boot the root device
is not configured.

Signed-off-by: Michael Chang <mchang@suse.com>
Tested-by: Olav Reinert <seroton10@gmail.com>
Reviewed-by: Daniel Kiper <daniel.kiper@oracle.com>
3 years agofs/ext2: Fix handling of missing sparse extent leafs
Krzysztof Nowicki [Fri, 10 Sep 2021 07:54:31 +0000 (09:54 +0200)] 
fs/ext2: Fix handling of missing sparse extent leafs

When a file on ext4 is stored as sparse the data belonging to
zero-filled blocks is not written to storage and the extent map is
missing entries for these blocks. Such case can happen both for depth
0 extents (leafs) as well as higher-level tables.

Consider a scenario of a file which has a zero-filled beginning (e.g.
ISO image). In such case real data starts at block 8. If such a file is
stored using 2-level extent structure the extent list in the inode will
be depth 1 and will have an entry to a depth 0 (leaf) extent header for
blocks 8-n.

Unfortunately existing GRUB2 ext2 driver is only able to handle missing
entries in leaf extent tables, for which the grub_ext2_read_block()
function returns 0. In case the whole leaf extent list is missing for
a block the function fails with "invalid extent" error.

The fix for this problem relies on the grub_ext4_find_leaf() helper
function to distinguish two error cases: missing extent and error
walking through the extent tree. The existing error message is raised
only for the latter case, while for the missing leaf extent zero is
returned from grub_ext2_read_block() indicating a sparse block.

Signed-off-by: Krzysztof Nowicki <krzysztof.nowicki@nokia.com>
Reviewed-by: Daniel Kiper <daniel.kiper@oracle.com>
3 years agopowerpc: Drop Open Hack'Ware - remove GRUB_IEEE1275_FLAG_NO_ANSI
Daniel Axtens [Mon, 6 Sep 2021 05:46:15 +0000 (15:46 +1000)] 
powerpc: Drop Open Hack'Ware - remove GRUB_IEEE1275_FLAG_NO_ANSI

Open Hack'Ware was the only user.

Signed-off-by: Daniel Axtens <dja@axtens.net>
Reviewed-by: Daniel Kiper <daniel.kiper@oracle.com>
3 years agopowerpc: Drop Open Hack'Ware - remove GRUB_IEEE1275_FLAG_CANNOT_INTERPRET
Daniel Axtens [Mon, 6 Sep 2021 05:46:14 +0000 (15:46 +1000)] 
powerpc: Drop Open Hack'Ware - remove GRUB_IEEE1275_FLAG_CANNOT_INTERPRET

Open Hack'Ware was the only user.

Signed-off-by: Daniel Axtens <dja@axtens.net>
Reviewed-by: Daniel Kiper <daniel.kiper@oracle.com>
3 years agopowerpc: Drop Open Hack'Ware - remove GRUB_IEEE1275_FLAG_CANNOT_SET_COLORS
Daniel Axtens [Mon, 6 Sep 2021 05:46:13 +0000 (15:46 +1000)] 
powerpc: Drop Open Hack'Ware - remove GRUB_IEEE1275_FLAG_CANNOT_SET_COLORS

Open Hack'Ware was the only user.

Signed-off-by: Daniel Axtens <dja@axtens.net>
Reviewed-by: Daniel Kiper <daniel.kiper@oracle.com>
3 years agopowerpc: Drop Open Hack'Ware - remove GRUB_IEEE1275_FLAG_FORCE_CLAIM
Daniel Axtens [Mon, 6 Sep 2021 05:46:12 +0000 (15:46 +1000)] 
powerpc: Drop Open Hack'Ware - remove GRUB_IEEE1275_FLAG_FORCE_CLAIM

Open Hack'Ware was the only user. It added a lot of complexity.

Signed-off-by: Daniel Axtens <dja@axtens.net>
Reviewed-by: Daniel Kiper <daniel.kiper@oracle.com>
3 years agopowerpc: Drop Open Hack'Ware
Daniel Axtens [Mon, 6 Sep 2021 05:46:11 +0000 (15:46 +1000)] 
powerpc: Drop Open Hack'Ware

Open Hack'Ware was an alternative firmware of powerpc under QEMU.

The last commit to any Open Hack'Ware repo I can find is from 2014 [1].

Open Hack'Ware was used for the QEMU "prep" machine type, which was
deprecated in QEMU in commit 54c86f5a4844 (hw/ppc: deprecate the
machine type 'prep', replaced by '40p') in QEMU v3.1, and had reportedly
been broken for years before without anyone noticing. Support was removed
in February 2020 by commit b2ce76a0730e (hw/ppc/prep: Remove the
deprecated "prep" machine and the OpenHackware BIOS).

Open Hack'Ware's limitations require some messy code in GRUB. This
complexity is not worth carrying any more.

Remove detection of Open Hack'Ware. We will clean up the feature flags
in following commits.

[1]: https://github.com/qemu/openhackware and
     https://repo.or.cz/w/openhackware.git are QEMU submodules. They have
     only small changes on top of OHW v0.4.1, which was imported into
     QEMU SCM in 2010. I can't find anything resembling an official repo
     any more.

Signed-off-by: Daniel Axtens <dja@axtens.net>
Reviewed-by: Daniel Kiper <daniel.kiper@oracle.com>
3 years agodocs/grub: Improve search documentation, by adding short options and section on hints
Glenn Washburn [Sat, 18 Sep 2021 19:33:05 +0000 (19:33 +0000)] 
docs/grub: Improve search documentation, by adding short options and section on hints

Signed-off-by: Glenn Washburn <development@efficientek.com>
Reviewed-by: Daniel Kiper <daniel.kiper@oracle.com>
3 years agofs/udf: Fix regression which is preventing symlink access
Glenn Washburn [Fri, 17 Sep 2021 20:28:05 +0000 (20:28 +0000)] 
fs/udf: Fix regression which is preventing symlink access

This code was broken by commit 3f05d693 (malloc: Use overflow checking
primitives where we do complex allocations), which added overflow
checking in many areas. The problem here is that the changes update the
local variable sz, which was already in use and which was not updated
before the change. So the code using sz was getting a different value of
than it would have previously for the same UDF image. This causes the
logic getting the destination of the symlink to not realize that its
gotten the full destination, but keeps trying to read past the end of
the destination. The bytes after the end are generally NULL padding
bytes, but that's not a valid component type (ECMA-167 14.16.1.1). So
grub_udf_read_symlink() branches to error logic, returning NULL, instead
of the symlink destination path.

The result of this bug is that the UDF filesystem tests were failing in
the symlink test with the grub-fstest error message:

  grub-fstest: error: cannot open `(loop0)/sym': invalid symlink.

This change stores the result of doubling sz in another local variable s,
so as not to modify sz. Also remove unnecessary grub_add(), which increased
the output by 1, presumably to account for a NULL byte. This isn't needed
because an output buffer of size twice sz is already guaranteed to be more
than enough to contain the path components converted to UTF-8. The value of
sz contains at least 4 bytes for the path component header (ECMA-167 14.16.1),
which means that 2 * 4 bytes are allocated but will not be used for UTF-8
characters, so the NULL byte is accounted for.

Signed-off-by: Glenn Washburn <development@efficientek.com>
Reviewed-by: Daniel Kiper <daniel.kiper@oracle.com>
3 years agotemplates: Add GRUB_CMDLINE_LINUX_RECOVERY
Chris Vogel [Wed, 15 Sep 2021 15:42:29 +0000 (17:42 +0200)] 
templates: Add GRUB_CMDLINE_LINUX_RECOVERY

When generating grub.cfg using grub-mkconfig and the scripts 10_linux and
20_linux_xen there is no way to add kernel command line parameters _only_ to
the recovery entries generated.

This is needed to e.g. start a debug shell in installations using systemd
using the kernel command line parameter "systemd.debug-shell" or to recover
in a system with encrypted root in situations where the decryption of the
root filesystem per crypttab in the intiramfs image is broken and the recovery
entry should contain information how to decrypt the rootfs (cryptopts=).

This patch does not change the default behaviour of the GRUB if
GRUB_CMDLINE_LINUX_RECOVERY is not set.

If GRUB_CMDLINE_LINUX_RECOVERY is set and the generated recovery entry should
include the kernel parameter "single" the parameter must be explicitly included
in GRUB_CMDLINE_LINUX_RECOVERY.

As far as I know all credits for the idea and the initial implementation go to
Kyle Ranking of Purism.

Signed-off-by: Kyle Rankin <kyle.rankin@puri.sm>
Signed-off-by: Chris Vogel <chris@z9.de>
Reviewed-by: Daniel Kiper <daniel.kiper@oracle.com>
3 years agoemu: Fix executable stack marking
Michael Chang [Mon, 2 Aug 2021 09:40:57 +0000 (17:40 +0800)] 
emu: Fix executable stack marking

The gcc by default assumes executable stack is required if the source
object file doesn't have .note.GNU-stack section in place. If any of the
source objects doesn't incorporate the GNU-stack note, the resulting
program will have executable stack flag set in PT_GNU_STACK program
header to instruct program loader or kernel to set up the executable
stack when program loads to memory.

Usually the .note.GNU-stack section will be generated by gcc
automatically if it finds that executable stack is not required. However
it doesn't take care of generating .note.GNU-stack section for those
object files built from assembler sources. This leads to unnecessary
risk of security of exploiting the executable stack because those
assembler sources don't actually require stack to be executable to work.

The grub-emu and grub-emu-lite are found to flag stack as executable
revealed by execstack tool.

 $ mkdir -p build-emu && cd build-emu
 $ ../configure --with-platform=emu && make
 $ execstack -q grub-core/grub-emu grub-core/grub-emu-lite
 X grub-core/grub-emu
 X grub-core/grub-emu-lite

This patch will add the missing GNU-stack note to the assembler source
used by both utilities, therefore the result doesn't count on gcc
default behavior and the executable stack is disabled.

 $ execstack -q grub-core/grub-emu grub-core/grub-emu-lite
 - grub-core/grub-emu
 - grub-core/grub-emu-lite

Signed-off-by: Michael Chang <mchang@suse.com>
Reviewed-by: Daniel Kiper <daniel.kiper@oracle.com>
3 years agotests: Keep grub-fs-tester ziso9660 from failing for wrong reasons
Thomas Schmitt [Wed, 8 Sep 2021 21:34:52 +0000 (23:34 +0200)] 
tests: Keep grub-fs-tester ziso9660 from failing for wrong reasons

The test for the ability to decompress zisofs encoded files is supposed
to fail due to the lack of this ability in GRUB. But it fails early with
  xorriso : FAILURE : -volid: Text too long (1650 > 32)
because "ziso9660" is not in the list of filesystems which accept at most
32 bytes in their FSLABEL. If this is fixed, the test returns false
success because the xorriso run does not produce any zisofs compressed
files. The problem is in the sequence of native xorriso commands used.
The command -set_filter_r applies only to the files which are already
inserted into the emerging ISO filesystem. In the current sequence no
files have been inserted yet by command -add when the last of two
-set_filter_r commands is executed. After this is corrected, xorriso
refuses to work because the global settings of command -zisofs can be
made only before command -set_filter_r has attached zisofs filters to
the data files in the emerging ISO. Further: A bug in xorriso causes
a false warning about FSLABEL being too long for Joliet. Shortcomings
of Joliet cause warnings about symbolic links. Such warnings might
distract from the actual reason why the test is expected to fail.

So, add "ziso9660" to the 32-byte FSLABEL list.

Fix the xorriso run to produce compressed files which for now cause
righteous failure of the test. Do this by removing a surplus group of
-set_filter_r and -zisofs commands, by moving the other such group
behind -add, and by swapping -set_filter_r and -zisofs.

Remove the -as mkisofs options which produce a Joliet filesystem tree.

Signed-off-by: Thomas Schmitt <scdbackup@gmx.net>
Reviewed-by: Daniel Kiper <daniel.kiper@oracle.com>
3 years agocommands/read: Add silent mode to read command to suppress input echo
Glenn Washburn [Sun, 21 Mar 2021 20:22:19 +0000 (15:22 -0500)] 
commands/read: Add silent mode to read command to suppress input echo

This conforms to the behavior of the -s option of the Bash read command.

docs/grub: Document the -s option for the read command.

Signed-off-by: Glenn Washburn <development@efficientek.com>
Reviewed-by: Daniel Kiper <daniel.kiper@oracle.com>
3 years agokern/fs: Allow number of blocks in block list to be optional, defaulting length to...
Glenn Washburn [Sun, 21 Mar 2021 18:09:10 +0000 (13:09 -0500)] 
kern/fs: Allow number of blocks in block list to be optional, defaulting length to device length

This is primarily useful to do something like "loopback newdev (dev)8+" to
create a device that skips the first 4 KiB, which may contain a container
header, e.g. a non-standard RAID1 header, that GRUB does not recognize. This
would allow that container data to be potentially accessed up to the end of
container, which may be necessary for some layouts that store data at the
end. There is currently not a good way to programmatically get the number
of sectors on a disk to set the appropriate length of the blocklist.

Signed-off-by: Glenn Washburn <development@efficientek.com>
Reviewed-by: Daniel Kiper <daniel.kiper@oracle.com>
3 years agoautogen.sh: Detect python
Petr Vorel [Mon, 30 Aug 2021 09:53:17 +0000 (11:53 +0200)] 
autogen.sh: Detect python

It helps to avoid an error on distros which has only python3 binary:
  ./autogen.sh: line 20: python: command not found

Use python3 as the default as python2 is EOL since Jan 2020. However,
check also for python which is on most distros, if not all, python2
because code still works on python2.

Although it should not be needed keep the possibility to define PYTHON
variable.

For detection use "command -v" which is POSIX and supported on all
common shells (bash, zsh, dash, busybox sh, mksh) instead requiring
"which" as an extra dependency (usable on containers).

Update the INSTALL file too.

Signed-off-by: Petr Vorel <pvorel@suse.cz>
Reviewed-by: Daniel Kiper <daniel.kiper@oracle.com>
3 years agobootstrap: Require GNU patch
Petr Vorel [Mon, 30 Aug 2021 09:53:16 +0000 (11:53 +0200)] 
bootstrap: Require GNU patch

The bootstrap.conf uses patch, let's require it.

Better than multiple messages:
  ./bootstrap.conf: line 84: patch: command not found

Mention it also in the INSTALL file.

Signed-off-by: Petr Vorel <pvorel@suse.cz>
Reviewed-by: Daniel Kiper <daniel.kiper@oracle.com>
3 years agotests: Let xorriso fixely assume UTF-8 as local character set
Thomas Schmitt [Fri, 27 Aug 2021 21:05:06 +0000 (23:05 +0200)] 
tests: Let xorriso fixely assume UTF-8 as local character set

The iso9660_test fails if the effective locale is not UTF-8. This happens
because xorriso needs to convert file names and FSLABEL to UCS-2 when
preparing a Joliet tree. The grub-fs-tester obviously intends to use UTF-8
as character set, but xorriso assumes by default the result of nl_langinfo(3)
with item CODESET. So, override the result of nl_langinfo(CODESET) by options
of xorriso -as mkisofs.

Signed-off-by: Thomas Schmitt <scdbackup@gmx.net>
Reviewed-by: Daniel Kiper <daniel.kiper@oracle.com>
3 years agoconfigure: Check for -falign-jumps=1 beside -falign-loops=1
Fangrui Song via Grub-devel [Thu, 26 Aug 2021 16:02:32 +0000 (09:02 -0700)] 
configure: Check for -falign-jumps=1 beside -falign-loops=1

The Clang does not support -falign-jumps and only recently gained support
for -falign-loops. The -falign-jumps=1 should be tested beside
-fliang-loops=1 to avoid passing unrecognized options to the Clang:

  clang-14: error: optimization flag '-falign-jumps=1' is not supported [-Werror,-Wignored-optimization-argument]

The -falign-functions=1 is supported by GCC 5.1.0/Clang 3.8.0. So, just
add the option unconditionally.

Signed-off-by: Fangrui Song <maskray@google.com>
Acked-by: Paul Menzel <pmenzel@molgen.mpg.de>
Reviewed-by: Daniel Kiper <daniel.kiper@oracle.com>
3 years agoconfigure: Remove obsoleted -malign-{jumps, loops, functions}
Fangrui Song via Grub-devel [Thu, 26 Aug 2021 16:02:31 +0000 (09:02 -0700)] 
configure: Remove obsoleted -malign-{jumps, loops, functions}

The GCC warns "cc1: warning: ‘-malign-loops’ is obsolete, use ‘-falign-loops’".
The Clang silently ignores -malign-{jumps,loops,functions}.

The preferred -falign-* forms have been supported since GCC 3.2. So, just
remove -malign-{jumps,loops,functions}.

Signed-off-by: Fangrui Song <maskray@google.com>
Acked-by: Paul Menzel <pmenzel@molgen.mpg.de>
Reviewed-by: Daniel Kiper <daniel.kiper@oracle.com>
3 years agofs/xfs: Fix unreadable filesystem with v4 superblock
Erwan Velu [Wed, 25 Aug 2021 13:31:52 +0000 (15:31 +0200)] 
fs/xfs: Fix unreadable filesystem with v4 superblock

The commit 8b1e5d193 (fs/xfs: Add bigtime incompat feature support)
introduced the bigtime support by adding some features in v3 inodes.
This change extended grub_xfs_inode struct by 76 bytes but also changed
the computation of XFS_V2_INODE_SIZE and XFS_V3_INODE_SIZE. Prior this
commit, XFS_V2_INODE_SIZE was 100 bytes. After the commit it's 84 bytes
XFS_V2_INODE_SIZE becomes 16 bytes too small.

As a result, the data structures aren't properly aligned and the GRUB
generates "attempt to read or write outside of partition" errors when
trying to read the XFS filesystem:

                             GNU GRUB  version 2.11
....
grub> set debug=efi,gpt,xfs
grub> insmod part_gpt
grub> ls (hd0,gpt1)/
partmap/gpt.c:93: Read a valid GPT header
partmap/gpt.c:115: GPT entry 0: start=4096, length=1953125
fs/xfs.c:931: Reading sb
fs/xfs.c:270: Validating superblock
fs/xfs.c:295: XFS v4 superblock detected
fs/xfs.c:962: Reading root ino 128
fs/xfs.c:515: Reading inode (128) - 64, 0
fs/xfs.c:515: Reading inode (739521961424144223) - 344365866970255880, 3840
error: attempt to read or write outside of partition.

This commit change the XFS_V2_INODE_SIZE computation by subtracting 76
bytes instead of 92 bytes from the actual size of grub_xfs_inode struct.
This 76 bytes value comes from added members:
20 grub_uint8_t   unused5
 1 grub_uint64_t  flags2
        48 grub_uint8_t   unused6

This patch explicitly splits the v2 and v3 parts of the structure.
The unused4 is still ending of the v2 structures and the v3 starts
at unused5. Thanks to this we will avoid future corruptions of v2
or v3 inodes.

The XFS_V2_INODE_SIZE is returning to its expected size and the
filesystem is back to a readable state:

                      GNU GRUB  version 2.11
....
grub> set debug=efi,gpt,xfs
grub> insmod part_gpt
grub> ls (hd0,gpt1)/
partmap/gpt.c:93: Read a valid GPT header
partmap/gpt.c:115: GPT entry 0: start=4096, length=1953125
fs/xfs.c:931: Reading sb
fs/xfs.c:270: Validating superblock
fs/xfs.c:295: XFS v4 superblock detected
fs/xfs.c:962: Reading root ino 128
fs/xfs.c:515: Reading inode (128) - 64, 0
fs/xfs.c:515: Reading inode (128) - 64, 0
fs/xfs.c:931: Reading sb
fs/xfs.c:270: Validating superblock
fs/xfs.c:295: XFS v4 superblock detected
fs/xfs.c:962: Reading root ino 128
fs/xfs.c:515: Reading inode (128) - 64, 0
fs/xfs.c:515: Reading inode (128) - 64, 0
fs/xfs.c:515: Reading inode (128) - 64, 0
fs/xfs.c:515: Reading inode (131) - 64, 768
efi/ fs/xfs.c:515: Reading inode (3145856) - 1464904, 0
grub2/ fs/xfs.c:515: Reading inode (132) - 64, 1024
grub/ fs/xfs.c:515: Reading inode (139) - 64, 2816
grub>

Fixes: 8b1e5d193 (fs/xfs: Add bigtime incompat feature support)
Signed-off-by: Erwan Velu <e.velu@criteo.com>
Tested-by: Carlos Maiolino <cmaiolino@redhat.com>
Reviewed-by: Daniel Kiper <daniel.kiper@oracle.com>
3 years agolibgcrypt: Avoid -Wempty-body in rijndael do_setkey()
Heinrich Schuchardt [Fri, 13 Aug 2021 12:49:10 +0000 (14:49 +0200)] 
libgcrypt: Avoid -Wempty-body in rijndael do_setkey()

Avoid a warning

  lib/libgcrypt-grub/cipher/rijndael.c:229:9:
  warning: suggest braces around empty body in an ‘if’ statement [-Wempty-body]
    229 |         ;
        |         ^

Signed-off-by: Heinrich Schuchardt <heinrich.schuchardt@canonical.com>
Reviewed-by: Daniel Kiper <daniel.kiper@oracle.com>
3 years agolibgcrypt: Avoid -Wsign-compare in rijndael do_setkey()
Heinrich Schuchardt [Fri, 13 Aug 2021 14:15:33 +0000 (16:15 +0200)] 
libgcrypt: Avoid -Wsign-compare in rijndael do_setkey()

Avoid a warning

  lib/libgcrypt-grub/cipher/rijndael.c:352:21: warning:
  comparison of integer expressions of different signedness:
  ‘int’ and ‘unsigned int’ [-Wsign-compare]
    352 |       for (i = 0; i < keylen; i++)
        |

Signed-off-by: Heinrich Schuchardt <heinrich.schuchardt@canonical.com>
Reviewed-by: Daniel Kiper <daniel.kiper@oracle.com>
3 years agocommands/setpci: Honor write mask argument
Wouter van Kesteren [Thu, 12 Aug 2021 14:56:13 +0000 (16:56 +0200)] 
commands/setpci: Honor write mask argument

In the case that one passes a write mask with ":" the write_mask is
obtained from grub_strtoul() and then promptly overwritten by 0xffffffff
three lines later.

This appears to have been so since the initial version of setpci in 2009.
I'm surprised no one else has hit this issue in the past 12 years...

Signed-off-by: Wouter van Kesteren <woutershep@gmail.com>
Reviewed-by: Daniel Kiper <daniel.kiper@oracle.com>
4 years agoosdep/linux/hostdisk: Use stat() instead of udevadm for partition lookup
Jeff Mahoney [Thu, 15 Jul 2021 15:35:28 +0000 (17:35 +0200)] 
osdep/linux/hostdisk: Use stat() instead of udevadm for partition lookup

The sysfs_partition_path() calls udevadm to resolve the sysfs path for
a block device. That can be accomplished by stating the device node
and using the major/minor to follow the symlinks in /sys/dev/block/.

This cuts the execution time of grub-mkconfig to somewhere near 55% on
system without LVM (which uses libdevmapper instead sysfs_partition_path()).

Remove udevadm call as it does not help us more than calling stat() directly.

Signed-off-by: Jeff Mahoney <jeffm@suse.com>
Signed-off-by: Petr Vorel <pvorel@suse.cz>
Reviewed-by: Daniel Kiper <daniel.kiper@oracle.com>
4 years agoosdep: Introduce include/grub/osdep/major.h and use it
Petr Vorel [Thu, 15 Jul 2021 15:35:27 +0000 (17:35 +0200)] 
osdep: Introduce include/grub/osdep/major.h and use it

... to factor out fix for glibc 2.25 introduced in 7a5b301e3 (build: Use
AC_HEADER_MAJOR to find device macros).

Note: Once glibc 2.25 is old enough and this fix is not needed also
AC_HEADER_MAJOR in configure.ac should be removed.

Signed-off-by: Petr Vorel <pvorel@suse.cz>
Reviewed-by: Daniel Kiper <daniel.kiper@oracle.com>
4 years agoieee1275: Drop HEAP_MAX_ADDR and HEAP_MIN_SIZE constants
Daniel Axtens [Tue, 20 Jul 2021 21:14:46 +0000 (17:14 -0400)] 
ieee1275: Drop HEAP_MAX_ADDR and HEAP_MIN_SIZE constants

The HEAP_MAX_ADDR is confusing. Currently it is set to 32MB, except on
ieee1275 on x86, where it is 64MB.

There is a comment which purports to explain it:

  /* If possible, we will avoid claiming heap above this address, because it
     seems to cause relocation problems with OSes that link at 4 MiB */

This doesn't make a lot of sense when the constants are well above 4MB
already. It was not always this way. Prior to commit 7b5d0fe4440c
(Increase heap limit) in 2010, HEAP_MAX_SIZE and HEAP_MAX_ADDR were
indeed 4MB. However, when the constants were increased the comment was
left unchanged.

It's been over a decade. It doesn't seem like we have problems with
claims over 4MB on powerpc or x86 ieee1275. The SPARC does things
completely differently and never used the constant.

Drop the constant and the check.

The only use of HEAP_MIN_SIZE was to potentially override the
HEAP_MAX_ADDR check. It is now unused. Remove it too.

Signed-off-by: Daniel Axtens <dja@axtens.net>
Signed-off-by: Stefan Berger <stefanb@linux.ibm.com>
Tested-by: Stefan Berger <stefanb@linux.ibm.com>
Reviewed-by: Daniel Kiper <daniel.kiper@oracle.com>
4 years agotests/ahci: Change "ide-drive" deprecated QEMU device name to "ide-hd"
Marius Bakke [Sun, 13 Jun 2021 13:11:51 +0000 (15:11 +0200)] 
tests/ahci: Change "ide-drive" deprecated QEMU device name to "ide-hd"

The "ide-drive" device was removed in QEMU 6.0. The "ide-hd" has been
available for more than 10 years now in QEMU. Thus there shouldn't be
any need for backwards compatible names.

Signed-off-by: Marius Bakke <marius@gnu.org>
Reviewed-by: Daniel Kiper <daniel.kiper@oracle.com>