grub: only enable nvme if needed on a board
remove nvme support from the "default" grub tree now there are three trees: * default: no xhci or nvme patches * nvme: contains nvme support * xhci: contains xhci and nvme support this is in case a bug like lbmk issue #216 ever occurs again, as referenced before during lbmk audit 5 there is no indication that the nvme patch causes any issues, but after previous experience i want to be sure Signed-off-by: Leah Rowe <leah@libreboot.org>audit2-merge1
parent
dc9f5a6e48
commit
581d4a66ac
|
@ -3,3 +3,4 @@ xarch="i386-elf"
|
||||||
payload_seabios="y"
|
payload_seabios="y"
|
||||||
payload_memtest="y"
|
payload_memtest="y"
|
||||||
grub_timeout=10
|
grub_timeout=10
|
||||||
|
grubtree="nvme"
|
||||||
|
|
|
@ -4,3 +4,4 @@ payload_seabios="y"
|
||||||
payload_memtest="y"
|
payload_memtest="y"
|
||||||
grub_timeout=10
|
grub_timeout=10
|
||||||
release="n"
|
release="n"
|
||||||
|
grubtree="nvme"
|
||||||
|
|
|
@ -3,3 +3,4 @@ xarch="i386-elf"
|
||||||
payload_seabios="y"
|
payload_seabios="y"
|
||||||
payload_memtest="y"
|
payload_memtest="y"
|
||||||
grub_timeout=10
|
grub_timeout=10
|
||||||
|
grubtree="nvme"
|
||||||
|
|
|
@ -7,3 +7,4 @@ payload_memtest="y"
|
||||||
xlang="c"
|
xlang="c"
|
||||||
grub_timout=10
|
grub_timout=10
|
||||||
grub_scan_disk="nvme ahci"
|
grub_scan_disk="nvme ahci"
|
||||||
|
grubtree="nvme"
|
||||||
|
|
|
@ -6,3 +6,4 @@ payload_memtest="y"
|
||||||
xlang="c"
|
xlang="c"
|
||||||
grub_timeout=10
|
grub_timeout=10
|
||||||
grub_scan_disk="nvme ahci"
|
grub_scan_disk="nvme ahci"
|
||||||
|
grubtree="nvme"
|
||||||
|
|
|
@ -5,3 +5,4 @@ payload_seabios_withgrub="y"
|
||||||
payload_memtest="y"
|
payload_memtest="y"
|
||||||
xlang="c"
|
xlang="c"
|
||||||
grub_scan_disk="nvme ahci"
|
grub_scan_disk="nvme ahci"
|
||||||
|
grubtree="nvme"
|
||||||
|
|
|
@ -7,3 +7,4 @@ payload_memtest="y"
|
||||||
xlang="c"
|
xlang="c"
|
||||||
grub_timeout=10
|
grub_timeout=10
|
||||||
grub_scan_disk="nvme ahci"
|
grub_scan_disk="nvme ahci"
|
||||||
|
grubtree="nvme"
|
||||||
|
|
|
@ -6,3 +6,4 @@ payload_memtest="y"
|
||||||
xlang="c"
|
xlang="c"
|
||||||
grub_timeout=10
|
grub_timeout=10
|
||||||
grub_scan_disk="nvme ahci"
|
grub_scan_disk="nvme ahci"
|
||||||
|
grubtree="nvme"
|
||||||
|
|
|
@ -6,3 +6,4 @@ payload_memtest="y"
|
||||||
xlang="c"
|
xlang="c"
|
||||||
grub_timeout=10
|
grub_timeout=10
|
||||||
grub_scan_disk="nvme ahci"
|
grub_scan_disk="nvme ahci"
|
||||||
|
grubtree="nvme"
|
||||||
|
|
|
@ -7,3 +7,4 @@ payload_memtest="y"
|
||||||
xlang="c"
|
xlang="c"
|
||||||
grub_timeout=10
|
grub_timeout=10
|
||||||
grub_scan_disk="nvme ahci"
|
grub_scan_disk="nvme ahci"
|
||||||
|
grubtree="nvme"
|
||||||
|
|
|
@ -7,3 +7,4 @@ payload_memtest="y"
|
||||||
xlang="c"
|
xlang="c"
|
||||||
grub_timeout=10
|
grub_timeout=10
|
||||||
grub_scan_disk="nvme ahci"
|
grub_scan_disk="nvme ahci"
|
||||||
|
grubtree="nvme"
|
||||||
|
|
|
@ -103,7 +103,6 @@ multiboot2 \
|
||||||
nativedisk \
|
nativedisk \
|
||||||
normal \
|
normal \
|
||||||
ntfs \
|
ntfs \
|
||||||
nvme \
|
|
||||||
ohci \
|
ohci \
|
||||||
part_bsd \
|
part_bsd \
|
||||||
part_dfly \
|
part_dfly \
|
||||||
|
|
|
@ -0,0 +1,156 @@
|
||||||
|
# Install modules (installed, but not automatically loaded)
|
||||||
|
grub_install_modules=" \
|
||||||
|
hexdump \
|
||||||
|
newc \
|
||||||
|
odc \
|
||||||
|
usbserial_common \
|
||||||
|
usbserial_ftdi \
|
||||||
|
usbserial_pl2303 \
|
||||||
|
usbserial_usbdebug \
|
||||||
|
video_colors \
|
||||||
|
"
|
||||||
|
# Modules (and always loaded)
|
||||||
|
grub_modules=" \
|
||||||
|
acpi \
|
||||||
|
ahci \
|
||||||
|
at_keyboard \
|
||||||
|
all_video \
|
||||||
|
ata \
|
||||||
|
bitmap \
|
||||||
|
bitmap_scale \
|
||||||
|
boot \
|
||||||
|
bsd \
|
||||||
|
btrfs \
|
||||||
|
cat \
|
||||||
|
cbfs \
|
||||||
|
cbls \
|
||||||
|
cbmemc \
|
||||||
|
cbtime \
|
||||||
|
chain \
|
||||||
|
configfile \
|
||||||
|
cpio \
|
||||||
|
cpio_be \
|
||||||
|
crc64 \
|
||||||
|
crypto \
|
||||||
|
cryptodisk \
|
||||||
|
diskfilter \
|
||||||
|
echo \
|
||||||
|
ehci \
|
||||||
|
eval \
|
||||||
|
exfat \
|
||||||
|
elf \
|
||||||
|
ext2 \
|
||||||
|
fat \
|
||||||
|
f2fs \
|
||||||
|
gcry_arcfour \
|
||||||
|
gcry_blowfish \
|
||||||
|
gcry_camellia \
|
||||||
|
gcry_cast5 \
|
||||||
|
gcry_crc \
|
||||||
|
gcry_des \
|
||||||
|
gcry_dsa \
|
||||||
|
gcry_idea \
|
||||||
|
gcry_md4 \
|
||||||
|
gcry_md5 \
|
||||||
|
gcry_rfc2268 \
|
||||||
|
gcry_rijndael \
|
||||||
|
gcry_rmd160 \
|
||||||
|
gcry_rsa \
|
||||||
|
gcry_seed \
|
||||||
|
gcry_serpent \
|
||||||
|
gcry_sha1 \
|
||||||
|
gcry_sha256 \
|
||||||
|
gcry_sha512 \
|
||||||
|
gcry_tiger \
|
||||||
|
gcry_twofish \
|
||||||
|
gcry_whirlpool \
|
||||||
|
geli \
|
||||||
|
gfxmenu \
|
||||||
|
gfxterm_background \
|
||||||
|
gfxterm_menu \
|
||||||
|
gzio \
|
||||||
|
hashsum \
|
||||||
|
halt \
|
||||||
|
help \
|
||||||
|
iorw \
|
||||||
|
iso9660 \
|
||||||
|
jpeg \
|
||||||
|
json \
|
||||||
|
keylayouts \
|
||||||
|
keystatus \
|
||||||
|
linux \
|
||||||
|
linux16 \
|
||||||
|
loadenv \
|
||||||
|
loopback \
|
||||||
|
ls \
|
||||||
|
lsacpi \
|
||||||
|
lsmmap \
|
||||||
|
lspci \
|
||||||
|
luks \
|
||||||
|
luks2 \
|
||||||
|
argon2 \
|
||||||
|
lvm \
|
||||||
|
lzopio \
|
||||||
|
mdraid09 \
|
||||||
|
mdraid09_be \
|
||||||
|
mdraid1x \
|
||||||
|
memdisk \
|
||||||
|
memrw \
|
||||||
|
minicmd \
|
||||||
|
mmap \
|
||||||
|
multiboot \
|
||||||
|
multiboot2 \
|
||||||
|
nativedisk \
|
||||||
|
normal \
|
||||||
|
ntfs \
|
||||||
|
nvme \
|
||||||
|
ohci \
|
||||||
|
part_bsd \
|
||||||
|
part_dfly \
|
||||||
|
part_gpt \
|
||||||
|
part_msdos \
|
||||||
|
password \
|
||||||
|
password_pbkdf2 \
|
||||||
|
pata \
|
||||||
|
pbkdf2 \
|
||||||
|
pcidump \
|
||||||
|
pgp \
|
||||||
|
play \
|
||||||
|
png \
|
||||||
|
procfs \
|
||||||
|
raid5rec \
|
||||||
|
raid6rec \
|
||||||
|
read \
|
||||||
|
reboot \
|
||||||
|
regexp \
|
||||||
|
romfs \
|
||||||
|
scsi \
|
||||||
|
search \
|
||||||
|
search_fs_file \
|
||||||
|
search_fs_uuid \
|
||||||
|
search_label \
|
||||||
|
serial \
|
||||||
|
syslinuxcfg \
|
||||||
|
setjmp \
|
||||||
|
setpci \
|
||||||
|
spkmodem \
|
||||||
|
squash4 \
|
||||||
|
sleep \
|
||||||
|
tar \
|
||||||
|
test \
|
||||||
|
true \
|
||||||
|
uhci \
|
||||||
|
udf \
|
||||||
|
ufs1 \
|
||||||
|
ufs1_be \
|
||||||
|
ufs2 \
|
||||||
|
usb \
|
||||||
|
usb_keyboard \
|
||||||
|
usbms \
|
||||||
|
xfs \
|
||||||
|
xzio \
|
||||||
|
zfs \
|
||||||
|
zfscrypt \
|
||||||
|
zfsinfo \
|
||||||
|
zstd \
|
||||||
|
"
|
|
@ -54,7 +54,7 @@ if [ -f (cbfsdisk)/timeout.cfg ]; then
|
||||||
else
|
else
|
||||||
set timeout=5
|
set timeout=5
|
||||||
fi
|
fi
|
||||||
set grub_scan_disk="nvme ahci ata"
|
set grub_scan_disk="ahci ata"
|
||||||
if [ -f (cbfsdisk)/scan.cfg ]; then
|
if [ -f (cbfsdisk)/scan.cfg ]; then
|
||||||
source (cbfsdisk)/scan.cfg
|
source (cbfsdisk)/scan.cfg
|
||||||
fi
|
fi
|
||||||
|
@ -87,17 +87,11 @@ function search_grub {
|
||||||
for part in 1 2 3 4 5 6 7 8 9 10 11 12; do
|
for part in 1 2 3 4 5 6 7 8 9 10 11 12; do
|
||||||
if [ "${1}" != "nvme" ]; then
|
if [ "${1}" != "nvme" ]; then
|
||||||
try_user_config "(${1}${i},${part})"
|
try_user_config "(${1}${i},${part})"
|
||||||
else
|
|
||||||
# TODO: do we care about other namesapces
|
|
||||||
try_user_config "(nvme${i}n1,${part})"
|
|
||||||
fi
|
fi
|
||||||
done
|
done
|
||||||
if [ "${1}" != "nvme" ]; then
|
if [ "${1}" != "nvme" ]; then
|
||||||
# raw devices e.g. (ahci0) instead of (ahci0,1)
|
# raw devices e.g. (ahci0) instead of (ahci0,1)
|
||||||
try_user_config "(${1}${i})"
|
try_user_config "(${1}${i})"
|
||||||
else
|
|
||||||
# TODO: do we care about other namesapces
|
|
||||||
try_user_config "(nvme${i}n1)"
|
|
||||||
fi
|
fi
|
||||||
done
|
done
|
||||||
echo # Insert newline
|
echo # Insert newline
|
||||||
|
@ -123,17 +117,11 @@ function search_isolinux {
|
||||||
for part in 1 2 3 4 5 6 7 8 9 10 11 12; do
|
for part in 1 2 3 4 5 6 7 8 9 10 11 12; do
|
||||||
if [ "${1}" != "nvme" ]; then
|
if [ "${1}" != "nvme" ]; then
|
||||||
try_isolinux_config "(${1}${i},${part})"
|
try_isolinux_config "(${1}${i},${part})"
|
||||||
else
|
|
||||||
# TODO: see above
|
|
||||||
try_isolinux_config "(nvme${i}n1,${part})"
|
|
||||||
fi
|
fi
|
||||||
done
|
done
|
||||||
if [ "${1}" != "nvme" ]; then
|
if [ "${1}" != "nvme" ]; then
|
||||||
# raw devices e.g. (usb0) instead of (usb0,1)
|
# raw devices e.g. (usb0) instead of (usb0,1)
|
||||||
try_isolinux_config "(${1}${i})"
|
try_isolinux_config "(${1}${i})"
|
||||||
else
|
|
||||||
# TODO: do we care about other namesapces
|
|
||||||
try_isolinux_config "(nvme${i}n1)"
|
|
||||||
fi
|
fi
|
||||||
done
|
done
|
||||||
echo # Insert newline
|
echo # Insert newline
|
||||||
|
@ -175,9 +163,6 @@ menuentry 'Load Operating System (incl. fully encrypted disks) [o]' --hotkey='o
|
||||||
bootdev="${bootdev} (ahci${i},${part})"
|
bootdev="${bootdev} (ahci${i},${part})"
|
||||||
elif [ "${grub_disk}" = "ata" ]; then
|
elif [ "${grub_disk}" = "ata" ]; then
|
||||||
bootdev="${bootdev} (ata${i},${part})"
|
bootdev="${bootdev} (ata${i},${part})"
|
||||||
elif [ "${grub_disk}" = "nvme" ]; then
|
|
||||||
# TODO: do we care about other namesapces
|
|
||||||
bootdev="${bootdev} (nvme${i}n1,${part})"
|
|
||||||
fi
|
fi
|
||||||
done
|
done
|
||||||
done
|
done
|
||||||
|
@ -214,9 +199,6 @@ menuentry 'Search for GRUB/SYSLINUX/EXTLINUX/ISOLINUX on AHCI [a]' --hotkey='a'
|
||||||
menuentry 'Search for GRUB/SYSLINUX/EXTLINUX/ISOLINUX on ATA/IDE [d]' --hotkey='d' {
|
menuentry 'Search for GRUB/SYSLINUX/EXTLINUX/ISOLINUX on ATA/IDE [d]' --hotkey='d' {
|
||||||
search_bootcfg ata
|
search_bootcfg ata
|
||||||
}
|
}
|
||||||
menuentry 'Search for GRUB/SYSLINUX/EXTLINUX/ISOLINUX on NVMe [e]' --hotkey='e' {
|
|
||||||
search_bootcfg nvme
|
|
||||||
}
|
|
||||||
if [ -f (cbfsdisk)/grub.cfg ]; then
|
if [ -f (cbfsdisk)/grub.cfg ]; then
|
||||||
menuentry 'Load configuration (grub.cfg) in CBFS [t]' --hotkey='t' {
|
menuentry 'Load configuration (grub.cfg) in CBFS [t]' --hotkey='t' {
|
||||||
set root='(cbfsdisk)'
|
set root='(cbfsdisk)'
|
||||||
|
|
|
@ -0,0 +1,289 @@
|
||||||
|
# SPDX-License-Identifier: GPL-3.0-or-later
|
||||||
|
# Copyright (C) 2014-2016,2020-2021,2023-2024 Leah Rowe <leah@libreboot.org>
|
||||||
|
# Copyright (C) 2015 Klemens Nanni <contact@autoboot.org>
|
||||||
|
|
||||||
|
set prefix=(memdisk)/boot/grub
|
||||||
|
|
||||||
|
insmod at_keyboard
|
||||||
|
insmod usb_keyboard
|
||||||
|
insmod nativedisk
|
||||||
|
insmod ehci
|
||||||
|
insmod ohci
|
||||||
|
insmod uhci
|
||||||
|
insmod usb
|
||||||
|
insmod usbms
|
||||||
|
insmod regexp
|
||||||
|
|
||||||
|
terminal_input --append at_keyboard
|
||||||
|
terminal_input --append usb_keyboard
|
||||||
|
terminal_output --append cbmemc
|
||||||
|
|
||||||
|
# User interface overrides wherever "keystatus" is supported
|
||||||
|
# Keep SHIFT key pressed before powering on to disable graphics
|
||||||
|
if keystatus --shift; then
|
||||||
|
terminal_output --append vga_text
|
||||||
|
else
|
||||||
|
gfxpayload=keep
|
||||||
|
terminal_output --append gfxterm
|
||||||
|
|
||||||
|
if [ -f (cbfsdisk)/background.png ]; then
|
||||||
|
insmod png
|
||||||
|
background_image (cbfsdisk)/background.png
|
||||||
|
elif [ -f (cbfsdisk)/background.jpg ]; then
|
||||||
|
insmod jpeg
|
||||||
|
background_image (cbfsdisk)/background.jpg
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Keep CTRL pressed to enable default serial terminal (COM1 or the like)
|
||||||
|
if keystatus --ctrl; then
|
||||||
|
serial
|
||||||
|
terminal_input --append serial
|
||||||
|
terminal_output --append serial
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Keep ALT pressed to enable spkmodem
|
||||||
|
if keystatus --alt; then
|
||||||
|
terminal_output --append spkmodem
|
||||||
|
fi
|
||||||
|
|
||||||
|
|
||||||
|
set default="0"
|
||||||
|
if [ -f (cbfsdisk)/timeout.cfg ]; then
|
||||||
|
source (cbfsdisk)/timeout.cfg
|
||||||
|
else
|
||||||
|
set timeout=5
|
||||||
|
fi
|
||||||
|
set grub_scan_disk="nvme ahci ata"
|
||||||
|
if [ -f (cbfsdisk)/scan.cfg ]; then
|
||||||
|
source (cbfsdisk)/scan.cfg
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ -f (cbfsdisk)/keymap.gkb ]; then
|
||||||
|
keymap (cbfsdisk)/keymap.gkb
|
||||||
|
fi
|
||||||
|
|
||||||
|
function really_try_user_config {
|
||||||
|
set root="${1}"
|
||||||
|
|
||||||
|
if [ -f /"${2}"/grub.cfg ]; then
|
||||||
|
unset superusers
|
||||||
|
configfile /"${2}"/grub.cfg
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
function try_user_config {
|
||||||
|
# The @/... entries are for cases where the BTRFS filesystem is being used
|
||||||
|
for dir in grub boot/grub @/grub @/boot/grub grub2 boot/grub2 @/grub2 @/boot/grub2 boot @/boot; do
|
||||||
|
really_try_user_config "${1}" "${dir}"
|
||||||
|
done
|
||||||
|
for dir in ubuntu debian redhat; do
|
||||||
|
really_try_user_config "${1}" "EFI/${dir}"
|
||||||
|
done
|
||||||
|
}
|
||||||
|
function search_grub {
|
||||||
|
echo -n "Attempting to load grub.cfg from '${1}' devices"
|
||||||
|
for i in 0 1 2 3 4 5 6 7 8; do
|
||||||
|
for part in 1 2 3 4 5 6 7 8 9 10 11 12; do
|
||||||
|
if [ "${1}" != "nvme" ]; then
|
||||||
|
try_user_config "(${1}${i},${part})"
|
||||||
|
else
|
||||||
|
# TODO: do we care about other namesapces
|
||||||
|
try_user_config "(nvme${i}n1,${part})"
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
if [ "${1}" != "nvme" ]; then
|
||||||
|
# raw devices e.g. (ahci0) instead of (ahci0,1)
|
||||||
|
try_user_config "(${1}${i})"
|
||||||
|
else
|
||||||
|
# TODO: do we care about other namesapces
|
||||||
|
try_user_config "(nvme${i}n1)"
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
echo # Insert newline
|
||||||
|
}
|
||||||
|
|
||||||
|
function try_isolinux_config {
|
||||||
|
set root="${1}"
|
||||||
|
for dir in '' /boot /EFI /@ /@/boot; do
|
||||||
|
if [ -f "${dir}"/isolinux/isolinux.cfg ]; then
|
||||||
|
syslinux_configfile -i "${dir}"/isolinux/isolinux.cfg
|
||||||
|
elif [ -f "${dir}"/syslinux/syslinux.cfg ]; then
|
||||||
|
syslinux_configfile -s "${dir}"/syslinux/syslinux.cfg
|
||||||
|
elif [ -f "${dir}"/syslinux/extlinux.conf ]; then
|
||||||
|
syslinux_configfile -s "${dir}"/syslinux/extlinux.conf
|
||||||
|
elif [ -f "${dir}"/extlinux/extlinux.conf ]; then
|
||||||
|
syslinux_configfile -s "${dir}"/extlinux/extlinux.conf
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
}
|
||||||
|
function search_isolinux {
|
||||||
|
echo "\nAttempting to parse iso/sys/extlinux config from '${1}' devices"
|
||||||
|
for i in 0 1 2 3 4 5 6 7 8; do
|
||||||
|
for part in 1 2 3 4 5 6 7 8 9 10 11 12; do
|
||||||
|
if [ "${1}" != "nvme" ]; then
|
||||||
|
try_isolinux_config "(${1}${i},${part})"
|
||||||
|
else
|
||||||
|
# TODO: see above
|
||||||
|
try_isolinux_config "(nvme${i}n1,${part})"
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
if [ "${1}" != "nvme" ]; then
|
||||||
|
# raw devices e.g. (usb0) instead of (usb0,1)
|
||||||
|
try_isolinux_config "(${1}${i})"
|
||||||
|
else
|
||||||
|
# TODO: do we care about other namesapces
|
||||||
|
try_isolinux_config "(nvme${i}n1)"
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
echo # Insert newline
|
||||||
|
}
|
||||||
|
function try_bootcfg {
|
||||||
|
try_user_config "${1}"
|
||||||
|
try_isolinux_config "${1}"
|
||||||
|
}
|
||||||
|
function search_bootcfg {
|
||||||
|
search_grub "${1}"
|
||||||
|
search_isolinux "${1}"
|
||||||
|
}
|
||||||
|
menuentry 'Load Operating System (incl. fully encrypted disks) [o]' --hotkey='o' {
|
||||||
|
|
||||||
|
for grub_disk in ${grub_scan_disk}; do
|
||||||
|
search_bootcfg ${grub_disk}
|
||||||
|
done
|
||||||
|
|
||||||
|
# grub device enumeration is very slow, so checks are hardcoded
|
||||||
|
|
||||||
|
# TODO: add more strings, based on what distros set up when
|
||||||
|
# the user select auto-partitioning on those installers
|
||||||
|
lvmvol="lvm/grubcrypt-bootvol lvm/grubcrypt-rootvol"
|
||||||
|
|
||||||
|
raidvol="md/0 md/1 md/2 md/3 md/4 md/5 md/6 md/7 md/8 md/9"
|
||||||
|
|
||||||
|
# in practise, doing multiple redundant checks is perfectly fast and
|
||||||
|
# TODO: optimize grub itself, and use */? here for everything
|
||||||
|
|
||||||
|
for vol in ${lvmvol} ${raidvol} ; do
|
||||||
|
try_bootcfg "${vol}"
|
||||||
|
done
|
||||||
|
|
||||||
|
unset bootdev
|
||||||
|
for grub_disk in ${grub_scan_disk}; do
|
||||||
|
for i in 0 1 2 3 4 5 6 7 8; do
|
||||||
|
for part in 1 2 3 4 5 6 7 8 9 10 11 12; do
|
||||||
|
if [ "${grub_disk}" = "ahci" ]; then
|
||||||
|
bootdev="${bootdev} (ahci${i},${part})"
|
||||||
|
elif [ "${grub_disk}" = "ata" ]; then
|
||||||
|
bootdev="${bootdev} (ata${i},${part})"
|
||||||
|
elif [ "${grub_disk}" = "nvme" ]; then
|
||||||
|
# TODO: do we care about other namesapces
|
||||||
|
bootdev="${bootdev} (nvme${i}n1,${part})"
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
done
|
||||||
|
done
|
||||||
|
|
||||||
|
set pager=0
|
||||||
|
echo -n "Attempting to unlock encrypted volumes"
|
||||||
|
for dev in ${bootdev} ${lvmvol} ${raidvol}; do
|
||||||
|
if cryptomount "${dev}" ; then break ; fi
|
||||||
|
done
|
||||||
|
set pager=1
|
||||||
|
echo
|
||||||
|
|
||||||
|
# after cryptomount, lvm volumes might be available
|
||||||
|
for vol in ${lvmvol}; do
|
||||||
|
try_bootcfg "${vol}"
|
||||||
|
done
|
||||||
|
|
||||||
|
search_bootcfg crypto
|
||||||
|
|
||||||
|
for vol in lvm/* ; do
|
||||||
|
try_bootcfg "${vol}"
|
||||||
|
done
|
||||||
|
|
||||||
|
true # Prevent pager requiring to accept each line instead of whole screen
|
||||||
|
}
|
||||||
|
|
||||||
|
menuentry 'Search for GRUB/SYSLINUX/EXTLINUX/ISOLINUX on USB [s]' --hotkey='s' {
|
||||||
|
search_bootcfg usb
|
||||||
|
}
|
||||||
|
menuentry 'Search for GRUB/SYSLINUX/EXTLINUX/ISOLINUX on AHCI [a]' --hotkey='a' {
|
||||||
|
search_bootcfg ahci
|
||||||
|
}
|
||||||
|
menuentry 'Search for GRUB/SYSLINUX/EXTLINUX/ISOLINUX on ATA/IDE [d]' --hotkey='d' {
|
||||||
|
search_bootcfg ata
|
||||||
|
}
|
||||||
|
menuentry 'Search for GRUB/SYSLINUX/EXTLINUX/ISOLINUX on NVMe [e]' --hotkey='e' {
|
||||||
|
search_bootcfg nvme
|
||||||
|
}
|
||||||
|
if [ -f (cbfsdisk)/grub.cfg ]; then
|
||||||
|
menuentry 'Load configuration (grub.cfg) in CBFS [t]' --hotkey='t' {
|
||||||
|
set root='(cbfsdisk)'
|
||||||
|
if [ -f /grub.cfg ]; then
|
||||||
|
configfile /grub.cfg
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
fi
|
||||||
|
if [ -f (cbfsdisk)/grubtest.cfg ]; then
|
||||||
|
menuentry 'Load test configuration (grubtest.cfg) inside of CBFS [t]' --hotkey='t' {
|
||||||
|
set root='(cbfsdisk)'
|
||||||
|
if [ -f /grubtest.cfg ]; then
|
||||||
|
configfile /grubtest.cfg
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
fi
|
||||||
|
if [ -f (cbfsdisk)/seabios.elf ]; then
|
||||||
|
menuentry 'Load SeaBIOS (payload) [b]' --hotkey='b' {
|
||||||
|
set root='cbfsdisk'
|
||||||
|
chainloader /seabios.elf
|
||||||
|
}
|
||||||
|
fi
|
||||||
|
if [ -f (cbfsdisk)/img/grub2 ]; then
|
||||||
|
menuentry 'Return to SeaBIOS [b]' --hotkey='b' {
|
||||||
|
set root='cbfsdisk'
|
||||||
|
chainloader /fallback/payload
|
||||||
|
}
|
||||||
|
fi
|
||||||
|
menuentry 'Poweroff [p]' --hotkey='p' {
|
||||||
|
halt
|
||||||
|
}
|
||||||
|
menuentry 'Reboot [r]' --hotkey='r' {
|
||||||
|
reboot
|
||||||
|
}
|
||||||
|
if [ -f (cbfsdisk)/img/memtest ]; then
|
||||||
|
menuentry 'Load MemTest86+ [m]' --hotkey='m' {
|
||||||
|
set root='cbfsdisk'
|
||||||
|
chainloader /img/memtest
|
||||||
|
}
|
||||||
|
fi
|
||||||
|
|
||||||
|
submenu 'Other [z]' --hotkey='z' {
|
||||||
|
menuentry 'Enable default serial terminal [s]' --hotkey='s' {
|
||||||
|
serial
|
||||||
|
terminal_input --append serial
|
||||||
|
terminal_output --append serial
|
||||||
|
}
|
||||||
|
|
||||||
|
menuentry 'Disable default serial terminal' {
|
||||||
|
terminal_input --remove serial
|
||||||
|
terminal_output --remove serial
|
||||||
|
}
|
||||||
|
|
||||||
|
menuentry 'Enable gfxterm' {
|
||||||
|
terminal_output --append gfxterm
|
||||||
|
terminal_output --remove vga_text
|
||||||
|
}
|
||||||
|
menuentry 'Disable gfxterm [g]' --hotkey='g' {
|
||||||
|
terminal_output --remove gfxterm
|
||||||
|
terminal_output --append vga_text
|
||||||
|
}
|
||||||
|
|
||||||
|
menuentry 'Enable spkmodem [a]' --hotkey='a' {
|
||||||
|
terminal_output --append spkmodem
|
||||||
|
}
|
||||||
|
|
||||||
|
menuentry 'Disable spkmodem [z]' --hotkey='z' {
|
||||||
|
terminal_output --remove spkmodem
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,90 @@
|
||||||
|
From ce13539fe2103abbd991814d995e06cf96e485f7 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Leah Rowe <leah@libreboot.org>
|
||||||
|
Date: Sun, 31 Oct 2021 03:47:05 +0000
|
||||||
|
Subject: [PATCH 1/3] mitigate grub's missing characters for borders/arrow
|
||||||
|
characters
|
||||||
|
|
||||||
|
This cleans up the display on the main screen in GRUB.
|
||||||
|
|
||||||
|
Just don't draw a border, at all.
|
||||||
|
---
|
||||||
|
grub-core/normal/menu_text.c | 49 ++----------------------------------
|
||||||
|
1 file changed, 2 insertions(+), 47 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/grub-core/normal/menu_text.c b/grub-core/normal/menu_text.c
|
||||||
|
index b1321eb26..e76094dfd 100644
|
||||||
|
--- a/grub-core/normal/menu_text.c
|
||||||
|
+++ b/grub-core/normal/menu_text.c
|
||||||
|
@@ -108,47 +108,6 @@ grub_print_message_indented (const char *msg, int margin_left, int margin_right,
|
||||||
|
grub_print_message_indented_real (msg, margin_left, margin_right, term, 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
-static void
|
||||||
|
-draw_border (struct grub_term_output *term, const struct grub_term_screen_geometry *geo)
|
||||||
|
-{
|
||||||
|
- int i;
|
||||||
|
-
|
||||||
|
- grub_term_setcolorstate (term, GRUB_TERM_COLOR_NORMAL);
|
||||||
|
-
|
||||||
|
- grub_term_gotoxy (term, (struct grub_term_coordinate) { geo->first_entry_x - 1,
|
||||||
|
- geo->first_entry_y - 1 });
|
||||||
|
- grub_putcode (GRUB_UNICODE_CORNER_UL, term);
|
||||||
|
- for (i = 0; i < geo->entry_width + 1; i++)
|
||||||
|
- grub_putcode (GRUB_UNICODE_HLINE, term);
|
||||||
|
- grub_putcode (GRUB_UNICODE_CORNER_UR, term);
|
||||||
|
-
|
||||||
|
- for (i = 0; i < geo->num_entries; i++)
|
||||||
|
- {
|
||||||
|
- grub_term_gotoxy (term, (struct grub_term_coordinate) { geo->first_entry_x - 1,
|
||||||
|
- geo->first_entry_y + i });
|
||||||
|
- grub_putcode (GRUB_UNICODE_VLINE, term);
|
||||||
|
- grub_term_gotoxy (term,
|
||||||
|
- (struct grub_term_coordinate) { geo->first_entry_x + geo->entry_width + 1,
|
||||||
|
- geo->first_entry_y + i });
|
||||||
|
- grub_putcode (GRUB_UNICODE_VLINE, term);
|
||||||
|
- }
|
||||||
|
-
|
||||||
|
- grub_term_gotoxy (term,
|
||||||
|
- (struct grub_term_coordinate) { geo->first_entry_x - 1,
|
||||||
|
- geo->first_entry_y - 1 + geo->num_entries + 1 });
|
||||||
|
- grub_putcode (GRUB_UNICODE_CORNER_LL, term);
|
||||||
|
- for (i = 0; i < geo->entry_width + 1; i++)
|
||||||
|
- grub_putcode (GRUB_UNICODE_HLINE, term);
|
||||||
|
- grub_putcode (GRUB_UNICODE_CORNER_LR, term);
|
||||||
|
-
|
||||||
|
- grub_term_setcolorstate (term, GRUB_TERM_COLOR_NORMAL);
|
||||||
|
-
|
||||||
|
- grub_term_gotoxy (term,
|
||||||
|
- (struct grub_term_coordinate) { geo->first_entry_x - 1,
|
||||||
|
- (geo->first_entry_y - 1 + geo->num_entries
|
||||||
|
- + GRUB_TERM_MARGIN + 1) });
|
||||||
|
-}
|
||||||
|
-
|
||||||
|
static int
|
||||||
|
print_message (int nested, int edit, struct grub_term_output *term, int dry_run)
|
||||||
|
{
|
||||||
|
@@ -167,10 +126,8 @@ command-line or ESC to discard edits and return to the GRUB menu."),
|
||||||
|
{
|
||||||
|
char *msg_translated;
|
||||||
|
|
||||||
|
- msg_translated = grub_xasprintf (_("Use the %C and %C keys to select which "
|
||||||
|
- "entry is highlighted."),
|
||||||
|
- GRUB_UNICODE_UPARROW,
|
||||||
|
- GRUB_UNICODE_DOWNARROW);
|
||||||
|
+ msg_translated = grub_xasprintf (_("Use the arrow keys to select which "
|
||||||
|
+ "entry is highlighted."));
|
||||||
|
if (!msg_translated)
|
||||||
|
return 0;
|
||||||
|
ret += grub_print_message_indented_real (msg_translated, STANDARD_MARGIN,
|
||||||
|
@@ -410,8 +367,6 @@ grub_menu_init_page (int nested, int edit,
|
||||||
|
|
||||||
|
grub_term_normal_color = grub_color_menu_normal;
|
||||||
|
grub_term_highlight_color = grub_color_menu_highlight;
|
||||||
|
- if (geo->border)
|
||||||
|
- draw_border (term, geo);
|
||||||
|
grub_term_normal_color = old_color_normal;
|
||||||
|
grub_term_highlight_color = old_color_highlight;
|
||||||
|
geo->timeout_y = geo->first_entry_y + geo->num_entries
|
||||||
|
--
|
||||||
|
2.25.1
|
||||||
|
|
|
@ -0,0 +1,25 @@
|
||||||
|
From 70f9e72c3ff6381fe3519612de3b649c0cf26b9a Mon Sep 17 00:00:00 2001
|
||||||
|
From: Leah Rowe <leah@libreboot.org>
|
||||||
|
Date: Sat, 19 Nov 2022 16:30:24 +0000
|
||||||
|
Subject: [PATCH 2/3] say the name libreboot, in the grub menu
|
||||||
|
|
||||||
|
---
|
||||||
|
grub-core/normal/main.c | 2 +-
|
||||||
|
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||||
|
|
||||||
|
diff --git a/grub-core/normal/main.c b/grub-core/normal/main.c
|
||||||
|
index bd4431000..31308e16a 100644
|
||||||
|
--- a/grub-core/normal/main.c
|
||||||
|
+++ b/grub-core/normal/main.c
|
||||||
|
@@ -209,7 +209,7 @@ grub_normal_init_page (struct grub_term_output *term,
|
||||||
|
|
||||||
|
grub_term_cls (term);
|
||||||
|
|
||||||
|
- msg_formatted = grub_xasprintf (_("GNU GRUB version %s"), PACKAGE_VERSION);
|
||||||
|
+ msg_formatted = grub_xasprintf (_("Libreboot 20240504 release, based on coreboot. https://libreboot.org/"));
|
||||||
|
if (!msg_formatted)
|
||||||
|
return;
|
||||||
|
|
||||||
|
--
|
||||||
|
2.25.1
|
||||||
|
|
|
@ -0,0 +1,42 @@
|
||||||
|
From de6e7cc62522ce1be21bd2f06e7c15cd234b5426 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Ax333l <main@axelen.xyz>
|
||||||
|
Date: Thu, 17 Aug 2023 00:00:00 +0000
|
||||||
|
Subject: [PATCH 1/6] Add CC0 license
|
||||||
|
|
||||||
|
Signed-off-by: Nicholas Johnson <nick@nicholasjohnson.ch>
|
||||||
|
---
|
||||||
|
grub-core/kern/dl.c | 3 ++-
|
||||||
|
util/grub-module-verifierXX.c | 3 ++-
|
||||||
|
2 files changed, 4 insertions(+), 2 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/grub-core/kern/dl.c b/grub-core/kern/dl.c
|
||||||
|
index 0bf40caa6..4011e2d15 100644
|
||||||
|
--- a/grub-core/kern/dl.c
|
||||||
|
+++ b/grub-core/kern/dl.c
|
||||||
|
@@ -470,7 +470,8 @@ grub_dl_check_license (grub_dl_t mod, Elf_Ehdr *e)
|
||||||
|
|
||||||
|
if (grub_strcmp ((char *) e + s->sh_offset, "LICENSE=GPLv3") == 0
|
||||||
|
|| grub_strcmp ((char *) e + s->sh_offset, "LICENSE=GPLv3+") == 0
|
||||||
|
- || grub_strcmp ((char *) e + s->sh_offset, "LICENSE=GPLv2+") == 0)
|
||||||
|
+ || grub_strcmp ((char *) e + s->sh_offset, "LICENSE=GPLv2+") == 0
|
||||||
|
+ || grub_strcmp ((char *) e + s->sh_offset, "LICENSE=CC0") == 0)
|
||||||
|
return GRUB_ERR_NONE;
|
||||||
|
|
||||||
|
return grub_error (GRUB_ERR_BAD_MODULE,
|
||||||
|
diff --git a/util/grub-module-verifierXX.c b/util/grub-module-verifierXX.c
|
||||||
|
index a42c20bd1..7157a30aa 100644
|
||||||
|
--- a/util/grub-module-verifierXX.c
|
||||||
|
+++ b/util/grub-module-verifierXX.c
|
||||||
|
@@ -236,7 +236,8 @@ check_license (const char * const filename,
|
||||||
|
Elf_Shdr *s = find_section (arch, e, ".module_license", module_size);
|
||||||
|
if (s && (strcmp ((char *) e + grub_target_to_host(s->sh_offset), "LICENSE=GPLv3") == 0
|
||||||
|
|| strcmp ((char *) e + grub_target_to_host(s->sh_offset), "LICENSE=GPLv3+") == 0
|
||||||
|
- || strcmp ((char *) e + grub_target_to_host(s->sh_offset), "LICENSE=GPLv2+") == 0))
|
||||||
|
+ || strcmp ((char *) e + grub_target_to_host(s->sh_offset), "LICENSE=GPLv2+") == 0
|
||||||
|
+ || strcmp ((char *) e + grub_target_to_host(s->sh_offset), "LICENSE=CC0") == 0))
|
||||||
|
return;
|
||||||
|
grub_util_error ("%s: incompatible license", filename);
|
||||||
|
}
|
||||||
|
--
|
||||||
|
2.39.2
|
||||||
|
|
|
@ -0,0 +1,39 @@
|
||||||
|
From 9edaaffac91d593a439e44bac3b6f5558f5a8245 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Ax333l <main@axelen.xyz>
|
||||||
|
Date: Thu, 17 Aug 2023 00:00:00 +0000
|
||||||
|
Subject: [PATCH 2/6] Define GRUB_UINT32_MAX
|
||||||
|
|
||||||
|
Signed-off-by: Nicholas Johnson <nick@nicholasjohnson.ch>
|
||||||
|
---
|
||||||
|
include/grub/types.h | 8 ++++++++
|
||||||
|
1 file changed, 8 insertions(+)
|
||||||
|
|
||||||
|
diff --git a/include/grub/types.h b/include/grub/types.h
|
||||||
|
index 0d96006fe..a13f3a60b 100644
|
||||||
|
--- a/include/grub/types.h
|
||||||
|
+++ b/include/grub/types.h
|
||||||
|
@@ -156,6 +156,7 @@ typedef grub_int32_t grub_ssize_t;
|
||||||
|
#define GRUB_SHRT_MAX 0x7fff
|
||||||
|
#define GRUB_SHRT_MIN (-GRUB_SHRT_MAX - 1)
|
||||||
|
#define GRUB_UINT_MAX 4294967295U
|
||||||
|
+#define GRUB_UINT32_MAX 4294967295U
|
||||||
|
#define GRUB_INT_MAX 0x7fffffff
|
||||||
|
#define GRUB_INT_MIN (-GRUB_INT_MAX - 1)
|
||||||
|
#define GRUB_INT32_MAX 2147483647
|
||||||
|
@@ -177,6 +178,13 @@ typedef grub_int32_t grub_ssize_t;
|
||||||
|
#define GRUB_TYPE_U_MAX(type) ((unsigned long long)((typeof (type))(~0)))
|
||||||
|
#define GRUB_TYPE_U_MIN(type) 0ULL
|
||||||
|
|
||||||
|
+# define GRUB_UINT32_C(x) x ## U
|
||||||
|
+# if GRUB_ULONG_MAX >> 31 >> 31 >> 1 == 1
|
||||||
|
+# define GRUB_UINT64_C(x) x##UL
|
||||||
|
+# elif 1
|
||||||
|
+# define GRUB_UINT64_C(x) x##ULL
|
||||||
|
+# endif
|
||||||
|
+
|
||||||
|
typedef grub_uint64_t grub_properly_aligned_t;
|
||||||
|
|
||||||
|
#define GRUB_PROPERLY_ALIGNED_ARRAY(name, size) grub_properly_aligned_t name[((size) + sizeof (grub_properly_aligned_t) - 1) / sizeof (grub_properly_aligned_t)]
|
||||||
|
--
|
||||||
|
2.39.2
|
||||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -0,0 +1,58 @@
|
||||||
|
From 0044d32121bf52c4547c6b3c78f12d7305f57e6b Mon Sep 17 00:00:00 2001
|
||||||
|
From: Ax333l <main@axelen.xyz>
|
||||||
|
Date: Thu, 17 Aug 2023 00:00:00 +0000
|
||||||
|
Subject: [PATCH 4/6] Error on missing Argon2id parameters
|
||||||
|
|
||||||
|
Signed-off-by: Nicholas Johnson <nick@nicholasjohnson.ch>
|
||||||
|
---
|
||||||
|
grub-core/disk/luks2.c | 13 ++++++++-----
|
||||||
|
1 file changed, 8 insertions(+), 5 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/grub-core/disk/luks2.c b/grub-core/disk/luks2.c
|
||||||
|
index d5106402f..bc818ea69 100644
|
||||||
|
--- a/grub-core/disk/luks2.c
|
||||||
|
+++ b/grub-core/disk/luks2.c
|
||||||
|
@@ -38,6 +38,7 @@ GRUB_MOD_LICENSE ("GPLv3+");
|
||||||
|
enum grub_luks2_kdf_type
|
||||||
|
{
|
||||||
|
LUKS2_KDF_TYPE_ARGON2I,
|
||||||
|
+ LUKS2_KDF_TYPE_ARGON2ID,
|
||||||
|
LUKS2_KDF_TYPE_PBKDF2
|
||||||
|
};
|
||||||
|
typedef enum grub_luks2_kdf_type grub_luks2_kdf_type_t;
|
||||||
|
@@ -90,7 +91,7 @@ struct grub_luks2_keyslot
|
||||||
|
grub_int64_t time;
|
||||||
|
grub_int64_t memory;
|
||||||
|
grub_int64_t cpus;
|
||||||
|
- } argon2i;
|
||||||
|
+ } argon2;
|
||||||
|
struct
|
||||||
|
{
|
||||||
|
const char *hash;
|
||||||
|
@@ -160,10 +161,11 @@ luks2_parse_keyslot (grub_luks2_keyslot_t *out, const grub_json_t *keyslot)
|
||||||
|
return grub_error (GRUB_ERR_BAD_ARGUMENT, "Missing or invalid KDF");
|
||||||
|
else if (!grub_strcmp (type, "argon2i") || !grub_strcmp (type, "argon2id"))
|
||||||
|
{
|
||||||
|
- out->kdf.type = LUKS2_KDF_TYPE_ARGON2I;
|
||||||
|
- if (grub_json_getint64 (&out->kdf.u.argon2i.time, &kdf, "time") ||
|
||||||
|
- grub_json_getint64 (&out->kdf.u.argon2i.memory, &kdf, "memory") ||
|
||||||
|
- grub_json_getint64 (&out->kdf.u.argon2i.cpus, &kdf, "cpus"))
|
||||||
|
+ out->kdf.type = !grub_strcmp (type, "argon2i")
|
||||||
|
+ ? LUKS2_KDF_TYPE_ARGON2I : LUKS2_KDF_TYPE_ARGON2ID;
|
||||||
|
+ if (grub_json_getint64 (&out->kdf.u.argon2.time, &kdf, "time") ||
|
||||||
|
+ grub_json_getint64 (&out->kdf.u.argon2.memory, &kdf, "memory") ||
|
||||||
|
+ grub_json_getint64 (&out->kdf.u.argon2.cpus, &kdf, "cpus"))
|
||||||
|
return grub_error (GRUB_ERR_BAD_ARGUMENT, "Missing Argon2i parameters");
|
||||||
|
}
|
||||||
|
else if (!grub_strcmp (type, "pbkdf2"))
|
||||||
|
@@ -459,6 +461,7 @@ luks2_decrypt_key (grub_uint8_t *out_key,
|
||||||
|
switch (k->kdf.type)
|
||||||
|
{
|
||||||
|
case LUKS2_KDF_TYPE_ARGON2I:
|
||||||
|
+ case LUKS2_KDF_TYPE_ARGON2ID:
|
||||||
|
ret = grub_error (GRUB_ERR_BAD_ARGUMENT, "Argon2 not supported");
|
||||||
|
goto err;
|
||||||
|
case LUKS2_KDF_TYPE_PBKDF2:
|
||||||
|
--
|
||||||
|
2.39.2
|
||||||
|
|
|
@ -0,0 +1,83 @@
|
||||||
|
From 0a21695c55f76f1c958bb633481d55b3168562f7 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Ax333l <main@axelen.xyz>
|
||||||
|
Date: Thu, 17 Aug 2023 00:00:00 +0000
|
||||||
|
Subject: [PATCH 5/6] Compile with Argon2id support
|
||||||
|
|
||||||
|
Signed-off-by: Nicholas Johnson <nick@nicholasjohnson.ch>
|
||||||
|
---
|
||||||
|
Makefile.util.def | 6 +++++-
|
||||||
|
grub-core/Makefile.core.def | 2 +-
|
||||||
|
grub-core/disk/luks2.c | 13 +++++++++++--
|
||||||
|
3 files changed, 17 insertions(+), 4 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/Makefile.util.def b/Makefile.util.def
|
||||||
|
index 1e9a13d3e..a167825c3 100644
|
||||||
|
--- a/Makefile.util.def
|
||||||
|
+++ b/Makefile.util.def
|
||||||
|
@@ -3,7 +3,7 @@ AutoGen definitions Makefile.tpl;
|
||||||
|
library = {
|
||||||
|
name = libgrubkern.a;
|
||||||
|
cflags = '$(CFLAGS_GNULIB)';
|
||||||
|
- cppflags = '$(CPPFLAGS_GNULIB) -I$(srcdir)/grub-core/lib/json';
|
||||||
|
+ cppflags = '$(CPPFLAGS_GNULIB) -I$(srcdir)/grub-core/lib/json -I$(srcdir)/grub-core/lib/argon2';
|
||||||
|
|
||||||
|
common = util/misc.c;
|
||||||
|
common = grub-core/kern/command.c;
|
||||||
|
@@ -36,6 +36,10 @@ library = {
|
||||||
|
common = grub-core/kern/misc.c;
|
||||||
|
common = grub-core/kern/partition.c;
|
||||||
|
common = grub-core/lib/crypto.c;
|
||||||
|
+ common = grub-core/lib/argon2/argon2.c;
|
||||||
|
+ common = grub-core/lib/argon2/core.c;
|
||||||
|
+ common = grub-core/lib/argon2/ref.c;
|
||||||
|
+ common = grub-core/lib/argon2/blake2/blake2b.c;
|
||||||
|
common = grub-core/lib/json/json.c;
|
||||||
|
common = grub-core/disk/luks.c;
|
||||||
|
common = grub-core/disk/luks2.c;
|
||||||
|
diff --git a/grub-core/Makefile.core.def b/grub-core/Makefile.core.def
|
||||||
|
index 4a06789e5..e939dcc99 100644
|
||||||
|
--- a/grub-core/Makefile.core.def
|
||||||
|
+++ b/grub-core/Makefile.core.def
|
||||||
|
@@ -1238,7 +1238,7 @@ module = {
|
||||||
|
common = disk/luks2.c;
|
||||||
|
common = lib/gnulib/base64.c;
|
||||||
|
cflags = '$(CFLAGS_POSIX) $(CFLAGS_GNULIB)';
|
||||||
|
- cppflags = '$(CPPFLAGS_POSIX) $(CPPFLAGS_GNULIB) -I$(srcdir)/lib/json';
|
||||||
|
+ cppflags = '$(CPPFLAGS_POSIX) $(CPPFLAGS_GNULIB) -I$(srcdir)/lib/json -I$(srcdir)/lib/argon2';
|
||||||
|
};
|
||||||
|
|
||||||
|
module = {
|
||||||
|
diff --git a/grub-core/disk/luks2.c b/grub-core/disk/luks2.c
|
||||||
|
index bc818ea69..5b9eaa599 100644
|
||||||
|
--- a/grub-core/disk/luks2.c
|
||||||
|
+++ b/grub-core/disk/luks2.c
|
||||||
|
@@ -27,6 +27,7 @@
|
||||||
|
#include <grub/partition.h>
|
||||||
|
#include <grub/i18n.h>
|
||||||
|
|
||||||
|
+#include <argon2.h>
|
||||||
|
#include <base64.h>
|
||||||
|
#include <json.h>
|
||||||
|
|
||||||
|
@@ -462,8 +463,16 @@ luks2_decrypt_key (grub_uint8_t *out_key,
|
||||||
|
{
|
||||||
|
case LUKS2_KDF_TYPE_ARGON2I:
|
||||||
|
case LUKS2_KDF_TYPE_ARGON2ID:
|
||||||
|
- ret = grub_error (GRUB_ERR_BAD_ARGUMENT, "Argon2 not supported");
|
||||||
|
- goto err;
|
||||||
|
+ ret = argon2_hash (k->kdf.u.argon2.time, k->kdf.u.argon2.memory, k->kdf.u.argon2.cpus,
|
||||||
|
+ passphrase, passphraselen, salt, saltlen, area_key, k->area.key_size,
|
||||||
|
+ k->kdf.type == LUKS2_KDF_TYPE_ARGON2I ? Argon2_i : Argon2_id,
|
||||||
|
+ ARGON2_VERSION_NUMBER);
|
||||||
|
+ if (ret)
|
||||||
|
+ {
|
||||||
|
+ grub_dprintf ("luks2", "Argon2 failed: %s\n", argon2_error_message (ret));
|
||||||
|
+ goto err;
|
||||||
|
+ }
|
||||||
|
+ break;
|
||||||
|
case LUKS2_KDF_TYPE_PBKDF2:
|
||||||
|
hash = grub_crypto_lookup_md_by_name (k->kdf.u.pbkdf2.hash);
|
||||||
|
if (!hash)
|
||||||
|
--
|
||||||
|
2.39.2
|
||||||
|
|
|
@ -0,0 +1,26 @@
|
||||||
|
From 6c9a6625c0dc038d1bdbdc13665f40e269e86496 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Ax333l <main@axelen.xyz>
|
||||||
|
Date: Thu, 17 Aug 2023 00:00:00 +0000
|
||||||
|
Subject: [PATCH 6/6] Make grub-install work with Argon2
|
||||||
|
|
||||||
|
Signed-off-by: Nicholas Johnson <nick@nicholasjohnson.ch>
|
||||||
|
---
|
||||||
|
util/grub-install.c | 2 ++
|
||||||
|
1 file changed, 2 insertions(+)
|
||||||
|
|
||||||
|
diff --git a/util/grub-install.c b/util/grub-install.c
|
||||||
|
index 1ad04db36..a8a3330b8 100644
|
||||||
|
--- a/util/grub-install.c
|
||||||
|
+++ b/util/grub-install.c
|
||||||
|
@@ -448,6 +448,8 @@ probe_mods (grub_disk_t disk)
|
||||||
|
{
|
||||||
|
grub_util_cryptodisk_get_abstraction (disk,
|
||||||
|
push_cryptodisk_module, NULL);
|
||||||
|
+ /* HACK: always push argon2 */
|
||||||
|
+ grub_install_push_module ("argon2");
|
||||||
|
have_abstractions = 1;
|
||||||
|
have_cryptodisk = 1;
|
||||||
|
}
|
||||||
|
--
|
||||||
|
2.39.2
|
||||||
|
|
|
@ -0,0 +1,107 @@
|
||||||
|
From 96c0bbe5d406b616360a7fce7cee67d7692c0d6d Mon Sep 17 00:00:00 2001
|
||||||
|
From: Leah Rowe <leah@libreboot.org>
|
||||||
|
Date: Mon, 30 Oct 2023 22:19:21 +0000
|
||||||
|
Subject: [PATCH 1/1] at_keyboard coreboot: force scancodes2+translate
|
||||||
|
|
||||||
|
Scan code set 2 with translation should be assumed in
|
||||||
|
every case, as the default starting position.
|
||||||
|
|
||||||
|
However, GRUB is trying to detect and use other modes
|
||||||
|
such as set 2 without translation, or set 1 without
|
||||||
|
translation from set 2; it also detects no-mode and
|
||||||
|
assumes mode 1, on really old keyboards.
|
||||||
|
|
||||||
|
The current behaviour has been retained, for everything
|
||||||
|
except GRUB_MACHINE_COREBOOT; for the latter, scan code
|
||||||
|
set 2 with translation is hardcoded, and forced in code.
|
||||||
|
|
||||||
|
This is required to make keyboard initialisation work on
|
||||||
|
the MEC5035 EC used by the Dell Latitude E6400, when
|
||||||
|
running GRUB as a coreboot payload on that laptop. The
|
||||||
|
EC reports scancode set 2 with translation when probed,
|
||||||
|
but actually only outputs scancode set 1.
|
||||||
|
|
||||||
|
Since GRUB is attempting to use it without translation,
|
||||||
|
and since the machine reports set 2 with translation,
|
||||||
|
but only ever outputs set 1 scancodes, this results in
|
||||||
|
wrong keypresses for every key.
|
||||||
|
|
||||||
|
This fix fixed that, by forcing set 2 with translation,
|
||||||
|
treating it as set 1, but only on coreboot. This is the
|
||||||
|
same behaviour used in GNU+Linux systems and SeaBIOS.
|
||||||
|
With this change, GRUB keyboard initialisation now works
|
||||||
|
just fine on those machines.
|
||||||
|
|
||||||
|
This has *also* been tested on other coreboot machines
|
||||||
|
running GRUB; several HP EliteBooks, ThinkPads and
|
||||||
|
Dell Precision T1650. All seems to work just fine.
|
||||||
|
|
||||||
|
Signed-off-by: Leah Rowe <leah@libreboot.org>
|
||||||
|
---
|
||||||
|
grub-core/term/at_keyboard.c | 20 ++++++++++++++++++--
|
||||||
|
1 file changed, 18 insertions(+), 2 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/grub-core/term/at_keyboard.c b/grub-core/term/at_keyboard.c
|
||||||
|
index f8a129eb7..8207225c2 100644
|
||||||
|
--- a/grub-core/term/at_keyboard.c
|
||||||
|
+++ b/grub-core/term/at_keyboard.c
|
||||||
|
@@ -138,6 +138,7 @@ write_mode (int mode)
|
||||||
|
return (i != GRUB_AT_TRIES);
|
||||||
|
}
|
||||||
|
|
||||||
|
+#if !defined (GRUB_MACHINE_COREBOOT)
|
||||||
|
static int
|
||||||
|
query_mode (void)
|
||||||
|
{
|
||||||
|
@@ -161,10 +162,12 @@ query_mode (void)
|
||||||
|
return 3;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
+#endif
|
||||||
|
|
||||||
|
static void
|
||||||
|
set_scancodes (void)
|
||||||
|
{
|
||||||
|
+#if !defined (GRUB_MACHINE_COREBOOT)
|
||||||
|
/* You must have visited computer museum. Keyboard without scancode set
|
||||||
|
knowledge. Assume XT. */
|
||||||
|
if (!grub_keyboard_orig_set)
|
||||||
|
@@ -173,20 +176,33 @@ set_scancodes (void)
|
||||||
|
ps2_state.current_set = 1;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
+#endif
|
||||||
|
|
||||||
|
#if !USE_SCANCODE_SET
|
||||||
|
ps2_state.current_set = 1;
|
||||||
|
return;
|
||||||
|
-#else
|
||||||
|
+#endif
|
||||||
|
|
||||||
|
+#if defined (GRUB_MACHINE_COREBOOT)
|
||||||
|
+ /* enable translation */
|
||||||
|
+ grub_keyboard_controller_write (grub_keyboard_controller_orig
|
||||||
|
+ & ~KEYBOARD_AT_DISABLE);
|
||||||
|
+#else
|
||||||
|
+ /* if not coreboot, disable translation and try mode 2 first, before 1 */
|
||||||
|
grub_keyboard_controller_write (grub_keyboard_controller_orig
|
||||||
|
& ~KEYBOARD_AT_TRANSLATE
|
||||||
|
& ~KEYBOARD_AT_DISABLE);
|
||||||
|
+#endif
|
||||||
|
|
||||||
|
keyboard_controller_wait_until_ready ();
|
||||||
|
grub_outb (KEYBOARD_COMMAND_ENABLE, KEYBOARD_REG_DATA);
|
||||||
|
-
|
||||||
|
write_mode (2);
|
||||||
|
+
|
||||||
|
+#if defined (GRUB_MACHINE_COREBOOT)
|
||||||
|
+ /* mode 2 with translation, so make grub treat as set 1 */
|
||||||
|
+ ps2_state.current_set = 1;
|
||||||
|
+#else
|
||||||
|
+ /* if not coreboot, translation isn't set; test 2 and fall back to 1 */
|
||||||
|
ps2_state.current_set = query_mode ();
|
||||||
|
grub_dprintf ("atkeyb", "returned set %d\n", ps2_state.current_set);
|
||||||
|
if (ps2_state.current_set == 2)
|
||||||
|
--
|
||||||
|
2.39.2
|
||||||
|
|
|
@ -0,0 +1,38 @@
|
||||||
|
From 0a6abeb40ac4284fbff6ef5958989d561b6290a7 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Leah Rowe <leah@libreboot.org>
|
||||||
|
Date: Tue, 31 Oct 2023 10:33:28 +0000
|
||||||
|
Subject: [PATCH 1/1] keylayouts: don't print "Unknown key" message
|
||||||
|
|
||||||
|
on keyboards with stuck keys, this results in GRUB just
|
||||||
|
spewing it repeatedly, preventing use of GRUB.
|
||||||
|
|
||||||
|
in such cases, it's still possible to use the keyboard,
|
||||||
|
and we should let the user at least boot.
|
||||||
|
|
||||||
|
it often appears when people plug in faulty usb keyboards,
|
||||||
|
but can appear for laptop keyboards too; one of my e6400
|
||||||
|
has stuck keys.
|
||||||
|
|
||||||
|
with this patch, grub should be a bit more reliable in
|
||||||
|
terms of user experience, when the keyboard is faulty.
|
||||||
|
|
||||||
|
Signed-off-by: Leah Rowe <leah@libreboot.org>
|
||||||
|
---
|
||||||
|
grub-core/commands/keylayouts.c | 1 -
|
||||||
|
1 file changed, 1 deletion(-)
|
||||||
|
|
||||||
|
diff --git a/grub-core/commands/keylayouts.c b/grub-core/commands/keylayouts.c
|
||||||
|
index aa3ba34f2..445fa0601 100644
|
||||||
|
--- a/grub-core/commands/keylayouts.c
|
||||||
|
+++ b/grub-core/commands/keylayouts.c
|
||||||
|
@@ -174,7 +174,6 @@ grub_term_map_key (grub_keyboard_key_t code, int status)
|
||||||
|
key = map_key_core (code, status, &alt_gr_consumed);
|
||||||
|
|
||||||
|
if (key == 0 || key == GRUB_TERM_SHIFT) {
|
||||||
|
- grub_printf ("Unknown key 0x%x detected\n", code);
|
||||||
|
return GRUB_TERM_NO_KEY;
|
||||||
|
}
|
||||||
|
|
||||||
|
--
|
||||||
|
2.39.2
|
||||||
|
|
|
@ -0,0 +1,102 @@
|
||||||
|
From 9e7a651a0f15f2e9dec65a77765c3c4fd97b4165 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Leah Rowe <leah@libreboot.org>
|
||||||
|
Date: Sun, 5 Nov 2023 16:14:58 +0000
|
||||||
|
Subject: [PATCH 1/1] don't print missing prefix errors on the screen
|
||||||
|
|
||||||
|
we do actually set the prefix. this patch modifies
|
||||||
|
grub to still set grub_errno and return accordingly,
|
||||||
|
so the behaviour is otherwise identical, but it will
|
||||||
|
no longer print a warning message on the screen.
|
||||||
|
|
||||||
|
Signed-off-by: Leah Rowe <leah@libreboot.org>
|
||||||
|
---
|
||||||
|
grub-core/commands/keylayouts.c | 2 +-
|
||||||
|
grub-core/commands/loadenv.c | 2 +-
|
||||||
|
grub-core/commands/nativedisk.c | 2 +-
|
||||||
|
grub-core/efiemu/main.c | 3 +--
|
||||||
|
grub-core/font/font.c | 2 +-
|
||||||
|
grub-core/kern/dl.c | 2 +-
|
||||||
|
6 files changed, 6 insertions(+), 7 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/grub-core/commands/keylayouts.c b/grub-core/commands/keylayouts.c
|
||||||
|
index 445fa0601..00bcf7025 100644
|
||||||
|
--- a/grub-core/commands/keylayouts.c
|
||||||
|
+++ b/grub-core/commands/keylayouts.c
|
||||||
|
@@ -211,7 +211,7 @@ grub_cmd_keymap (struct grub_command *cmd __attribute__ ((unused)),
|
||||||
|
{
|
||||||
|
const char *prefix = grub_env_get ("prefix");
|
||||||
|
if (!prefix)
|
||||||
|
- return grub_error (GRUB_ERR_BAD_ARGUMENT, N_("variable `%s' isn't set"), "prefix");
|
||||||
|
+ return (grub_errno = GRUB_ERR_BAD_ARGUMENT);
|
||||||
|
filename = grub_xasprintf ("%s/layouts/%s.gkb", prefix, argv[0]);
|
||||||
|
if (!filename)
|
||||||
|
return grub_errno;
|
||||||
|
diff --git a/grub-core/commands/loadenv.c b/grub-core/commands/loadenv.c
|
||||||
|
index 166445849..699b39bfa 100644
|
||||||
|
--- a/grub-core/commands/loadenv.c
|
||||||
|
+++ b/grub-core/commands/loadenv.c
|
||||||
|
@@ -58,7 +58,7 @@ open_envblk_file (char *filename,
|
||||||
|
prefix = grub_env_get ("prefix");
|
||||||
|
if (! prefix)
|
||||||
|
{
|
||||||
|
- grub_error (GRUB_ERR_FILE_NOT_FOUND, N_("variable `%s' isn't set"), "prefix");
|
||||||
|
+ grub_errno = GRUB_ERR_FILE_NOT_FOUND;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
diff --git a/grub-core/commands/nativedisk.c b/grub-core/commands/nativedisk.c
|
||||||
|
index 580c8d3b0..6806bff9c 100644
|
||||||
|
--- a/grub-core/commands/nativedisk.c
|
||||||
|
+++ b/grub-core/commands/nativedisk.c
|
||||||
|
@@ -186,7 +186,7 @@ grub_cmd_nativedisk (grub_command_t cmd __attribute__ ((unused)),
|
||||||
|
prefix = grub_env_get ("prefix");
|
||||||
|
|
||||||
|
if (! prefix)
|
||||||
|
- return grub_error (GRUB_ERR_FILE_NOT_FOUND, N_("variable `%s' isn't set"), "prefix");
|
||||||
|
+ return (grub_errno = GRUB_ERR_FILE_NOT_FOUND);
|
||||||
|
|
||||||
|
if (prefix)
|
||||||
|
path_prefix = (prefix[0] == '(') ? grub_strchr (prefix, ')') : NULL;
|
||||||
|
diff --git a/grub-core/efiemu/main.c b/grub-core/efiemu/main.c
|
||||||
|
index e7037f4ed..e5d4dbff1 100644
|
||||||
|
--- a/grub-core/efiemu/main.c
|
||||||
|
+++ b/grub-core/efiemu/main.c
|
||||||
|
@@ -231,8 +231,7 @@ grub_efiemu_autocore (void)
|
||||||
|
prefix = grub_env_get ("prefix");
|
||||||
|
|
||||||
|
if (! prefix)
|
||||||
|
- return grub_error (GRUB_ERR_FILE_NOT_FOUND,
|
||||||
|
- N_("variable `%s' isn't set"), "prefix");
|
||||||
|
+ return (grub_errno = GRUB_ERR_FILE_NOT_FOUND);
|
||||||
|
|
||||||
|
suffix = grub_efiemu_get_default_core_name ();
|
||||||
|
|
||||||
|
diff --git a/grub-core/font/font.c b/grub-core/font/font.c
|
||||||
|
index 18de52562..2a0fea6c8 100644
|
||||||
|
--- a/grub-core/font/font.c
|
||||||
|
+++ b/grub-core/font/font.c
|
||||||
|
@@ -461,7 +461,7 @@ grub_font_load (const char *filename)
|
||||||
|
|
||||||
|
if (!prefix)
|
||||||
|
{
|
||||||
|
- grub_error (GRUB_ERR_FILE_NOT_FOUND, N_("variable `%s' isn't set"), "prefix");
|
||||||
|
+ grub_errno = GRUB_ERR_FILE_NOT_FOUND;
|
||||||
|
goto fail;
|
||||||
|
}
|
||||||
|
file = try_open_from_prefix (prefix, filename);
|
||||||
|
diff --git a/grub-core/kern/dl.c b/grub-core/kern/dl.c
|
||||||
|
index 4011e2d15..af3bd00d0 100644
|
||||||
|
--- a/grub-core/kern/dl.c
|
||||||
|
+++ b/grub-core/kern/dl.c
|
||||||
|
@@ -758,7 +758,7 @@ grub_dl_load (const char *name)
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
if (! grub_dl_dir) {
|
||||||
|
- grub_error (GRUB_ERR_FILE_NOT_FOUND, N_("variable `%s' isn't set"), "prefix");
|
||||||
|
+ grub_errno = GRUB_ERR_FILE_NOT_FOUND;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
--
|
||||||
|
2.39.2
|
||||||
|
|
|
@ -0,0 +1,34 @@
|
||||||
|
From 6237c5762edccc1e1fa4746b1d4aa5e8d81e4883 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Leah Rowe <leah@libreboot.org>
|
||||||
|
Date: Sun, 5 Nov 2023 16:36:22 +0000
|
||||||
|
Subject: [PATCH 1/1] don't print error if module not found
|
||||||
|
|
||||||
|
still set grub_errno accordingly, and otherwise
|
||||||
|
behave the same. in libreboot, we remove a lot of
|
||||||
|
modules but then rely on loading a grub.cfg
|
||||||
|
provided by a distro; in almost all cases that works,
|
||||||
|
but also in almost all cases, that will try to load
|
||||||
|
a module we don't actually need, but then it prints
|
||||||
|
a message. this can annoy some users, so silence it.
|
||||||
|
|
||||||
|
Signed-off-by: Leah Rowe <leah@libreboot.org>
|
||||||
|
---
|
||||||
|
grub-core/kern/dl.c | 2 +-
|
||||||
|
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||||
|
|
||||||
|
diff --git a/grub-core/kern/dl.c b/grub-core/kern/dl.c
|
||||||
|
index af3bd00d0..21d0cedb1 100644
|
||||||
|
--- a/grub-core/kern/dl.c
|
||||||
|
+++ b/grub-core/kern/dl.c
|
||||||
|
@@ -486,7 +486,7 @@ grub_dl_resolve_name (grub_dl_t mod, Elf_Ehdr *e)
|
||||||
|
|
||||||
|
s = grub_dl_find_section (e, ".modname");
|
||||||
|
if (!s)
|
||||||
|
- return grub_error (GRUB_ERR_BAD_MODULE, "no module name found");
|
||||||
|
+ return (grub_errno = GRUB_ERR_BAD_MODULE);
|
||||||
|
|
||||||
|
mod->name = grub_strdup ((char *) e + s->sh_offset);
|
||||||
|
if (! mod->name)
|
||||||
|
--
|
||||||
|
2.39.2
|
||||||
|
|
|
@ -0,0 +1,31 @@
|
||||||
|
From e5b7ec81421487e71bcaf8b6b5a27f3649a62753 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Leah Rowe <leah@libreboot.org>
|
||||||
|
Date: Sun, 5 Nov 2023 17:25:20 +0000
|
||||||
|
Subject: [PATCH 1/1] don't print empty error messages
|
||||||
|
|
||||||
|
this is part two of the quest to kill the prefix
|
||||||
|
error message. after i disabled prefix-related
|
||||||
|
messages, it still printed "error: ." on screen.
|
||||||
|
|
||||||
|
Signed-off-by: Leah Rowe <leah@libreboot.org>
|
||||||
|
---
|
||||||
|
grub-core/kern/err.c | 3 ++-
|
||||||
|
1 file changed, 2 insertions(+), 1 deletion(-)
|
||||||
|
|
||||||
|
diff --git a/grub-core/kern/err.c b/grub-core/kern/err.c
|
||||||
|
index 53c734de7..7cac53983 100644
|
||||||
|
--- a/grub-core/kern/err.c
|
||||||
|
+++ b/grub-core/kern/err.c
|
||||||
|
@@ -107,7 +107,8 @@ grub_print_error (void)
|
||||||
|
{
|
||||||
|
if (grub_errno != GRUB_ERR_NONE)
|
||||||
|
{
|
||||||
|
- grub_err_printf (_("error: %s.\n"), grub_errmsg);
|
||||||
|
+ if (grub_strlen(grub_errmsg) > 0)
|
||||||
|
+ grub_err_printf (_("error: %s.\n"), grub_errmsg);
|
||||||
|
grub_err_printed_errors++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
--
|
||||||
|
2.39.2
|
||||||
|
|
|
@ -0,0 +1,5 @@
|
||||||
|
tree="nvme"
|
||||||
|
rev="8719cc2040368d43ab2de0b6e1b850b2c9cfc5b7"
|
||||||
|
bootstrapargs="--gnulib-srcdir=gnulib/ --no-git"
|
||||||
|
autoconfargs="--with-platform=coreboot --disable-werror"
|
||||||
|
makeargs="FS_PAYLOAD_MODULES=\"\""
|
|
@ -0,0 +1,3 @@
|
||||||
|
subrepo="git://git.sv.gnu.org/gnulib"
|
||||||
|
subrepo_bkup="https://codeberg.org/libreboot/gnulib"
|
||||||
|
subhash="9f48fb992a3d7e96610c4ce8be969cff2d61a01b"
|
|
@ -0,0 +1 @@
|
||||||
|
gnulib
|
Loading…
Reference in New Issue