shim 15.3 Some highlights: - Support for revocations via the ".sbat" section and SBAT EFI variable - A new unit test framework and a bunch of unit tests - No external gnu-efi dependency - Better CI (with more yet needed) Many thanks to all who helped out, including but not limited to these contributions: Alex Burmashev (4): strndupa: allocate len + 1, so that \0 is not lost add list_empty to linked list primitives pe.c: parse SBAT variable and perform basic verification Fix compilation for older gcc Chris Co (2): sbat: add minor fixes to parse_sbat Add initial sbat unit testing code Chris Coulson (8): Fix sbsign command usage Rename check_{white,black}list to check_{allow,deny}list build: Pass the correct paths to sbsign Include missing .text sections in PE/COFF binary sbat: Don't assume VirtualSize == SizeOfRawData Ensure that MOK variable mirroring creates well formed ESLs Avoid creating unnecessary mirrored MOK variables Fix boot failures due to variable size constraints Colin Walters (1): Convert README -> README.md Dimitri John Ledkov (2): Add testsuite to the github pull request workflow. Drop comments, and make push workflow use same matrix as pullrequest. Gary Lin (9): src/netboot.c: remove the execute bit lib: move print_crypto_errors() out of console.c console: Move the countdown function to console.c fallback: show a countdown menu before reset sbat: fix the gcc warnings sbat: fix the residual "resource section" for SBAT Restore loaded image of shim at Exit() Set the section flags for .sbat arm and aarch64: include the aligned part in SizeOfRawData of sbat Hai Huang (1): Fix EV_EFI_VARIABLE_AUTHORITY event in eventlog Jan Setje-Eilers (8): Add Secure Boot Advanced Targeting (SBAT) specification document Add --set-section-alignment '.sbat=512' to objcopy command line Drop --set-section-alignment from Makefile since linker ALIGN(4096) already enforces the alignment, clarify that objcopy only needs to do the alignment in the SBAT spec. If the SBAT UEFI variable is not set, initialize it as a bootservices variable. Javier Martinez Canillas (10): Add a .sbat section to EFI binaries Add a function to parse the SBAT metadata from the .sbat section sbat: remove unused buffer parameter in parse_sbat() function sbat: use correct type for parse_sbat_var() return value Don't re-parse the SBAT EFI variable for each binary we load. sbat: include NULL terminator when calculating buffer end in parse_sbat() shim: initialize OpenSSL after parsing SBAT data sbat: make shim to parse it's own .sbat section on init shim: Fix a NULL pointer dereference caused by start not being set shim: Use the default loader if an EFI_LOAD_OPTION can't be parsed Jia Zhang (1): Ignore *.hash João Paulo Rechi Vita (8): fallback: Store label size instead of calculating on every use fallback: Consider all Boot* vars when checking for duplicates fallback: Only use VerbosePrint for debug messages fallback: Be silent by default fallback: Print original BootOrder value in verbose mode fallback: Wait before chainloading in verbose mode fallback: Make verbose mode's wait time configurable fallback: Allow defining FALLBACK_VERBOSE at build time Lisa White (1): Fix typo in a comment Luca Boccassi (1): Makefile: use fixed build host if SOURCE_DATE_EPOCH is defined Mathieu Trudel-Lapierre (1): Add mm/fb hashing to TODO, put that and related things under 'Reproducible builds' Matthew Garrett (1): build: Import gnu-efi as a submodule and build against it Nicholas Bishop (1): BUILDING: Fix a typo Paul Menzel (1): README: Remove superfluous *and* Paul Moore (7): shim: compile time option to bypass the ExitBootServices() check build: add some basic $EFI_PATH checking SBAT: fix some typos in the SBAT docs SBAT: update the raw Markdown to look less terrible openssl: fix various build errors and warnings shim: attempt to improve the argument handling build: load local build configuration from Make.local if present Peter Jones (119): Use github actions for CI builds Split up push and PR CI/CD and build all patches in series on PRs Try to kick the github PR workflow... Add a .clang-format file. Always use lower case for our local include file names. Work around some clang-format oddnesses Renaming PeImage.h to pe.h wasn't actually a good idea. Fix pe.h -> peimage.h in /both/ places. github workflows: Unify the x86 pull request build rules steps github workflows: add the sbat branch to one PR builds run for efi bins: add an easy way for vendors to add .sbat data Remove my .syntastic_c_config, it doesn't belong in the repo. includes: add strchra() and strchrnula() impls Move a bunch of PE-related stuff out of shim.c Refactor some PE handling code Add some more PE helpers we need for SBAT Add the beginning of .sbat parsing stuff SBAT: parse a copy of the table that's got a NUL at the end Add an example SBAT workflow document Add some linked list primitives. get_variable: always allocate a NUL character at the end. add an ascii strndup() implementation. sbat: make the includes work like everything else. We're not using travis-build.sh any more. Try to make coverity.mk work without cov-build installed. Try to make scan-build.mk work without scan-build installed. Add some more TODOs for shim 16 Add another unfortunate TODO entry. Add some *more* TODO tasks. Add fallback boot loop detection to TODO Also ignore .sw? Add screen logs to .gitignore Add .cer/.crt/.esl to .gitignore BUILDING: fix missing DISABLE_EBS_PROTECTION section Re-alphabetize .gitignore. .gitignore: add build dirs and shim_cert.h .gitignore: ignore .gdbinit Fix up a bunch of our license statements and add SPDX most places SPDX: Clarify the attribution for crypt_blowfish SPDX: Clarify the attribution for James's lib/ code Make sure MIN() and MAX() are always defined. console: Fix a typo in the EFI warning list in gnu-efi Fix a bunch of trivial trailing whitespace issues. Make httpboot.c always get built. Make the variable name and pointer const in all of our efi vars functions Add ENABLE_SHIM_DEVEL config to change what our debug variable name is Use gcc -Os instead of -O0. sbat: clang-format the whole thing. SBAT: make the variable be CSV in our spec. SBAT: Fix all the docs examples to start with version 1 Fix an off by one in strnlena() shim: use an enum for efi_main's error messages. sbat: drop the struct sbat and just use two variables instead parse_sbat: handle the realloc failure leak and batch allocations. pe.c: move sbat verification to its own function. sbat: Fix two NULL derefs found with "gcc -fanalyzer" tpm: minor cleanup: use EV_IPL not 0xd Document struct mok_state_variable better. SBAT: mirror SBAT to SbatRT and extend to PCR7 + log Move the coverity and scan-build makefiles out of the top directory Make 'make fanalyzer' targets compiler.h: fix a typo and add some more function attribute macros Fix all the places we need UNUSED on arguments. Tidy up our string primitives... Add a list_size() primitive Move is_utf8_bom() to str.h includes: include all gnu-efi includes at one place. Fix our debuginfo paths hopefully Add a stand-alone CSV parser. SBAT: make our sbat section parser use the csv parser SBAT: make our SBAT variable parser use the CSV parser make 'make test' able to run unit test harnesses Add a tester for our string functions. Add test cases for our CSV parser. Fix-up and enable a bunch of .sbat section parsing tests. Make verify_sbat() more testable Fix two errant 'shim,0' outdated sbat cases. Add get_variable_size()/set_variable()del_variable() wrappers. CI: try to update submodules CI: show our compilation when it fails Re-organize a bunch of CFLAGS-related makefile bits Minor OpenSSL fixes static analysis: make our build targets work better More minor makefile cleanups Switch to using -std=gnu11 Don't use WCHAR even when we're assigning wide string literals Cryptlib: make some Str*() args const. Restructure our includes. Fix Cryptlib's va_* definitions. Consolidate most of our standard lib functions to lib Fix stdarg to work the same everywhere. Add some test cases, and make "make test" actually work. make: use -Wextra (minus some obnoxious bits) Test our strncmp vs known failing ones as well Add more string test cases. set_sbat_uefi_variable(): avoid comparing unsafe data shim: simplify sbat self-check logic. linker scripts: put .sbat after _edata arm arches: include .sbat in our section headers. Fix the compiler when invoking scan-build/fanalyzer/etc openssl: nerf some -W flags for clang. get_variable_attr(): fix a nit scan-build found. Fix include order More va_* work Don't even try to use builtins, just make sure we have the same types. Make ENABLE_SHIM_DEVEL work better. sbat variable: use UEFI_VAR_NV_BS_RT when we've got ENABLE_SHIM_DEVEL set_sbat_uefi_variable(): add a pile of debug prints. set_sbat_uefi_variable(): align some decisions that are off-by-one. Fix a plausible NULL dereference. 'make test': try harder to make it build in the right order. Nerf an unnecessary string test on arm. arm and aarch64: fix some PE headers. Make 'make test' work on gcc 4.8.5 Don't set LIBDIR in CI builds any more. Fix cross-compilation from x86_64->i686 Try multi-arch CI building using cross compilation Update 'make archive' to include gnu-efi Bump version to 15.3 Steve McIntyre (5): Second attempt at SBAT doc tweaks Fixups after Peter's review Fix bashisms in Make.coverity Stop using EFI_PATH, and error out if people try to use it Fix up build of test code using gcc 8 Thomas Frauendorfer | Miray Software (2): Fix column size check in SBAT variable parsing. Sort input file names in lib/Makefile